use of com.twitter.distributedlog.util.SimplePermitLimiter in project distributedlog by twitter.
the class TestAsyncReaderWriter method writeRecordsWithOutstandingWriteLimit.
public void writeRecordsWithOutstandingWriteLimit(int stream, int global, boolean shouldFail) throws Exception {
DistributedLogConfiguration confLocal = new DistributedLogConfiguration();
confLocal.addConfiguration(testConf);
confLocal.setOutputBufferSize(0);
confLocal.setImmediateFlushEnabled(true);
confLocal.setPerWriterOutstandingWriteLimit(stream);
confLocal.setOutstandingWriteLimitDarkmode(false);
DistributedLogManager dlm;
if (global > -1) {
dlm = createNewDLM(confLocal, runtime.getMethodName(), new SimplePermitLimiter(false, global, new NullStatsLogger(), true, new FixedValueFeature("", 0)));
} else {
dlm = createNewDLM(confLocal, runtime.getMethodName());
}
BKAsyncLogWriter writer = (BKAsyncLogWriter) (dlm.startAsyncLogSegmentNonPartitioned());
ArrayList<Future<DLSN>> results = new ArrayList<Future<DLSN>>(1000);
for (int i = 0; i < 1000; i++) {
results.add(writer.write(DLMTestUtil.getLogRecordInstance(1L)));
}
for (Future<DLSN> result : results) {
try {
Await.result(result);
if (shouldFail) {
fail("should fail due to no outstanding writes permitted");
}
} catch (OverCapacityException ex) {
assertTrue(shouldFail);
}
}
writer.closeAndComplete();
dlm.close();
}
use of com.twitter.distributedlog.util.SimplePermitLimiter in project distributedlog by twitter.
the class TestWriteLimiter method testDarkmodeWithDisabledFeature.
@Test
public void testDarkmodeWithDisabledFeature() throws Exception {
SettableFeature feature = new SettableFeature("test", 10000);
SimplePermitLimiter streamLimiter = createPermitLimiter(true, 1, feature);
SimplePermitLimiter globalLimiter = createPermitLimiter(true, Integer.MAX_VALUE, feature);
WriteLimiter limiter = new WriteLimiter("test", streamLimiter, globalLimiter);
limiter.acquire();
limiter.acquire();
assertPermits(streamLimiter, 2, globalLimiter, 2);
limiter.release();
limiter.release();
assertPermits(streamLimiter, 0, globalLimiter, 0);
}
use of com.twitter.distributedlog.util.SimplePermitLimiter in project distributedlog by twitter.
the class TestWriteLimiter method testStreamOnly.
@Test
public void testStreamOnly() throws Exception {
SimplePermitLimiter streamLimiter = createPermitLimiter(false, 1);
SimplePermitLimiter globalLimiter = createPermitLimiter(false, Integer.MAX_VALUE);
WriteLimiter limiter = new WriteLimiter("test", streamLimiter, globalLimiter);
limiter.acquire();
try {
limiter.acquire();
fail("should have thrown stream limit exception");
} catch (OverCapacityException ex) {
}
assertPermits(streamLimiter, 1, globalLimiter, 1);
}
use of com.twitter.distributedlog.util.SimplePermitLimiter in project distributedlog by twitter.
the class TestWriteLimiter method testDarkmodeGlobalOverStreamUnder.
@Test
public void testDarkmodeGlobalOverStreamUnder() throws Exception {
SimplePermitLimiter streamLimiter = createPermitLimiter(true, 2);
SimplePermitLimiter globalLimiter = createPermitLimiter(true, 1);
WriteLimiter limiter = new WriteLimiter("test", streamLimiter, globalLimiter);
limiter.acquire();
limiter.acquire();
assertPermits(streamLimiter, 2, globalLimiter, 2);
limiter.release();
assertPermits(streamLimiter, 1, globalLimiter, 1);
limiter.release();
assertPermits(streamLimiter, 0, globalLimiter, 0);
}
use of com.twitter.distributedlog.util.SimplePermitLimiter in project distributedlog by twitter.
the class TestWriteLimiter method testGlobalOnly.
@Test
public void testGlobalOnly() throws Exception {
SimplePermitLimiter streamLimiter = createPermitLimiter(false, Integer.MAX_VALUE);
SimplePermitLimiter globalLimiter = createPermitLimiter(false, 1);
WriteLimiter limiter = new WriteLimiter("test", streamLimiter, globalLimiter);
limiter.acquire();
try {
limiter.acquire();
fail("should have thrown global limit exception");
} catch (OverCapacityException ex) {
}
assertPermits(streamLimiter, 1, globalLimiter, 1);
limiter.release();
assertPermits(streamLimiter, 0, globalLimiter, 0);
}
Aggregations