This is an automated email from the ASF dual-hosted git repository.

jlewandowski pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 5321f88c40cc9ad280a7fb7472194b93e93334c0
Merge: f76f328622 f0ea12c6d7
Author: Jacek Lewandowski <[email protected]>
AuthorDate: Thu Dec 21 16:42:32 2023 +0100

    Merge branch 'cassandra-5.0' into trunk
    
    * cassandra-5.0:
      Add a startup check to fail startup when using invalid configuration with 
certain Kernel and FS type

 .build/cassandra-deps-template.xml                 |   4 +
 .build/parent-pom-template.xml                     |   5 +
 CHANGES.txt                                        |   1 +
 .../config/CassandraRelevantProperties.java        |   4 +-
 src/java/org/apache/cassandra/config/Config.java   |   7 +-
 .../apache/cassandra/io/util/DataOutputBuffer.java |  15 +++
 .../apache/cassandra/service/StartupChecks.java    |  64 ++++++++-
 .../org/apache/cassandra/utils/FBUtilities.java    | 124 ++++++++++++++++-
 .../cassandra/service/StartupChecksTest.java       | 147 ++++++++++++++++++++-
 .../apache/cassandra/utils/FBUtilitiesTest.java    |  49 +++++--
 10 files changed, 401 insertions(+), 19 deletions(-)

diff --cc CHANGES.txt
index 08a630ca18,d90ee5de25..8956d8fabf
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,11 -1,5 +1,12 @@@
 -5.0-beta2
 +5.1
 + * Make nodetool tablestats use number of significant digits for time and 
average values consistently (CASSANDRA-19015)
 + * Upgrade jackson to 2.15.3 and snakeyaml to 2.1 (CASSANDRA-18875)
 + * Transactional Cluster Metadata [CEP-21] (CASSANDRA-18330)
 + * Add ELAPSED command to cqlsh (CASSANDRA-18861)
 + * Add the ability to disable bulk loading of SSTables (CASSANDRA-18781)
 + * Clean up obsolete functions and simplify cql_version handling in cqlsh 
(CASSANDRA-18787)
 +Merged from 5.0:
+  * Add a startup check to fail startup when using invalid configuration with 
certain Kernel and FS type (CASSANDRA-19196)
   * UCS min_sstable_size should not be lower than target_sstable_size lower 
bound (CASSANDRA-19112)
   * Fix the correspondingMessagingVersion of SSTable format and improve TTL 
overflow tests coverage (CASSANDRA-19197)
   * Fix resource cleanup after SAI query timeouts (CASSANDRA-19177)
diff --cc src/java/org/apache/cassandra/config/CassandraRelevantProperties.java
index b28bf2c4f6,16a24fd2f0..db18c45eb8
--- a/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java
+++ b/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java
@@@ -616,10 -592,8 +619,9 @@@ public enum CassandraRelevantPropertie
      USE_NIX_RECURSIVE_DELETE("cassandra.use_nix_recursive_delete"),
      /** Gossiper compute expiration timeout. Default value 3 days. */
      VERY_LONG_TIME_MS("cassandra.very_long_time_ms", "259200000"),
 -    
WAIT_FOR_TRACING_EVENTS_TIMEOUT_SECS("cassandra.wait_for_tracing_events_timeout_secs",
 "0");
 +    
WAIT_FOR_TRACING_EVENTS_TIMEOUT_SECS("cassandra.wait_for_tracing_events_timeout_secs",
 "0"),
 +    ;
  
- 
      static
      {
          CassandraRelevantProperties[] values = 
CassandraRelevantProperties.values();
diff --cc test/unit/org/apache/cassandra/service/StartupChecksTest.java
index 6a26899beb,6fb063987a..6916f35424
--- a/test/unit/org/apache/cassandra/service/StartupChecksTest.java
+++ b/test/unit/org/apache/cassandra/service/StartupChecksTest.java
@@@ -21,20 -23,39 +23,40 @@@ import java.nio.file.FileSystem
  import java.nio.file.Files;
  import java.nio.file.Path;
  import java.nio.file.Paths;
+ import java.nio.file.spi.FileSystemProvider;
  import java.time.Instant;
  import java.util.List;
- 
- import org.apache.cassandra.config.StartupChecksOptions;
- import org.apache.cassandra.io.util.File;
- import org.junit.*;
- 
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.concurrent.Callable;
+ import java.util.stream.Collectors;
+ 
+ import org.junit.After;
+ import org.junit.AfterClass;
+ import org.junit.Assert;
+ import org.junit.Assume;
+ import org.junit.Before;
+ import org.junit.BeforeClass;
+ import org.junit.Test;
+ 
+ import com.vdurmont.semver4j.Semver;
  import org.apache.cassandra.SchemaLoader;
++import org.apache.cassandra.config.CassandraRelevantProperties;
+ import org.apache.cassandra.config.Config.DiskAccessMode;
  import org.apache.cassandra.config.DatabaseDescriptor;
- import org.apache.cassandra.schema.SchemaConstants;
- import org.apache.cassandra.db.*;
+ import org.apache.cassandra.config.StartupChecksOptions;
+ import org.apache.cassandra.db.ColumnFamilyStore;
+ import org.apache.cassandra.db.Directories;
+ import org.apache.cassandra.db.Keyspace;
  import org.apache.cassandra.exceptions.StartupException;
+ import org.apache.cassandra.io.filesystem.ForwardingFileSystem;
+ import org.apache.cassandra.io.filesystem.ForwardingFileSystemProvider;
+ import org.apache.cassandra.io.filesystem.ForwardingPath;
+ import org.apache.cassandra.io.util.File;
+ import org.apache.cassandra.schema.SchemaConstants;
  import org.apache.cassandra.service.DataResurrectionCheck.Heartbeat;
  import org.apache.cassandra.utils.Clock;
+ import org.apache.cassandra.utils.FBUtilities;
  
  import static java.util.Collections.singletonList;
  import static 
org.apache.cassandra.config.CassandraRelevantProperties.TEST_INVALID_LEGACY_SSTABLE_ROOT;
@@@ -47,6 -72,6 +73,15 @@@ import static org.mockito.Mockito.when
  
  public class StartupChecksTest
  {
++    static
++    {
++        // This test was failing because in the middle of file deletions in 
@Before hook, it happened that some
++        // thread modified system.local table. Each change to system.local is 
immediately flushed to disk. Creation
++        // of those new files when the directory was being deleted caused the 
test to fail occasionally.
++        // The property below disables flushing system.local after each 
change.
++        CassandraRelevantProperties.UNSAFE_SYSTEM.setBoolean(true);
++    }
++
      StartupChecks startupChecks;
      Path sstableDir;
      static File heartbeatFile;
diff --cc test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java
index dc89c3ed95,7b2bd88afd..28059f5784
--- a/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java
+++ b/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java
@@@ -364,38 -374,26 +374,61 @@@ public class FBUtilitiesTes
          }
      }
  
 +    @Test
 +    public void testPrettyPrintLatency()
 +    {
 +        Assert.assertEquals("5000.000 ms", 
FBUtilities.prettyPrintLatency(5000));
 +        Assert.assertEquals("100.000 ms", 
FBUtilities.prettyPrintLatency(100));
 +        Assert.assertEquals("0.050 ms", FBUtilities.prettyPrintLatency(0.05));
 +        Assert.assertEquals("0.001 ms", 
FBUtilities.prettyPrintLatency(0.0005));
 +        Assert.assertEquals("0.000 ms", 
FBUtilities.prettyPrintLatency(0.0004));
 +        Assert.assertEquals("NaN ms", 
FBUtilities.prettyPrintLatency(Double.NaN));
 +        Assert.assertEquals("Infinity ms", 
FBUtilities.prettyPrintLatency(Double.POSITIVE_INFINITY));
 +    }
 +
 +    @Test
 +    public void testPrettyPrintRatio()
 +    {
 +        Assert.assertEquals("10.000", FBUtilities.prettyPrintRatio(10));
 +        Assert.assertEquals("1.000", FBUtilities.prettyPrintRatio(1));
 +        Assert.assertEquals("0.050", FBUtilities.prettyPrintRatio(0.05));
 +        Assert.assertEquals("0.001", FBUtilities.prettyPrintRatio(0.0005));
 +        Assert.assertEquals("0.000", FBUtilities.prettyPrintRatio(0.0004));
 +        Assert.assertEquals("NaN", FBUtilities.prettyPrintRatio(Double.NaN));
 +        Assert.assertEquals("Infinity", 
FBUtilities.prettyPrintRatio(Double.POSITIVE_INFINITY));
 +    }
 +
 +    @Test
 +    public void testPrettyPrintAverage()
 +    {
 +        Assert.assertEquals("100500.00", 
FBUtilities.prettyPrintAverage(100500));
 +        Assert.assertEquals("1.50", FBUtilities.prettyPrintAverage(1.5));
 +        Assert.assertEquals("0.05", FBUtilities.prettyPrintAverage(0.05));
 +        Assert.assertEquals("0.00", FBUtilities.prettyPrintAverage(0.00));
 +        Assert.assertEquals("NaN", 
FBUtilities.prettyPrintAverage(Double.NaN));
 +        Assert.assertEquals("Infinity", 
FBUtilities.prettyPrintAverage(Double.POSITIVE_INFINITY));
 +    }
++
+     @Test
+     public void testParseKernelVersion()
+     {
+         
assertThat(parseKernelVersion("4.4.0-21-generic").toString()).isEqualTo("4.4.0-21-generic");
+         
assertThat(parseKernelVersion("4.4.0-pre21-generic").toString()).isEqualTo("4.4.0-pre21-generic");
+         
assertThat(parseKernelVersion("4.4-pre21-generic").toString()).isEqualTo("4.4-pre21-generic");
+         
assertThat(parseKernelVersion("4.4.0-21-generic\n").toString()).isEqualTo("4.4.0-21-generic");
+         
assertThat(parseKernelVersion("\n4.4.0-21-generic\n").toString()).isEqualTo("4.4.0-21-generic");
+         assertThat(parseKernelVersion("\n 4.4.0-21-generic 
\n").toString()).isEqualTo("4.4.0-21-generic");
+ 
+         
assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> 
parseKernelVersion("\n \n"))
+                                                                  
.withMessageContaining("no version found");
+     }
+ 
+     @Test
+     public void testGetKernelVersion()
+     {
+         Assume.assumeTrue(FBUtilities.isLinux);
+         Semver kernelVersion = FBUtilities.getKernelVersion();
+         assertThat(kernelVersion).isGreaterThan(new Semver("0.0.0", 
Semver.SemverType.LOOSE));
+         assertThat(kernelVersion).isLessThan(new Semver("100.0.0", 
Semver.SemverType.LOOSE));
+     }
  }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to