From f6dd87cd468c4d84c1f1f6dc552c3849ae49b481 Mon Sep 17 00:00:00 2001 From: Oleg Date: Mon, 17 Oct 2022 14:29:11 -0700 Subject: [PATCH] Using other string types besides UTF8.class --- .../avro/fastserde/FastDeserializerGenerator.java | 7 ++++++- .../fastserde/FastDeserializerGeneratorBase.java | 9 +++++++-- .../com/linkedin/avro/fastserde/FastSerdeCache.java | 10 +++++++++- .../fastserde/FastSpecificDeserializerGenerator.java | 12 +++++++++--- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGenerator.java b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGenerator.java index 2c0e1ed79..531d537de 100644 --- a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGenerator.java +++ b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGenerator.java @@ -72,11 +72,16 @@ public class FastDeserializerGenerator extends FastDeserializerGeneratorBase< private Map skipMethodMap = new HashMap<>(); private Map>> exceptionFromMethodMap = new HashMap<>(); - FastDeserializerGenerator(boolean useGenericTypes, Schema writer, Schema reader, File destination, + public FastDeserializerGenerator(boolean useGenericTypes, Schema writer, Schema reader, File destination, ClassLoader classLoader, String compileClassPath) { super(useGenericTypes, writer, reader, destination, classLoader, compileClassPath); } + public FastDeserializerGenerator(boolean useGenericTypes, Schema writer, Schema reader, File destination, + ClassLoader classLoader, String compileClassPath, Class defaultStringClass) { + super(useGenericTypes, writer, reader, destination, classLoader, compileClassPath, defaultStringClass); + } + public FastDeserializer generateDeserializer() { String className = getClassName(writer, reader, useGenericTypes ? "Generic" : "Specific"); JPackage classPackage = codeModel._package(generatedPackageName); diff --git a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorBase.java b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorBase.java index 37bab1143..50cdb0772 100644 --- a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorBase.java +++ b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorBase.java @@ -18,9 +18,14 @@ public abstract class FastDeserializerGeneratorBase extends FastSerdeBase { protected final Schema writer; protected final Schema reader; - FastDeserializerGeneratorBase(boolean useGenericTypes, Schema writer, Schema reader, File destination, ClassLoader classLoader, + public FastDeserializerGeneratorBase(boolean useGenericTypes, Schema writer, Schema reader, File destination, ClassLoader classLoader, String compileClassPath) { - super("deserialization", useGenericTypes, Utf8.class, destination, classLoader, compileClassPath, false); + this(useGenericTypes, writer, reader, destination, classLoader, compileClassPath, Utf8.class); + } + + public FastDeserializerGeneratorBase(boolean useGenericTypes, Schema writer, Schema reader, File destination, ClassLoader classLoader, + String compileClassPath, Class defaultStringClass) { + super("deserialization", useGenericTypes, defaultStringClass, destination, classLoader, compileClassPath, false); this.writer = writer; this.reader = reader; } diff --git a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerdeCache.java b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerdeCache.java index 4ac841e63..31eb65e99 100644 --- a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerdeCache.java +++ b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerdeCache.java @@ -31,6 +31,7 @@ import org.apache.avro.io.Encoder; import org.apache.avro.specific.SpecificDatumReader; import org.apache.avro.specific.SpecificDatumWriter; +import org.apache.avro.util.Utf8; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,6 +67,8 @@ public final class FastSerdeCache { private Optional compileClassPath; + private Class defaultStringClass = Utf8.class; + /** * * @param compileClassPathSupplier @@ -123,6 +126,11 @@ public FastSerdeCache(Executor executorService) { this.compileClassPath = Optional.empty(); } + public FastSerdeCache(Executor executorService, Class defaultStringClass) { + this(executorService); + this.defaultStringClass = defaultStringClass; + } + private FastSerdeCache() { this((Executor) null); } @@ -355,7 +363,7 @@ private static String getSchemaKey(Schema writerSchema, Schema readerSchema) { public FastDeserializer buildFastSpecificDeserializer(Schema writerSchema, Schema readerSchema) { FastSpecificDeserializerGenerator generator = new FastSpecificDeserializerGenerator<>(writerSchema, readerSchema, classesDir, classLoader, - compileClassPath.orElse(null)); + compileClassPath.orElse(null), defaultStringClass); FastDeserializer fastDeserializer = generator.generateDeserializer(); if (LOGGER.isDebugEnabled()) { diff --git a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSpecificDeserializerGenerator.java b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSpecificDeserializerGenerator.java index 13d9bf0df..83e0cfaa4 100644 --- a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSpecificDeserializerGenerator.java +++ b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSpecificDeserializerGenerator.java @@ -2,12 +2,18 @@ import java.io.File; import org.apache.avro.Schema; +import org.apache.avro.util.Utf8; -public final class FastSpecificDeserializerGenerator extends FastDeserializerGenerator { +public class FastSpecificDeserializerGenerator extends FastDeserializerGenerator { - FastSpecificDeserializerGenerator(Schema writer, Schema reader, File destination, ClassLoader classLoader, + public FastSpecificDeserializerGenerator(Schema writer, Schema reader, File destination, ClassLoader classLoader, String compileClassPath) { - super(false, writer, reader, destination, classLoader, compileClassPath); + this(writer, reader, destination, classLoader, compileClassPath, Utf8.class); + } + + public FastSpecificDeserializerGenerator(Schema writer, Schema reader, File destination, ClassLoader classLoader, + String compileClassPath, Class defaultStringClass) { + super(false, writer, reader, destination, classLoader, compileClassPath, defaultStringClass); } }