@Test public void testGetSpaceQuota() throws Exception { TableQuotaSnapshotStore mockStore = mock(TableQuotaSnapshotStore.class); when(mockStore.getSpaceQuota(any())).thenCallRealMethod(); Quotas quotaWithSpace = Quotas.newBuilder().setSpace( SpaceQuota.newBuilder() .setSoftLimit(1024L) .setViolationPolicy(QuotaProtos.SpaceViolationPolicy.DISABLE) .build()) .build(); Quotas quotaWithoutSpace = Quotas.newBuilder().build(); AtomicReference<Quotas> quotaRef = new AtomicReference<>(); when(mockStore.getQuotaForTable(any())).then(new Answer<Quotas>() { @Override public Quotas answer(InvocationOnMock invocation) throws Throwable { return quotaRef.get(); } }); quotaRef.set(quotaWithSpace); assertEquals(quotaWithSpace.getSpace(), mockStore.getSpaceQuota(TableName.valueOf("foo"))); quotaRef.set(quotaWithoutSpace); assertNull(mockStore.getSpaceQuota(TableName.valueOf("foo"))); }
@Test public void testGetSpaceQuota() throws Exception { NamespaceQuotaSnapshotStore mockStore = mock(NamespaceQuotaSnapshotStore.class); when(mockStore.getSpaceQuota(any())).thenCallRealMethod(); Quotas quotaWithSpace = Quotas.newBuilder().setSpace( SpaceQuota.newBuilder() .setSoftLimit(1024L) .setViolationPolicy(QuotaProtos.SpaceViolationPolicy.DISABLE) .build()) .build(); Quotas quotaWithoutSpace = Quotas.newBuilder().build(); AtomicReference<Quotas> quotaRef = new AtomicReference<>(); when(mockStore.getQuotaForNamespace(any())).then(new Answer<Quotas>() { @Override public Quotas answer(InvocationOnMock invocation) throws Throwable { return quotaRef.get(); } }); quotaRef.set(quotaWithSpace); assertEquals(quotaWithSpace.getSpace(), mockStore.getSpaceQuota("ns")); quotaRef.set(quotaWithoutSpace); assertNull(mockStore.getSpaceQuota("ns")); }
@Override protected QuotaSettings merge(QuotaSettings newSettings) { if (newSettings instanceof SpaceLimitSettings) { SpaceLimitSettings settingsToMerge = (SpaceLimitSettings) newSettings; // The message contained the expect SpaceQuota object if (settingsToMerge.proto.hasQuota()) { SpaceQuota quotaToMerge = settingsToMerge.proto.getQuota(); if (quotaToMerge.getRemove()) { return settingsToMerge; } else { // Validate that the two settings are for the same target. // SpaceQuotas either apply to a table or a namespace (no user spacequota). if (!Objects.equals(getTableName(), settingsToMerge.getTableName()) && !Objects.equals(getNamespace(), settingsToMerge.getNamespace())) { throw new IllegalArgumentException("Cannot merge " + newSettings + " into " + this); } // Create a builder from the old settings SpaceQuota.Builder mergedBuilder = this.proto.getQuota().toBuilder(); // Build a new SpaceQuotas object from merging in the new settings return new SpaceLimitSettings( getTableName(), getNamespace(), buildProtoFromQuota(mergedBuilder.mergeFrom(quotaToMerge).build())); } } // else, we don't know what to do, so return the original object } return this; }
/** * Builds a protocol buffer SpaceQuota. * * @param limit The maximum space usage for the quota in bytes. * @param violationPolicy The policy to apply when the quota is violated. * @return The protocol buffer SpaceQuota. */ public static QuotaProtos.SpaceQuota toProtoSpaceQuota( final long limit, final SpaceViolationPolicy violationPolicy) { return QuotaProtos.SpaceQuota.newBuilder() .setSoftLimit(limit) .setViolationPolicy(toProtoViolationPolicy(violationPolicy)) .build(); }
/** * Builds a {@link SpaceQuota} protobuf object to remove a quota. * * @return The protobuf SpaceQuota representation. */ private SpaceLimitRequest buildProtoRemoveQuota() { return SpaceLimitRequest.newBuilder().setQuota( SpaceQuota.newBuilder() .setRemove(true) .build()) .build(); }
@Test(expected = IllegalArgumentException.class) public void testNeitherTableNorNamespace() { final SpaceQuota spaceQuota = SpaceQuota.newBuilder() .setSoftLimit(1L) .setViolationPolicy(QuotaProtos.SpaceViolationPolicy.DISABLE) .build(); QuotaSettingsFactory.fromSpace(null, null, spaceQuota); }
@Test(expected = IllegalArgumentException.class) public void testBothTableAndNamespace() { final SpaceQuota spaceQuota = SpaceQuota.newBuilder() .setSoftLimit(1L) .setViolationPolicy(QuotaProtos.SpaceViolationPolicy.DISABLE) .build(); QuotaSettingsFactory.fromSpace(TableName.valueOf("foo"), "bar", spaceQuota); }
protected static SpaceQuota getProtoViolationPolicy(SpaceViolationPolicy policy) { return SpaceQuota.newBuilder() .setViolationPolicy(ProtobufUtil.toProtoViolationPolicy(policy)) .build(); }
getUserName(), getTableName(), getNamespace(), getRegionServer(), (throttleBuilder == null ? null : throttleBuilder.build()), bypassGlobals, (removeSpaceBuilder ? null : spaceBuilder.build()));
.build(); final long readLimit = 1000; final long writeLimit = 500;
.setSoftLimit(ONE_MEGABYTE) .setViolationPolicy(ProtobufUtil.toProtoViolationPolicy(SpaceViolationPolicy.DISABLE)) .build();
.setSoftLimit(1024L * 1024L) .setViolationPolicy(ProtobufUtil.toProtoViolationPolicy(SpaceViolationPolicy.DISABLE)) .build();
/** * <code>optional .hbase.pb.SpaceQuota quota = 1;</code> */ public Builder setQuota( org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceQuota.Builder builderForValue) { if (quotaBuilder_ == null) { quota_ = builderForValue.build(); onChanged(); } else { quotaBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000001; return this; } /**
/** * <code>optional .hbase.pb.SpaceQuota space = 3;</code> */ public Builder setSpace( org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceQuota.Builder builderForValue) { if (spaceBuilder_ == null) { space_ = builderForValue.build(); onChanged(); } else { spaceBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000004; return this; } /**
/** * Builds a protocol buffer SpaceQuota. * * @param limit The maximum space usage for the quota in bytes. * @param violationPolicy The policy to apply when the quota is violated. * @return The protocol buffer SpaceQuota. */ public static QuotaProtos.SpaceQuota toProtoSpaceQuota( final long limit, final SpaceViolationPolicy violationPolicy) { return QuotaProtos.SpaceQuota.newBuilder() .setSoftLimit(limit) .setViolationPolicy(toProtoViolationPolicy(violationPolicy)) .build(); }
/** * Builds a {@link SpaceQuota} protobuf object given the arguments. * * @param sizeLimit The size limit of the quota. * @param violationPolicy The action to take when the quota is exceeded. * @return The protobuf SpaceQuota representation. */ private SpaceLimitRequest buildProtoAddQuota( long sizeLimit, SpaceViolationPolicy violationPolicy) { return buildProtoFromQuota(SpaceQuota.newBuilder() .setSoftLimit(sizeLimit) .setViolationPolicy(ProtobufUtil.toProtoViolationPolicy(violationPolicy)) .build()); }
@Test(expected = IllegalArgumentException.class) public void testBothTableAndNamespace() { final SpaceQuota spaceQuota = SpaceQuota.newBuilder() .setSoftLimit(1L) .setViolationPolicy(QuotaProtos.SpaceViolationPolicy.DISABLE) .build(); QuotaSettingsFactory.fromSpace(TableName.valueOf("foo"), "bar", spaceQuota); }
/** * Builds a {@link SpaceQuota} protobuf object to remove a quota. * * @return The protobuf SpaceQuota representation. */ private SpaceLimitRequest buildProtoRemoveQuota() { return SpaceLimitRequest.newBuilder().setQuota( SpaceQuota.newBuilder() .setRemove(true) .build()) .build(); }
protected static SpaceQuota getProtoViolationPolicy(SpaceViolationPolicy policy) { return SpaceQuota.newBuilder() .setViolationPolicy(ProtobufUtil.toProtoViolationPolicy(policy)) .build(); }
@Test(expected = IllegalArgumentException.class) public void testNeitherTableNorNamespace() { final SpaceQuota spaceQuota = SpaceQuota.newBuilder() .setSoftLimit(1L) .setViolationPolicy(QuotaProtos.SpaceViolationPolicy.DISABLE) .build(); QuotaSettingsFactory.fromSpace(null, null, spaceQuota); }