)]}'
{
  "commit": "7866f886778a96123cb319f890d37db7c88e2e14",
  "tree": "59ab8fa6a7746e64b24dc52a0ff53b4c367262b7",
  "parents": [
    "5432392fe1fc395213f0f4da65782181b26032e6"
  ],
  "author": {
    "name": "Ray Mattingly",
    "email": "rmattingly@apache.org",
    "time": "Wed Sep 02 11:22:47 2026 -0400"
  },
  "committer": {
    "name": "Ray Mattingly",
    "email": "rmattingly@apache.org",
    "time": "Thu Sep 03 16:21:48 2026 -0400"
  },
  "message": "HBASE-30348 Throttles should work for system tables (excluding quotas, meta, namespace)\n\nRegionServerRpcQuotaManager#getQuota returned NoopOperationQuota for any table\nwhere TableName#isSystemTable() is true, and QuotaCache#getUserLimiter returned\nNoopQuotaLimiter under the same condition. That covers every table in the hbase\nnamespace and every table in the backup namespace, so no quota of any kind could\nthrottle them: the quota was accepted, stored, and displayed by list_quotas, but\nthe request path never consulted a limiter and nothing warned the operator.\n\nOnly hbase:meta, hbase:quota and hbase:namespace are exempt now. All three are\nread while a master is still initializing, before quotas can be served, so\nthrottling them could prevent a throttle from ever being lifted: quotas load\nfrom hbase:quota, clients resolve region locations through hbase:meta, and\nTableNamespaceManager reads hbase:namespace during initClusterSchemaService,\nwhich runs before initQuotaManager creates hbase:quota. An earlier attempt at\nthis change omitted hbase:namespace and deadlocked master startup on branch-2.x.\n\nQuotaCache#ensureInitialized loaded the cache on the calling RPC handler, and\nthat load both reads hbase:quota and asks the master for cluster metrics. A read\nof a table which is not exempt could therefore wait on a master that cannot\nanswer until the read itself completes. The load now runs on a separate thread\nand the request waits for it with a timeout, configurable via\nhbase.quota.cache.initial.load.timeout.ms and defaulting to ten seconds. A\nrequest that waits out the timeout proceeds with default quota state, which does\nnot throttle, and the load is picked up once it finishes.\n\nThis keeps the load synchronous in effect, so a quota which was just set is\nstill visible to the next lookup and cluster scope factors are still computed\nbefore the first cluster scope check. It also means requests no longer queue on\nthe monitor that the refresh holds while it talks to the master.\n\nAdds TestQuotaUtil covering the exemption, including that hbase:namespace is\nexempt while the backup tables and the other hbase namespace tables are not.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e6144de2c77742988010057fd2bdec894a73550e",
      "old_mode": 33188,
      "old_path": "hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/QuotaCache.java",
      "new_id": "f2bf59f626f6575c8ebc2a96641acd9ceae6415d",
      "new_mode": 33188,
      "new_path": "hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/QuotaCache.java"
    },
    {
      "type": "modify",
      "old_id": "8497f861f70cf538b3beeb46a4149f56ed9fd6d7",
      "old_mode": 33188,
      "old_path": "hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/QuotaUtil.java",
      "new_id": "80d5e5ee796e678a373b6ec1cfab63e5693ab0d1",
      "new_mode": 33188,
      "new_path": "hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/QuotaUtil.java"
    },
    {
      "type": "modify",
      "old_id": "34fc57cb08148357cc91a18640f69eae049331e0",
      "old_mode": 33188,
      "old_path": "hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.java",
      "new_id": "a7167c3821a60199d929b401ec4854356bfc3dcb",
      "new_mode": 33188,
      "new_path": "hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "386604229d8c9473b74c0e2d5fb4bdc484e4d1bb",
      "new_mode": 33188,
      "new_path": "hbase-server/src/test/java/org/apache/hadoop/hbase/quotas/TestQuotaUtil.java"
    }
  ]
}
