diff --git a/CHANGES.txt b/CHANGES.txt
index 0f730d4e37..114ce071a8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.11.7
+ * Upgrade Jackson to 2.9.10 (CASSANDRA-15867)
* Fix CQL formatting of read command restrictions for slow query log (CASSANDRA-15503)
* Allow sstableloader to use SSL on the native port (CASSANDRA-14904)
Merged from 3.0:
diff --git a/build.xml b/build.xml
index 0724dbb29c..25a47335b9 100644
--- a/build.xml
+++ b/build.xml
@@ -406,8 +406,9 @@
-
-
+
+
+
@@ -627,8 +628,9 @@
-
-
+
+
+
diff --git a/lib/jackson-annotations-2.9.10.jar b/lib/jackson-annotations-2.9.10.jar
new file mode 100644
index 0000000000..de054c66b2
Binary files /dev/null and b/lib/jackson-annotations-2.9.10.jar differ
diff --git a/lib/jackson-core-2.9.10.jar b/lib/jackson-core-2.9.10.jar
new file mode 100644
index 0000000000..1b5e87ccc0
Binary files /dev/null and b/lib/jackson-core-2.9.10.jar differ
diff --git a/lib/jackson-core-asl-1.9.13.jar b/lib/jackson-core-asl-1.9.13.jar
deleted file mode 100644
index bb4fe1da11..0000000000
Binary files a/lib/jackson-core-asl-1.9.13.jar and /dev/null differ
diff --git a/lib/jackson-databind-2.9.10.4.jar b/lib/jackson-databind-2.9.10.4.jar
new file mode 100644
index 0000000000..9045f2f402
Binary files /dev/null and b/lib/jackson-databind-2.9.10.4.jar differ
diff --git a/lib/jackson-mapper-asl-1.9.13.jar b/lib/jackson-mapper-asl-1.9.13.jar
deleted file mode 100644
index 0f2073fc7e..0000000000
Binary files a/lib/jackson-mapper-asl-1.9.13.jar and /dev/null differ
diff --git a/src/java/org/apache/cassandra/cql3/Json.java b/src/java/org/apache/cassandra/cql3/Json.java
index 2e67a1e60c..af004a83d3 100644
--- a/src/java/org/apache/cassandra/cql3/Json.java
+++ b/src/java/org/apache/cassandra/cql3/Json.java
@@ -20,6 +20,8 @@ package org.apache.cassandra.cql3;
import java.io.IOException;
import java.util.*;
+import com.fasterxml.jackson.core.io.JsonStringEncoder;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.cql3.functions.Function;
@@ -27,8 +29,6 @@ import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.serializers.MarshalException;
-import org.codehaus.jackson.io.JsonStringEncoder;
-import org.codehaus.jackson.map.ObjectMapper;
/** Term-related classes for INSERT JSON support. */
public class Json
diff --git a/src/java/org/apache/cassandra/tools/JsonTransformer.java b/src/java/org/apache/cassandra/tools/JsonTransformer.java
index 22b8fc7930..315bb7f8fb 100644
--- a/src/java/org/apache/cassandra/tools/JsonTransformer.java
+++ b/src/java/org/apache/cassandra/tools/JsonTransformer.java
@@ -30,6 +30,9 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.db.*;
@@ -49,11 +52,6 @@ import org.apache.cassandra.db.rows.UnfilteredRowIterator;
import org.apache.cassandra.io.sstable.ISSTableScanner;
import org.apache.cassandra.transport.ProtocolVersion;
import org.apache.cassandra.utils.ByteBufferUtil;
-import org.codehaus.jackson.JsonFactory;
-import org.codehaus.jackson.JsonGenerator;
-import org.codehaus.jackson.impl.Indenter;
-import org.codehaus.jackson.util.DefaultPrettyPrinter;
-import org.codehaus.jackson.util.DefaultPrettyPrinter.NopIndenter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -500,10 +498,10 @@ public final class JsonTransformer
}
/**
- * A specialized {@link Indenter} that enables a 'compact' mode which puts all subsequent json values on the same
+ * A specialized {@link com.fasterxml.jackson.core.util.DefaultPrettyPrinter.Indenter} that enables a 'compact' mode which puts all subsequent json values on the same
* line. This is manipulated via {@link CompactIndenter#setCompact(boolean)}
*/
- private static final class CompactIndenter extends NopIndenter
+ private static final class CompactIndenter extends DefaultPrettyPrinter.NopIndenter
{
private static final int INDENT_LEVELS = 16;
diff --git a/src/java/org/apache/cassandra/utils/FBUtilities.java b/src/java/org/apache/cassandra/utils/FBUtilities.java
index 22ed33c2e4..e5dc2be78a 100644
--- a/src/java/org/apache/cassandra/utils/FBUtilities.java
+++ b/src/java/org/apache/cassandra/utils/FBUtilities.java
@@ -41,6 +41,8 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.databind.ObjectMapper;
import io.netty.util.concurrent.FastThreadLocal;
import org.apache.cassandra.auth.IAuthenticator;
import org.apache.cassandra.auth.IAuthorizer;
@@ -65,9 +67,6 @@ import org.apache.cassandra.io.util.FileUtils;
import org.apache.cassandra.locator.InetAddressAndPort;
import org.apache.cassandra.net.AsyncOneResponse;
-import org.codehaus.jackson.JsonFactory;
-import org.codehaus.jackson.map.ObjectMapper;
-
public class FBUtilities
{
private static final Logger logger = LoggerFactory.getLogger(FBUtilities.class);
diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
index 1579857942..7def47c16c 100644
--- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
+++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
@@ -26,6 +26,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadLocalRandom;
@@ -1187,13 +1188,12 @@ public class SASIIndexTest
}});
rm.apply();
- store.forceBlockingFlush();
-
- Set rows = getIndexed(store, 10, buildExpression(firstName, Operator.EQ, UTF8Type.instance.decompose("a")),
- buildExpression(age, Operator.GTE, Int32Type.instance.decompose(26)));
-
- // index is expected to have 0 results because age value was of wrong type
- Assert.assertEquals(0, rows.size());
+ try {
+ store.forceBlockingFlush();
+ Assert.fail("It was possible to insert data of wrong type into a column!");
+ } catch (final Throwable ex) {
+ Assert.assertTrue(ex.getMessage().endsWith("Expected exactly 4 bytes, but was 8"));
+ }
}