protected long computeStartSequenceId(LogSegmentMetadata segment) throws IOException { if (!segment.isInProgress()) { return segment.getStartSequenceId(); } long startSequenceId = DistributedLogConstants.UNASSIGNED_SEQUENCE_ID; // we only record sequence id when both write version and logsegment's version support sequence id if (LogSegmentMetadata.supportsSequenceId(conf.getDLLedgerMetadataLayoutVersion()) && segment.supportsSequenceId()) { List<LogSegmentMetadata> logSegmentDescList = getFilteredLedgerListDesc(false, false); startSequenceId = DLUtils.computeStartSequenceId(logSegmentDescList, segment); } return startSequenceId; }
@Test(timeout = 60000) public void testGetFilteredLedgerListInWriteHandler() throws Exception { String dlName = runtime.getMethodName(); prepareLogSegments(dlName, 11, 3); BKDistributedLogManager dlm = createNewDLM(conf, dlName); // Get full list. BKLogWriteHandler writeHandler0 = dlm.createWriteHandler(false); List<LogSegmentMetadata> cachedFullLedgerList = writeHandler0.getCachedLogSegments(LogSegmentMetadata.DESC_COMPARATOR); assertTrue(cachedFullLedgerList.size() <= 1); List<LogSegmentMetadata> fullLedgerList = writeHandler0.getFullLedgerListDesc(false, false); assertEquals(11, fullLedgerList.size()); // Get filtered list. BKLogWriteHandler writeHandler1 = dlm.createWriteHandler(false); List<LogSegmentMetadata> filteredLedgerListDesc = writeHandler1.getFilteredLedgerListDesc(false, false); assertEquals(1, filteredLedgerListDesc.size()); assertEquals(fullLedgerList.get(0), filteredLedgerListDesc.get(0)); List<LogSegmentMetadata> filteredLedgerList = writeHandler1.getFilteredLedgerList(false, false); assertEquals(1, filteredLedgerList.size()); assertEquals(fullLedgerList.get(0), filteredLedgerList.get(0)); }
List<LogSegmentMetadata> ledgerListDesc = getFilteredLedgerListDesc(false, false); Long nextLogSegmentSeqNo = DLUtils.nextLogSegmentSequenceNumber(ledgerListDesc);