This is an automated email from the ASF dual-hosted git repository. bereng pushed a commit to branch cassandra-4.0 in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cassandra-4.0 by this push: new 3ba6de70c7 Test failure: org.apache.cassandra.db.commitlog.CommitLogSegmentManagerCDCTest 3ba6de70c7 is described below commit 3ba6de70c74c842d0104dbd2dcef41c857198314 Author: Bereng <berenguerbl...@gmail.com> AuthorDate: Fri Nov 17 09:09:00 2023 +0100 Test failure: org.apache.cassandra.db.commitlog.CommitLogSegmentManagerCDCTest patch by Berenguer Blasi; reviewed by Andres de la Peña for CASSANDRA-18948 --- .../cassandra/db/commitlog/CommitLogSegment.java | 2 +- .../commitlog/CommitLogSegmentManagerCDCTest.java | 67 ++++++++++++---------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java b/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java index 64b815e3de..c46cc629d0 100644 --- a/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java +++ b/src/java/org/apache/cassandra/db/commitlog/CommitLogSegment.java @@ -59,7 +59,7 @@ public abstract class CommitLogSegment { private final static long idBase; - private CDCState cdcState = CDCState.PERMITTED; + private volatile CDCState cdcState = CDCState.PERMITTED; public enum CDCState { PERMITTED, diff --git a/test/unit/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDCTest.java b/test/unit/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDCTest.java index 4128b7122e..21962c8b7b 100644 --- a/test/unit/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDCTest.java +++ b/test/unit/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDCTest.java @@ -35,7 +35,6 @@ import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.RowUpdateBuilder; import org.apache.cassandra.db.commitlog.CommitLogSegment.CDCState; import org.apache.cassandra.exceptions.CDCWriteException; -import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.schema.TableMetadata; public class CommitLogSegmentManagerCDCTest extends CQLTester @@ -68,7 +67,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester TableMetadata cfm = currentTableMetadata(); // Confirm that logic to check for whether or not we can allocate new CDC segments works - Integer originalCDCSize = DatabaseDescriptor.getCDCSpaceInMB(); + int originalCDCSize = DatabaseDescriptor.getCDCSpaceInMB(); try { DatabaseDescriptor.setCDCSpaceInMB(32); @@ -98,11 +97,10 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester Keyspace.open(keyspace()).getColumnFamilyStore(currentTable()).forceBlockingFlush(); CommitLog.instance.forceRecycleAllSegments(); cdcMgr.awaitManagementTasksCompletion(); - Assert.assertTrue("Expected files to be moved to overflow.", getCDCRawCount() > 0); + Assert.assertTrue("Expected files to be moved to overflow.", getCDCRawFiles().length > 0); // Simulate a CDC consumer reading files then deleting them - for (File f : new File(DatabaseDescriptor.getCDCLogLocation()).listFiles()) - FileUtils.deleteWithConfirm(f); + deleteCDCRawFiles(); // Update size tracker to reflect deleted files. Should flip flag on current allocatingFrom to allow. cdcMgr.updateCDCTotalSize(); @@ -115,7 +113,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester } @Test - public void testSegmentFlaggingOnCreation() throws Throwable + public void testSegmentFlaggingOnCreation() { CommitLogSegmentManagerCDC cdcMgr = (CommitLogSegmentManagerCDC)CommitLog.instance.segmentManager; String ct = createTable("CREATE TABLE %s (idx int, data text, primary key(idx)) WITH cdc=true;"); @@ -143,16 +141,13 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester cdcMgr.awaitManagementTasksCompletion(); // Delete all files in cdc_raw - for (File f : new File(DatabaseDescriptor.getCDCLogLocation()).listFiles()) - f.delete(); + deleteCDCRawFiles(); cdcMgr.updateCDCTotalSize(); // Confirm cdc update process changes flag on active segment expectCurrentCDCState(CDCState.PERMITTED); // Clear out archived CDC files - for (File f : new File(DatabaseDescriptor.getCDCLogLocation()).listFiles()) { - FileUtils.deleteWithConfirm(f); - } + deleteCDCRawFiles(); } finally { @@ -179,8 +174,8 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester // Read index value and confirm it's == end from last sync BufferedReader in = new BufferedReader(new FileReader(cdcIndexFile)); String input = in.readLine(); - Integer offset = Integer.parseInt(input); - Assert.assertEquals(syncOffset, (long)offset); + int offset = Integer.parseInt(input); + Assert.assertEquals(syncOffset, offset); in.close(); } @@ -189,7 +184,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester { createTable("CREATE TABLE %s (idx int, data text, primary key(idx)) WITH cdc=true;"); CommitLogSegment initialSegment = CommitLog.instance.segmentManager.allocatingFrom(); - Integer originalCDCSize = DatabaseDescriptor.getCDCSpaceInMB(); + int originalCDCSize = DatabaseDescriptor.getCDCSpaceInMB(); DatabaseDescriptor.setCDCSpaceInMB(8); try @@ -220,7 +215,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester BufferedReader in = new BufferedReader(new FileReader(cdcIndexFile)); String input = in.readLine(); input = in.readLine(); - Assert.assertTrue("Expected COMPLETED in index file, got: " + input, input.equals("COMPLETED")); + Assert.assertEquals("Expected COMPLETED in index file, got: " + input, "COMPLETED", input); in.close(); } @@ -282,7 +277,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester { // Assert.assertEquals(0, new File(DatabaseDescriptor.getCDCLogLocation()).listFiles().length); String table_name = createTable("CREATE TABLE %s (idx int, data text, primary key(idx)) WITH cdc=true;"); - Integer originalCDCSize = DatabaseDescriptor.getCDCSpaceInMB(); + int originalCDCSize = DatabaseDescriptor.getCDCSpaceInMB(); DatabaseDescriptor.setCDCSpaceInMB(8); TableMetadata ccfm = Keyspace.open(keyspace()).getColumnFamilyStore(table_name).metadata(); @@ -310,13 +305,12 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester // Build up a list of expected index files after replay and then clear out cdc_raw List<CDCIndexData> oldData = parseCDCIndexData(); - for (File f : new File(DatabaseDescriptor.getCDCLogLocation()).listFiles()) - FileUtils.deleteWithConfirm(f.getAbsolutePath()); + deleteCDCRawFiles(); try { Assert.assertEquals("Expected 0 files in CDC folder after deletion. ", - 0, new File(DatabaseDescriptor.getCDCLogLocation()).listFiles().length); + 0, getCDCRawFiles().length); } finally { @@ -331,7 +325,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester // Rough sanity check -> should be files there now. Assert.assertTrue("Expected non-zero number of files in CDC folder after restart.", - new File(DatabaseDescriptor.getCDCLogLocation()).listFiles().length > 0); + getCDCRawFiles().length > 0); // Confirm all the old indexes in old are present and >= the original offset, as we flag the entire segment // as cdc written on a replay. @@ -345,6 +339,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester { Assert.assertTrue("New CDC index file expected to have >= offset in old.", ncid.offset >= cid.offset); found = true; + break; } } if (!found) @@ -365,7 +360,10 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester for (CDCIndexData cid : oldData) { if (cid.fileName.equals(ncid.fileName)) + { found = true; + break; + } } if (!found) Assert.fail(String.format("Unexpected new CDCIndexData found after replay: %s\n", ncid)); @@ -377,7 +375,7 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester List<CDCIndexData> results = new ArrayList<>(); try { - for (File f : new File(DatabaseDescriptor.getCDCLogLocation()).listFiles()) + for (File f : getCDCRawFiles()) { if (f.getName().contains("_cdc.idx")) results.add(new CDCIndexData(f)); @@ -397,15 +395,12 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester CDCIndexData(File f) throws IOException { - String line = ""; + String line; try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)))) { line = br.readLine(); } - catch (Exception e) - { - throw e; - } + fileName = f.getName(); offset = Integer.parseInt(line); } @@ -419,6 +414,8 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester @Override public boolean equals(Object other) { + if (!(other instanceof CDCIndexData)) + return false; CDCIndexData cid = (CDCIndexData)other; return fileName.equals(cid.fileName) && offset == cid.offset; } @@ -431,11 +428,6 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester return ByteBuffer.wrap(toWrap); } - private int getCDCRawCount() - { - return new File(DatabaseDescriptor.getCDCLogLocation()).listFiles().length; - } - private void expectCurrentCDCState(CDCState expectedState) { CDCState currentState = CommitLog.instance.segmentManager.allocatingFrom().getCDCState(); @@ -447,4 +439,17 @@ public class CommitLogSegmentManagerCDCTest extends CQLTester expectedState, currentState)); } } + + private static File[] getCDCRawFiles() + { + return new File(DatabaseDescriptor.getCDCLogLocation()).listFiles(); + } + + private static void deleteCDCRawFiles() + { + for (File f : getCDCRawFiles()) + { + f.delete(); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org