[ 
https://issues.apache.org/jira/browse/CASSANDRA-19263?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ling Mao updated CASSANDRA-19263:
---------------------------------
    Description: 
5.0-beta1 had set the storage_compatibility_mode: CASSANDRA_4 explicitly,

However, the trunk has set storage_compatibility_mode: NONE recently.

I just upgrade a test cluster from 5.0-beta1 to trunk only with source 
codes(not with conf)

The trunk source code is incompatible with storage_compatibility_mode: 
CASSANDRA_4. we will get the following exceptions at the start up:
{code:java}
INFO  [main] 2024-01-03 17:40:54,341 Startup.java:98 - Initializing as first 
CMS node in a new cluster
Exception (java.lang.NoClassDefFoundError) encountered during startup: Could 
not initialize class org.apache.cassandra.net.MessagingService
java.lang.NoClassDefFoundError: Could not initialize class 
org.apache.cassandra.net.MessagingService
 at org.apache.cassandra.tcm.Commit$Handler.<init>(Commit.java:304)
 at 
org.apache.cassandra.tcm.ClusterMetadataService.<init>(ClusterMetadataService.java:181)
 at org.apache.cassandra.tcm.Startup.initializeAsNonCmsNode(Startup.java:146)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:99)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:86)
 at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:268)
 at 
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:726)
 at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876)
ERROR [main] 2024-01-03 17:40:54,378 CassandraDaemon.java:898 - Exception 
encountered during startup
java.lang.NoClassDefFoundError: Could not initialize class 
org.apache.cassandra.net.MessagingService
 at org.apache.cassandra.tcm.Commit$Handler.<init>(Commit.java:304)
 at 
org.apache.cassandra.tcm.ClusterMetadataService.<init>(ClusterMetadataService.java:181)
 at org.apache.cassandra.tcm.Startup.initializeAsNonCmsNode(Startup.java:146)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:99)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:86)
 at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:268)
 at 
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:726)
 at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876) 
{code}
 

After debugging, I found it was caused by the 
{*}_ExceptionInInitializerError_{*}, in the {_}*LINE-WITH-ISSUE*{_}(logger here 
is null). A circular dependency is here:

_*(init)MessagingService -> Version(init its static block) -> 
logger.warn(requires the init of MessagingService)*_

 
{code:java}
public class MessagingService
{
 
    private static final Logger logger = 
LoggerFactory.getLogger(MessagingService.class);
    public enum Version
    {
        static
        {
            if (DatabaseDescriptor.getStorageCompatibilityMode().isBefore(5))
             {
                 // LINE-WITH-ISSUE
                 logger.warn("Starting in storage compatibility mode " + 
DatabaseDescriptor.getStorageCompatibilityMode());
                 CURRENT = VERSION_40;
             }
             else
             {
                 CURRENT = VERSION_51;
             }
        }
    }
    public static final int current_version = Version.CURRENT.value;
} {code}
 

  was:
5.0-beta1 had set the storage_compatibility_mode: CASSANDRA_4 explicitly,

However, the trunk has set storage_compatibility_mode: NONE recently.

I just upgrade a test cluster from 5.0-beta1 to trunk only with source 
codes(not with conf)

The trunk source code is incompatible with storage_compatibility_mode: 
CASSANDRA_4. we will get the following exceptions at the start up:
{code:java}
INFO  [main] 2024-01-03 17:40:54,341 Startup.java:98 - Initializing as first 
CMS node in a new cluster
Exception (java.lang.NoClassDefFoundError) encountered during startup: Could 
not initialize class org.apache.cassandra.net.MessagingService
java.lang.NoClassDefFoundError: Could not initialize class 
org.apache.cassandra.net.MessagingService
 at org.apache.cassandra.tcm.Commit$Handler.<init>(Commit.java:304)
 at 
org.apache.cassandra.tcm.ClusterMetadataService.<init>(ClusterMetadataService.java:181)
 at org.apache.cassandra.tcm.Startup.initializeAsNonCmsNode(Startup.java:146)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:99)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:86)
 at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:268)
 at 
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:726)
 at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876)
ERROR [main] 2024-01-03 17:40:54,378 CassandraDaemon.java:898 - Exception 
encountered during startup
java.lang.NoClassDefFoundError: Could not initialize class 
org.apache.cassandra.net.MessagingService
 at org.apache.cassandra.tcm.Commit$Handler.<init>(Commit.java:304)
 at 
org.apache.cassandra.tcm.ClusterMetadataService.<init>(ClusterMetadataService.java:181)
 at org.apache.cassandra.tcm.Startup.initializeAsNonCmsNode(Startup.java:146)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:99)
 at org.apache.cassandra.tcm.Startup.initialize(Startup.java:86)
 at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:268)
 at 
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:726)
 at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876) 
{code}
 

After debugging, I found it was caused by the ExceptionInInitializerError, in 
the {_}*LINE-WITH-ISSUE*{_}(logger here is null). A circular dependency is here:

_*(init)MessagingService -> Version(init its static block) -> 
logger.warn(requires the init of MessagingService)*_

 
{code:java}
public class MessagingService
{
 
    private static final Logger logger = 
LoggerFactory.getLogger(MessagingService.class);
    public enum Version
    {
        static
        {
            if (DatabaseDescriptor.getStorageCompatibilityMode().isBefore(5))
             {
                 // LINE-WITH-ISSUE
                 logger.warn("Starting in storage compatibility mode " + 
DatabaseDescriptor.getStorageCompatibilityMode());
                 CURRENT = VERSION_40;
             }
             else
             {
                 CURRENT = VERSION_51;
             }
        }
    }
    public static final int current_version = Version.CURRENT.value;
} {code}
 


> Fix tcm startup ExceptionInInitializerError when upgrade from 5.0-beta1 to 
> trunk
> --------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-19263
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-19263
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Transactional Cluster Metadata
>            Reporter: Ling Mao
>            Assignee: Ling Mao
>            Priority: Normal
>             Fix For: 5.x
>
>
> 5.0-beta1 had set the storage_compatibility_mode: CASSANDRA_4 explicitly,
> However, the trunk has set storage_compatibility_mode: NONE recently.
> I just upgrade a test cluster from 5.0-beta1 to trunk only with source 
> codes(not with conf)
> The trunk source code is incompatible with storage_compatibility_mode: 
> CASSANDRA_4. we will get the following exceptions at the start up:
> {code:java}
> INFO  [main] 2024-01-03 17:40:54,341 Startup.java:98 - Initializing as first 
> CMS node in a new cluster
> Exception (java.lang.NoClassDefFoundError) encountered during startup: Could 
> not initialize class org.apache.cassandra.net.MessagingService
> java.lang.NoClassDefFoundError: Could not initialize class 
> org.apache.cassandra.net.MessagingService
>  at org.apache.cassandra.tcm.Commit$Handler.<init>(Commit.java:304)
>  at 
> org.apache.cassandra.tcm.ClusterMetadataService.<init>(ClusterMetadataService.java:181)
>  at org.apache.cassandra.tcm.Startup.initializeAsNonCmsNode(Startup.java:146)
>  at org.apache.cassandra.tcm.Startup.initialize(Startup.java:99)
>  at org.apache.cassandra.tcm.Startup.initialize(Startup.java:86)
>  at 
> org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:268)
>  at 
> org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:726)
>  at 
> org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876)
> ERROR [main] 2024-01-03 17:40:54,378 CassandraDaemon.java:898 - Exception 
> encountered during startup
> java.lang.NoClassDefFoundError: Could not initialize class 
> org.apache.cassandra.net.MessagingService
>  at org.apache.cassandra.tcm.Commit$Handler.<init>(Commit.java:304)
>  at 
> org.apache.cassandra.tcm.ClusterMetadataService.<init>(ClusterMetadataService.java:181)
>  at org.apache.cassandra.tcm.Startup.initializeAsNonCmsNode(Startup.java:146)
>  at org.apache.cassandra.tcm.Startup.initialize(Startup.java:99)
>  at org.apache.cassandra.tcm.Startup.initialize(Startup.java:86)
>  at 
> org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:268)
>  at 
> org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:726)
>  at 
> org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:876) 
> {code}
>  
> After debugging, I found it was caused by the 
> {*}_ExceptionInInitializerError_{*}, in the {_}*LINE-WITH-ISSUE*{_}(logger 
> here is null). A circular dependency is here:
> _*(init)MessagingService -> Version(init its static block) -> 
> logger.warn(requires the init of MessagingService)*_
>  
> {code:java}
> public class MessagingService
> {
>  
>     private static final Logger logger = 
> LoggerFactory.getLogger(MessagingService.class);
>     public enum Version
>     {
>         static
>         {
>             if (DatabaseDescriptor.getStorageCompatibilityMode().isBefore(5))
>              {
>                  // LINE-WITH-ISSUE
>                  logger.warn("Starting in storage compatibility mode " + 
> DatabaseDescriptor.getStorageCompatibilityMode());
>                  CURRENT = VERSION_40;
>              }
>              else
>              {
>                  CURRENT = VERSION_51;
>              }
>         }
>     }
>     public static final int current_version = Version.CURRENT.value;
> } {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to