Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 692551830A for ; Fri, 19 Feb 2016 09:35:43 +0000 (UTC) Received: (qmail 14335 invoked by uid 500); 19 Feb 2016 09:35:27 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 14056 invoked by uid 500); 19 Feb 2016 09:35:27 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 13780 invoked by uid 99); 19 Feb 2016 09:35:27 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 19 Feb 2016 09:35:27 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id AF1A1E04BE; Fri, 19 Feb 2016 09:35:26 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: snazy@apache.org To: commits@cassandra.apache.org Date: Fri, 19 Feb 2016 09:35:27 -0000 Message-Id: <04273473597b411c94f96480e4ecdf67@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [2/3] cassandra git commit: Prevent logging in sandboxed state Prevent logging in sandboxed state patch by Robert Stupp; reviewed by Tyler Hobbs for CASSANDRA-11033 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a76a8efc Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a76a8efc Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a76a8efc Branch: refs/heads/trunk Commit: a76a8efcc7665068434fc105e174e22ede0ee5be Parents: 6503335 Author: Robert Stupp Authored: Fri Feb 19 10:28:30 2016 +0100 Committer: Robert Stupp Committed: Fri Feb 19 10:28:30 2016 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cql3/functions/JavaBasedUDFunction.java | 14 +-- .../cassandra/cql3/functions/JavaUDF.java | 30 +++---- .../cql3/functions/ScriptBasedUDFunction.java | 2 +- .../cql3/functions/UDFByteCodeVerifier.java | 4 +- .../cassandra/cql3/functions/UDFunction.java | 31 +++---- .../cassandra/cql3/functions/UDHelper.java | 27 +++--- .../cassandra/cql3/functions/JavaSourceUDF.txt | 6 +- test/conf/logback-test.xml | 2 +- .../entities/udfverify/CallClone.java | 4 +- .../entities/udfverify/CallComDatastax.java | 4 +- .../entities/udfverify/CallFinalize.java | 4 +- .../entities/udfverify/CallOrgApache.java | 4 +- .../entities/udfverify/ClassWithField.java | 4 +- .../udfverify/ClassWithInitializer.java | 4 +- .../udfverify/ClassWithInitializer2.java | 4 +- .../udfverify/ClassWithInitializer3.java | 4 +- .../udfverify/ClassWithStaticInitializer.java | 4 +- .../entities/udfverify/GoodClass.java | 4 +- .../entities/udfverify/UseOfSynchronized.java | 4 +- .../udfverify/UseOfSynchronizedWithNotify.java | 4 +- .../UseOfSynchronizedWithNotifyAll.java | 4 +- .../udfverify/UseOfSynchronizedWithWait.java | 4 +- .../udfverify/UseOfSynchronizedWithWaitL.java | 4 +- .../udfverify/UseOfSynchronizedWithWaitLI.java | 4 +- .../validation/operations/AggregationTest.java | 89 ++++++++++++++++++++ 26 files changed, 184 insertions(+), 86 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 275bc04..ae9d545 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.4 + * Prevent logging in sandboxed state (CASSANDRA-11033) * Disallow drop/alter operations of UDTs used by UDAs (CASSANDRA-10721) * Add query time validation method on Index (CASSANDRA-11043) * Avoid potential AssertionError in mixed version cluster (CASSANDRA-11128) http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java b/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java index c61e72e..660d494 100644 --- a/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java +++ b/src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java @@ -40,7 +40,7 @@ import com.google.common.io.ByteStreams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.concurrent.NamedThreadFactory; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.db.marshal.AbstractType; @@ -184,10 +184,10 @@ final class JavaBasedUDFunction extends UDFunction super(name, argNames, argTypes, UDHelper.driverTypes(argTypes), returnType, UDHelper.driverType(returnType), calledOnNullInput, "java", body); - // javaParamTypes is just the Java representation for argTypes resp. argDataTypes - Class[] javaParamTypes = UDHelper.javaTypes(argDataTypes, calledOnNullInput); - // javaReturnType is just the Java representation for returnType resp. returnDataType - Class javaReturnType = UDHelper.asJavaClass(returnDataType); + // javaParamTypes is just the Java representation for argTypes resp. argCodecs + Class[] javaParamTypes = UDHelper.javaTypes(argCodecs, calledOnNullInput); + // javaReturnType is just the Java representation for returnType resp. returnCodec + Class javaReturnType = UDHelper.asJavaClass(returnCodec); // put each UDF in a separate package to prevent cross-UDF code access String pkgName = BASE_PACKAGE + '.' + generateClassName(name, 'p'); @@ -327,9 +327,9 @@ final class JavaBasedUDFunction extends UDFunction if (nonSyntheticMethodCount != 2 || cls.getDeclaredConstructors().length != 1) throw new InvalidRequestException("Check your source to not define additional Java methods or constructors"); MethodType methodType = MethodType.methodType(void.class) - .appendParameterTypes(DataType.class, DataType[].class); + .appendParameterTypes(TypeCodec.class, TypeCodec[].class); MethodHandle ctor = MethodHandles.lookup().findConstructor(cls, methodType); - this.javaUDF = (JavaUDF) ctor.invokeWithArguments(returnDataType, argDataTypes); + this.javaUDF = (JavaUDF) ctor.invokeWithArguments(returnCodec, argCodecs); } finally { http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/src/java/org/apache/cassandra/cql3/functions/JavaUDF.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/JavaUDF.java b/src/java/org/apache/cassandra/cql3/functions/JavaUDF.java index 47f5d47..fcfd21c 100644 --- a/src/java/org/apache/cassandra/cql3/functions/JavaUDF.java +++ b/src/java/org/apache/cassandra/cql3/functions/JavaUDF.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.functions; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; /** * Base class for all Java UDFs. @@ -31,73 +31,73 @@ import com.datastax.driver.core.DataType; */ public abstract class JavaUDF { - private final DataType returnDataType; - private final DataType[] argDataTypes; + private final TypeCodec returnCodec; + private final TypeCodec[] argCodecs; - protected JavaUDF(DataType returnDataType, DataType[] argDataTypes) + protected JavaUDF(TypeCodec returnCodec, TypeCodec[] argCodecs) { - this.returnDataType = returnDataType; - this.argDataTypes = argDataTypes; + this.returnCodec = returnCodec; + this.argCodecs = argCodecs; } protected abstract ByteBuffer executeImpl(int protocolVersion, List params); protected Object compose(int protocolVersion, int argIndex, ByteBuffer value) { - return UDFunction.compose(argDataTypes, protocolVersion, argIndex, value); + return UDFunction.compose(argCodecs, protocolVersion, argIndex, value); } protected ByteBuffer decompose(int protocolVersion, Object value) { - return UDFunction.decompose(returnDataType, protocolVersion, value); + return UDFunction.decompose(returnCodec, protocolVersion, value); } // do not remove - used by generated Java UDFs protected float compose_float(int protocolVersion, int argIndex, ByteBuffer value) { assert value != null && value.remaining() > 0; - return (float) UDHelper.deserialize(DataType.cfloat(), protocolVersion, value); + return (float) UDHelper.deserialize(TypeCodec.cfloat(), protocolVersion, value); } // do not remove - used by generated Java UDFs protected double compose_double(int protocolVersion, int argIndex, ByteBuffer value) { assert value != null && value.remaining() > 0; - return (double) UDHelper.deserialize(DataType.cdouble(), protocolVersion, value); + return (double) UDHelper.deserialize(TypeCodec.cdouble(), protocolVersion, value); } // do not remove - used by generated Java UDFs protected byte compose_byte(int protocolVersion, int argIndex, ByteBuffer value) { assert value != null && value.remaining() > 0; - return (byte) UDHelper.deserialize(DataType.tinyint(), protocolVersion, value); + return (byte) UDHelper.deserialize(TypeCodec.tinyInt(), protocolVersion, value); } // do not remove - used by generated Java UDFs protected short compose_short(int protocolVersion, int argIndex, ByteBuffer value) { assert value != null && value.remaining() > 0; - return (short) UDHelper.deserialize(DataType.smallint(), protocolVersion, value); + return (short) UDHelper.deserialize(TypeCodec.smallInt(), protocolVersion, value); } // do not remove - used by generated Java UDFs protected int compose_int(int protocolVersion, int argIndex, ByteBuffer value) { assert value != null && value.remaining() > 0; - return (int) UDHelper.deserialize(DataType.cint(), protocolVersion, value); + return (int) UDHelper.deserialize(TypeCodec.cint(), protocolVersion, value); } // do not remove - used by generated Java UDFs protected long compose_long(int protocolVersion, int argIndex, ByteBuffer value) { assert value != null && value.remaining() > 0; - return (long) UDHelper.deserialize(DataType.bigint(), protocolVersion, value); + return (long) UDHelper.deserialize(TypeCodec.bigint(), protocolVersion, value); } // do not remove - used by generated Java UDFs protected boolean compose_boolean(int protocolVersion, int argIndex, ByteBuffer value) { assert value != null && value.remaining() > 0; - return (boolean) UDHelper.deserialize(DataType.cboolean(), protocolVersion, value); + return (boolean) UDHelper.deserialize(TypeCodec.cboolean(), protocolVersion, value); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java b/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java index 4ffb992..8743a20 100644 --- a/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java +++ b/src/java/org/apache/cassandra/cql3/functions/ScriptBasedUDFunction.java @@ -189,7 +189,7 @@ final class ScriptBasedUDFunction extends UDFunction if (result == null) return null; - Class javaReturnType = UDHelper.asJavaClass(returnDataType); + Class javaReturnType = UDHelper.asJavaClass(returnCodec); Class resultType = result.getClass(); if (!javaReturnType.isAssignableFrom(resultType)) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/src/java/org/apache/cassandra/cql3/functions/UDFByteCodeVerifier.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/UDFByteCodeVerifier.java b/src/java/org/apache/cassandra/cql3/functions/UDFByteCodeVerifier.java index 59cef70..1314af3 100644 --- a/src/java/org/apache/cassandra/cql3/functions/UDFByteCodeVerifier.java +++ b/src/java/org/apache/cassandra/cql3/functions/UDFByteCodeVerifier.java @@ -47,7 +47,7 @@ public final class UDFByteCodeVerifier public static final String JAVA_UDF_NAME = JavaUDF.class.getName().replace('.', '/'); public static final String OBJECT_NAME = Object.class.getName().replace('.', '/'); - public static final String CTOR_SIG = "(Lcom/datastax/driver/core/DataType;[Lcom/datastax/driver/core/DataType;)V"; + public static final String CTOR_SIG = "(Lcom/datastax/driver/core/TypeCodec;[Lcom/datastax/driver/core/TypeCodec;)V"; private final Set disallowedClasses = new HashSet<>(); private final Multimap disallowedMethodCalls = HashMultimap.create(); @@ -97,7 +97,7 @@ public final class UDFByteCodeVerifier { if (Opcodes.ACC_PUBLIC != access) errors.add("constructor not public"); - // allowed constructor - JavaUDF(DataType returnDataType, DataType[] argDataTypes) + // allowed constructor - JavaUDF(TypeCodec returnCodec, TypeCodec[] argCodecs) return new ConstructorVisitor(errors); } if ("executeImpl".equals(name) && "(ILjava/util/List;)Ljava/nio/ByteBuffer;".equals(desc)) http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/src/java/org/apache/cassandra/cql3/functions/UDFunction.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/UDFunction.java b/src/java/org/apache/cassandra/cql3/functions/UDFunction.java index fa0d306..7b69342 100644 --- a/src/java/org/apache/cassandra/cql3/functions/UDFunction.java +++ b/src/java/org/apache/cassandra/cql3/functions/UDFunction.java @@ -40,6 +40,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import com.datastax.driver.core.UserType; import org.apache.cassandra.config.Config; import org.apache.cassandra.config.DatabaseDescriptor; @@ -70,8 +71,8 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct protected final String language; protected final String body; - protected final DataType[] argDataTypes; - protected final DataType returnDataType; + protected final TypeCodec[] argCodecs; + protected final TypeCodec returnCodec; protected final boolean calledOnNullInput; // @@ -202,8 +203,8 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct this.argNames = argNames; this.language = language; this.body = body; - this.argDataTypes = argDataTypes; - this.returnDataType = returnDataType; + this.argCodecs = UDHelper.codecsFor(argDataTypes); + this.returnCodec = UDHelper.codecFor(returnDataType); this.calledOnNullInput = calledOnNullInput; } @@ -306,8 +307,8 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct { // Get the TypeCodec stuff in Java Driver initialized. // This is to get the classes loaded outside of the restricted sandbox's security context of a UDF. - UDHelper.codecFor(DataType.inet()).format(InetAddress.getLoopbackAddress()); - UDHelper.codecFor(DataType.ascii()).format(""); + TypeCodec.inet().format(InetAddress.getLoopbackAddress()); + TypeCodec.ascii().format(""); } private static final class ThreadIdAndCpuTime extends CompletableFuture @@ -478,12 +479,12 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct */ protected Object compose(int protocolVersion, int argIndex, ByteBuffer value) { - return compose(argDataTypes, protocolVersion, argIndex, value); + return compose(argCodecs, protocolVersion, argIndex, value); } - protected static Object compose(DataType[] argDataTypes, int protocolVersion, int argIndex, ByteBuffer value) + protected static Object compose(TypeCodec[] codecs, int protocolVersion, int argIndex, ByteBuffer value) { - return value == null ? null : UDHelper.deserialize(argDataTypes[argIndex], protocolVersion, value); + return value == null ? null : UDHelper.deserialize(codecs[argIndex], protocolVersion, value); } /** @@ -495,12 +496,12 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct */ protected ByteBuffer decompose(int protocolVersion, Object value) { - return decompose(returnDataType, protocolVersion, value); + return decompose(returnCodec, protocolVersion, value); } - protected static ByteBuffer decompose(DataType dataType, int protocolVersion, Object value) + protected static ByteBuffer decompose(TypeCodec codec, int protocolVersion, Object value) { - return value == null ? null : UDHelper.serialize(dataType, protocolVersion, value); + return value == null ? null : UDHelper.serialize(codec, protocolVersion, value); } @Override @@ -528,9 +529,9 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct { boolean updated = false; - for (int i = 0; i < argDataTypes.length; i++) + for (int i = 0; i < argCodecs.length; i++) { - DataType dataType = argDataTypes[i]; + DataType dataType = argCodecs[i].getCqlType(); if (dataType instanceof UserType) { UserType userType = (UserType) dataType; @@ -542,7 +543,7 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct org.apache.cassandra.db.marshal.UserType ut = ksm.types.get(ByteBufferUtil.bytes(typeName)).get(); DataType newUserType = UDHelper.driverType(ut); - argDataTypes[i] = newUserType; + argCodecs[i] = UDHelper.codecFor(newUserType); argTypes.set(i, ut); http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/src/java/org/apache/cassandra/cql3/functions/UDHelper.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/functions/UDHelper.java b/src/java/org/apache/cassandra/cql3/functions/UDHelper.java index cc62c84..45c734f 100644 --- a/src/java/org/apache/cassandra/cql3/functions/UDHelper.java +++ b/src/java/org/apache/cassandra/cql3/functions/UDHelper.java @@ -56,6 +56,14 @@ public final class UDHelper } } + static TypeCodec[] codecsFor(DataType[] dataType) + { + TypeCodec[] codecs = new TypeCodec[dataType.length]; + for (int i = 0; i < dataType.length; i++) + codecs[i] = codecFor(dataType[i]); + return codecs; + } + static TypeCodec codecFor(DataType dataType) { return codecRegistry.codecFor(dataType); @@ -68,7 +76,7 @@ public final class UDHelper * @param calledOnNullInput whether to allow {@code null} as an argument value * @return array of same size with UDF arguments */ - public static Class[] javaTypes(DataType[] dataTypes, boolean calledOnNullInput) + public static Class[] javaTypes(TypeCodec[] dataTypes, boolean calledOnNullInput) { Class[] paramTypes = new Class[dataTypes.length]; for (int i = 0; i < paramTypes.length; i++) @@ -135,23 +143,22 @@ public final class UDHelper } } - public static Object deserialize(DataType dataType, int protocolVersion, ByteBuffer value) + public static Object deserialize(TypeCodec codec, int protocolVersion, ByteBuffer value) { - return codecFor(dataType).deserialize(value, ProtocolVersion.fromInt(protocolVersion)); + return codec.deserialize(value, ProtocolVersion.fromInt(protocolVersion)); } - public static ByteBuffer serialize(DataType dataType, int protocolVersion, Object value) + public static ByteBuffer serialize(TypeCodec codec, int protocolVersion, Object value) { - TypeCodec codec = codecFor(dataType); - if (! codec.getJavaType().getRawType().isAssignableFrom(value.getClass())) - throw new InvalidTypeException("Invalid value for CQL type " + dataType.getName().toString()); + if (!codec.getJavaType().getRawType().isAssignableFrom(value.getClass())) + throw new InvalidTypeException("Invalid value for CQL type " + codec.getCqlType().getName().toString()); - return codec.serialize(value, ProtocolVersion.fromInt(protocolVersion)); + return ((TypeCodec)codec).serialize(value, ProtocolVersion.fromInt(protocolVersion)); } - public static Class asJavaClass(DataType dataType) + public static Class asJavaClass(TypeCodec codec) { - return codecFor(dataType).getJavaType().getRawType(); + return codec.getJavaType().getRawType(); } public static boolean isNullOrEmpty(AbstractType type, ByteBuffer bb) http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/src/resources/org/apache/cassandra/cql3/functions/JavaSourceUDF.txt ---------------------------------------------------------------------- diff --git a/src/resources/org/apache/cassandra/cql3/functions/JavaSourceUDF.txt b/src/resources/org/apache/cassandra/cql3/functions/JavaSourceUDF.txt index e72b9c8..4bd3601 100644 --- a/src/resources/org/apache/cassandra/cql3/functions/JavaSourceUDF.txt +++ b/src/resources/org/apache/cassandra/cql3/functions/JavaSourceUDF.txt @@ -5,13 +5,13 @@ import java.util.List; import org.apache.cassandra.cql3.functions.JavaUDF; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; public final class #class_name# extends JavaUDF { - public #class_name#(DataType returnDataType, DataType[] argDataTypes) + public #class_name#(TypeCodec returnCodec, TypeCodec[] argCodecs) { - super(returnDataType, argDataTypes); + super(returnCodec, argCodecs); } protected ByteBuffer executeImpl(int protocolVersion, List params) http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/conf/logback-test.xml ---------------------------------------------------------------------- diff --git a/test/conf/logback-test.xml b/test/conf/logback-test.xml index 0e1bb76..abedc32 100644 --- a/test/conf/logback-test.xml +++ b/test/conf/logback-test.xml @@ -17,7 +17,7 @@ under the License. --> - + http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallClone.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallClone.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallClone.java index 51481d8..c01fbe6 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallClone.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallClone.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class CallClone extends JavaUDF { - public CallClone(DataType returnDataType, DataType[] argDataTypes) + public CallClone(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallComDatastax.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallComDatastax.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallComDatastax.java index 5c7e8b3..9cd799f 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallComDatastax.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallComDatastax.java @@ -22,7 +22,7 @@ import java.nio.ByteBuffer; import java.util.List; import com.datastax.driver.core.DataType; -import org.apache.cassandra.config.DatabaseDescriptor; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -30,7 +30,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class CallComDatastax extends JavaUDF { - public CallComDatastax(DataType returnDataType, DataType[] argDataTypes) + public CallComDatastax(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallFinalize.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallFinalize.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallFinalize.java index 1b69a72..a16bd31 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallFinalize.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallFinalize.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class CallFinalize extends JavaUDF { - public CallFinalize(DataType returnDataType, DataType[] argDataTypes) + public CallFinalize(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallOrgApache.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallOrgApache.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallOrgApache.java index 7a850e8..4f511d7 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallOrgApache.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/CallOrgApache.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.functions.JavaUDF; @@ -30,7 +30,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class CallOrgApache extends JavaUDF { - public CallOrgApache(DataType returnDataType, DataType[] argDataTypes) + public CallOrgApache(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithField.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithField.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithField.java index f43588d..d981c18 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithField.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithField.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class ClassWithField extends JavaUDF { - public ClassWithField(DataType returnDataType, DataType[] argDataTypes) + public ClassWithField(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer.java index a6e10fb..f53cc24 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class ClassWithInitializer extends JavaUDF { - public ClassWithInitializer(DataType returnDataType, DataType[] argDataTypes) + public ClassWithInitializer(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer2.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer2.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer2.java index d0c8e11..134f9f9 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer2.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer2.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class ClassWithInitializer2 extends JavaUDF { - public ClassWithInitializer2(DataType returnDataType, DataType[] argDataTypes) + public ClassWithInitializer2(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer3.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer3.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer3.java index 8672cd2..9cd04fb 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer3.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithInitializer3.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class ClassWithInitializer3 extends JavaUDF { - public ClassWithInitializer3(DataType returnDataType, DataType[] argDataTypes) + public ClassWithInitializer3(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithStaticInitializer.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithStaticInitializer.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithStaticInitializer.java index 459a6eb..64470ca 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithStaticInitializer.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/ClassWithStaticInitializer.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class ClassWithStaticInitializer extends JavaUDF { - public ClassWithStaticInitializer(DataType returnDataType, DataType[] argDataTypes) + public ClassWithStaticInitializer(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/GoodClass.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/GoodClass.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/GoodClass.java index 2666023..e3bc1e2 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/GoodClass.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/GoodClass.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class GoodClass extends JavaUDF { - public GoodClass(DataType returnDataType, DataType[] argDataTypes) + public GoodClass(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronized.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronized.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronized.java index 0059a0a..2927b3e 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronized.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronized.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class UseOfSynchronized extends JavaUDF { - public UseOfSynchronized(DataType returnDataType, DataType[] argDataTypes) + public UseOfSynchronized(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotify.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotify.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotify.java index 2da13b6..7ef2e1c 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotify.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotify.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class UseOfSynchronizedWithNotify extends JavaUDF { - public UseOfSynchronizedWithNotify(DataType returnDataType, DataType[] argDataTypes) + public UseOfSynchronizedWithNotify(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotifyAll.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotifyAll.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotifyAll.java index 1e4d33d..50a3da8 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotifyAll.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithNotifyAll.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class UseOfSynchronizedWithNotifyAll extends JavaUDF { - public UseOfSynchronizedWithNotifyAll(DataType returnDataType, DataType[] argDataTypes) + public UseOfSynchronizedWithNotifyAll(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWait.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWait.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWait.java index ccaf6ee..135c550 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWait.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWait.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class UseOfSynchronizedWithWait extends JavaUDF { - public UseOfSynchronizedWithWait(DataType returnDataType, DataType[] argDataTypes) + public UseOfSynchronizedWithWait(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitL.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitL.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitL.java index 56aa726..4e49e5b 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitL.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitL.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class UseOfSynchronizedWithWaitL extends JavaUDF { - public UseOfSynchronizedWithWaitL(DataType returnDataType, DataType[] argDataTypes) + public UseOfSynchronizedWithWaitL(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitLI.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitLI.java b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitLI.java index 403fb68..6770e7a 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitLI.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/udfverify/UseOfSynchronizedWithWaitLI.java @@ -21,7 +21,7 @@ package org.apache.cassandra.cql3.validation.entities.udfverify; import java.nio.ByteBuffer; import java.util.List; -import com.datastax.driver.core.DataType; +import com.datastax.driver.core.TypeCodec; import org.apache.cassandra.cql3.functions.JavaUDF; /** @@ -29,7 +29,7 @@ import org.apache.cassandra.cql3.functions.JavaUDF; */ public final class UseOfSynchronizedWithWaitLI extends JavaUDF { - public UseOfSynchronizedWithWaitLI(DataType returnDataType, DataType[] argDataTypes) + public UseOfSynchronizedWithWaitLI(TypeCodec returnDataType, TypeCodec[] argDataTypes) { super(returnDataType, argDataTypes); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/a76a8efc/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java ---------------------------------------------------------------------- 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 221f48e..9c05232 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/AggregationTest.java @@ -22,12 +22,21 @@ import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date; +import java.util.Locale; 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.spi.TurboFilterList; +import ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter; +import ch.qos.logback.classic.turbo.TurboFilter; import org.apache.cassandra.config.Schema; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.cql3.QueryProcessor; @@ -1731,4 +1740,84 @@ public class AggregationTest extends CQLTester execute("INSERT INTO %s (a, b) VALUES (3, 2)"); assertRows(execute("SELECT " + a + "(b) FROM %s"), row(Arrays.asList("1", "2"))); } + + @Test + public void testLogbackReload() throws Throwable + { + // 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,text", + "CREATE FUNCTION IF NOT EXISTS %s(state map,country text, album_title text)\n" + + " RETURNS NULL ON NULL INPUT\n" + + " RETURNS map\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\n" + + " INITCOND { };"); + + for (int i = 0; i < 1000; i++) + { + execute("SELECT " + releasesByCountry + "(country,title) FROM %s WHERE year=1980"); + } + } + finally + { + configureLogbackScanPeriod(60000L); + } + } + + 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) + { + if (turboFilter instanceof ReconfigureOnChangeFilter) + { + ReconfigureOnChangeFilter reconfigureFilter = (ReconfigureOnChangeFilter) turboFilter; + reconfigureFilter.setRefreshPeriod(millis); + reconfigureFilter.stop(); + reconfigureFilter.start(); // start() sets the next check timestammp + done = true; + break; + } + } + assertTrue("ReconfigureOnChangeFilter not in logback's turbo-filter list - do that by adding scan=\"true\" to logback-test.xml's configuration element", done); + } }