master启动的时候会初始化MasterQuotaManager,并启动该manager;
MasterQuotaManager实现了RegionStateListener接口,可以监听region的状态变化,RegionStateListener接口中定义了三个事件,分别是onRegionSplit,onRegionSplitReverted,onRegionMerged。
MasterQuotaManager中包括了三把锁,分别是namespaceLocks、tableLocks和userLocks。
MasterQuotaManager中包括一个namespaceQuotaManger,namespaceQuotaManger用于在namespace下的table以及table region发生变化时,能够保持住namespace的quota不变。
用户的setQuota请求是路由到master上去执行的。
MasterQuotaManager负责quota表的创建管理,并根据用户命令在quota表中新增、修改或者删除数据,主要的方法就是setQuota(final SetQuotaRequest req),方法中由于使用NamedLock,因此对同一namespace、table和user,同一时刻只有一个修改可被执行。
Quota是被缓存在cache(一个ConcurrentHashMap的数据结构)中的,分别是namespaceQuotaCache、tableQuotaCache和userQuotaCache,由QuotaCache类管理,这个类的成员变量QuotaRefresherChore继承了ScheduledChore,会定期调度,默认的调度周期是5分钟(REFRESH_DEFAULT_PERIOD),