horizonzy commented on code in PR #3980:
URL: https://github.com/apache/bookkeeper/pull/3980#discussion_r1219709249
##########
bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieJournalForceTest.java:
##########
@@ -402,4 +406,70 @@ public void testFileChannelProvider() throws Exception {
verify(defaultFileChannel, times (1)).close();
}
+ @Test
+ public void testRecycleFlushedFlag() throws Exception {
+ File journalDir = tempDir.newFolder();
+
BookieImpl.checkDirectoryStructure(BookieImpl.getCurrentDirectory(journalDir));
+
+ final int journalBufferedEntriesThreshold = 10;
+
+ ServerConfiguration conf =
TestBKConfiguration.newServerConfiguration();
+ conf.setJournalDirName(journalDir.getPath())
+
.setJournalBufferedEntriesThreshold(journalBufferedEntriesThreshold)
+ .setMetadataServiceUri(null)
+ .setJournalAdaptiveGroupWrites(false);
+
+ JournalChannel jc = spy(new JournalChannel(journalDir, 1));
+ whenNew(JournalChannel.class).withAnyArguments().thenReturn(jc);
+
+ LedgerDirsManager ledgerDirsManager = mock(LedgerDirsManager.class);
+ Journal journal = new Journal(0, journalDir, conf, ledgerDirsManager);
+
+ // Create a sample ForceWriteRequest object
+ long logId = 1L;
+ long lastFlushedPosition = 100L;
+ RecyclableArrayList<Journal.QueueEntry> forceWriteWaiters = new
RecyclableArrayList<>();
+ boolean shouldClose = false;
+
+
+ Method createForceWriteRequest =
Journal.class.getDeclaredMethod("createForceWriteRequest",
+ JournalChannel.class, long.class, long.class,
RecyclableArrayList.class, boolean.class);
+ createForceWriteRequest.setAccessible(true);
+ ForceWriteRequest request = (ForceWriteRequest)
createForceWriteRequest.invoke(journal, jc, logId,
+ lastFlushedPosition, forceWriteWaiters, shouldClose);
+
+ Method recycle = ForceWriteRequest.class.getDeclaredMethod("recycle");
+ recycle.setAccessible(true);
+ recycle.invoke(request);
+
+
+ request = (ForceWriteRequest) createForceWriteRequest.invoke(journal,
jc, logId,
+ 200L, forceWriteWaiters, true);
+ Class<?> forceWriteRequestClass = request.getClass();
+
+ Field field = forceWriteRequestClass.getDeclaredField("logFile");
+ field.setAccessible(true);
+ assertEquals(jc, field.get(request));
+
+ field = forceWriteRequestClass.getDeclaredField("logId");
+ field.setAccessible(true);
+ assertEquals(logId, field.get(request));
+
+ field = forceWriteRequestClass.getDeclaredField("lastFlushedPosition");
+ field.setAccessible(true);
+ assertEquals(200L, field.get(request));
+
+ field = forceWriteRequestClass.getDeclaredField("forceWriteWaiters");
+ field.setAccessible(true);
+ assertEquals(forceWriteWaiters, field.get(request));
+
+ field = forceWriteRequestClass.getDeclaredField("shouldClose");
+ field.setAccessible(true);
+ assertTrue((boolean) field.get(request));
+
+ field = forceWriteRequestClass.getDeclaredField("flushed");
Review Comment:
We shouldn't use particular filed by name. If we add a new field in the
future, it can't cover it.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]