@Test public void testOldEntriesRemoved() { MasterServices masterServices = mock(MasterServices.class); MasterQuotaManager manager = new MasterQuotaManager(masterServices); manager.initializeRegionSizes(); manager.addRegionSize(region1, size, time1); manager.addRegionSize(region2, size, time1); manager.addRegionSize(region3, size, time2); manager.addRegionSize(region4, size, time2); manager.addRegionSize(region5, size, time3); assertEquals(5, manager.snapshotRegionSizes().size()); assertEquals(0, manager.pruneEntriesOlderThan(0)); assertEquals(5, manager.snapshotRegionSizes().size()); assertEquals(0, manager.pruneEntriesOlderThan(10)); assertEquals(5, manager.snapshotRegionSizes().size()); assertEquals(2, manager.pruneEntriesOlderThan(15)); assertEquals(3, manager.snapshotRegionSizes().size()); assertEquals(2, manager.pruneEntriesOlderThan(30)); assertEquals(1, manager.snapshotRegionSizes().size());
private void preCreate(final MasterProcedureEnv env) throws IOException, InterruptedException { if (!getTableName().isSystemTable()) { ProcedureSyncWait.getMasterQuotaManager(env) .checkNamespaceTableAndRegionQuota( getTableName(), (newRegions != null ? newRegions.size() : 0)); } final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost(); if (cpHost != null) { final RegionInfo[] regions = newRegions == null ? null : newRegions.toArray(new RegionInfo[newRegions.size()]); cpHost.preCreateTableAction(tableDescriptor, regions, getUser()); } }
/** * remove quota for the namespace * @param env MasterProcedureEnv * @param namespaceName name of the namespace in string format **/ private static void removeNamespaceQuota(final MasterProcedureEnv env, final String namespaceName) throws IOException { env.getMasterServices().getMasterQuotaManager().removeNamespaceQuota(namespaceName); } }
private void initQuotaManager() throws IOException { MasterQuotaManager quotaManager = new MasterQuotaManager(this); quotaManager.start(); this.quotaManager = quotaManager; }
@Test public void testUninitializedQuotaManangerDoesNotFail() { MasterServices masterServices = mock(MasterServices.class); MasterQuotaManager manager = new MasterQuotaManager(masterServices); manager.addRegionSize(null, 0, 0); assertNotNull(manager.snapshotRegionSizes()); }
public SetQuotaResponse setQuota(final SetQuotaRequest req) throws IOException, InterruptedException { checkQuotaSupport(); try { if (req.hasTableName()) { setUserQuota(req.getUserName(), ProtobufUtil.toTableName(req.getTableName()), req); } else if (req.hasNamespace()) { setUserQuota(req.getUserName(), req.getNamespace(), req); } else { setUserQuota(req.getUserName(), req); tableLocks.lock(table); try { setTableQuota(table, req); } finally { tableLocks.unlock(table); namespaceLocks.lock(req.getNamespace()); try { setNamespaceQuota(req.getNamespace(), req); } finally { namespaceLocks.unlock(req.getNamespace()); regionServerLocks.lock(req.getRegionServer()); try { setRegionServerQuota(req.getRegionServer(), req); } finally { regionServerLocks.unlock(req.getRegionServer());
private NamespaceAuditor getQuotaManager() { return UTIL.getHBaseCluster().getMaster() .getMasterQuotaManager().getNamespaceQuotaManager(); }
if (quotaManager.isQuotaInitialized()) { Quotas quotaForTable = QuotaUtil.getTableQuota(getConnection(), tableName); if (quotaForTable != null && quotaForTable.hasSpace()) {
int snapshotRegionCount = manifest.getRegionManifestsMap().size(); int tableRegionCount = ProcedureSyncWait.getMasterQuotaManager(env).getRegionCountOfTable(tableName); ProcedureSyncWait.getMasterQuotaManager(env).checkAndUpdateNamespaceRegionQuota( tableName, snapshotRegionCount);
private void checkAndUpdateNamespaceQuota(SnapshotManifest manifest, TableName tableName) throws IOException { if (this.master.getMasterQuotaManager().isQuotaEnabled()) { this.master.getMasterQuotaManager().checkNamespaceTableAndRegionQuota(tableName, manifest.getRegionManifestsMap().size()); } }
private void checkAndUpdateNamespaceRegionQuota(SnapshotManifest manifest, TableName tableName) throws IOException { if (this.master.getMasterQuotaManager().isQuotaEnabled()) { this.master.getMasterQuotaManager().checkAndUpdateNamespaceRegionQuota(tableName, manifest.getRegionManifestsMap().size()); } }
public void start() throws IOException { // If the user doesn't want the quota support skip all the initializations. if (!QuotaUtil.isQuotaEnabled(masterServices.getConfiguration())) { LOG.info("Quota support disabled"); return; } // Create the quota table if missing if (!MetaTableAccessor.tableExists(masterServices.getConnection(), QuotaUtil.QUOTA_TABLE_NAME)) { LOG.info("Quota table not found. Creating..."); createQuotaTable(); } LOG.info("Initializing quota support"); namespaceLocks = new NamedLock<>(); tableLocks = new NamedLock<>(); userLocks = new NamedLock<>(); regionServerLocks = new NamedLock<>(); regionSizes = new ConcurrentHashMap<>(); namespaceQuotaManager = new NamespaceAuditor(masterServices); namespaceQuotaManager.start(); initialized = true; rpcThrottleStorage = new RpcThrottleStorage(masterServices.getZooKeeper(), masterServices.getConfiguration()); }
/** * Removes region reports over a certain age. */ void pruneOldRegionReports() { final long now = EnvironmentEdgeManager.currentTime(); final long pruneTime = now - regionReportLifetimeMillis; final int numRemoved = quotaManager.pruneEntriesOlderThan(pruneTime); if (LOG.isTraceEnabled()) { LOG.trace("Removed " + numRemoved + " old region size reports that were older than " + pruneTime + "."); } }
@Override public RegionSpaceUseReportResponse reportRegionSpaceUse(RpcController controller, RegionSpaceUseReportRequest request) throws ServiceException { try { master.checkInitialized(); if (!QuotaUtil.isQuotaEnabled(master.getConfiguration())) { return RegionSpaceUseReportResponse.newBuilder().build(); } MasterQuotaManager quotaManager = this.master.getMasterQuotaManager(); final long now = EnvironmentEdgeManager.currentTime(); for (RegionSpaceUse report : request.getSpaceUseList()) { quotaManager.addRegionSize(ProtobufUtil.toRegionInfo( report.getRegionInfo()), report.getRegionSize(), now); } return RegionSpaceUseReportResponse.newBuilder().build(); } catch (Exception e) { throw new ServiceException(e); } }
public SetQuotaResponse setQuota(final SetQuotaRequest req) throws IOException, InterruptedException { checkQuotaSupport(); try { if (req.hasTableName()) { setUserQuota(req.getUserName(), ProtobufUtil.toTableName(req.getTableName()), req); } else if (req.hasNamespace()) { setUserQuota(req.getUserName(), req.getNamespace(), req); } else { setUserQuota(req.getUserName(), req); tableLocks.lock(table); try { setTableQuota(table, req); } finally { tableLocks.unlock(table); namespaceLocks.lock(req.getNamespace()); try { setNamespaceQuota(req.getNamespace(), req); } finally { namespaceLocks.unlock(req.getNamespace());
@Test public void testUninitializedQuotaManangerDoesNotFail() { MasterServices masterServices = mock(MasterServices.class); MasterQuotaManager manager = new MasterQuotaManager(masterServices); manager.addRegionSize(null, 0, 0); assertNotNull(manager.snapshotRegionSizes()); }
private void initQuotaManager() throws IOException { quotaManager = new MasterQuotaManager(this); this.assignmentManager.setRegionStateListener((RegionStateListener) quotaManager); quotaManager.start(); }
private NamespaceAuditor getQuotaManager() { return UTIL.getHBaseCluster().getMaster() .getMasterQuotaManager().getNamespaceQuotaManager(); }
@After public void cleanup() throws Exception, KeeperException { for (HTableDescriptor table : ADMIN.listTables()) { ADMIN.disableTable(table.getTableName()); deleteTable(table.getTableName()); } for (NamespaceDescriptor ns : ADMIN.listNamespaceDescriptors()) { if (ns.getName().startsWith(prefix)) { ADMIN.deleteNamespace(ns.getName()); } } assertTrue("Quota manager not initialized", UTIL.getHBaseCluster().getMaster() .getMasterQuotaManager().isQuotaInitialized()); }
public void start() throws IOException { // If the user doesn't want the quota support skip all the initializations. if (!QuotaUtil.isQuotaEnabled(masterServices.getConfiguration())) { LOG.info("Quota support disabled"); return; } // Create the quota table if missing if (!MetaTableAccessor.tableExists(masterServices.getConnection(), QuotaUtil.QUOTA_TABLE_NAME)) { LOG.info("Quota table not found. Creating..."); createQuotaTable(); } LOG.info("Initializing quota support"); namespaceLocks = new NamedLock<String>(); tableLocks = new NamedLock<TableName>(); userLocks = new NamedLock<String>(); namespaceQuotaManager = new NamespaceAuditor(masterServices); namespaceQuotaManager.start(); enabled = true; }