String segmentName = DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i); segments.add(segmentName); if (i == 10) {
LogSegmentMetadata metadata = DLMTestUtil.completedLogSegment("/segment" + i, i, i, i * 100L, 100, i, 99L, 0L); String name = DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i); cache.add(name, metadata); segmentRemoved.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i)); Set<String> segmentAdded = Sets.newHashSet(); for (int i = 3; i <= 6; i++) { segmentReceived.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i)); if (i == 6) { segmentAdded.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i));
@Test(timeout = 60000, expected = UnexpectedException.class) public void testGapDetection() throws Exception { LogSegmentCache cache = new LogSegmentCache("test-gap-detection"); cache.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(1L), DLMTestUtil.completedLogSegment("/segment-1", 1L, 1L, 100L, 100, 1L, 99L, 0L)); cache.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(3L), DLMTestUtil.completedLogSegment("/segment-3", 3L, 3L, 300L, 100, 3L, 99L, 0L)); cache.getLogSegments(LogSegmentMetadata.COMPARATOR); }
LogSegmentMetadata metadata = DLMTestUtil.completedLogSegment("/segment" + i, i, i, i * 100L, 100, i, 99L, 0L); String name = DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i); cache.add(name, metadata); segmentRemoved.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i)); Map<String, LogSegmentMetadata> segmentAdded = Maps.newHashMap(); for (int i = 3; i <= 6; i++) { segmentReceived.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i)); if (i == 6) { segmentAdded.put(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(i), DLMTestUtil.completedLogSegment("/segment" + i, i, i, i * 100L, 100, i, 99L, 0L));
@Test(timeout = 60000) public void testSameLogSegment() throws Exception { LogSegmentCache cache = new LogSegmentCache("test-same-log-segment"); List<LogSegmentMetadata> expectedList = Lists.newArrayListWithExpectedSize(2); LogSegmentMetadata inprogress = DLMTestUtil.inprogressLogSegment("/inprogress-1", 1L, 1L, 1L); expectedList.add(inprogress); cache.add(DLMTestUtil.inprogressZNodeName(1L), inprogress); LogSegmentMetadata completed = DLMTestUtil.completedLogSegment("/segment-1", 1L, 1L, 100L, 100, 1L, 99L, 0L); expectedList.add(completed); cache.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(1L), completed); List<LogSegmentMetadata> retrievedList = cache.getLogSegments(LogSegmentMetadata.COMPARATOR); assertEquals("Should get both log segments in ascending order", expectedList.size(), retrievedList.size()); for (int i = 0; i < expectedList.size(); i++) { assertEqualsWithoutSequenceId(expectedList.get(i), retrievedList.get(i)); } assertEquals("inprogress log segment should see start sequence id : 0", 0L, retrievedList.get(0).getStartSequenceId()); Collections.reverse(expectedList); retrievedList = cache.getLogSegments(LogSegmentMetadata.DESC_COMPARATOR); assertEquals("Should get both log segments in descending order", expectedList.size(), retrievedList.size()); for (int i = 0; i < expectedList.size(); i++) { assertEqualsWithoutSequenceId(expectedList.get(i), retrievedList.get(i)); } assertEquals("inprogress log segment should see start sequence id : 0", 0L, retrievedList.get(1).getStartSequenceId()); }
@Test(timeout = 60000) public void testGapDetectionOnLogSegmentsWithoutLogSegmentSequenceNumber() throws Exception { LogSegmentCache cache = new LogSegmentCache("test-gap-detection"); LogSegmentMetadata segment1 = DLMTestUtil.completedLogSegment("/segment-1", 1L, 1L, 100L, 100, 1L, 99L, 0L) .mutator().setVersion(LogSegmentMetadata.LogSegmentMetadataVersion.VERSION_V1_ORIGINAL).build(); cache.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(1L), segment1); LogSegmentMetadata segment3 = DLMTestUtil.completedLogSegment("/segment-3", 3L, 3L, 300L, 100, 3L, 99L, 0L) .mutator().setVersion(LogSegmentMetadata.LogSegmentMetadataVersion.VERSION_V2_LEDGER_SEQNO).build(); cache.add(DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(3L), segment3); List<LogSegmentMetadata> expectedList = Lists.asList(segment1, new LogSegmentMetadata[] { segment3 }); List<LogSegmentMetadata> resultList = cache.getLogSegments(LogSegmentMetadata.COMPARATOR); assertEquals(expectedList, resultList); }
public static LogSegmentMetadata completedLogSegment(String ledgerPath, long ledgerId, long firstTxId, long lastTxId, int recordCount, long logSegmentSeqNo, long lastEntryId, long lastSlotId, int version) { LogSegmentMetadata metadata = new LogSegmentMetadata.LogSegmentMetadataBuilder( ledgerPath + "/" + inprogressZNodeName(logSegmentSeqNo), version, ledgerId, firstTxId) .setInprogress(false) .setLogSegmentSequenceNo(logSegmentSeqNo) .build(); return metadata.completeLogSegment(ledgerPath + "/" + completedLedgerZNodeNameWithLogSegmentSequenceNumber(logSegmentSeqNo), lastTxId, recordCount, lastEntryId, lastSlotId, firstTxId); }
@Test(timeout = 60000) public void testBasicOperations() { LogSegmentMetadata metadata = DLMTestUtil.completedLogSegment("/segment1", 1L, 1L, 100L, 100, 1L, 99L, 0L); String name = DLMTestUtil.completedLedgerZNodeNameWithLogSegmentSequenceNumber(1L); LogSegmentCache cache = new LogSegmentCache("test-basic-operations"); assertNull("No log segment " + name + " should be cached", cache.get(name)); cache.add(name, metadata); LogSegmentMetadata metadataRetrieved = cache.get(name); assertNotNull("log segment " + name + " should be cached", metadataRetrieved); assertEquals("Wrong log segment metadata returned for " + name, metadata, metadataRetrieved); LogSegmentMetadata metadataRemoved = cache.remove(name); assertNull("log segment " + name + " should be removed from cache", cache.get(name)); assertEquals("Wrong log segment metadata removed for " + name, metadata, metadataRemoved); assertNull("No log segment " + name + " to be removed", cache.remove(name)); }