This is an automated email from the ASF dual-hosted git repository. smiklosovic pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push: new fc97fd1037 Upgrade logback version to 1.5.18 and slf4j dependencies to 2.0.17 fc97fd1037 is described below commit fc97fd1037843ddb320011c52faa5a3896368731 Author: Nikolay Izhikov <nizhi...@apache.org> AuthorDate: Wed Apr 9 13:36:32 2025 +0300 Upgrade logback version to 1.5.18 and slf4j dependencies to 2.0.17 patch by Nikolay Izhikov; reviewed by Stefan Miklosovic, Maxim Muzafarov, Brandon Williams for CASSANDRA-20429 --- .build/parent-pom-template.xml | 10 +- CHANGES.txt | 1 + conf/logback.xml | 10 +- .../configuration/cass_logback_xml_file.adoc | 11 +- .../pages/managing/operating/audit_logging.adoc | 2 +- ide/nbproject/project.xml | 2 +- .../cassandra/service/StorageServiceMBean.java | 1 - src/java/org/apache/cassandra/tools/NodeProbe.java | 2 +- .../utils/logging/LogbackLoggingSupport.java | 22 ++-- test/conf/logback-burntest.xml | 6 +- test/conf/logback-dtest-quiet.xml | 6 +- test/conf/logback-dtest.xml | 8 +- .../logback-dtest_with_slow_query_appender.xml | 8 +- ...back-dtest_with_slow_query_appender_invalid.xml | 8 +- test/conf/logback-dtest_with_vtable_appender.xml | 8 +- .../logback-dtest_with_vtable_appender_invalid.xml | 8 +- test/conf/logback-jmh.xml | 7 +- test/conf/logback-simulator.xml | 6 +- test/conf/logback-test.xml | 6 +- .../validation/operations/AggregationTest.java | 127 ++++++--------------- 20 files changed, 98 insertions(+), 161 deletions(-) diff --git a/.build/parent-pom-template.xml b/.build/parent-pom-template.xml index 2bb3c26927..714f18b8e5 100644 --- a/.build/parent-pom-template.xml +++ b/.build/parent-pom-template.xml @@ -403,27 +403,27 @@ <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> - <version>1.7.36</version> + <version>2.0.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> - <version>1.7.36</version> + <version>2.0.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> - <version>1.7.36</version> + <version>2.0.17</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> - <version>1.2.12</version> + <version>1.5.18</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> - <version>1.2.12</version> + <version>1.5.18</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> diff --git a/CHANGES.txt b/CHANGES.txt index f076f8a5d1..4fa6658839 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 5.1 + * Upgrade logback version to 1.5.18 and slf4j dependencies to 2.0.17 (CASSANDRA-20429) * Switch memtable-related off-heap objects to Native Endian and Memory to Little Endian (CASSANDRA-20190) * Change SSTableSimpleScanner to use SSTableReader#openDataReaderForScan (CASSANDRA-20538) * Automated Repair Inside Cassandra [CEP-37] (CASSANDRA-19918) diff --git a/conf/logback.xml b/conf/logback.xml index a8dabf6564..4855433b99 100644 --- a/conf/logback.xml +++ b/conf/logback.xml @@ -23,8 +23,6 @@ appender reference in the root level section below. --> <configuration scan="true" scanPeriod="60 seconds"> - <jmxConfigurator /> - <!-- No shutdown hook; we run it ourselves in StorageService after shutdown --> <!-- SYSTEMLOG rolling file appender to system.log (INFO level) --> @@ -43,7 +41,7 @@ appender reference in the root level section below. <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> @@ -60,7 +58,7 @@ appender reference in the root level section below. <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> @@ -80,7 +78,7 @@ appender reference in the root level section below. <level>INFO</level> </filter> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> @@ -98,7 +96,7 @@ appender reference in the root level section below. <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> --> diff --git a/doc/modules/cassandra/pages/managing/configuration/cass_logback_xml_file.adoc b/doc/modules/cassandra/pages/managing/configuration/cass_logback_xml_file.adoc index b6e4d5f545..73cae5b545 100644 --- a/doc/modules/cassandra/pages/managing/configuration/cass_logback_xml_file.adoc +++ b/doc/modules/cassandra/pages/managing/configuration/cass_logback_xml_file.adoc @@ -76,8 +76,8 @@ the rolling policy. Specify the format of the message. Part of the rolling policy. -*Example:* <maxHistory>7</maxHistory> *Example:* <encoder> -<pattern>%-5level [%thread] %date\{ISO8601} %F:%L - %msg%n</pattern> +*Example:* <encoder> +<pattern>%-5level [%thread] %date\{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> === Logging system logs to Cassandra virtual table @@ -172,7 +172,6 @@ A reader noticed that by placing custom appender implementation of `SLOW_QUERIES [source,XML] ---- <configuration scan="true" scanPeriod="60 seconds"> - <jmxConfigurator /> <!-- No shutdown hook; we run it ourselves in StorageService after shutdown --> @@ -192,7 +191,7 @@ A reader noticed that by placing custom appender implementation of `SLOW_QUERIES <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> @@ -209,7 +208,7 @@ A reader noticed that by placing custom appender implementation of `SLOW_QUERIES <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> @@ -229,7 +228,7 @@ A reader noticed that by placing custom appender implementation of `SLOW_QUERIES <level>INFO</level> </filter> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> diff --git a/doc/modules/cassandra/pages/managing/operating/audit_logging.adoc b/doc/modules/cassandra/pages/managing/operating/audit_logging.adoc index 63f4ba1a11..c50c9785dc 100644 --- a/doc/modules/cassandra/pages/managing/operating/audit_logging.adoc +++ b/doc/modules/cassandra/pages/managing/operating/audit_logging.adoc @@ -213,7 +213,7 @@ the audit log events to flow through separate log file instead of system.log. <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> diff --git a/ide/nbproject/project.xml b/ide/nbproject/project.xml index 0a000a9ab6..f770d1e68d 100644 --- a/ide/nbproject/project.xml +++ b/ide/nbproject/project.xml @@ -8,7 +8,7 @@ <property name="project.dir">..</property> <!-- the compile classpaths should be distinct per compilation unit… but it is kept simple and the build will catch errors --> <!-- DO NOT EDIT THE FOLLOWING LINE DIRECTLY: Use the update-netbeans-classpath.sh script --> - <property name="cassandra.classpath.jars">${project.dir}/build/lib/jars/AmazonCorrettoCryptoProvider-2.2.0-linux-aarch_64.jar:${project.dir}/build/lib/jars/HdrHistogram-2.1.12.jar:${project.dir}/build/lib/jars/ST4-4.0.8.jar:${project.dir}/build/lib/jars/affinity-3.23.3.jar:${project.dir}/build/lib/jars/agrona-1.17.1.jar:${project.dir}/build/lib/jars/airline-0.8.jar:${project.dir}/build/lib/jars/antlr-3.5.2.jar:${project.dir}/build/lib/jars/antlr-runtime-3.5.2.jar:${projec [...] + <property name="cassandra.classpath.jars">${project.dir}/build/lib/jars/AmazonCorrettoCryptoProvider-2.2.0-linux-aarch_64.jar:${project.dir}/build/lib/jars/HdrHistogram-2.1.12.jar:${project.dir}/build/lib/jars/ST4-4.0.8.jar:${project.dir}/build/lib/jars/affinity-3.23.3.jar:${project.dir}/build/lib/jars/agrona-1.17.1.jar:${project.dir}/build/lib/jars/airline-0.8.jar:${project.dir}/build/lib/jars/antlr-3.5.2.jar:${project.dir}/build/lib/jars/antlr-runtime-3.5.2.jar:${projec [...] </properties> <folders> <source-folder> diff --git a/src/java/org/apache/cassandra/service/StorageServiceMBean.java b/src/java/org/apache/cassandra/service/StorageServiceMBean.java index e188595aa3..5d4781c546 100644 --- a/src/java/org/apache/cassandra/service/StorageServiceMBean.java +++ b/src/java/org/apache/cassandra/service/StorageServiceMBean.java @@ -586,7 +586,6 @@ public interface StorageServiceMBean extends NotificationEmitter * If classQualifer is not empty but level is empty/null, it will set the level to null for the defined classQualifer<br> * If level cannot be parsed, then the level will be defaulted to DEBUG<br> * <br> - * The logback configuration should have {@code < jmxConfigurator />} set * * @param classQualifier The logger's classQualifer * @param level The log level diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java index 478fc0e55a..62d2d164c6 100644 --- a/src/java/org/apache/cassandra/tools/NodeProbe.java +++ b/src/java/org/apache/cassandra/tools/NodeProbe.java @@ -2363,7 +2363,7 @@ public class NodeProbe implements AutoCloseable } catch (Exception e) { - throw new RuntimeException("Error setting log for " + classQualifier + " on level " + level + ". Please check logback configuration and ensure to have <jmxConfigurator /> set", e); + throw new RuntimeException("Error setting log for " + classQualifier + " on level " + level + ". Please check logback configuration.", e); } } diff --git a/src/java/org/apache/cassandra/utils/logging/LogbackLoggingSupport.java b/src/java/org/apache/cassandra/utils/logging/LogbackLoggingSupport.java index f32963b73a..d8f83116bb 100644 --- a/src/java/org/apache/cassandra/utils/logging/LogbackLoggingSupport.java +++ b/src/java/org/apache/cassandra/utils/logging/LogbackLoggingSupport.java @@ -18,7 +18,6 @@ package org.apache.cassandra.utils.logging; -import java.lang.management.ManagementFactory; import java.security.AccessControlException; import java.util.ArrayList; import java.util.Iterator; @@ -26,25 +25,21 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.management.JMX; -import javax.management.ObjectName; - -import org.apache.cassandra.security.ThreadAwareSecurityManager; +import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.slf4j.LoggerFactory; -import com.google.common.collect.Maps; - import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.jmx.JMXConfiguratorMBean; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.TurboFilterList; import ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter; import ch.qos.logback.classic.turbo.TurboFilter; +import ch.qos.logback.classic.util.ContextInitializer; import ch.qos.logback.core.Appender; -import ch.qos.logback.core.hook.DelayingShutdownHook; +import ch.qos.logback.core.hook.DefaultShutdownHook; +import org.apache.cassandra.security.ThreadAwareSecurityManager; /** * Encapsulates all logback-specific implementations in a central place. @@ -93,7 +88,7 @@ public class LogbackLoggingSupport implements LoggingSupport @Override public void onShutdown() { - DelayingShutdownHook logbackHook = new DelayingShutdownHook(); + DefaultShutdownHook logbackHook = new DefaultShutdownHook(); logbackHook.setContext((LoggerContext) LoggerFactory.getILoggerFactory()); logbackHook.run(); } @@ -106,10 +101,9 @@ public class LogbackLoggingSupport implements LoggingSupport // if both classQualifier and rawLevel are empty, reload from configuration if (StringUtils.isBlank(classQualifier) && StringUtils.isBlank(rawLevel)) { - JMXConfiguratorMBean jmxConfiguratorMBean = JMX.newMBeanProxy(ManagementFactory.getPlatformMBeanServer(), - new ObjectName("ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator"), - JMXConfiguratorMBean.class); - jmxConfiguratorMBean.reloadDefaultConfiguration(); + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + lc.reset(); + new ContextInitializer(lc).autoConfig(); return; } // classQualifier is set, but blank level given diff --git a/test/conf/logback-burntest.xml b/test/conf/logback-burntest.xml index 3aada72e8f..f2ade83f2e 100644 --- a/test/conf/logback-burntest.xml +++ b/test/conf/logback-burntest.xml @@ -20,7 +20,7 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" /> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> @@ -36,7 +36,7 @@ </triggeringPolicy> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <immediateFlush>false</immediateFlush> </appender> @@ -51,7 +51,7 @@ <appender name="STDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="org.apache.cassandra.net.LogbackFilter"/> </appender> diff --git a/test/conf/logback-dtest-quiet.xml b/test/conf/logback-dtest-quiet.xml index bb9f983177..8f1f1f15fd 100644 --- a/test/conf/logback-dtest-quiet.xml +++ b/test/conf/logback-dtest-quiet.xml @@ -22,12 +22,12 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" /> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/${cassandra.testtag}/${suitename}/${cluster_id}/${instance_id}/system.log</file> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> @@ -37,7 +37,7 @@ <appender name="INSTANCESTDERR" target="System.err" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level %date{HH:mm:ss,SSS} %msg%n</pattern> + <pattern>%-5level %date{"HH:mm:ss,SSS"} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> diff --git a/test/conf/logback-dtest.xml b/test/conf/logback-dtest.xml index d854f8c771..22d2e9faa4 100644 --- a/test/conf/logback-dtest.xml +++ b/test/conf/logback-dtest.xml @@ -22,19 +22,19 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" /> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/${cassandra.testtag}/${suitename}/${cluster_id}/${instance_id}/system.log</file> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <immediateFlush>true</immediateFlush> </appender> <appender name="INSTANCESTDERR" target="System.err" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level %date{HH:mm:ss,SSS} %msg%n</pattern> + <pattern>%-5level %date{"HH:mm:ss,SSS"} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> @@ -43,7 +43,7 @@ <appender name="INSTANCESTDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> diff --git a/test/conf/logback-dtest_with_slow_query_appender.xml b/test/conf/logback-dtest_with_slow_query_appender.xml index 1b6ed7511f..62d112d800 100644 --- a/test/conf/logback-dtest_with_slow_query_appender.xml +++ b/test/conf/logback-dtest_with_slow_query_appender.xml @@ -21,19 +21,19 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" /> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/${cassandra.testtag}/${suitename}/${cluster_id}/${instance_id}/system.log</file> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <immediateFlush>true</immediateFlush> </appender> <appender name="INSTANCESTDERR" target="System.err" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level %date{HH:mm:ss,SSS} %msg%n</pattern> + <pattern>%-5level %date{"HH:mm:ss,SSS"} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> @@ -42,7 +42,7 @@ <appender name="INSTANCESTDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> diff --git a/test/conf/logback-dtest_with_slow_query_appender_invalid.xml b/test/conf/logback-dtest_with_slow_query_appender_invalid.xml index a2252dd23a..1f7f58e861 100644 --- a/test/conf/logback-dtest_with_slow_query_appender_invalid.xml +++ b/test/conf/logback-dtest_with_slow_query_appender_invalid.xml @@ -21,19 +21,19 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" /> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/${cassandra.testtag}/${suitename}/${cluster_id}/${instance_id}/system.log</file> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <immediateFlush>true</immediateFlush> </appender> <appender name="INSTANCESTDERR" target="System.err" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level %date{HH:mm:ss,SSS} %msg%n</pattern> + <pattern>%-5level %date{"HH:mm:ss,SSS"} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> @@ -42,7 +42,7 @@ <appender name="INSTANCESTDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> diff --git a/test/conf/logback-dtest_with_vtable_appender.xml b/test/conf/logback-dtest_with_vtable_appender.xml index c9fd108c77..726c46d524 100644 --- a/test/conf/logback-dtest_with_vtable_appender.xml +++ b/test/conf/logback-dtest_with_vtable_appender.xml @@ -21,19 +21,19 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" /> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/${cassandra.testtag}/${suitename}/${cluster_id}/${instance_id}/system.log</file> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <immediateFlush>true</immediateFlush> </appender> <appender name="INSTANCESTDERR" target="System.err" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level %date{HH:mm:ss,SSS} %msg%n</pattern> + <pattern>%-5level %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> @@ -42,7 +42,7 @@ <appender name="INSTANCESTDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> diff --git a/test/conf/logback-dtest_with_vtable_appender_invalid.xml b/test/conf/logback-dtest_with_vtable_appender_invalid.xml index 1b30c141c2..257f857534 100644 --- a/test/conf/logback-dtest_with_vtable_appender_invalid.xml +++ b/test/conf/logback-dtest_with_vtable_appender_invalid.xml @@ -21,19 +21,19 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" /> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/${cassandra.testtag}/${suitename}/${cluster_id}/${instance_id}/system.log</file> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <immediateFlush>true</immediateFlush> </appender> <appender name="INSTANCESTDERR" target="System.err" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level %date{HH:mm:ss,SSS} %msg%n</pattern> + <pattern>%-5level %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> @@ -42,7 +42,7 @@ <appender name="INSTANCESTDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] ${instance_id} %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> diff --git a/test/conf/logback-jmh.xml b/test/conf/logback-jmh.xml index 4138f19c72..1f9bb3fd1b 100644 --- a/test/conf/logback-jmh.xml +++ b/test/conf/logback-jmh.xml @@ -23,7 +23,6 @@ appender reference in the root level section below. --> <configuration scan="false" scanPeriod="60 seconds"> - <jmxConfigurator /> <!-- No shutdown hook; we run it ourselves in StorageService after shutdown --> <!-- SYSTEMLOG rolling file appender to system.log (INFO level) --> @@ -42,7 +41,7 @@ appender reference in the root level section below. <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> @@ -59,7 +58,7 @@ appender reference in the root level section below. <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender> @@ -79,7 +78,7 @@ appender reference in the root level section below. <level>INFO</level> </filter> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> </appender--> diff --git a/test/conf/logback-simulator.xml b/test/conf/logback-simulator.xml index fe823383ee..87d2ae327b 100644 --- a/test/conf/logback-simulator.xml +++ b/test/conf/logback-simulator.xml @@ -23,7 +23,7 @@ <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner"/> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <appender name="HISTORYLOG" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/simulator/${run_start}-${run_seed}/history.log</file> @@ -41,14 +41,14 @@ <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender"> <file>./build/test/logs/simulator/${run_start}-${run_seed}/cluster-${cluster_id}/${instance_id}/system.log</file> <encoder> - <pattern>%-5level [%thread] ${instance_id} %replace(CS:%X{command_store} ){'CS\:\s+', ''}%replace(OP:%X{async_op} ){'OP\:\s+', ''}%date{ISO8601} %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %replace(CS:%X{command_store} ){'CS\:\s+', ''}%replace(OP:%X{async_op} ){'OP\:\s+', ''}%date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <immediateFlush>true</immediateFlush> </appender> <appender name="STDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] ${instance_id} %replace(CS:%X{command_store} ){'CS\:\s+', ''}%replace(OP:%X{async_op} ){'OP\:\s+', ''}%date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] ${instance_id} %replace(CS:%X{command_store} ){'CS\:\s+', ''}%replace(OP:%X{async_op} ){'OP\:\s+', ''}%date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> diff --git a/test/conf/logback-test.xml b/test/conf/logback-test.xml index 3e3349fd82..757806e35f 100644 --- a/test/conf/logback-test.xml +++ b/test/conf/logback-test.xml @@ -19,7 +19,7 @@ <configuration debug="false" scan="true" scanPeriod="60 seconds"> <!-- Shutdown hook ensures that async appender flushes --> - <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> + <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/> <!-- Status listener is used to wrap stdout/stderr and tee to log file --> <statusListener class="org.apache.cassandra.LogbackStatusListener" /> @@ -38,14 +38,14 @@ </triggeringPolicy> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern> </encoder> <immediateFlush>false</immediateFlush> </appender> <appender name="STDOUT" target="System.out" class="org.apache.cassandra.ConsoleAppender"> <encoder> - <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> + <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java index 24afbb7e80..72bbc53b76 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java @@ -31,18 +31,8 @@ import java.util.TimeZone; import java.util.concurrent.ThreadLocalRandom; import org.apache.commons.lang3.time.DateUtils; - import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.joran.ReconfigureOnChangeTask; -import ch.qos.logback.classic.spi.TurboFilterList; -import ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter; -import ch.qos.logback.classic.turbo.TurboFilter; -import org.apache.cassandra.schema.SchemaConstants; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.cql3.QueryProcessor; import org.apache.cassandra.cql3.UntypedResultSet; @@ -51,13 +41,13 @@ import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.TypeParser; import org.apache.cassandra.exceptions.FunctionExecutionException; import org.apache.cassandra.exceptions.InvalidRequestException; +import org.apache.cassandra.schema.SchemaConstants; import org.apache.cassandra.service.ClientState; import org.apache.cassandra.transport.Event.SchemaChange.Change; import org.apache.cassandra.transport.Event.SchemaChange.Target; import org.apache.cassandra.transport.ProtocolVersion; import org.apache.cassandra.transport.messages.ResultMessage; -import static ch.qos.logback.core.CoreConstants.RECONFIGURE_ON_CHANGE_TASK; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -1893,91 +1883,48 @@ public class AggregationTest extends CQLTester { // see https://issues.apache.org/jira/browse/CASSANDRA-11033 - // make logback's scan interval 1ms - boilerplate, but necessary for this test - configureLogbackScanPeriod(1L); - try - { - - createTable("CREATE TABLE %s (" + - " year int PRIMARY KEY," + - " country text," + - " title text)"); - - String[] countries = Locale.getISOCountries(); - ThreadLocalRandom rand = ThreadLocalRandom.current(); - for (int i = 0; i < 10000; i++) - { - execute("INSERT INTO %s (year, country, title) VALUES (1980,?,?)", - countries[rand.nextInt(countries.length)], - "title-" + i); - } - - String albumCountByCountry = createFunction(KEYSPACE, - "map<text,bigint>,text,text", - "CREATE FUNCTION IF NOT EXISTS %s(state map<text,bigint>,country text, album_title text)\n" + - " RETURNS NULL ON NULL INPUT\n" + - " RETURNS map<text,bigint>\n" + - " LANGUAGE java\n" + - " AS $$\n" + - " if(state.containsKey(country)) {\n" + - " Long newCount = (Long)state.get(country) + 1;\n" + - " state.put(country, newCount);\n" + - " } else {\n" + - " state.put(country, 1L);\n" + - " }\n" + - " return state;\n" + - " $$;"); - - String releasesByCountry = createAggregate(KEYSPACE, - "text, text", - " CREATE AGGREGATE IF NOT EXISTS %s(text, text)\n" + - " SFUNC " + shortFunctionName(albumCountByCountry) + '\n' + - " STYPE map<text,bigint>\n" + - " INITCOND { };"); - - long tEnd = System.currentTimeMillis() + 150; - while (System.currentTimeMillis() < tEnd) - { - execute("SELECT " + releasesByCountry + "(country,title) FROM %s WHERE year=1980"); - } - } - finally - { - configureLogbackScanPeriod(60000L); - } - } + createTable("CREATE TABLE %s (" + + " year int PRIMARY KEY," + + " country text," + + " title text)"); - private static void configureLogbackScanPeriod(long millis) - { - Logger l = LoggerFactory.getLogger(AggregationTest.class); - ch.qos.logback.classic.Logger logbackLogger = (ch.qos.logback.classic.Logger) l; - LoggerContext ctx = logbackLogger.getLoggerContext(); - TurboFilterList turboFilterList = ctx.getTurboFilterList(); - boolean done = false; - for (TurboFilter turboFilter : turboFilterList) + String[] countries = Locale.getISOCountries(); + ThreadLocalRandom rand = ThreadLocalRandom.current(); + for (int i = 0; i < 10000; i++) { - if (turboFilter instanceof ReconfigureOnChangeFilter) - { - ReconfigureOnChangeFilter reconfigureFilter = (ReconfigureOnChangeFilter) turboFilter; - reconfigureFilter.setContext(ctx); - reconfigureFilter.setRefreshPeriod(millis); - reconfigureFilter.stop(); - reconfigureFilter.start(); // start() sets the next check timestammp - done = true; - break; - } + execute("INSERT INTO %s (year, country, title) VALUES (1980,?,?)", + countries[rand.nextInt(countries.length)], + "title-" + i); } - ReconfigureOnChangeTask roct = (ReconfigureOnChangeTask) ctx.getObject(RECONFIGURE_ON_CHANGE_TASK); - if (roct != null) + String albumCountByCountry = createFunction(KEYSPACE, + "map<text,bigint>,text,text", + "CREATE FUNCTION IF NOT EXISTS %s(state map<text,bigint>,country text, album_title text)\n" + + " RETURNS NULL ON NULL INPUT\n" + + " RETURNS map<text,bigint>\n" + + " LANGUAGE java\n" + + " AS $$\n" + + " if(state.containsKey(country)) {\n" + + " Long newCount = (Long)state.get(country) + 1;\n" + + " state.put(country, newCount);\n" + + " } else {\n" + + " state.put(country, 1L);\n" + + " }\n" + + " return state;\n" + + " $$;"); + + String releasesByCountry = createAggregate(KEYSPACE, + "text, text", + " CREATE AGGREGATE IF NOT EXISTS %s(text, text)\n" + + " SFUNC " + shortFunctionName(albumCountByCountry) + '\n' + + " STYPE map<text,bigint>\n" + + " INITCOND { };"); + + long tEnd = System.currentTimeMillis() + 150; + while (System.currentTimeMillis() < tEnd) { - // New functionality in logback - they replaced ReconfigureOnChangeFilter (which runs in the logging code) - // with an async ReconfigureOnChangeTask - i.e. in a thread that does not become sandboxed. - // Let the test run anyway, just we cannot reconfigure it (and it is pointless to reconfigure). - return; + execute("SELECT " + releasesByCountry + "(country,title) FROM %s WHERE year=1980"); } - - assertTrue("ReconfigureOnChangeFilter not in logback's turbo-filter list - do that by adding scan=\"true\" to logback-test.xml's configuration element", done); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org