use of org.apache.pulsar.metadata.api.Stat in project pulsar by apache.
the class ManagedLedgerTest method testBackwardCompatiblityForMeta.
@Test
public void testBackwardCompatiblityForMeta() throws Exception {
final ManagedLedgerInfo[] storedMLInfo = new ManagedLedgerInfo[3];
final Stat[] versions = new Stat[1];
ManagedLedgerConfig conf = new ManagedLedgerConfig();
conf.setMaxEntriesPerLedger(1);
conf.setRetentionSizeInMB(10);
conf.setRetentionTime(1, TimeUnit.HOURS);
ManagedLedger ml = factory.open("backward_test_ledger", conf);
ml.openCursor("c1");
ml.addEntry("msg1".getBytes());
ml.addEntry("msg2".getBytes());
ml.close();
MetaStore store = new MetaStoreImpl(metadataStore, executor);
CountDownLatch l1 = new CountDownLatch(1);
// obtain the ledger info
store.getManagedLedgerInfo("backward_test_ledger", false, new MetaStoreCallback<ManagedLedgerInfo>() {
@Override
public void operationComplete(ManagedLedgerInfo result, Stat version) {
storedMLInfo[0] = result;
versions[0] = version;
l1.countDown();
}
@Override
public void operationFailed(MetaStoreException e) {
fail("on get ManagedLedgerInfo backward_test_ledger");
}
});
l1.await();
ManagedLedgerInfo.Builder builder1 = ManagedLedgerInfo.newBuilder();
// simulate test for old ledger with no timestampl
for (LedgerInfo info : storedMLInfo[0].getLedgerInfoList()) {
LedgerInfo noTimestamp = ManagedLedgerInfo.LedgerInfo.newBuilder().mergeFrom(info).clearTimestamp().build();
assertFalse(noTimestamp.hasTimestamp(), "expected old version info with no timestamp");
builder1.addLedgerInfo(noTimestamp);
}
storedMLInfo[1] = builder1.build();
// test timestamp on new ledger
CountDownLatch l2 = new CountDownLatch(1);
store.asyncUpdateLedgerIds("backward_test_ledger", storedMLInfo[1], versions[0], new MetaStoreCallback<Void>() {
@Override
public void operationComplete(Void result, Stat version) {
l2.countDown();
}
@Override
public void operationFailed(MetaStoreException e) {
fail("on asyncUpdateLedgerIds");
}
});
// verify that after update ledgers have timestamp
ManagedLedgerImpl newVersionLedger = (ManagedLedgerImpl) factory.open("backward_test_ledger", conf);
List<LedgerInfo> mlInfo = newVersionLedger.getLedgersInfoAsList();
assertTrue(mlInfo.stream().allMatch(ledgerInfo -> ledgerInfo.hasTimestamp()));
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by apache.
the class MetaStoreImplTest method failInCreatingMLnode.
@Test(timeOut = 20000)
void failInCreatingMLnode() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
final CompletableFuture<Void> promise = new CompletableFuture<>();
metadataStore.failConditional(new MetadataStoreException("error"), (op, path) -> op == FaultInjectionMetadataStore.OperationType.PUT);
store.getManagedLedgerInfo("my_test", false, new MetaStoreCallback<MLDataFormats.ManagedLedgerInfo>() {
public void operationFailed(MetaStoreException e) {
promise.complete(null);
}
public void operationComplete(ManagedLedgerInfo result, Stat version) {
promise.completeExceptionally(new Exception("Operation should have failed"));
}
});
promise.get();
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by apache.
the class MetaStoreImplTest method updatingMLNode.
@Test(timeOut = 20000)
void updatingMLNode() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
metadataStore.put("/managed-ledgers/my_test", "".getBytes(), Optional.empty());
final CompletableFuture<Void> promise = new CompletableFuture<>();
store.getManagedLedgerInfo("my_test", false, new MetaStoreCallback<ManagedLedgerInfo>() {
public void operationFailed(MetaStoreException e) {
promise.completeExceptionally(e);
}
public void operationComplete(ManagedLedgerInfo mlInfo, Stat version) {
// Update again using the version
metadataStore.failConditional(new MetadataStoreException.BadVersionException("error"), (op, path) -> op == FaultInjectionMetadataStore.OperationType.PUT && path.contains("my_test"));
store.asyncUpdateLedgerIds("my_test", mlInfo, version, new MetaStoreCallback<Void>() {
public void operationFailed(MetaStoreException e) {
// ok
promise.complete(null);
}
@Override
public void operationComplete(Void result, Stat version) {
promise.completeExceptionally(new Exception("should have failed"));
}
});
}
});
promise.get();
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by apache.
the class MetaStoreImplTest method deleteNonExistingML.
@Test
void deleteNonExistingML() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
AtomicReference<MetaStoreException> exception = new AtomicReference<>();
CountDownLatch counter = new CountDownLatch(1);
store.removeManagedLedger("non-existing", new MetaStoreCallback<Void>() {
@Override
public void operationComplete(Void result, Stat version) {
counter.countDown();
}
@Override
public void operationFailed(MetaStoreException e) {
exception.set(e);
counter.countDown();
}
});
counter.await();
assertNotNull(exception.get());
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by apache.
the class MetaStoreImplTest method readMalformedML.
@Test(timeOut = 20000)
void readMalformedML() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
metadataStore.put("/managed-ledgers/my_test", "non-valid".getBytes(), Optional.empty()).join();
final CountDownLatch latch = new CountDownLatch(1);
store.getManagedLedgerInfo("my_test", false, new MetaStoreCallback<MLDataFormats.ManagedLedgerInfo>() {
public void operationFailed(MetaStoreException e) {
// Ok
latch.countDown();
}
public void operationComplete(ManagedLedgerInfo result, Stat version) {
fail("Operation should have failed");
}
});
latch.await();
}
Aggregations