/** * Assign next log segment sequence number based on a decreasing list of log segments. * * @param segmentListDesc * a decreasing list of log segments * @return null if no log segments was assigned a sequence number in <code>segmentListDesc</code>. * otherwise, return next log segment sequence number */ public static Long nextLogSegmentSequenceNumber(List<LogSegmentMetadata> segmentListDesc) { int lastAssignedLogSegmentIdx = -1; Long lastAssignedLogSegmentSeqNo = null; Long nextLogSegmentSeqNo = null; for (int i = 0; i < segmentListDesc.size(); i++) { LogSegmentMetadata metadata = segmentListDesc.get(i); if (LogSegmentMetadata.supportsLogSegmentSequenceNo(metadata.getVersion())) { lastAssignedLogSegmentSeqNo = metadata.getLogSegmentSequenceNumber(); lastAssignedLogSegmentIdx = i; break; } } if (null != lastAssignedLogSegmentSeqNo) { // latest log segment is assigned with a sequence number, start with next sequence number nextLogSegmentSeqNo = lastAssignedLogSegmentSeqNo + lastAssignedLogSegmentIdx + 1; } return nextLogSegmentSeqNo; }
&& prevSegment.getVersion() >= LogSegmentMetadata.LogSegmentMetadataVersion.VERSION_V2_LEDGER_SEQNO.value && segment.getVersion() >= LogSegmentMetadata.LogSegmentMetadataVersion.VERSION_V2_LEDGER_SEQNO.value && prevSegment.getLogSegmentSequenceNumber() != segment.getLogSegmentSequenceNumber() && prevSegment.getLogSegmentSequenceNumber() + 1 != segment.getLogSegmentSequenceNumber()) {
.setLogSegmentInfo(segment.getLogSegmentSequenceNumber(), segment.getStartSequenceId()) .setEntryId(lastEntry.getEntryId()) .setEnvelopeEntry(LogSegmentMetadata.supportsEnvelopedEntries(segment.getVersion())) .setInputStream(lastEntry.getEntryInputStream()) .buildReader();
.setEntryId(entry.getEntryId()) .setEnvelopeEntry( LogSegmentMetadata.supportsEnvelopedEntries(metadata.getVersion())) .deserializeRecordSet(true) .setInputStream(entry.getEntryInputStream())
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(); }