Skip to content

Commit 0942799

Browse files
zeebe-bors-cloud[bot]deepthidevaki
andauthored
merge: #8294
8294: [Backport stable/1.2] fix(journal): prevent concurrent delete and reader creation r=deepthidevaki a=github-actions[bot] # Description Backport of #8293 to `stable/1.2`. relates to #7962 Co-authored-by: Deepthi Devaki Akkoorath <deepthidevaki@gmail.com>
2 parents 3e74390 + 0854de1 commit 0942799

2 files changed

Lines changed: 48 additions & 14 deletions

File tree

journal/src/main/java/io/camunda/zeebe/journal/file/SegmentedJournal.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -149,22 +149,27 @@ public void deleteUntil(final long index) {
149149
return;
150150
}
151151

152-
log.debug(
153-
"{} - Deleting log up from {} up to {} (removing {} segments)",
154-
name,
155-
getFirstIndex(),
156-
compactSegments.get(compactSegments.lastKey()).index(),
157-
compactSegments.size());
158-
for (final JournalSegment segment : compactSegments.values()) {
159-
log.trace("{} - Deleting segment: {}", name, segment);
160-
segment.delete();
161-
journalMetrics.decSegmentCount();
162-
}
152+
final var stamp = rwlock.writeLock();
153+
try {
154+
log.debug(
155+
"{} - Deleting log up from {} up to {} (removing {} segments)",
156+
name,
157+
getFirstIndex(),
158+
compactSegments.get(compactSegments.lastKey()).index(),
159+
compactSegments.size());
160+
for (final JournalSegment segment : compactSegments.values()) {
161+
log.trace("{} - Deleting segment: {}", name, segment);
162+
segment.delete();
163+
journalMetrics.decSegmentCount();
164+
}
163165

164-
// removes them from the segment map
165-
compactSegments.clear();
166+
// removes them from the segment map
167+
compactSegments.clear();
166168

167-
journalIndex.deleteUntil(index);
169+
journalIndex.deleteUntil(index);
170+
} finally {
171+
rwlock.unlockWrite(stamp);
172+
}
168173
}
169174
}
170175

journal/src/test/java/io/camunda/zeebe/journal/file/SegmentedJournalTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,35 @@ void shouldNotFailOnResetAndOpeningReaderConcurrently() throws InterruptedExcept
509509
assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue();
510510
}
511511

512+
// Regression test for https://github.com/camunda-cloud/zeebe/issues/7962
513+
@Test
514+
void shouldNotFailOnDeleteAndOpeningReaderConcurrently() throws InterruptedException {
515+
// given
516+
final var latch = new CountDownLatch(2);
517+
final var journal = openJournal(2);
518+
for (int i = 0; i < 10; i++) {
519+
journal.append(data);
520+
}
521+
final long indexToCompact = journal.append(data).index();
522+
523+
// when
524+
new Thread(
525+
() -> {
526+
journal.deleteUntil(indexToCompact);
527+
latch.countDown();
528+
})
529+
.start();
530+
new Thread(
531+
() -> {
532+
journal.openReader();
533+
latch.countDown();
534+
})
535+
.start();
536+
537+
// then
538+
assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue();
539+
}
540+
512541
@Test
513542
void shouldDeleteSegmentFileWhenReaderIsClosed() {
514543
// given

0 commit comments

Comments
 (0)