From 42827acbb6403dcac11a95b3d3c70fe4a7d409b0 Mon Sep 17 00:00:00 2001 From: Alexey Romanenko Date: Fri, 17 Feb 2023 17:07:35 +0100 Subject: [PATCH] Deprecate Avro API classes in "sdks/java/core" --- CHANGES.md | 4 +++- .../java/org/apache/beam/sdk/coders/AvroCoder.java | 5 +++++ .../org/apache/beam/sdk/coders/AvroGenericCoder.java | 10 +++++++++- .../src/main/java/org/apache/beam/sdk/io/AvroIO.java | 6 ++++++ .../org/apache/beam/sdk/io/AvroSchemaIOProvider.java | 6 ++++++ .../src/main/java/org/apache/beam/sdk/io/AvroSink.java | 10 +++++++++- .../main/java/org/apache/beam/sdk/io/AvroSource.java | 5 +++++ .../apache/beam/sdk/io/ConstantAvroDestination.java | 10 +++++++++- .../apache/beam/sdk/io/DynamicAvroDestinations.java | 6 ++++++ .../beam/sdk/io/SerializableAvroCodecFactory.java | 7 +++++++ .../org/apache/beam/sdk/schemas/AvroRecordSchema.java | 6 ++++++ .../io/payloads/AvroPayloadSerializerProvider.java | 8 ++++++++ .../beam/sdk/schemas/utils/AvroByteBuddyUtils.java | 8 ++++++++ .../org/apache/beam/sdk/schemas/utils/AvroUtils.java | 6 ++++++ sdks/java/extensions/avro/build.gradle | 2 +- 15 files changed, 94 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 69147cdb6b33..8514990fb03a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -92,7 +92,9 @@ ## Deprecations -* X behavior is deprecated and will be removed in X versions ([#X](https://github.com/apache/beam/issues/X)). +* Avro related classes are deprecated in module `beam-sdks-java-core` and will be eventually removed. Please, migrate to a new module `beam-sdks-java-extensions-avro` instead by importing the classes from `org.apache.beam.sdk.extensions.avro` package. + For the sake of migration simplicity, the relative package path and the whole class hierarchy of Avro related classes in new module is preserved the same as it was before. + For example, import `org.apache.beam.sdk.extensions.avro.coders.AvroCoder` class instead of`org.apache.beam.sdk.coders.AvroCoder`. ([#24749](https://github.com/apache/beam/issues/24749)). ## Bugfixes diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java index c7b39d5b025a..8fa162ecf8e4 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java @@ -107,10 +107,15 @@ * org.apache.beam.sdk.transforms.GroupByKey} operations. * * @param the type of elements handled by this coder + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.coders.AvroCoder instead of this one. */ @SuppressWarnings({ "nullness" // TODO(https://github.com/apache/beam/issues/20497) }) +@Deprecated public class AvroCoder extends CustomCoder { /** diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroGenericCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroGenericCoder.java index be726ccda1c1..7d90206ce4c5 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroGenericCoder.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroGenericCoder.java @@ -20,7 +20,15 @@ import org.apache.avro.Schema; import org.apache.avro.generic.GenericRecord; -/** AvroCoder specialisation for GenericRecord. */ +/** + * AvroCoder specialisation for GenericRecord. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.coders.AvroGenericCoder instead of this one. + */ +@Deprecated public class AvroGenericCoder extends AvroCoder { AvroGenericCoder(Schema schema) { super(GenericRecord.class, schema); diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroIO.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroIO.java index e1a3c8a2912c..c8ccf7532296 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroIO.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroIO.java @@ -328,10 +328,16 @@ * events.apply("WriteAvros", AvroIO.writeCustomTypeToGenericRecords() * .to(new UserDynamicAvroDestinations(userToSchemaMap))); * } + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.io.AvroIO instead of this one. */ @SuppressWarnings({ "nullness" // TODO(https://github.com/apache/beam/issues/20497) }) +@Deprecated public class AvroIO { /** * Reads records of the given type from an Avro file (or multiple Avro files matching a pattern). diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSchemaIOProvider.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSchemaIOProvider.java index 90519e386002..43498235992a 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSchemaIOProvider.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSchemaIOProvider.java @@ -43,12 +43,18 @@ /** * An implementation of {@link SchemaIOProvider} for reading and writing Avro files with {@link * AvroIO}. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.io.AvroSchemaIOProvider instead of this one. */ @Internal @AutoService(SchemaIOProvider.class) @SuppressWarnings({ "nullness" // TODO(https://github.com/apache/beam/issues/20497) }) +@Deprecated public class AvroSchemaIOProvider implements SchemaIOProvider { /** Returns an id that uniquely represents this IO. */ @Override diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSink.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSink.java index fe463d704a58..bc92113925cd 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSink.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSink.java @@ -32,10 +32,18 @@ import org.apache.beam.sdk.util.MimeTypes; import org.checkerframework.checker.nullness.qual.Nullable; -/** A {@link FileBasedSink} for Avro files. */ +/** + * A {@link FileBasedSink} for Avro files. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.io.AvroSink instead of this one. + */ @SuppressWarnings({ "nullness" // TODO(https://github.com/apache/beam/issues/20497) }) +@Deprecated public class AvroSink extends FileBasedSink { private final boolean genericRecords; diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSource.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSource.java index 3b7824fa449e..22a5f1e0d24b 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSource.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/AvroSource.java @@ -120,12 +120,17 @@ * details. * * @param The type of records to be read from the source. + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.io.AvroSource instead of this one. */ // CHECKSTYLE.ON: JavadocStyle @Experimental(Kind.SOURCE_SINK) @SuppressWarnings({ "nullness" // TODO(https://github.com/apache/beam/issues/20497) }) +@Deprecated public class AvroSource extends BlockBasedSource { // Default minimum bundle size (chosen as two default-size Avro blocks to attempt to // ensure that every source has at least one block of records). diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/ConstantAvroDestination.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/ConstantAvroDestination.java index 832526efa88f..cc9957474b9b 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/ConstantAvroDestination.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/ConstantAvroDestination.java @@ -31,10 +31,18 @@ import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.io.BaseEncoding; import org.checkerframework.checker.nullness.qual.Nullable; -/** Always returns a constant {@link FilenamePolicy}, {@link Schema}, metadata, and codec. */ +/** + * Always returns a constant {@link FilenamePolicy}, {@link Schema}, metadata, and codec. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.io.ConstantAvroDestination instead of this one. + */ @SuppressWarnings({ "nullness" // TODO(https://github.com/apache/beam/issues/20497) }) +@Deprecated class ConstantAvroDestination extends DynamicAvroDestinations { private static class SchemaFunction implements Serializable, Function { diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/DynamicAvroDestinations.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/DynamicAvroDestinations.java index 4bb450bffe1c..40c8657a01ae 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/DynamicAvroDestinations.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/DynamicAvroDestinations.java @@ -28,7 +28,13 @@ * A specialization of {@link DynamicDestinations} for {@link AvroIO}. In addition to dynamic file * destinations, this allows specifying other AVRO properties (schema, metadata, codec, datum * writer) per destination. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.io.DynamicAvroDestinations instead of this one. */ +@Deprecated public abstract class DynamicAvroDestinations extends DynamicDestinations { /** Return an AVRO schema for a given destination. */ diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/SerializableAvroCodecFactory.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/SerializableAvroCodecFactory.java index 5218eb683aac..b7b5da72ba48 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/SerializableAvroCodecFactory.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/SerializableAvroCodecFactory.java @@ -39,10 +39,17 @@ /** * A wrapper that allows {@link org.apache.avro.file.CodecFactory}s to be serialized using Java's * standard serialization mechanisms. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.io.SerializableAvroCodecFactory instead of this + * one. */ @SuppressWarnings({ "nullness" // TODO(https://github.com/apache/beam/issues/20497) }) +@Deprecated class SerializableAvroCodecFactory implements Externalizable { private static final long serialVersionUID = 7445324844109564303L; private static final List noOptAvroCodecs = diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/AvroRecordSchema.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/AvroRecordSchema.java index c616901a396e..19027cd4527f 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/AvroRecordSchema.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/AvroRecordSchema.java @@ -30,10 +30,16 @@ *

This provider infers a schema from generated SpecificRecord objects, and creates schemas and * rows that bind to the appropriate fields. This provider also infers schemas from Java POJO * objects, creating a schema that matches that inferred by the AVRO libraries. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.schemas.AvroRecordSchema instead of this one. */ @SuppressWarnings({ "rawtypes" // TODO(https://github.com/apache/beam/issues/20447) }) +@Deprecated public class AvroRecordSchema extends GetterBasedSchemaProvider { @Override public Schema schemaFor(TypeDescriptor typeDescriptor) { diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/io/payloads/AvroPayloadSerializerProvider.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/io/payloads/AvroPayloadSerializerProvider.java index ace671fccd6f..5ffc549f7fbe 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/io/payloads/AvroPayloadSerializerProvider.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/io/payloads/AvroPayloadSerializerProvider.java @@ -25,8 +25,16 @@ import org.apache.beam.sdk.schemas.Schema; import org.apache.beam.sdk.schemas.utils.AvroUtils; +/** + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.schemas.io.payloads.AvroPayloadSerializerProvider + * instead of this one. + */ @Internal @Experimental(Kind.SCHEMAS) +@Deprecated @AutoService(PayloadSerializerProvider.class) public class AvroPayloadSerializerProvider implements PayloadSerializerProvider { @Override diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroByteBuddyUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroByteBuddyUtils.java index eb01b83c94fc..fe4c76a2a26b 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroByteBuddyUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroByteBuddyUtils.java @@ -48,11 +48,19 @@ import org.apache.beam.sdk.values.TypeDescriptor; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Maps; +/** + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.schemas.utils.AvroByteBuddyUtils instead of this + * one. + */ @Experimental(Kind.SCHEMAS) @SuppressWarnings({ "nullness", // TODO(https://github.com/apache/beam/issues/20497) "rawtypes" }) +@Deprecated class AvroByteBuddyUtils { private static final ByteBuddy BYTE_BUDDY = new ByteBuddy(); diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java index a45728236ab2..93362f4ceb6d 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/AvroUtils.java @@ -133,12 +133,18 @@ * * * is used. + * + * @deprecated Avro related classes are deprecated in module beam-sdks-java-core and + * will be eventually removed. Please, migrate to a new module + * beam-sdks-java-extensions-avro by importing + * org.apache.beam.sdk.extensions.avro.schemas.utils.AvroUtils instead of this one. */ @Experimental(Kind.SCHEMAS) @SuppressWarnings({ "nullness", // TODO(https://github.com/apache/beam/issues/20497) "rawtypes" }) +@Deprecated public class AvroUtils { static { // This works around a bug in the Avro library (AVRO-1891) around SpecificRecord's handling diff --git a/sdks/java/extensions/avro/build.gradle b/sdks/java/extensions/avro/build.gradle index 1b1b7f824857..f73a9efccfb5 100644 --- a/sdks/java/extensions/avro/build.gradle +++ b/sdks/java/extensions/avro/build.gradle @@ -21,7 +21,7 @@ applyJavaNature( automaticModuleName: 'org.apache.beam.sdk.extensions.avro', disableLintWarnings: ['rawtypes'], // Avro-generated test code has raw-type errors publish: true, - exportJavadoc: false, + exportJavadoc: true, ) applyAvroNature()