From e485516b27114195b1be7392dc4d71be49fd54bb Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 2 Mar 2023 21:05:53 +0100 Subject: [PATCH] Rename Namespace to KryoJournalSerdes Reduce naming confusion -- Namespace really is a Kryo-based implementation of JournalSerdes. KryoJournalSerdesBuilder is separated out so that Kryo interfaces are not leaked outside of the package. JIRA: CONTROLLER-2072 Change-Id: I75e7a6f30d6319c4284acd76ec098224380e3b70 Signed-off-by: Robert Varga --- .../atomix/storage/journal/JournalSerdes.java | 4 +- ...{Namespace.java => KryoJournalSerdes.java} | 54 ++----------------- .../serializer/KryoJournalSerdesBuilder.java | 54 +++++++++++++++++++ .../utils/serializer/RegisteredType.java | 25 +++++++++ 4 files changed, 85 insertions(+), 52 deletions(-) rename third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/{Namespace.java => KryoJournalSerdes.java} (84%) create mode 100644 third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/KryoJournalSerdesBuilder.java create mode 100644 third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/RegisteredType.java diff --git a/third-party/atomix/storage/src/main/java/io/atomix/storage/journal/JournalSerdes.java b/third-party/atomix/storage/src/main/java/io/atomix/storage/journal/JournalSerdes.java index 6114aff27b..32fc8d30c6 100644 --- a/third-party/atomix/storage/src/main/java/io/atomix/storage/journal/JournalSerdes.java +++ b/third-party/atomix/storage/src/main/java/io/atomix/storage/journal/JournalSerdes.java @@ -18,7 +18,7 @@ package io.atomix.storage.journal; import com.google.common.annotations.Beta; import com.google.common.annotations.VisibleForTesting; -import io.atomix.utils.serializer.Namespace; +import io.atomix.utils.serializer.KryoJournalSerdesBuilder; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -113,7 +113,7 @@ public interface JournalSerdes { * @return builder */ static Builder builder() { - return Namespace.builder(); + return new KryoJournalSerdesBuilder(); } /** diff --git a/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/Namespace.java b/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/KryoJournalSerdes.java similarity index 84% rename from third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/Namespace.java rename to third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/KryoJournalSerdes.java index 5e6814c635..d99c69d9b6 100644 --- a/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/Namespace.java +++ b/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/KryoJournalSerdes.java @@ -16,7 +16,6 @@ */ package io.atomix.utils.serializer; -import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; import com.esotericsoftware.kryo.Kryo; @@ -33,7 +32,6 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.objenesis.strategy.StdInstantiatorStrategy; @@ -43,7 +41,7 @@ import org.slf4j.LoggerFactory; /** * Pool of Kryo instances, with classes pre-registered. */ -public final class Namespace implements JournalSerdes, KryoFactory, KryoPool { +final class KryoJournalSerdes implements JournalSerdes, KryoFactory, KryoPool { /** * Default buffer size used for serialization. * @@ -56,9 +54,9 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool { */ private static final int INITIAL_ID = 16; - private static final String NO_NAME = "(no name)"; + static final String NO_NAME = "(no name)"; - private static final Logger LOGGER = LoggerFactory.getLogger(Namespace.class); + private static final Logger LOGGER = LoggerFactory.getLogger(KryoJournalSerdes.class); private final KryoPool kryoPool = new KryoPool.Builder(this).softReferences().build(); @@ -76,7 +74,7 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool { * @param registrationRequired whether registration is required * @param friendlyName friendly name for the namespace */ - private Namespace( + KryoJournalSerdes( final List registeredTypes, final ClassLoader classLoader, final String friendlyName) { @@ -88,15 +86,6 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool { release(create()); } - /** - * Creates a new {@link Namespace} builder. - * - * @return builder - */ - public static JournalSerdes.Builder builder() { - return new Builder(); - } - @Override public byte[] serialize(final Object obj) { return serialize(obj, DEFAULT_BUFFER_SIZE); @@ -283,39 +272,4 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool { } return MoreObjects.toStringHelper(getClass()).add("registeredTypes", registeredTypes).toString(); } - - private static record RegisteredType(EntrySerializer serializer, Class[] types) { - RegisteredType { - requireNonNull(serializer); - requireNonNull(types); - } - } - - private static final class Builder implements JournalSerdes.Builder { - private final List types = new ArrayList<>(); - private ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - - @Override - public Builder register(final EntrySerdes serdes, final Class... classes) { - types.add(new RegisteredType(new EntrySerializer<>(serdes), classes)); - return this; - } - - @Override - public Builder setClassLoader(final ClassLoader classLoader) { - this.classLoader = requireNonNull(classLoader); - return this; - } - - @Override - public JournalSerdes build() { - return build(NO_NAME); - } - - @Override - public JournalSerdes build(final String friendlyName) { - checkState(!types.isEmpty(), "No serializers registered"); - return new Namespace(types, classLoader, friendlyName); - } - } } diff --git a/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/KryoJournalSerdesBuilder.java b/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/KryoJournalSerdesBuilder.java new file mode 100644 index 0000000000..a62d8b3293 --- /dev/null +++ b/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/KryoJournalSerdesBuilder.java @@ -0,0 +1,54 @@ +/* + * Copyright 2014-2021 Open Networking Foundation + * Copyright 2023 PANTHEON.tech, s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.atomix.utils.serializer; + +import static com.google.common.base.Preconditions.checkState; +import static java.util.Objects.requireNonNull; + +import io.atomix.storage.journal.JournalSerdes; +import io.atomix.storage.journal.JournalSerdes.Builder; +import io.atomix.storage.journal.JournalSerdes.EntrySerdes; +import java.util.ArrayList; +import java.util.List; + +public final class KryoJournalSerdesBuilder implements Builder { + private final List types = new ArrayList<>(); + private ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + + @Override + public KryoJournalSerdesBuilder register(final EntrySerdes serdes, final Class... classes) { + types.add(new RegisteredType(new EntrySerializer<>(serdes), classes)); + return this; + } + + @Override + public KryoJournalSerdesBuilder setClassLoader(final ClassLoader classLoader) { + this.classLoader = requireNonNull(classLoader); + return this; + } + + @Override + public JournalSerdes build() { + return build(KryoJournalSerdes.NO_NAME); + } + + @Override + public JournalSerdes build(final String friendlyName) { + checkState(!types.isEmpty(), "No serializers registered"); + return new KryoJournalSerdes(types, classLoader, friendlyName); + } +} \ No newline at end of file diff --git a/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/RegisteredType.java b/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/RegisteredType.java new file mode 100644 index 0000000000..0a17c09bf2 --- /dev/null +++ b/third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/RegisteredType.java @@ -0,0 +1,25 @@ +/* + * Copyright 2023 PANTHEON.tech, s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.atomix.utils.serializer; + +import static java.util.Objects.requireNonNull; + +record RegisteredType(EntrySerializer serializer, Class[] types) { + RegisteredType { + requireNonNull(serializer); + requireNonNull(types); + } +} -- 2.36.6