On Thu, Nov 28, 2024 at 7:55 PM Bryan Beaudreault
<bbeaudrea...@apache.org> wrote:
>
> I think it’s important to exclude meta. That is critical to many aspects of
> client and server. That probably extends to namespace table too.
>
> That said, it would be nice for quotas to cover the backup tables and
> actually the quota table itself. We recently had an issue where the
> regionservers all ddos’d the server holding the quota table because of
> refreshes. I would rather the quota refresh calls backoff or fail since we
> have an in memory cache, or even fall back to no quota briefly. We’ve
> similarly seen the backup table getting hotspot when backups fall behind
> and are constantly verifying.

All of this consideration is valuable for request quotas. I was
surprised to find quota enforcement besides requests, in this case,
region count limits.

Let's try to sure up some of these systems.

Thanks,
Nick

> On Thu, Nov 28, 2024 at 1:41 PM Daniel Roudnitsky (BLOOMBERG/ 919 3RD A) <
> droudnits...@bloomberg.net> wrote:
>
> > > I'm also curious, is there no way to limit quota enforcement to just
> > > the type of quotas that are desired? In this case, We only care about
> > > throttling requests and so I'm surprised to see that namespace limits
> > > are being checked.
> > +1 to limit quota enforcement to only the enabled quotas. Clusters with
> > only request quotas don't need NamespaceStateManager checks (and associated
> > issues with NamespaceStateManager), and those with only namespace quotas
> > don't need QuotaCache / QuotaRefresherChore running on all region servers.
> >
> > If your quota region split failed due to NPE in
> > SPLIT_TABLE_REGION_PRE_OPERATION you may want to check if you were impacted
> > by https://issues.apache.org/jira/browse/HBASE-28533
> >
> > From: dev@hbase.apache.org At: 11/28/24 09:21:08 UTC-5:00To:
> > dev@hbase.apache.org
> > Subject: Re: Quotas on System tables?
> >
> > This implies to me that the original intention was to not perform
> > quota enforcement on system tables.
> >
> >
> > https://github.com/apache/hbase/blob/63cdd026f08cdde6ac0fde1342ffd050e8e02441/hb
> >
> > ase-server/src/main/java/org/apache/hadoop/hbase/namespace/NamespaceStateManager
> > .java#L214
> > <https://github.com/apache/hbase/blob/63cdd026f08cdde6ac0fde1342ffd050e8e02441/hbase-server/src/main/java/org/apache/hadoop/hbase/namespace/NamespaceStateManager.java#L214>
> >
> > On Thu, Nov 28, 2024 at 2:55 PM Nick Dimiduk <ndimi...@apache.org> wrote:
> > >
> > > Heya,
> > >
> > > We recently tried to split the hbase:quota table and were surprised to
> > > hit an NPE. I was able to reproduce this with a simple test, I've
> > > pasted the stack trace below.
> > >
> > > Looking into the nature of this failure, I'm left scratching my head.
> > > It appears that hbase has some quota enforcement system around the
> > > number of regions permitted in a namespace. When the split request
> > > comes in, the NamespaceAuditor is checked and I get this failure,
> > > apparently because there's no entry for the hbase:quotas table in the
> > > NamespaceTableAndRegionInfo object.
> > >
> > > I can pursue a fix of the bug via some basic null-handling or ensure
> > > this structure is populated on initialization. However, I'm wondering
> > > if it is intentional that we enforce any kind of quotas on the hbase
> > > system namespace at all. This seems like a bug to me.
> > >
> > > I'm also curious, is there no way to limit quota enforcement to just
> > > the type of quotas that are desired? In this case, We only care about
> > > throttling requests and so I'm surprised to see that namespace limits
> > > are being checked.
> > >
> > > Thanks,
> > > Nick
> > >
> > > 2024-11-28T14:11:38,672 ERROR [PEWorker-2 {}]
> > > procedure2.ProcedureExecutor(1844): CODE-BUG: Uncaught runtime
> > > exception: pid=7, state=RUNNABLE:SPLIT_TABLE_REGION_PRE_OPERATION,
> > > hasLock=true; SplitTableRegionProcedure table=hbase:quota,
> > > parent=3c1dbd551845ed2e8033b76570c6d8f6,
> > > daughterA=a8f5e70728d93859d7c3d95aa5a0f63b,
> > > daughterB=c71f49ad7e689a57742a9fe65b918d08
> > > java.lang.NullPointerException: Cannot invoke
> > > "java.util.concurrent.atomic.AtomicInteger.addAndGet(int)" because the
> > > return value of "java.util.Map.get(Object)" is null
> > > at
> >
> > org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.incRegionCountForT
> > able(NamespaceTableAndRegionInfo.java:101)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.namespace.NamespaceStateManager.checkAndUpdateNamespaceR
> > egionCount(NamespaceStateManager.java:95)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.namespace.NamespaceAuditor.checkQuotaToSplitRegion(Names
> > paceAuditor.java:116)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.quotas.MasterQuotaManager.onRegionSplit(MasterQuotaManag
> > er.java:544)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.preSplitRegi
> > on(SplitTableRegionProcedure.java:607)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.executeFromS
> > tate(SplitTableRegionProcedure.java:298)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.executeFromS
> > tate(SplitTableRegionProcedure.java:98)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachinePro
> > cedure.java:188)
> > > ~[classes/:?]
> > > at
> > org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:941)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExec
> > utor.java:1825)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeProcedure(ProcedureE
> > xecutor.java:1503)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.runProcedure(P
> > rocedureExecutor.java:2154)
> > > ~[classes/:?]
> > > at org.apache.hadoop.hbase.trace.TraceUtil.trace(TraceUtil.java:216)
> > > ~[classes/:?]
> > > at
> >
> > org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureE
> > xecutor.java:2181)
> > > ~[classes/:?]
> >
> >
> >

Reply via email to