From f0e6b9962688be779f965b05154640927c7386be Mon Sep 17 00:00:00 2001 From: Enrico Olivelli Date: Fri, 30 Jun 2023 09:01:17 +0200 Subject: [PATCH] Test 4.16.1-SNAPSHOT driver --- .../common/sink/state/LifeCycleManager.java | 21 +------------------ pom.xml | 2 +- text/pom.xml | 4 ++-- .../json/JsonNodeConvertingCodecProvider.java | 19 ++++++++++------- .../text/json/JsonNodeToVectorCodec.java | 16 +++++++------- .../string/StringConvertingCodecProvider.java | 15 +++++++------ .../text/string/StringToVectorCodec.java | 7 ++++--- .../text/json/JsonNodeToVectorCodecTest.java | 13 ++++++------ .../text/string/StringToVectorCodecTest.java | 13 ++++++------ 9 files changed, 50 insertions(+), 60 deletions(-) diff --git a/common/src/main/java/com/datastax/oss/common/sink/state/LifeCycleManager.java b/common/src/main/java/com/datastax/oss/common/sink/state/LifeCycleManager.java index 876e78a..fc716e5 100644 --- a/common/src/main/java/com/datastax/oss/common/sink/state/LifeCycleManager.java +++ b/common/src/main/java/com/datastax/oss/common/sink/state/LifeCycleManager.java @@ -53,15 +53,10 @@ import com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata; import com.datastax.oss.driver.api.core.metadata.schema.KeyspaceMetadata; import com.datastax.oss.driver.api.core.metadata.schema.TableMetadata; -import com.datastax.oss.driver.api.core.type.CqlVectorType; -import com.datastax.oss.driver.api.core.type.DataType; import com.datastax.oss.driver.api.core.type.DataTypes; -import com.datastax.oss.driver.api.core.type.codec.TypeCodec; -import com.datastax.oss.driver.api.core.type.reflect.GenericType; import com.datastax.oss.driver.internal.core.auth.PlainTextAuthProvider; import com.datastax.oss.driver.internal.core.config.typesafe.DefaultDriverConfigLoader; import com.datastax.oss.driver.internal.core.config.typesafe.DefaultProgrammaticDriverConfigLoaderBuilder; -import com.datastax.oss.driver.internal.core.type.codec.CqlVectorCodec; import com.datastax.oss.driver.internal.core.type.codec.registry.DefaultCodecRegistry; import com.datastax.oss.driver.shaded.guava.common.annotations.VisibleForTesting; import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap; @@ -69,7 +64,6 @@ import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import java.net.InetSocketAddress; import java.nio.file.Path; import java.util.Collection; @@ -97,20 +91,7 @@ public class LifeCycleManager { new ConcurrentHashMap<>(); private static MetricRegistry metricRegistry = new MetricRegistry(); private static final DefaultCodecRegistry CODEC_REGISTRY = - new DefaultCodecRegistry("default-registry") { - - protected TypeCodec createCodec( - @Nullable DataType cqlType, - @Nullable GenericType javaType, - boolean isJavaCovariant) { - if (cqlType instanceof CqlVectorType) { - log.info("Automatically Registering codec for CqlVectorType {}", cqlType); - CqlVectorType vectorType = (CqlVectorType) cqlType; - return new CqlVectorCodec<>(vectorType, codecFor(vectorType.getSubtype())); - } - return super.createCodec(cqlType, javaType, isJavaCovariant); - } - }; + new DefaultCodecRegistry("default-registry"); /** This is a utility class that no one should instantiate. */ private LifeCycleManager() {} diff --git a/pom.xml b/pom.xml index 199d45a..5e1e54e 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ 8 2.4.0 2.6.2 - 4.16.0 + 4.16.1-SNAPSHOT 1.10.0 1.0.3 25.1-jre diff --git a/text/pom.xml b/text/pom.xml index 09462ad..ab40941 100644 --- a/text/pom.xml +++ b/text/pom.xml @@ -22,7 +22,7 @@ dsbulk-codecs com.datastax.oss 1.10.0 - + com.datastax.oss 1.0.16-SNAPSHOT @@ -44,7 +44,7 @@ com.datastax.oss java-driver-core - 4.16.0 + 4.16.1-SNAPSHOT com.datastax.oss diff --git a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeConvertingCodecProvider.java b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeConvertingCodecProvider.java index 442b06f..2566247 100644 --- a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeConvertingCodecProvider.java +++ b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeConvertingCodecProvider.java @@ -64,7 +64,6 @@ import com.datastax.oss.driver.api.core.CqlIdentifier; import com.datastax.oss.driver.api.core.data.TupleValue; import com.datastax.oss.driver.api.core.data.UdtValue; -import com.datastax.oss.driver.api.core.type.CqlVectorType; import com.datastax.oss.driver.api.core.type.CustomType; import com.datastax.oss.driver.api.core.type.DataType; import com.datastax.oss.driver.api.core.type.DataTypes; @@ -73,12 +72,13 @@ import com.datastax.oss.driver.api.core.type.SetType; import com.datastax.oss.driver.api.core.type.TupleType; import com.datastax.oss.driver.api.core.type.UserDefinedType; +import com.datastax.oss.driver.api.core.type.VectorType; import com.datastax.oss.driver.api.core.type.codec.CodecNotFoundException; import com.datastax.oss.driver.api.core.type.codec.TypeCodec; import com.datastax.oss.driver.api.core.type.codec.TypeCodecs; import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry; import com.datastax.oss.driver.api.core.type.reflect.GenericType; -import com.datastax.oss.driver.internal.core.type.codec.CqlVectorCodec; +import com.datastax.oss.driver.internal.core.type.codec.VectorCodec; import com.datastax.oss.driver.internal.core.type.codec.registry.DefaultCodecRegistry; import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList; import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap; @@ -117,6 +117,8 @@ public class JsonNodeConvertingCodecProvider implements ConvertingCodecProvider private static final String DATE_RANGE_CLASS_NAME = "org.apache.cassandra.db.marshal.DateRangeType"; + private static final String VECTOR_CLASS_NAME = "org.apache.cassandra.db.marshal.VectorType"; + @NonNull @Override public Optional> maybeProvide( @@ -393,22 +395,25 @@ public class JsonNodeConvertingCodecProvider implements ConvertingCodecProvider nullStrings); case DATE_RANGE_CLASS_NAME: return new JsonNodeToDateRangeCodec(nullStrings); - case CqlVectorType.CQLVECTOR_CLASS_NAME: - CqlVectorType cqlVectorType = (CqlVectorType) cqlType; + case VECTOR_CLASS_NAME: + VectorType cqlVectorType = (VectorType) cqlType; // Step 1: create a JSON codec which will take the input JSON nodes and generate // something matching the expected data type ConvertingCodec jsonCodec = - createJsonNodeConvertingCodec(cqlVectorType.getSubtype(), codecFactory, false); + createJsonNodeConvertingCodec( + cqlVectorType.getElementType(), codecFactory, false); // Step 2: create a conventional codec which will take instances of the Java type // generated by the JSON codec above and perform standard serde on them. ConvertingCodec standardCodec = codecFactory.createConvertingCodec( - cqlVectorType.getSubtype(), jsonCodec.getInternalJavaType(), false); + cqlVectorType.getElementType(), jsonCodec.getInternalJavaType(), false); return new JsonNodeToVectorCodec( - new CqlVectorCodec(cqlVectorType, standardCodec), + new VectorCodec(cqlVectorType, standardCodec), jsonCodec, context.getAttribute(OBJECT_MAPPER), nullStrings); + default: + LOGGER.error("Unsupported custom type {}", customType.getClassName()); } } // fall through diff --git a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodec.java b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodec.java index b0a7f8c..3431850 100644 --- a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodec.java +++ b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodec.java @@ -16,21 +16,23 @@ package com.datastax.oss.dsbulk.codecs.text.json; import com.datastax.oss.driver.api.core.data.CqlVector; -import com.datastax.oss.driver.internal.core.type.codec.CqlVectorCodec; +import com.datastax.oss.driver.internal.core.type.codec.VectorCodec; import com.datastax.oss.dsbulk.codecs.api.ConvertingCodec; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; -public class JsonNodeToVectorCodec extends JsonNodeConvertingCodec> { +public class JsonNodeToVectorCodec + extends JsonNodeConvertingCodec> { private final ConvertingCodec subtypeCodec; private final ObjectMapper objectMapper; public JsonNodeToVectorCodec( - CqlVectorCodec targetCodec, + VectorCodec targetCodec, ConvertingCodec subtypeCodec, ObjectMapper objectMapper, List nullStrings) { @@ -42,17 +44,17 @@ public JsonNodeToVectorCodec( @Override public CqlVector externalToInternal(JsonNode jsonNode) { if (jsonNode == null || !jsonNode.isArray()) return null; - CqlVector.Builder builder = CqlVector.builder(); + List result = new ArrayList<>(); for (Iterator it = jsonNode.elements(); it.hasNext(); ) - builder.add(subtypeCodec.externalToInternal(it.next())); - return builder.build(); + result.add(subtypeCodec.externalToInternal(it.next())); + return CqlVector.newInstance(result); } @Override public JsonNode internalToExternal(CqlVector value) { if (value == null) return null; ArrayNode root = objectMapper.createArrayNode(); - for (SubtypeT element : value.getValues()) { + for (SubtypeT element : value) { root.add(subtypeCodec.internalToExternal(element)); } return root; diff --git a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringConvertingCodecProvider.java b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringConvertingCodecProvider.java index 3c89984..6b77ccb 100644 --- a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringConvertingCodecProvider.java +++ b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringConvertingCodecProvider.java @@ -62,15 +62,15 @@ import com.datastax.oss.driver.api.core.data.TupleValue; import com.datastax.oss.driver.api.core.data.UdtValue; -import com.datastax.oss.driver.api.core.type.CqlVectorType; import com.datastax.oss.driver.api.core.type.CustomType; import com.datastax.oss.driver.api.core.type.DataType; import com.datastax.oss.driver.api.core.type.DataTypes; +import com.datastax.oss.driver.api.core.type.VectorType; import com.datastax.oss.driver.api.core.type.codec.CodecNotFoundException; import com.datastax.oss.driver.api.core.type.codec.TypeCodec; import com.datastax.oss.driver.api.core.type.codec.TypeCodecs; import com.datastax.oss.driver.api.core.type.reflect.GenericType; -import com.datastax.oss.driver.internal.core.type.codec.CqlVectorCodec; +import com.datastax.oss.driver.internal.core.type.codec.VectorCodec; import com.datastax.oss.driver.internal.core.type.codec.registry.DefaultCodecRegistry; import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList; import com.datastax.oss.dsbulk.codecs.api.ConversionContext; @@ -105,6 +105,7 @@ public class StringConvertingCodecProvider implements ConvertingCodecProvider { private static final String POLYGON_CLASS_NAME = "org.apache.cassandra.db.marshal.PolygonType"; private static final String DATE_RANGE_CLASS_NAME = "org.apache.cassandra.db.marshal.DateRangeType"; + private static final String VECTOR_CLASS_NAME = "org.apache.cassandra.db.marshal.VectorType"; @NonNull @Override @@ -332,13 +333,15 @@ public class StringConvertingCodecProvider implements ConvertingCodecProvider { return new StringToPolygonCodec(context.getAttribute(GEO_FORMAT), nullStrings); case DATE_RANGE_CLASS_NAME: return new StringToDateRangeCodec(nullStrings); - case CqlVectorType.CQLVECTOR_CLASS_NAME: - CqlVectorType cqlVectorType = (CqlVectorType) cqlType; + case VECTOR_CLASS_NAME: + VectorType cqlVectorType = (VectorType) cqlType; ConvertingCodec subtypeCodec = codecFactory.createConvertingCodec( - cqlVectorType.getSubtype(), GenericType.STRING, false); + cqlVectorType.getElementType(), GenericType.STRING, false); return new StringToVectorCodec( - new CqlVectorCodec(cqlVectorType, subtypeCodec), nullStrings); + new VectorCodec(cqlVectorType, subtypeCodec), nullStrings); + default: + LOGGER.error("Unsupported custom type {}", customType.getClassName()); } } // fall through diff --git a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodec.java b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodec.java index 69334a4..c958aee 100644 --- a/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodec.java +++ b/text/src/main/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodec.java @@ -16,12 +16,13 @@ package com.datastax.oss.dsbulk.codecs.text.string; import com.datastax.oss.driver.api.core.data.CqlVector; -import com.datastax.oss.driver.internal.core.type.codec.CqlVectorCodec; +import com.datastax.oss.driver.internal.core.type.codec.VectorCodec; import java.util.List; -public class StringToVectorCodec extends StringConvertingCodec> { +public class StringToVectorCodec + extends StringConvertingCodec> { - public StringToVectorCodec(CqlVectorCodec subcodec, List nullStrings) { + public StringToVectorCodec(VectorCodec subcodec, List nullStrings) { super(subcodec, nullStrings); } diff --git a/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodecTest.java b/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodecTest.java index a7eea57..c7c72d5 100644 --- a/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodecTest.java +++ b/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/json/JsonNodeToVectorCodecTest.java @@ -19,11 +19,10 @@ import static com.datastax.oss.dsbulk.tests.assertions.TestAssertions.assertThat; import com.datastax.oss.driver.api.core.data.CqlVector; -import com.datastax.oss.driver.api.core.type.CqlVectorType; import com.datastax.oss.driver.api.core.type.DataTypes; import com.datastax.oss.driver.api.core.type.codec.TypeCodecs; import com.datastax.oss.driver.api.core.type.reflect.GenericType; -import com.datastax.oss.driver.internal.core.type.codec.CqlVectorCodec; +import com.datastax.oss.driver.internal.core.type.codec.VectorCodec; import com.datastax.oss.driver.shaded.guava.common.collect.Lists; import com.datastax.oss.dsbulk.codecs.api.ConvertingCodecFactory; import com.fasterxml.jackson.databind.JsonNode; @@ -34,9 +33,9 @@ public class JsonNodeToVectorCodecTest { private final ArrayList values = Lists.newArrayList(1.1f, 2.2f, 3.3f, 4.4f, 5.5f); - private final CqlVector vector = CqlVector.builder().addAll(values).build(); - private final CqlVectorCodec vectorCodec = - new CqlVectorCodec(new CqlVectorType(DataTypes.FLOAT, 5), TypeCodecs.FLOAT); + private final CqlVector vector = CqlVector.newInstance(values); + private final VectorCodec vectorCodec = + new VectorCodec(DataTypes.vectorOf(DataTypes.FLOAT, 5), TypeCodecs.FLOAT); private final ArrayNode vectorDoc; private final ConvertingCodecFactory factory = new ConvertingCodecFactory(); @@ -87,8 +86,8 @@ void should_not_convert_from_invalid_internal() { tooFew.remove(0); assertThat(dsbulkCodec) - .cannotConvertFromInternal(CqlVector.builder().addAll(tooMany).build()) - .cannotConvertFromInternal(CqlVector.builder().addAll(tooFew).build()) + .cannotConvertFromInternal(CqlVector.newInstance((tooMany))) + .cannotConvertFromInternal(CqlVector.newInstance((tooFew))) .cannotConvertFromInternal("not a valid vector"); } } diff --git a/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodecTest.java b/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodecTest.java index 097e836..25665a9 100644 --- a/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodecTest.java +++ b/text/src/test/java/com/datastax/oss/dsbulk/codecs/text/string/StringToVectorCodecTest.java @@ -18,10 +18,9 @@ import static com.datastax.oss.dsbulk.tests.assertions.TestAssertions.assertThat; import com.datastax.oss.driver.api.core.data.CqlVector; -import com.datastax.oss.driver.api.core.type.CqlVectorType; import com.datastax.oss.driver.api.core.type.DataTypes; import com.datastax.oss.driver.api.core.type.codec.TypeCodecs; -import com.datastax.oss.driver.internal.core.type.codec.CqlVectorCodec; +import com.datastax.oss.driver.internal.core.type.codec.VectorCodec; import com.datastax.oss.driver.shaded.guava.common.collect.Lists; import java.util.ArrayList; import org.junit.jupiter.api.Disabled; @@ -30,9 +29,9 @@ public class StringToVectorCodecTest { private final ArrayList values = Lists.newArrayList(1.1f, 2.2f, 3.3f, 4.4f, 5.5f); - private final CqlVector vector = CqlVector.builder().addAll(values).build(); - private final CqlVectorCodec vectorCodec = - new CqlVectorCodec(new CqlVectorType(DataTypes.FLOAT, 5), TypeCodecs.FLOAT); + private final CqlVector vector = CqlVector.newInstance(values); + private final VectorCodec vectorCodec = + new VectorCodec(DataTypes.vectorOf(DataTypes.FLOAT, 5), TypeCodecs.FLOAT); private final StringToVectorCodec dsbulkCodec = new StringToVectorCodec(vectorCodec, Lists.newArrayList("NULL")); @@ -69,8 +68,8 @@ void should_not_convert_from_invalid_internal() { tooFew.remove(0); assertThat(dsbulkCodec) - .cannotConvertFromInternal(CqlVector.builder().addAll(tooMany).build()) - .cannotConvertFromInternal(CqlVector.builder().addAll(tooFew).build()) + .cannotConvertFromInternal(CqlVector.newInstance((tooMany))) + .cannotConvertFromInternal(CqlVector.newInstance((tooFew))) .cannotConvertFromInternal("not a valid vector"); } }