@Test public void testTableQuotaOverridesNamespaceQuota() throws Exception { final SpaceViolationPolicy policy = SpaceViolationPolicy.NO_INSERTS; final TableName tn = helper.createTableWithRegions(10); // 2MB limit on the table, 1GB limit on the namespace final long tableLimit = 2L * SpaceQuotaHelperForTests.ONE_MEGABYTE; final long namespaceLimit = 1024L * SpaceQuotaHelperForTests.ONE_MEGABYTE; TEST_UTIL.getAdmin().setQuota(QuotaSettingsFactory.limitTableSpace(tn, tableLimit, policy)); TEST_UTIL.getAdmin().setQuota(QuotaSettingsFactory.limitNamespaceSpace( tn.getNamespaceAsString(), namespaceLimit, policy)); // Write more data than should be allowed and flush it to disk helper.writeData(tn, 3L * SpaceQuotaHelperForTests.ONE_MEGABYTE); // This should be sufficient time for the chores to run and see the change. Thread.sleep(5000); // The write should be rejected because the table quota takes priority over the namespace Put p = new Put(Bytes.toBytes("to_reject")); p.addColumn( Bytes.toBytes(SpaceQuotaHelperForTests.F1), Bytes.toBytes("to"), Bytes.toBytes("reject")); verifyViolation(policy, tn, p); }
@Test public void testQuotaMerging() throws IOException { TableName tn = TableName.valueOf("foo"); QuotaSettings originalSettings = QuotaSettingsFactory.limitTableSpace( tn, 1024L * 1024L, SpaceViolationPolicy.DISABLE); QuotaSettings largerSizeLimit = QuotaSettingsFactory.limitTableSpace( tn, 5L * 1024L * 1024L, SpaceViolationPolicy.DISABLE); QuotaSettings differentPolicy = QuotaSettingsFactory.limitTableSpace( tn, 1024L * 1024L, SpaceViolationPolicy.NO_WRITES); QuotaSettings incompatibleSettings = QuotaSettingsFactory.limitNamespaceSpace( "ns1", 5L * 1024L * 1024L, SpaceViolationPolicy.NO_WRITES); assertEquals(originalSettings.merge(largerSizeLimit), largerSizeLimit); assertEquals(originalSettings.merge(differentPolicy), differentPolicy); try { originalSettings.merge(incompatibleSettings); fail("Should not be able to merge a Table space quota with a namespace space quota."); } catch (IllegalArgumentException e) { //pass } } }
LOG.info("Writing data"); QuotaSettings settings = QuotaSettingsFactory.limitNamespaceSpace( ns, SpaceQuotaHelperForTests.ONE_GIGABYTE, SpaceViolationPolicy.NO_INSERTS); admin.setQuota(settings);
QuotaSettings namespaceSettings = QuotaSettingsFactory.limitNamespaceSpace(namespace, namespaceSizeLimit, namespaceViolationPolicy); admin.setQuota(namespaceSettings);
QuotaSettings settings = QuotaSettingsFactory.limitNamespaceSpace(namespace, sizeLimit, violationPolicy); admin.setQuota(settings);
admin.setQuota(QuotaSettingsFactory.limitNamespaceSpace( ns.getName(), SpaceQuotaHelperForTests.ONE_GIGABYTE, SpaceViolationPolicy.NO_INSERTS));
@Test public void testNamespaceSpaceQuotaRemoved() throws Exception { final Connection conn = TEST_UTIL.getConnection(); final Admin admin = conn.getAdmin(); final String ns = testName.getMethodName(); // Drop the ns if it somehow exists if (namespaceExists(ns)) { admin.deleteNamespace(ns); } // Create the ns NamespaceDescriptor desc = NamespaceDescriptor.create(ns).build(); admin.createNamespace(desc); assertEquals(0, getNumSpaceQuotas()); // Set a quota QuotaSettings settings = QuotaSettingsFactory.limitNamespaceSpace( ns, 1024L, SpaceViolationPolicy.NO_INSERTS); admin.setQuota(settings); assertEquals(1, getNumSpaceQuotas()); // Delete the namespace and observe the quota being automatically deleted as well admin.deleteNamespace(ns); assertEquals(0, getNumSpaceQuotas()); }
tn, sizeLimit, SpaceViolationPolicy.NO_INSERTS); TEST_UTIL.getAdmin().setQuota(settings); QuotaSettings nsSettings = QuotaSettingsFactory.limitNamespaceSpace( tn.getNamespaceAsString(), nsLimit, SpaceViolationPolicy.NO_INSERTS); TEST_UTIL.getAdmin().setQuota(nsSettings);
QuotaSettings qs3 = QuotaSettingsFactory.limitNamespaceSpace( nd.getName(), sizeLimit3, violationPolicy3); tablesWithQuotas.put(tn3, qs3);
QuotaSettingsFactory.limitNamespaceSpace(ns, 1024L, SpaceViolationPolicy.NO_INSERTS); admin.setQuota(settings); settings = QuotaSettingsFactory.limitNamespaceSpace(ns, 1024L, SpaceViolationPolicy.NO_INSERTS); admin.setQuota(settings); assertEquals(1, getNumSpaceQuotas());
@Test public void testQuotaMerging() throws IOException { TableName tn = TableName.valueOf("foo"); QuotaSettings originalSettings = QuotaSettingsFactory.limitTableSpace( tn, 1024L * 1024L, SpaceViolationPolicy.DISABLE); QuotaSettings largerSizeLimit = QuotaSettingsFactory.limitTableSpace( tn, 5L * 1024L * 1024L, SpaceViolationPolicy.DISABLE); QuotaSettings differentPolicy = QuotaSettingsFactory.limitTableSpace( tn, 1024L * 1024L, SpaceViolationPolicy.NO_WRITES); QuotaSettings incompatibleSettings = QuotaSettingsFactory.limitNamespaceSpace( "ns1", 5L * 1024L * 1024L, SpaceViolationPolicy.NO_WRITES); assertEquals(originalSettings.merge(largerSizeLimit), largerSizeLimit); assertEquals(originalSettings.merge(differentPolicy), differentPolicy); try { originalSettings.merge(incompatibleSettings); fail("Should not be able to merge a Table space quota with a namespace space quota."); } catch (IllegalArgumentException e) { //pass } } }
@Test public void testTableQuotaOverridesNamespaceQuota() throws Exception { final SpaceViolationPolicy policy = SpaceViolationPolicy.NO_INSERTS; final TableName tn = helper.createTableWithRegions(10); // 2MB limit on the table, 1GB limit on the namespace final long tableLimit = 2L * SpaceQuotaHelperForTests.ONE_MEGABYTE; final long namespaceLimit = 1024L * SpaceQuotaHelperForTests.ONE_MEGABYTE; TEST_UTIL.getAdmin().setQuota(QuotaSettingsFactory.limitTableSpace(tn, tableLimit, policy)); TEST_UTIL.getAdmin().setQuota(QuotaSettingsFactory.limitNamespaceSpace( tn.getNamespaceAsString(), namespaceLimit, policy)); // Write more data than should be allowed and flush it to disk helper.writeData(tn, 3L * SpaceQuotaHelperForTests.ONE_MEGABYTE); // This should be sufficient time for the chores to run and see the change. Thread.sleep(5000); // The write should be rejected because the table quota takes priority over the namespace Put p = new Put(Bytes.toBytes("to_reject")); p.addColumn( Bytes.toBytes(SpaceQuotaHelperForTests.F1), Bytes.toBytes("to"), Bytes.toBytes("reject")); verifyViolation(policy, tn, p); }
LOG.info("Writing data"); QuotaSettings settings = QuotaSettingsFactory.limitNamespaceSpace( ns, SpaceQuotaHelperForTests.ONE_GIGABYTE, SpaceViolationPolicy.NO_INSERTS); admin.setQuota(settings);
QuotaSettings namespaceSettings = QuotaSettingsFactory.limitNamespaceSpace(namespace, namespaceSizeLimit, namespaceViolationPolicy); admin.setQuota(namespaceSettings);
QuotaSettings settings = QuotaSettingsFactory.limitNamespaceSpace(namespace, sizeLimit, violationPolicy); admin.setQuota(settings);
admin.setQuota(QuotaSettingsFactory.limitNamespaceSpace( ns.getName(), SpaceQuotaHelperForTests.ONE_GIGABYTE, SpaceViolationPolicy.NO_INSERTS));
@Test public void testNamespaceSpaceQuotaRemoved() throws Exception { final Connection conn = TEST_UTIL.getConnection(); final Admin admin = conn.getAdmin(); final String ns = testName.getMethodName(); // Drop the ns if it somehow exists if (namespaceExists(ns)) { admin.deleteNamespace(ns); } // Create the ns NamespaceDescriptor desc = NamespaceDescriptor.create(ns).build(); admin.createNamespace(desc); assertEquals(0, getNumSpaceQuotas()); // Set a quota QuotaSettings settings = QuotaSettingsFactory.limitNamespaceSpace( ns, 1024L, SpaceViolationPolicy.NO_INSERTS); admin.setQuota(settings); assertEquals(1, getNumSpaceQuotas()); // Delete the namespace and observe the quota being automatically deleted as well admin.deleteNamespace(ns); assertEquals(0, getNumSpaceQuotas()); }
@Test public void testNamespaceSpaceAndRPCQuotaRemoved() throws Exception { final Connection conn = TEST_UTIL.getConnection(); final Admin admin = conn.getAdmin(); final TableName tn = TableName.valueOf(testName.getMethodName()); final String ns = testName.getMethodName(); // Drop the ns if it somehow exists if (namespaceExists(ns)) { admin.deleteNamespace(ns); } // Create the ns NamespaceDescriptor desc = NamespaceDescriptor.create(ns).build(); admin.createNamespace(desc); assertEquals(0, getNumSpaceQuotas()); assertEquals(0, getThrottleQuotas()); // Set Both quotas QuotaSettings settings = QuotaSettingsFactory.limitNamespaceSpace(ns, 1024L, SpaceViolationPolicy.NO_INSERTS); admin.setQuota(settings); settings = QuotaSettingsFactory.throttleNamespace(ns, ThrottleType.REQUEST_SIZE, 2L, TimeUnit.HOURS); admin.setQuota(settings); assertEquals(1, getNumSpaceQuotas()); assertEquals(1, getThrottleQuotas()); // Delete the namespace and observe the quotas being automatically deleted as well admin.deleteNamespace(ns); assertEquals(0, getNumSpaceQuotas()); assertEquals(0, getThrottleQuotas()); }
tn, sizeLimit, SpaceViolationPolicy.NO_INSERTS); TEST_UTIL.getAdmin().setQuota(settings); QuotaSettings nsSettings = QuotaSettingsFactory.limitNamespaceSpace( tn.getNamespaceAsString(), nsLimit, SpaceViolationPolicy.NO_INSERTS); TEST_UTIL.getAdmin().setQuota(nsSettings);
QuotaSettings qs3 = QuotaSettingsFactory.limitNamespaceSpace( nd.getName(), sizeLimit3, violationPolicy3); tablesWithQuotas.put(tn3, qs3);