@Override public void updateLogSegment(Transaction<Object> txn, LogSegmentMetadata segment) { byte[] finalisedData = segment.getFinalisedData().getBytes(UTF_8); Op updateOp = Op.setData(segment.getZkPath(), finalisedData, -1); txn.addOp(DefaultZKOp.of(updateOp)); }
@Override public void deleteLogSegment(Transaction<Object> txn, LogSegmentMetadata segment) { Op deleteOp = Op.delete( segment.getZkPath(), -1); txn.addOp(DefaultZKOp.of(deleteOp)); }
@Override public void createLogSegment(Transaction<Object> txn, LogSegmentMetadata segment) { byte[] finalisedData = segment.getFinalisedData().getBytes(UTF_8); Op createOp = Op.create( segment.getZkPath(), finalisedData, zkc.getDefaultACL(), CreateMode.PERSISTENT); txn.addOp(DefaultZKOp.of(createOp)); }
@Override public Future<LogSegmentMetadata> changeSequenceNumber(LogSegmentMetadata segment, long logSegmentSeqNo) { String newZkPath = segment.getZkPath() .replace(formatLogSegmentSequenceNumber(segment.getLogSegmentSequenceNumber()), formatLogSegmentSequenceNumber(logSegmentSeqNo)); final LogSegmentMetadata newSegment = segment.mutator() .setLogSegmentSequenceNumber(logSegmentSeqNo) .setZkPath(newZkPath) .build(); return addNewSegmentAndDeleteOldSegment(newSegment, segment); }
public static void updateSegmentMetadata(ZooKeeperClient zkc, LogSegmentMetadata segment) throws Exception { byte[] finalisedData = segment.getFinalisedData().getBytes(UTF_8); zkc.get().setData(segment.getZkPath(), finalisedData, -1); }
@Test(timeout = 60000) public void testRegisterListenerAfterLSMStoreClosed() throws Exception { lsmStore.close(); LogSegmentMetadata segment = createLogSegment(1L); lsmStore.registerLogSegmentListener(segment.getZkPath(), new LogSegmentNamesListener() { @Override public void onSegmentsUpdated(List<String> segments) { // no-op; } }); assertTrue("No listener is registered", lsmStore.listeners.isEmpty()); }
@Test(timeout = 60000) public void testGetLogSegment() throws Exception { LogSegmentMetadata segment = createLogSegment(1L, 99L); Transaction<Object> createTxn = lsmStore.transaction(); lsmStore.createLogSegment(createTxn, segment); FutureUtils.result(createTxn.execute()); // the log segment should be created assertNotNull("LogSegment " + segment + " should be created", zkc.get().exists(segment.getZkPath(), false)); LogSegmentMetadata readSegment = FutureUtils.result(lsmStore.getLogSegment(segment.getZkPath())); assertEquals("Log segment should match", segment, readSegment); }
+ l.toString() + " at path " + l.getZkPath() + ". Unable to continue recovery."); return Future.exception(new IOException("Unrecoverable corruption,"
@Test(timeout = 60000) public void testDeleteLogSegment() throws Exception { LogSegmentMetadata segment = createLogSegment(1L); Transaction<Object> createTxn = lsmStore.transaction(); lsmStore.createLogSegment(createTxn, segment); FutureUtils.result(createTxn.execute()); // the log segment should be created assertNotNull("LogSegment " + segment + " should be created", zkc.get().exists(segment.getZkPath(), false)); Transaction<Object> deleteTxn = lsmStore.transaction(); lsmStore.deleteLogSegment(deleteTxn, segment); FutureUtils.result(deleteTxn.execute()); assertNull("LogSegment " + segment + " should be deleted", zkc.get().exists(segment.getZkPath(), false)); }
@Test(timeout = 60000) public void testCreateDeleteLogSegmentSuccess() throws Exception { LogSegmentMetadata segment1 = createLogSegment(1L); LogSegmentMetadata segment2 = createLogSegment(2L); // create log segment 1 Transaction<Object> createTxn = lsmStore.transaction(); lsmStore.createLogSegment(createTxn, segment1); FutureUtils.result(createTxn.execute()); // the log segment should be created assertNotNull("LogSegment " + segment1 + " should be created", zkc.get().exists(segment1.getZkPath(), false)); // delete log segment 1 and create log segment 2 Transaction<Object> createDeleteTxn = lsmStore.transaction(); lsmStore.createLogSegment(createDeleteTxn, segment2); lsmStore.deleteLogSegment(createDeleteTxn, segment1); FutureUtils.result(createDeleteTxn.execute()); // segment 1 should be deleted, segment 2 should be created assertNull("LogSegment " + segment1 + " should be deleted", zkc.get().exists(segment1.getZkPath(), false)); assertNotNull("LogSegment " + segment2 + " should be created", zkc.get().exists(segment2.getZkPath(), false)); }
LogSegmentMetadata segment = DLMTestUtil.completedLogSegment(ledgerPath, i, (i - 1) * 100, i * 100 - 1, 100, i, 100, 0); completedLogSegments.put(((long)i), segment); LOG.info("Create completed segment {} : {}", segment.getZkPath(), segment); segment.write(zkc); LOG.info("Create inprogress segment {} : {}", segment.getZkPath(), segment); segment.write(zkc);
LogSegmentMetadata segment = DLMTestUtil.completedLogSegment(ledgerPath, i, (i - 1) * 100, i * 100 - 1, 100, i, 100, 0); completedLogSegments.put(((long)i), segment); LOG.info("Create completed segment {} : {}", segment.getZkPath(), segment); segment.write(zkc);
@Test(timeout = 60000) public void testUpdateLogSegment() throws Exception { LogSegmentMetadata segment = createLogSegment(1L, 99L); Transaction<Object> createTxn = lsmStore.transaction(); lsmStore.createLogSegment(createTxn, segment); FutureUtils.result(createTxn.execute()); // the log segment should be created assertNotNull("LogSegment " + segment + " should be created", zkc.get().exists(segment.getZkPath(), false)); LogSegmentMetadata modifiedSegment = createLogSegment(1L, 999L); Transaction<Object> updateTxn = lsmStore.transaction(); lsmStore.updateLogSegment(updateTxn, modifiedSegment); FutureUtils.result(updateTxn.execute()); // the log segment should be updated LogSegmentMetadata readSegment = FutureUtils.result(LogSegmentMetadata.read(zkc, segment.getZkPath(), true)); assertEquals("Last entry id should be changed from 99L to 999L", 999L, readSegment.getLastEntryId()); }
Mutator(LogSegmentMetadata original) { super(original.getZkPath(), original.getVersion(), original.getLedgerId(), original.getFirstTxId()); this.inprogress = original.isInProgress(); this.logSegmentSequenceNo = original.getLogSegmentSequenceNumber(); this.lastEntryId = original.getLastEntryId(); this.lastSlotId = original.getLastSlotId(); this.lastTxId = original.getLastTxId(); this.completionTime = original.getCompletionTime(); this.recordCount = original.getRecordCount(); this.regionId = original.getRegionId(); this.status = original.getStatus(); this.minActiveEntryId = original.getMinActiveDLSN().getEntryId(); this.minActiveSlotId = original.getMinActiveDLSN().getSlotId(); this.startSequenceId = original.getStartSequenceId(); this.envelopeEntries = original.getEnvelopeEntries(); }
@Test(timeout = 60000) public void testCreateLogSegment() throws Exception { LogSegmentMetadata segment = createLogSegment(1L); Transaction<Object> createTxn = lsmStore.transaction(); lsmStore.createLogSegment(createTxn, segment); FutureUtils.result(createTxn.execute()); // the log segment should be created assertNotNull("LogSegment " + segment + " should be created", zkc.get().exists(segment.getZkPath(), false)); LogSegmentMetadata segment2 = createLogSegment(1L); Transaction<Object> createTxn2 = lsmStore.transaction(); lsmStore.createLogSegment(createTxn2, segment2); try { FutureUtils.result(createTxn2.execute()); fail("Should fail if log segment exists"); } catch (Throwable t) { // expected assertTrue("Should throw NodeExistsException if log segment exists", t instanceof ZKException); ZKException zke = (ZKException) t; assertEquals("Should throw NodeExistsException if log segment exists", KeeperException.Code.NODEEXISTS, zke.getKeeperExceptionCode()); } }
assertEquals(completedLogSegment.getLogSegmentSequenceNumber(), readCompletedLogSegment.getLogSegmentSequenceNumber()); assertEquals(completedLogSegment.getRegionId(), readCompletedLogSegment.getRegionId()); assertEquals(completedLogSegment.getZkPath(), readCompletedLogSegment.getZkPath()); assertEquals(completedLogSegment.getZNodeName(), readCompletedLogSegment.getZNodeName());