Promote cds-access-api 53/103053/7
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 3 Nov 2022 02:45:41 +0000 (03:45 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 3 Nov 2022 10:25:30 +0000 (11:25 +0100)
This API is no longer @Beta.

Change-Id: If81e77c8b2c9dc2fcfa6bcd94f58426c75f6cd0a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
72 files changed:
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/ABIVersion.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/AbstractVersionException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/FutureVersionException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/PastVersionException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/AbortLocalTransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/AbstractReadPathTransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/AbstractReadTransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ClosedTransactionException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/CommitLocalTransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ConnectClientFailure.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ConnectClientRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ConnectClientSuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/CreateLocalHistoryRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/DeadHistoryException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/DeadTransactionException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/DestroyLocalHistoryRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ExistsTransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ExistsTransactionSuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/IncrementTransactionSequenceSuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/LocalHistoryFailure.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/LocalHistoryRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/LocalHistorySuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ModifyTransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ModifyTransactionRequestBuilder.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ModifyTransactionSuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/NotLeaderException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/OutOfOrderRequestException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/OutOfSequenceEnvelopeException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/PersistenceProtocol.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/PurgeLocalHistoryRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ReadTransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/ReadTransactionSuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/SkipTransactionsRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/SkipTransactionsResponse.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionAbortRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionDataModification.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionDelete.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionDoCommitRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionFailure.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionMerge.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionModification.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionPreCommitRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionPurgeRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionRequest.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionSuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/TransactionWrite.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/commands/UnknownHistoryException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/AbstractRequestFailureProxy.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/AbstractRequestProxy.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/AbstractSuccessProxy.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/ClientIdentifier.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/FrontendIdentifier.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/FrontendType.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/MemberName.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/Message.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/Request.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RequestException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RequestFailure.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RequestSuccess.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/Response.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RetiredGenerationException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/RuntimeRequestException.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/SliceableMessage.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/TransactionIdentifier.java
opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/UnsupportedRequestException.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/AbstractClientActor.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorBehavior.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ClientActorContext.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnection.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/ConnectionEntry.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/InversibleLock.java
opendaylight/md-sal/cds-access-client/src/main/java/org/opendaylight/controller/cluster/access/client/InversibleLockException.java

index cfaf477f8fc8da8c4f3e06f79e3b25840112a003..92a70cd00065fd10246d1d971bd52e84de57e3f5 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.controller.cluster.access;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import com.google.common.annotations.Beta;
 import com.google.common.annotations.VisibleForTesting;
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -22,10 +21,7 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Enumeration of all ABI versions supported by this implementation of the client access API.
- *
- * @author Robert Varga
  */
-@Beta
 public enum ABIVersion implements WritableObject {
     // NOTE: enumeration values need to be sorted in ascending order of their version to keep Comparable working
 
@@ -130,24 +126,14 @@ public enum ABIVersion implements WritableObject {
      * @throws PastVersionException if the specified integer identifies a past version which is no longer supported
      */
     public static @NonNull ABIVersion valueOf(final short value) throws FutureVersionException, PastVersionException {
-        switch (Short.toUnsignedInt(value)) {
-            case 0:
-            case 1:
-            case 2:
-            case 3:
-            case 4:
-                throw new PastVersionException(value, BORON);
-            case 5:
-                return BORON;
-            case 6:
-                return NEON_SR2;
-            case 7:
-                return SODIUM_SR1;
-            case 8:
-                return MAGNESIUM;
-            default:
-                throw new FutureVersionException(value, MAGNESIUM);
-        }
+        return switch (Short.toUnsignedInt(value)) {
+            case 0, 1, 2, 3, 4 -> throw new PastVersionException(value, BORON);
+            case 5 -> BORON;
+            case 6 -> NEON_SR2;
+            case 7 -> SODIUM_SR1;
+            case 8 -> MAGNESIUM;
+            default -> throw new FutureVersionException(value, MAGNESIUM);
+        };
     }
 
     @Override
index 0567ef119110f2841ebf6882edeb2a2a47578bb6..f1c538c7180af1f7d464af7385299b583264a0ee 100644 (file)
@@ -9,17 +9,16 @@ package org.opendaylight.controller.cluster.access;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 
 /**
  * Abstract base exception used for reporting version mismatches from {@link ABIVersion}.
- *
- * @author Robert Varga
  */
-@Beta
 public abstract class AbstractVersionException extends Exception {
+    @Serial
     private static final long serialVersionUID = 1L;
+
     private final @NonNull ABIVersion closestVersion;
     private final int version;
 
@@ -34,7 +33,7 @@ public abstract class AbstractVersionException extends Exception {
      *
      * @return Numeric version
      */
-    public final int getVersion() {
+    public final int version() {
         return version;
     }
 
@@ -43,8 +42,7 @@ public abstract class AbstractVersionException extends Exception {
      *
      * @return Closest supported {@link ABIVersion}
      */
-    public final @NonNull ABIVersion getClosestVersion() {
+    public final @NonNull ABIVersion closestVersion() {
         return closestVersion;
     }
-
 }
index d5f132a7b8e73d74e5616d9bd9bf3d61a29eeb45..4cd807ee097bce537c22fd163e1711d89876ebfb 100644 (file)
@@ -7,16 +7,14 @@
  */
 package org.opendaylight.controller.cluster.access;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 
 /**
  * Exception thrown from {@link ABIVersion#valueOf(short)} when the specified version is too new to be supported
  * by the codebase.
- *
- * @author Robert Varga
  */
-@Beta
 public final class FutureVersionException extends AbstractVersionException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     FutureVersionException(final short version, ABIVersion closest) {
index c8cbe54b3d0ae9bf725dee6114f349fd00b671d2..0b7f134ec97bc5cc91c2b6c06c6a97d3c1396e52 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 
 /**
  * Exception thrown from {@link ABIVersion#valueOf(short)} when the specified version is too old and no longer
@@ -15,8 +15,8 @@ import com.google.common.annotations.Beta;
  *
  * @author Robert Varga
  */
-@Beta
 public final class PastVersionException extends AbstractVersionException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     PastVersionException(final short version, final ABIVersion closest) {
index 3898ee22b3e2d5b3972fd78a5fdc52b9278c49b2..37ddb9e7e7391e0e163f477b7b85cee34b498310 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
@@ -16,11 +16,9 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
  * Request to abort a local transaction. Since local transactions do not introduce state on the backend until they
  * are ready, the purpose of this message is to inform the backend that a message identifier has been used. This is
  * not important for single transactions, but is critical to ensure transaction ordering within local histories.
- *
- * @author Robert Varga
  */
-@Beta
 public final class AbortLocalTransactionRequest extends AbstractLocalTransactionRequest<AbortLocalTransactionRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public AbortLocalTransactionRequest(final @NonNull TransactionIdentifier identifier,
index fa53a599aa1cbfa32dbdaac87b1a54339ee6cff9..1cdade9ac0373062274d57f025e1c58400afbfa8 100644 (file)
@@ -10,8 +10,8 @@ package org.opendaylight.controller.cluster.access.commands;
 import static java.util.Objects.requireNonNull;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
@@ -25,13 +25,11 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
  * This class is visible outside of this package for the purpose of allowing common instanceof checks
  * and simplified codepaths.
  *
- * @author Robert Varga
- *
  * @param <T> Message type
  */
-@Beta
 public abstract class AbstractReadPathTransactionRequest<T extends AbstractReadPathTransactionRequest<T>>
         extends AbstractReadTransactionRequest<T> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull YangInstanceIdentifier path;
index 3fc4821edf99e64eed0feec7b983b1015fc86329..4c1d3971f51e1a42709e3fbea9bcfd879c96d429 100644 (file)
@@ -8,8 +8,8 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
@@ -20,13 +20,11 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
  * This class is visible outside of this package for the purpose of allowing common instanceof checks
  * and simplified codepaths.
  *
- * @author Robert Varga
- *
  * @param <T> Message type
  */
-@Beta
 public abstract class AbstractReadTransactionRequest<T extends AbstractReadTransactionRequest<T>>
         extends TransactionRequest<T> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final boolean snapshotOnly;
index ece472056473df653610cb9c51fe1e9918c28c55..10bee071a5d34c8deb91756de5ff8a020363f2ff 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 /**
@@ -15,11 +15,9 @@ import org.opendaylight.controller.cluster.access.concepts.RequestException;
  * been closed, either via a successful commit or abort (which is indicated via {@link #isSuccessful()}. This can
  * happen if the corresponding journal record is replicated, but the message to the frontend gets lost and the backed
  * leader moved before the frontend retried the corresponding request.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ClosedTransactionException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final boolean successful;
index 1e16cb5bbde1b4ee064e914a4055caee91b0b59b..c51165fb63c771589617fb83feca4e985cbeeaf9 100644 (file)
@@ -10,9 +10,9 @@ package org.opendaylight.controller.cluster.access.commands;
 import static java.util.Objects.requireNonNull;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.io.Serial;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
@@ -22,12 +22,10 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification;
 /**
  * Request to commit a local transaction. Since local transactions do not introduce state on the backend until they
  * are ready, this message carries a complete set of modifications.
- *
- * @author Robert Varga
  */
-@Beta
 public final class CommitLocalTransactionRequest
         extends AbstractLocalTransactionRequest<CommitLocalTransactionRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class "
index 46b460ac0d364ec137113fcb65cea599ac724058..e11798ab8083364caa253adf4f3104bcdf63679b 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.AbstractRequestFailureProxy;
 import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier;
@@ -16,11 +16,9 @@ import org.opendaylight.controller.cluster.access.concepts.RequestFailure;
 
 /**
  * A {@link RequestFailure} reported when {@link ConnectClientRequest} fails.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ConnectClientFailure extends RequestFailure<ClientIdentifier, ConnectClientFailure> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     ConnectClientFailure(final ClientIdentifier target, final long sequence, final RequestException cause) {
index ba86035e920a2356424bbdc37050d0eb2771907c..1b937521efb836dfe9f7ef810cd1f46d31cd14d5 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.controller.cluster.access.commands;
 import static java.util.Objects.requireNonNull;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.AbstractRequestProxy;
@@ -26,10 +25,7 @@ import org.opendaylight.controller.cluster.access.concepts.RequestException;
  *
  * <p>
  * It also includes request stream sequencing information.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ConnectClientRequest extends Request<ClientIdentifier, ConnectClientRequest> {
     private static final long serialVersionUID = 1L;
 
@@ -50,8 +46,8 @@ public final class ConnectClientRequest extends Request<ClientIdentifier, Connec
 
     private ConnectClientRequest(final ConnectClientRequest request, final ABIVersion version) {
         super(request, version);
-        this.minVersion = request.minVersion;
-        this.maxVersion = request.maxVersion;
+        minVersion = request.minVersion;
+        maxVersion = request.maxVersion;
     }
 
     public ABIVersion getMinVersion() {
index 8f16d61e349433a158db6065ebfad351536e0e87..ae4426515d4d1bc8a6aa8d2f3547a70b6975d518 100644 (file)
@@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull;
 
 import akka.actor.ActorRef;
 import akka.actor.ActorSelection;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.collect.ImmutableList;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -28,17 +27,11 @@ import org.opendaylight.yangtools.yang.data.tree.api.ReadOnlyDataTree;
  * Successful reply to an {@link ConnectClientRequest}. Client actor which initiated this connection should use
  * the version reported via {@link #getVersion()} of this message to communicate with this backend. Should this backend
  * fail, the client can try accessing the provided alternates.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ConnectClientSuccess extends RequestSuccess<ClientIdentifier, ConnectClientSuccess> {
     private static final long serialVersionUID = 1L;
 
-    @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class "
-            + "implements writeReplace to delegate serialization to a Proxy class and thus instances of this class "
-            + "aren't serialized. FindBugs does not recognize this.")
-    private final @NonNull List<ActorSelection> alternates;
+    private final @NonNull ImmutableList<ActorSelection> alternates;
 
     @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "See justification above.")
     private final ReadOnlyDataTree dataTree;
index 01a110d046e16aed03d68ff355efec133a9d7453..4e07b8ff75df1d04a1156e4ebe97eb24a9f871a5 100644 (file)
@@ -8,17 +8,15 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 
 /**
  * Request to create a new local history.
- *
- * @author Robert Varga
  */
-@Beta
 public final class CreateLocalHistoryRequest extends LocalHistoryRequest<CreateLocalHistoryRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public CreateLocalHistoryRequest(final LocalHistoryIdentifier target, final ActorRef replyTo) {
index 7df84763c5ed4fa491efe6dc62c5fca072c9b344..81c8dabf5cfeba908b5548803a1c76bff65a514c 100644 (file)
@@ -7,19 +7,17 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import com.google.common.collect.RangeSet;
 import com.google.common.primitives.UnsignedLong;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 /**
  * A {@link RequestException} indicating that the backend has received a request to create a history which has already
  * been retired.
- *
- * @author Robert Varga
  */
-@Beta
 public final class DeadHistoryException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public DeadHistoryException(final RangeSet<UnsignedLong> purgedHistories) {
index fee439984ac53c15fbdc37c09c618ba410bda150..dadfb931108f73ab840afc3ca0b60cfe872e5143 100644 (file)
@@ -7,20 +7,18 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableRangeSet;
 import com.google.common.collect.RangeSet;
 import com.google.common.primitives.UnsignedLong;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 /**
  * A {@link RequestException} indicating that the backend has received a request to create a transaction which has
  * already been purged.
- *
- * @author Robert Varga
  */
-@Beta
 public final class DeadTransactionException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final RangeSet<UnsignedLong> purgedIdentifiers;
index 375128318c43cf2bdf11395fd20ec95f0c42285a..3c9a4b69456c489a860c25c82059d29b777c1134 100644 (file)
@@ -8,17 +8,15 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 
 /**
  * Request to destroy a local history.
- *
- * @author Robert Varga
  */
-@Beta
 public final class DestroyLocalHistoryRequest extends LocalHistoryRequest<DestroyLocalHistoryRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public DestroyLocalHistoryRequest(final LocalHistoryIdentifier target, final long sequence,
index ab2316c28edb63eb65b9f3d48b9cc8a9b99d869f..d5e619c7065e999b00d8a3c0e020c38a39d57da3 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
@@ -16,11 +16,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 /**
  * A transaction request to query if a particular path exists in the current view of a particular transaction.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ExistsTransactionRequest extends AbstractReadPathTransactionRequest<ExistsTransactionRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public ExistsTransactionRequest(final @NonNull TransactionIdentifier identifier, final long sequence,
index 8a1704de763725d3e2aaa0a2aad8baba43c00f36..3110002e4fe91842c9f049f77466e7d900268d57 100644 (file)
@@ -7,20 +7,19 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
 /**
  * Successful reply to an {@link ExistsTransactionRequest}. It indicates presence of requested data via
  * {@link #getExists()}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ExistsTransactionSuccess extends TransactionSuccess<ExistsTransactionSuccess> {
+    @Serial
     private static final long serialVersionUID = 1L;
+
     private final boolean exists;
 
     public ExistsTransactionSuccess(final TransactionIdentifier target, final long sequence, final boolean exists) {
index 80f4a0d5aab941bf64c8d6a868c13cc70cdeda15..a147545dd9a84bab87adf68d045c67cfeed9726d 100644 (file)
@@ -7,17 +7,15 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
 /**
  * Successful reply to an {@link IncrementTransactionSequenceRequest}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class IncrementTransactionSequenceSuccess extends TransactionSuccess<IncrementTransactionSequenceSuccess> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public IncrementTransactionSequenceSuccess(final TransactionIdentifier target, final long sequence) {
index 4fd69c24cee0e2ec2948f768975683a683038faa..60aba50d360a26df3f6d34de392573767bb3b4d0 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
@@ -15,11 +15,9 @@ import org.opendaylight.controller.cluster.access.concepts.RequestFailure;
 
 /**
  * Generic {@link RequestFailure} involving a {@link LocalHistoryRequest}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class LocalHistoryFailure extends RequestFailure<LocalHistoryIdentifier, LocalHistoryFailure> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     LocalHistoryFailure(final LocalHistoryIdentifier target, final long sequence, final RequestException cause) {
index 33d04850fb91d01a524a7f17ffc12820445e392a..0fe4c2d6181f56e2f4ea5f2fb1f427745caac49c 100644 (file)
@@ -8,8 +8,8 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 import org.opendaylight.controller.cluster.access.concepts.Request;
@@ -19,12 +19,10 @@ import org.opendaylight.controller.cluster.access.concepts.RequestException;
  * Abstract base class for {@link Request}s involving specific local history. This class is visible outside of this
  * package solely for the ability to perform a unified instanceof check.
  *
- * @author Robert Varga
- *
  * @param <T> Message type
  */
-@Beta
 public abstract class LocalHistoryRequest<T extends LocalHistoryRequest<T>> extends Request<LocalHistoryIdentifier, T> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     LocalHistoryRequest(final LocalHistoryIdentifier target, final long sequence, final ActorRef replyTo) {
index 3b8ed35816ede5bb36a0e41ddaa57f7d74ae5971..7480305eb9c444e90ca3c55d80036406b7155aad 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.AbstractSuccessProxy;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
@@ -15,10 +14,7 @@ import org.opendaylight.controller.cluster.access.concepts.RequestSuccess;
 
 /**
  * Success class for {@link RequestSuccess}es involving a specific local history.
- *
- * @author Robert Varga
  */
-@Beta
 public final class LocalHistorySuccess extends RequestSuccess<LocalHistoryIdentifier, LocalHistorySuccess> {
     private static final long serialVersionUID = 1L;
 
index 39b577cef26b67d9739fb32fe32b5d739a1c1908..6f42d0ce56e75287abbd8f743a773503c8360f47 100644 (file)
@@ -8,10 +8,10 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.collect.ImmutableList;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.io.Serial;
 import java.util.List;
 import java.util.Optional;
 import org.opendaylight.controller.cluster.access.ABIVersion;
@@ -21,12 +21,10 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
 /**
  * A transaction request to apply a particular set of operations on top of the current transaction. This message is
  * used to also finish a transaction by specifying a {@link PersistenceProtocol}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ModifyTransactionRequest extends TransactionRequest<ModifyTransactionRequest>
         implements SliceableMessage {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class "
index 8e2e5cce0b61841d881132d8f5df87229982011f..0e99942c1ee9655bb32ac996d9462ec346cefa8d 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import java.util.ArrayList;
 import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
@@ -21,13 +20,10 @@ import org.opendaylight.yangtools.concepts.Identifiable;
 /**
  * A reusable builder for creating {@link ModifyTransactionRequest} message instances. Its internal state is reset when
  * {@link #build()} is invoked, hence it can be used to create a sequence of messages. This class is NOT thread-safe.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ModifyTransactionRequestBuilder implements Identifiable<TransactionIdentifier> {
     private final List<TransactionModification> modifications = new ArrayList<>(1);
-    private final TransactionIdentifier identifier;
+    private final @NonNull TransactionIdentifier identifier;
     private final ActorRef replyTo;
 
     private PersistenceProtocol protocol;
index c4dd20d6c9a0bf660c648fa11069cae82b0a09fa..42f22439b1d4df92bea3b0c03a84b85d74fce613 100644 (file)
@@ -7,17 +7,15 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
 /**
  * Response to a {@link ModifyTransactionRequest} which does not have a {@link PersistenceProtocol}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ModifyTransactionSuccess extends TransactionSuccess<ModifyTransactionSuccess> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public ModifyTransactionSuccess(final TransactionIdentifier identifier, final long sequence) {
index 0864cd0cf0c2fc7495fda9ed9aadf3314dbf780a..881953c01b5dce9b3f9f9232765ca0fa58f1127d 100644 (file)
@@ -8,17 +8,15 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 /**
  * General error raised when the recipient of a Request is not the correct backend to talk to. This typically
  * means that the backend processing has moved and the frontend needs to run rediscovery and retry the request.
- *
- * @author Robert Varga
  */
-@Beta
 public final class NotLeaderException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public NotLeaderException(final ActorRef me) {
index cd110d66b6aa708623fcca696a9daaec17872d44..7ee5a2f306f1644e75954a6c44196241c97f8a54 100644 (file)
@@ -7,17 +7,15 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 /**
  * A {@link RequestException} indicating that the backend has received a Request whose sequence does not match the
  * next expected sequence for the target. This is a hard error, as it indicates a Request is missing in the stream.
- *
- * @author Robert Varga
  */
-@Beta
 public final class OutOfOrderRequestException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public OutOfOrderRequestException(final long expectedRequest) {
index ad3dd8d700966a56effac9c225498dec38b1fe57..61715bc42a43b18e478d5075e41924dc7474b87f 100644 (file)
@@ -7,18 +7,16 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 /**
  * A {@link RequestException} indicating that the backend has received a RequestEnvelope whose sequence does not match
  * the next expected sequence. This can happen during leader transitions, when a part of the stream is rejected because
  * the backend is not the leader and it transitions to being a leader with old stream messages still being present.
- *
- * @author Robert Varga
  */
-@Beta
 public final class OutOfSequenceEnvelopeException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public OutOfSequenceEnvelopeException(final long expectedEnvelope) {
index be58b05b1fc87f3f3cdceb6f9ef6271dd210fbd8..82fca03087c6ac794caa188cd2928c989015af71 100644 (file)
@@ -7,19 +7,16 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.concepts.WritableObject;
 
 /**
  * Enumeration of transaction persistence protocols. These govern which protocol is executed between the frontend
  * and backend to drive persistence of a particular transaction.
- *
- * @author Robert Varga
  */
-@Beta
 public enum PersistenceProtocol implements WritableObject {
     /**
      * Abort protocol. The transaction has been aborted on the frontend and its effects should not be visible
@@ -77,20 +74,14 @@ public enum PersistenceProtocol implements WritableObject {
         return finish == null ? 0 : finish.byteValue();
     }
 
-    static PersistenceProtocol valueOf(final byte value) {
-        switch (value) {
-            case 0:
-                return null;
-            case 1:
-                return ABORT;
-            case 2:
-                return SIMPLE;
-            case 3:
-                return THREE_PHASE;
-            case 4:
-                return READY;
-            default:
-                throw new IllegalArgumentException("Unhandled byte value " + value);
-        }
+    static @Nullable PersistenceProtocol valueOf(final byte value) {
+        return switch (value) {
+            case 0 -> null;
+            case 1 -> ABORT;
+            case 2 -> SIMPLE;
+            case 3 -> THREE_PHASE;
+            case 4 -> READY;
+            default -> throw new IllegalArgumentException("Unhandled byte value " + value);
+        };
     }
 }
index ecbd749dd1f8ada03f0f8a1b83beabc0ba0ef7a8..50f16570264a4bd2aa12505f675e94b7e8c680e6 100644 (file)
@@ -8,18 +8,16 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 
 /**
  * Request to purge a local history. This request is sent by the client once it receives a successful reply to
  * {@link DestroyLocalHistoryRequest} and indicates it has removed all state attached to a particular local history.
- *
- * @author Robert Varga
  */
-@Beta
 public final class PurgeLocalHistoryRequest extends LocalHistoryRequest<PurgeLocalHistoryRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public PurgeLocalHistoryRequest(final LocalHistoryIdentifier target, final long sequence, final ActorRef replyTo) {
index 92caa59b7acdeb641f4f655463e20876ba87ec2d..c5a550ce05abbc1f3e0ab6cb8f1b2180c2c780d1 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
@@ -16,11 +16,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 /**
  * A transaction request to read a particular path exists in the current view of a particular transaction.
- *
- * @author Robert Varga
  */
-@Beta
 public final class ReadTransactionRequest extends AbstractReadPathTransactionRequest<ReadTransactionRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public ReadTransactionRequest(final @NonNull TransactionIdentifier identifier, final long sequence,
index 1b3410ee3c0bdc7c8628aa3ae5f3877664118f60..1e473d2b30435ba8bd1a9a2e05ba8d14518972a9 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.controller.cluster.access.commands;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.io.Serial;
 import java.util.Optional;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.SliceableMessage;
@@ -20,14 +20,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 /**
  * Successful reply to an {@link ReadTransactionRequest}. It indicates presence of requested data via
  * {@link #getData()}.
- *
- * @author Robert Varga
  */
-@Beta
-@SuppressFBWarnings("SE_BAD_FIELD")
 public final class ReadTransactionSuccess extends TransactionSuccess<ReadTransactionSuccess>
         implements SliceableMessage {
+    @Serial
     private static final long serialVersionUID = 1L;
+
+    @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "interface-based best effort")
     private final Optional<NormalizedNode> data;
 
     public ReadTransactionSuccess(final TransactionIdentifier identifier, final long sequence,
index dd5faa8e875b474f82c57597411be7039c43b93c..3b97bb98170c762a7a5d70bf1df0300f30b60510 100644 (file)
@@ -8,10 +8,10 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.collect.ImmutableList;
 import com.google.common.primitives.UnsignedLong;
+import java.io.Serial;
 import java.util.Collection;
 import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
@@ -27,8 +27,8 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
  * This request is sent by the frontend to inform the backend that a set of {@link TransactionIdentifier}s are
  * explicitly retired and are guaranteed to never be used by the frontend.
  */
-@Beta
 public final class SkipTransactionsRequest extends TransactionRequest<SkipTransactionsRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     // Note: UnsignedLong is arbitrary, yang.common.Uint64 would work just as well, we really want an immutable
index b62af7e7dc491ac14591ebac21a630fddabfd779..6d168d30d69ed9fc0a52bcd9d7659a8cc55f3097 100644 (file)
@@ -7,15 +7,15 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
 /**
  * Successful reply to a {@link SkipTransactionsRequest}.
  */
-@Beta
 public final class SkipTransactionsResponse extends TransactionSuccess<SkipTransactionsResponse> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public SkipTransactionsResponse(final TransactionIdentifier identifier, final long sequence) {
index b8499cc2a25dacaccd126c568d37ef2aedfbfcee..d43d188de415144661ab7de8371bf8c76f93f495 100644 (file)
@@ -8,17 +8,15 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
 /**
  * A transaction request to perform the abort step of the three-phase commit protocol.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionAbortRequest extends TransactionRequest<TransactionAbortRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public TransactionAbortRequest(final TransactionIdentifier target, final long sequence, final ActorRef replyTo) {
index 9f0cb81876254d93c38f604002b56f504bdb6806..d6eb297bb043b55d4764b5a30e81eb68ac280609 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.controller.cluster.access.commands;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import java.io.IOException;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -17,10 +16,7 @@ import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataOutpu
 
 /**
  * A {@link TransactionModification} which has a data component.
- *
- * @author Robert Varga
  */
-@Beta
 public abstract class TransactionDataModification extends TransactionModification {
     private final NormalizedNode data;
 
index 62acdbbb76ba627a2fd970b0cdeb72214a72d2db..00c9bd8259fb3eaf22467becd632f990d1883f88 100644 (file)
@@ -7,15 +7,11 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 /**
  * Delete a particular path.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionDelete extends TransactionModification {
     public TransactionDelete(final YangInstanceIdentifier path) {
         super(path);
index 955c2680086db7553969857e0656238e37c179f8..92ede4f1d885104ea5bd8f8ebef3263ffc56f022 100644 (file)
@@ -8,17 +8,15 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
 /**
  * A transaction request to perform the final, doCommit, step of the three-phase commit protocol.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionDoCommitRequest extends TransactionRequest<TransactionDoCommitRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public TransactionDoCommitRequest(final TransactionIdentifier target, final long sequence, final ActorRef replyTo) {
index e0b6a5998795c271453d761edb158700a8e9a0b6..86240ddfbce331753971121b3dd06e554b435748 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 import org.opendaylight.controller.cluster.access.concepts.RequestFailure;
@@ -15,11 +15,9 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
 
 /**
  * Generic {@link RequestFailure} involving a {@link TransactionRequest}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionFailure extends RequestFailure<TransactionIdentifier, TransactionFailure> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     TransactionFailure(final TransactionIdentifier target, final long sequence, final RequestException cause) {
index bf2580f44b5437ec2478989706b4f6f0e79423ad..2784687d288e19f1e4a74ddc3e01a0c5f907a954 100644 (file)
@@ -7,16 +7,12 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
 /**
  * Merge a {@link NormalizedNode} tree onto a specific path.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionMerge extends TransactionDataModification {
     public TransactionMerge(final YangInstanceIdentifier path, final NormalizedNode data) {
         super(path, data);
index a4e019437393731b8c7794f9cf3220c6e0b18168..96bea87d46764c808d5a4cf50fd2dced686f66f6 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.controller.cluster.access.commands;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import java.io.IOException;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -23,10 +22,7 @@ import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataOutpu
  * {@link #readFrom(NormalizedNodeDataInput, ReusableStreamReceiver)} methods for explicit serialization. The reason for
  * this is that they are usually transmitted in bulk, hence it is advantageous to reuse
  * a {@link NormalizedNodeDataOutput} instance to achieve better compression.
- *
- * @author Robert Varga
  */
-@Beta
 public abstract class TransactionModification {
     static final byte TYPE_DELETE = 1;
     static final byte TYPE_MERGE = 2;
@@ -57,15 +53,11 @@ public abstract class TransactionModification {
     static TransactionModification readFrom(final NormalizedNodeDataInput in, final ReusableStreamReceiver writer)
             throws IOException {
         final byte type = in.readByte();
-        switch (type) {
-            case TYPE_DELETE:
-                return new TransactionDelete(in.readYangInstanceIdentifier());
-            case TYPE_MERGE:
-                return new TransactionMerge(in.readYangInstanceIdentifier(), in.readNormalizedNode(writer));
-            case TYPE_WRITE:
-                return new TransactionWrite(in.readYangInstanceIdentifier(), in.readNormalizedNode(writer));
-            default:
-                throw new IllegalArgumentException("Unhandled type " + type);
-        }
+        return switch (type) {
+            case TYPE_DELETE -> new TransactionDelete(in.readYangInstanceIdentifier());
+            case TYPE_MERGE -> new TransactionMerge(in.readYangInstanceIdentifier(), in.readNormalizedNode(writer));
+            case TYPE_WRITE -> new TransactionWrite(in.readYangInstanceIdentifier(), in.readNormalizedNode(writer));
+            default -> throw new IllegalArgumentException("Unhandled type " + type);
+        };
     }
 }
index 226557d12436fca9b8cce808f2b82907559741b8..3828628089d4d6caf63692007cc72335c1359cea 100644 (file)
@@ -8,17 +8,15 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
 /**
  * A transaction request to perform the second, preCommit, step of the three-phase commit protocol.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionPreCommitRequest extends TransactionRequest<TransactionPreCommitRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public TransactionPreCommitRequest(final TransactionIdentifier target, final long sequence,
index a0fab70188f1a29f0f8e019da85e8ac0a61d1d51..a374a891db30664e503493b743d9e2bfd4a255ac 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 
@@ -16,11 +16,9 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
  * A transaction request to perform the final transaction transition, which is purging it from the protocol view,
  * meaning the frontend has no further knowledge of the transaction. The backend is free to purge any state related
  * to the transaction and responds with a {@link TransactionPurgeResponse}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionPurgeRequest extends TransactionRequest<TransactionPurgeRequest> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public TransactionPurgeRequest(final TransactionIdentifier target, final long sequence, final ActorRef replyTo) {
index 4dcf6ea93c6451d5b0b96c3e3d24a29b9bbfe82f..fb12edeacdd8fdadb744c9bc79b8356005ae97b0 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.controller.cluster.access.commands;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.Request;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
@@ -18,12 +18,10 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
  * Abstract base class for {@link Request}s involving specific transaction. This class is visible outside of this
  * package solely for the ability to perform a unified instanceof check.
  *
- * @author Robert Varga
- *
  * @param <T> Message type
  */
-@Beta
 public abstract class TransactionRequest<T extends TransactionRequest<T>> extends Request<TransactionIdentifier, T> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     TransactionRequest(final TransactionIdentifier identifier, final long sequence, final ActorRef replyTo) {
index 636a2e741bd42f8fcd5471c92a794a21ae3b2528..f70b750813dca867a12257b3fd5923ff9cd3324a 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.concepts.RequestSuccess;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
@@ -16,13 +16,11 @@ import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier
  * Abstract base class for {@link RequestSuccess}es involving specific transaction. This class is visible outside of
  * this package solely for the ability to perform a unified instanceof check.
  *
- * @author Robert Varga
- *
  * @param <T> Message type
  */
-@Beta
 public abstract class TransactionSuccess<T extends TransactionSuccess<T>>
         extends RequestSuccess<TransactionIdentifier, T> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     TransactionSuccess(final TransactionIdentifier identifier, final long sequence) {
index 4960c4ad989ed53ecffd23e8ec06fa3b90b3b2de..af1acbe57ed25ea2dfbe36067bf14aad5145f7b9 100644 (file)
@@ -7,16 +7,12 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
 /**
  * Modification to write (and replace) a subtree at specified path with another subtree.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionWrite extends TransactionDataModification {
     public TransactionWrite(final YangInstanceIdentifier path, final NormalizedNode data) {
         super(path, data);
index 196c60c0d82951068c46a9d3edc225a6ac622002..b7b2228e0f7e40e9935c7dffa2523b93ef11b5d1 100644 (file)
@@ -7,17 +7,15 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
 /**
  * A {@link RequestException} indicating that the backend has received a request referencing an unknown history. This
  * typically happens when the linear history ID is newer than the highest observed {@link CreateLocalHistoryRequest}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class UnknownHistoryException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public UnknownHistoryException(final Long lastSeenHistory) {
@@ -25,7 +23,7 @@ public final class UnknownHistoryException extends RequestException {
     }
 
     private static String historyToString(final Long history) {
-        return history == null ? "null" : Long.toUnsignedString(history.longValue());
+        return history == null ? "null" : Long.toUnsignedString(history);
     }
 
     @Override
index e35936d53bdb01d5887f80510d14822978543748..e715c94f011d89e7497c6e21bf5edff855099070 100644 (file)
@@ -7,24 +7,23 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import com.google.common.annotations.Beta;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
 
 /**
  * Abstract Externalizable proxy for use with {@link RequestFailure} subclasses.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  */
-@Beta
 public abstract class AbstractRequestFailureProxy<T extends WritableIdentifier, C extends RequestFailure<T, C>>
         extends AbstractResponseProxy<T, C> {
+    @Serial
     private static final long serialVersionUID = 1L;
+
     private RequestException cause;
 
     protected AbstractRequestFailureProxy() {
index 183766f31039fb0d3f56e103cba98027c4ee1e3b..762c9728d5f5c9ceadc513576bf30b35cfa9d334 100644 (file)
@@ -10,24 +10,23 @@ package org.opendaylight.controller.cluster.access.concepts;
 import akka.actor.ActorRef;
 import akka.serialization.JavaSerializer;
 import akka.serialization.Serialization;
-import com.google.common.annotations.Beta;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
 
 /**
  * Abstract Externalizable proxy for use with {@link Request} subclasses.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  */
-@Beta
 public abstract class AbstractRequestProxy<T extends WritableIdentifier, C extends Request<T, C>>
         extends AbstractMessageProxy<T, C> {
+    @Serial
     private static final long serialVersionUID = 1L;
+
     private ActorRef replyTo;
 
     protected AbstractRequestProxy() {
index ecf792e1d9e13b3385c231828d71525fbb5f7ceb..4e31019c7730648eba66458ac2dd1a431fb67a64 100644 (file)
@@ -7,20 +7,18 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
 
 /**
  * Abstract Externalizable proxy for use with {@link RequestSuccess} subclasses.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  */
-@Beta
 public abstract class AbstractSuccessProxy<T extends WritableIdentifier, C extends RequestSuccess<T, C>>
         extends AbstractResponseProxy<T, C> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     protected AbstractSuccessProxy() {
index c317ac31b6985710e4e25477656880033d47a2b6..69e803ef42b7e2e31bbcfe81836d5ba42912ab7e 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.controller.cluster.access.concepts;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -17,6 +16,7 @@ import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.cds.types.rev191024.ClientGeneration;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
@@ -29,10 +29,11 @@ import org.opendaylight.yangtools.yang.common.Uint64;
  *
  * @author Robert Varga
  */
-@Beta
 public final class ClientIdentifier implements WritableIdentifier {
     private static final class Proxy implements Externalizable {
+        @Serial
         private static final long serialVersionUID = 1L;
+
         private FrontendIdentifier frontendId;
         private long generation;
 
@@ -65,6 +66,7 @@ public final class ClientIdentifier implements WritableIdentifier {
         }
     }
 
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull FrontendIdentifier frontendId;
@@ -110,21 +112,16 @@ public final class ClientIdentifier implements WritableIdentifier {
 
     @Override
     public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof ClientIdentifier)) {
-            return false;
-        }
-
-        final ClientIdentifier other = (ClientIdentifier) obj;
-        return generation == other.generation && frontendId.equals(other.frontendId);
+        return this == obj || obj instanceof ClientIdentifier other && generation == other.generation
+            && frontendId.equals(other.frontendId);
     }
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(ClientIdentifier.class).add("frontend", frontendId)
-                .add("generation", Long.toUnsignedString(generation)).toString();
+        return MoreObjects.toStringHelper(ClientIdentifier.class)
+            .add("frontend", frontendId)
+            .add("generation", Long.toUnsignedString(generation))
+            .toString();
     }
 
     private Object writeReplace() {
index 10abac6d58236deffc1f6af0f46358b52481be40..00aa6cdd4b37781138fb1f8977c6c29cfca207ab 100644 (file)
@@ -9,26 +9,25 @@ package org.opendaylight.controller.cluster.access.concepts;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serial;
 import java.util.Objects;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
 
 /**
  * A cluster-wide unique identifier of a frontend type located at a cluster member.
- *
- * @author Robert Varga
  */
-@Beta
 public final class FrontendIdentifier implements WritableIdentifier {
     private static final class Proxy implements Externalizable {
+        @Serial
         private static final long serialVersionUID = 1L;
+
         private MemberName memberName;
         private FrontendType clientType;
 
@@ -61,7 +60,9 @@ public final class FrontendIdentifier implements WritableIdentifier {
         }
     }
 
+    @Serial
     private static final long serialVersionUID = 1L;
+
     private final MemberName memberName;
     private final FrontendType clientType;
 
@@ -104,11 +105,10 @@ public final class FrontendIdentifier implements WritableIdentifier {
         if (this == obj) {
             return true;
         }
-        if (!(obj instanceof FrontendIdentifier)) {
+        if (!(obj instanceof FrontendIdentifier other)) {
             return false;
         }
 
-        final FrontendIdentifier other = (FrontendIdentifier) obj;
         return memberName.equals(other.memberName) && clientType.equals(other.clientType);
     }
 
index 2a2a5b2b30af2d26bd4c39e75844401611d32129..755eda99bf6645435366a5db11d0746550f85fb6 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -21,6 +20,7 @@ import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serial;
 import java.nio.charset.StandardCharsets;
 import java.util.regex.Pattern;
 import org.eclipse.jdt.annotation.NonNull;
@@ -31,12 +31,10 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier;
  * An {@link Identifier} identifying a data store frontend type, which is able to access the data store backend.
  * Frontend implementations need to define this identifier so that multiple clients existing on a member node can be
  * discerned.
- *
- * @author Robert Varga
  */
-@Beta
 public final class FrontendType implements Comparable<FrontendType>, WritableIdentifier {
     private static final class Proxy implements Externalizable {
+        @Serial
         private static final long serialVersionUID = 1L;
         private byte[] serialized;
 
@@ -71,6 +69,7 @@ public final class FrontendType implements Comparable<FrontendType>, WritableIde
 
     private static final String SIMPLE_STRING_REGEX = "^[a-zA-Z0-9-_.*+:=,!~';]+$";
     private static final Pattern SIMPLE_STRING_PATTERN = Pattern.compile(SIMPLE_STRING_REGEX);
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull String name;
index 3cc2b0c6398ec59bde76877648e40bc7e4e71c27..2404924c640b68970dda49578527b33de974035a 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -21,19 +20,19 @@ import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serial;
 import java.nio.charset.StandardCharsets;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
 
 /**
  * Type-safe encapsulation of a cluster member name.
- *
- * @author Robert Varga
  */
-@Beta
 public final class MemberName implements Comparable<MemberName>, WritableIdentifier {
     private static final class Proxy implements Externalizable {
+        @Serial
         private static final long serialVersionUID = 1L;
+
         private byte[] serialized;
 
         // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
@@ -65,6 +64,7 @@ public final class MemberName implements Comparable<MemberName>, WritableIdentif
         }
     }
 
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull String name;
index 5456fbb19ee97cffeb90da346ebfab99e4b32d70..9b1c4c25b3d046847adad91c113c8dadaaeedf84 100644 (file)
@@ -10,10 +10,10 @@ package org.opendaylight.controller.cluster.access.concepts;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import java.io.Serial;
 import java.io.Serializable;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
@@ -47,14 +47,12 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier;
  * Note that this class specifies the {@link Immutable} contract, which means that all subclasses must follow this API
  * contract.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  * @param <C> Message type
  */
-@Beta
 public abstract class Message<T extends WritableIdentifier, C extends Message<T, C>> implements Immutable,
         Serializable {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull ABIVersion version;
@@ -110,17 +108,12 @@ public abstract class Message<T extends WritableIdentifier, C extends Message<T,
             return (C)this;
         }
 
-        switch (toVersion) {
-            case BORON:
-            case NEON_SR2:
-            case SODIUM_SR1:
-            case MAGNESIUM:
-                return verifyNotNull(cloneAsVersion(toVersion));
-            case TEST_PAST_VERSION:
-            case TEST_FUTURE_VERSION:
-            default:
+        return switch (toVersion) {
+            case BORON, NEON_SR2, SODIUM_SR1, MAGNESIUM -> verifyNotNull(cloneAsVersion(toVersion));
+            case TEST_PAST_VERSION, TEST_FUTURE_VERSION ->
                 throw new IllegalArgumentException("Unhandled ABI version " + toVersion);
-        }
+            default -> throw new IllegalArgumentException("Unhandled ABI version " + toVersion);
+        };
     }
 
     /**
index 093a3f1eb0c1cdedb4c957cfdb81c85b639ac6f2..d39617cf77a59202bee91f2a1299afb109f94173 100644 (file)
@@ -10,8 +10,8 @@ package org.opendaylight.controller.cluster.access.concepts;
 import static java.util.Objects.requireNonNull;
 
 import akka.actor.ActorRef;
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
@@ -20,14 +20,13 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier;
  * A request message concept. Upon receipt of this message, the recipient will respond with either
  * a {@link RequestSuccess} or a {@link RequestFailure} message.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  * @param <C> Message type
  */
-@Beta
 public abstract class Request<T extends WritableIdentifier, C extends Request<T, C>> extends Message<T, C> {
+    @Serial
     private static final long serialVersionUID = 1L;
+
     private final @NonNull ActorRef replyTo;
 
     protected Request(final @NonNull T target, final long sequence, final @NonNull ActorRef replyTo) {
index 7267edea4f5d19e7bc10137b37857c849e2200b2..41bfd13dd20f9d35adf9ef5c9cf7642e43c29e6b 100644 (file)
@@ -9,16 +9,14 @@ package org.opendaylight.controller.cluster.access.concepts;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 
 /**
  * A failure cause behind a {@link RequestFailure} to process a {@link Request}.
- *
- * @author Robert Varga
  */
-@Beta
 public abstract class RequestException extends Exception {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     protected RequestException(final @NonNull String message) {
index db5a15b0bc57c5cda03bfd05ffaed53db7550024..c30269f63e14b86ad3a1906346835db09b4586d2 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.controller.cluster.access.concepts;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
@@ -18,14 +18,12 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier;
 /**
  * A failure response to a {@link Request}. Contains a {@link RequestException} detailing the cause for this failure.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  * @param <C> Message class
  */
-@Beta
 public abstract class RequestFailure<T extends WritableIdentifier, C extends RequestFailure<T, C>>
         extends Response<T, C> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull RequestException cause;
index 9b60d21b0d2fc13b9aa391ac6460629f457c9d33..7542c4cb3640578a0149fc8b43864ca762238f00 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
@@ -15,13 +15,11 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier;
 /**
  * A successful reply to a {@link Request}.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  */
-@Beta
 public abstract class RequestSuccess<T extends WritableIdentifier, C extends RequestSuccess<T, C>> extends
         Response<T, C> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     protected RequestSuccess(final @NonNull C success,  final @NonNull ABIVersion version) {
index f733a9e9199b31c1ed8b4afeb84549c8685bad78..7f74e39683f947593163814f8b65a134b08228e4 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
@@ -17,13 +17,11 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier;
  * {@link RequestFailure} and {@link RequestSuccess}, which provide appropriate specialization. It is visible purely for
  * the purpose of allowing to check if an object is either of those specializations with a single instanceof check.
  *
- * @author Robert Varga
- *
  * @param <T> Target identifier type
  * @param <C> Message type
  */
-@Beta
 public abstract class Response<T extends WritableIdentifier, C extends Response<T, C>> extends Message<T, C> {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     Response(final @NonNull T target, final long sequence) {
index 7730318f578d31c02272abac6faad7ff193f4f99..cc0c6d0e16cdb48d7cdbaafe8c94df629e11f492 100644 (file)
@@ -7,16 +7,14 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 
 /**
  * General error raised when the recipient of a {@link Request} determines that the request contains
  * a {@link ClientIdentifier} which corresponds to an outdated generation.
- *
- * @author Robert Varga
  */
-@Beta
 public final class RetiredGenerationException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public RetiredGenerationException(final long originatingGeneration, final long newGeneration) {
index 7fb0ef070112ed34a2e333723f51815044e0764e..713c413e5297550a998ce5a1c31d3405eb1d960d 100644 (file)
@@ -10,16 +10,14 @@ package org.opendaylight.controller.cluster.access.concepts;
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.Strings;
+import java.io.Serial;
 
 /**
  * General error raised when the recipient of a {@link Request} fails to process a request.
- *
- * @author Robert Varga
  */
-@Beta
 public final class RuntimeRequestException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public RuntimeRequestException(final String message, final Throwable cause) {
index cd3e2608d60ea03cb052dcdfa8a0f52d69d69ad5..118e9262a7dad58bc06d64435da0ac810ee723f7 100644 (file)
@@ -7,14 +7,12 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import com.google.common.annotations.Beta;
-
 /**
  * A tagging interface that specifies a message whose serialized size can be large and thus should be sliced into
  * smaller chunks when transporting over the wire.
  *
  * @author Thomas Pantelis
  */
-@Beta
 public interface SliceableMessage {
+    // Marker interface
 }
index d2a92ea1913374a2dfa693195f27f1916938d347..354cf8c9bf216454623202415b702bbf8d512efa 100644 (file)
@@ -9,26 +9,25 @@ package org.opendaylight.controller.cluster.access.concepts;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
 import org.opendaylight.yangtools.concepts.WritableObjects;
 
 /**
  * Globally-unique identifier of a transaction.
- *
- * @author Robert Varga
  */
-@Beta
 public final class TransactionIdentifier implements WritableIdentifier {
     private static final class Proxy implements Externalizable {
+        @Serial
         private static final long serialVersionUID = 1L;
+
         private LocalHistoryIdentifier historyId;
         private long transactionId;
 
@@ -61,7 +60,9 @@ public final class TransactionIdentifier implements WritableIdentifier {
         }
     }
 
+    @Serial
     private static final long serialVersionUID = 1L;
+
     private final @NonNull LocalHistoryIdentifier historyId;
     private final long transactionId;
     private String shortString;
@@ -97,15 +98,8 @@ public final class TransactionIdentifier implements WritableIdentifier {
 
     @Override
     public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof TransactionIdentifier)) {
-            return false;
-        }
-
-        final TransactionIdentifier other = (TransactionIdentifier) obj;
-        return transactionId == other.transactionId && historyId.equals(other.historyId);
+        return this == obj || obj instanceof TransactionIdentifier other && transactionId == other.transactionId
+            && historyId.equals(other.historyId);
     }
 
     public String toShortString() {
index 903ed59fbc04c00d3f7121d11edfc11875dc76b7..134a0a94f26b1b3f1964d2486a01ae0fc6609887 100644 (file)
@@ -7,16 +7,14 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 
 /**
  * General error raised when the recipient of a {@link Request} determines that it does not know how to handle
  * the request.
- *
- * @author Robert Varga
  */
-@Beta
 public final class UnsupportedRequestException extends RequestException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     public UnsupportedRequestException(final Request<?, ?> request) {
index a1c84c0e83cf5d947f3cbc49b2f4590ce03a13b6..98edb1d3419dbde6e97352c964f143f10558bfcb 100644 (file)
@@ -10,17 +10,13 @@ package org.opendaylight.controller.cluster.access.client;
 import akka.actor.ActorRef;
 import akka.actor.PoisonPill;
 import akka.persistence.AbstractPersistentActor;
-import com.google.common.annotations.Beta;
 import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Frontend actor which takes care of persisting generations and creates an appropriate ClientIdentifier.
- *
- * @author Robert Varga
  */
-@Beta
 public abstract class AbstractClientActor extends AbstractPersistentActor {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractClientActor.class);
     private AbstractClientActorBehavior<?> currentBehavior;
index 14ca1ef38c8f850071d3e1b04f520faa7a496b69..40f07f137a59712fe16da23b67d5e3ea4cdffbc2 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.controller.cluster.access.client;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.Stopwatch;
 import com.google.common.base.Verify;
 import java.util.Collection;
@@ -45,10 +44,7 @@ import scala.concurrent.duration.FiniteDuration;
 
 /**
  * A behavior, which handles messages sent to a {@link AbstractClientActor}.
- *
- * @author Robert Varga
  */
-@Beta
 public abstract class ClientActorBehavior<T extends BackendInfo> extends
         RecoveredClientActorBehavior<ClientActorContext> implements Identifiable<ClientIdentifier> {
     /**
index 0864da10b06272c892f67d50aac9e8831e45b0d9..abebf02197965fc7b46ccca446009ec208e8b655 100644 (file)
@@ -13,7 +13,6 @@ import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.actor.Cancellable;
 import akka.actor.Scheduler;
-import com.google.common.annotations.Beta;
 import com.google.common.base.Ticker;
 import java.util.concurrent.TimeUnit;
 import org.eclipse.jdt.annotation.NonNull;
@@ -32,10 +31,7 @@ import scala.concurrent.duration.FiniteDuration;
  * Time-keeping in a client actor is based on monotonic time. The precision of this time can be expected to be the
  * same as {@link System#nanoTime()}, but it is not tied to that particular clock. Actor clock is exposed as
  * a {@link Ticker}, which can be obtained via {@link #ticker()}. This class is thread-safe.
- *
- * @author Robert Varga
  */
-@Beta
 public class ClientActorContext extends AbstractClientActorContext implements Identifiable<ClientIdentifier> {
     private final ExecutionContext executionContext;
     private final ClientIdentifier identifier;
@@ -49,9 +45,9 @@ public class ClientActorContext extends AbstractClientActorContext implements Id
             final ClientIdentifier identifier, final ClientActorConfig config) {
         super(self, persistenceId);
         this.identifier = requireNonNull(identifier);
-        this.scheduler = requireNonNull(system).scheduler();
-        this.executionContext = system.dispatcher();
-        this.dispatchers = new Dispatchers(system.dispatchers());
+        scheduler = requireNonNull(system).scheduler();
+        executionContext = system.dispatcher();
+        dispatchers = new Dispatchers(system.dispatchers());
         this.config = requireNonNull(config);
 
         messageSlicer = MessageSlicer.builder().messageSliceSize(config.getMaximumMessageSliceSize())
index 10159901064c6578f3c530ff00d16aa051c9bb53..445321b474cd725a03e3e41bf6dd688786e9de42 100644 (file)
@@ -7,11 +7,9 @@
  */
 package org.opendaylight.controller.cluster.access.client;
 
-import com.google.common.annotations.Beta;
 import java.util.Optional;
 import org.opendaylight.controller.cluster.access.concepts.RequestException;
 
-@Beta
 public final class ConnectingClientConnection<T extends BackendInfo> extends AbstractClientConnection<T> {
     /**
      * A wild estimate on how deep a queue should be. Without having knowledge of the remote actor we can only
index b47ddee2a3c5707624ca78b11579a0a3e9894473..c5e47e76dd8e22b272af4c208250c96765cb83df 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.controller.cluster.access.client;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import java.util.function.Consumer;
@@ -20,10 +19,7 @@ import org.opendaylight.yangtools.concepts.Immutable;
 /**
  * Single entry in a {@link AbstractClientConnection}. Tracks the request, the associated callback and time when
  * the request was first enqueued.
- *
- * @author Robert Varga
  */
-@Beta
 public class ConnectionEntry implements Immutable {
     private final Consumer<Response<?, ?>> callback;
     private final Request<?, ?> request;
@@ -32,7 +28,7 @@ public class ConnectionEntry implements Immutable {
     ConnectionEntry(final Request<?, ?> request, final Consumer<Response<?, ?>> callback, final long now) {
         this.request = requireNonNull(request);
         this.callback = requireNonNull(callback);
-        this.enqueuedTicks = now;
+        enqueuedTicks = now;
     }
 
     ConnectionEntry(final ConnectionEntry entry) {
index 08bc05346b65d1ce53faa7d3e64e8f38fc6a5359..7e684453969e3702af4b5027730b51ed946ab2f7 100644 (file)
@@ -7,25 +7,32 @@
  */
 package org.opendaylight.controller.cluster.access.client;
 
-import com.google.common.annotations.Beta;
-import com.google.common.base.Verify;
+import static com.google.common.base.Verify.verify;
+import static com.google.common.base.Verify.verifyNotNull;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 import java.util.concurrent.locks.StampedLock;
 
 /**
  * A lock implementation which allows users to perform optimistic reads and validate them in a fashion similar
  * to {@link StampedLock}. In case a read is contented with a write, the read side will throw
  * an {@link InversibleLockException}, which the caller can catch and use to wait for the write to resolve.
- *
- * @author Robert Varga
  */
-@Beta
 public final class InversibleLock {
-    private static final AtomicReferenceFieldUpdater<InversibleLock, CountDownLatch> LATCH_UPDATER =
-            AtomicReferenceFieldUpdater.newUpdater(InversibleLock.class, CountDownLatch.class, "latch");
+    private static final VarHandle LATCH;
+
+    static {
+        try {
+            LATCH = MethodHandles.lookup().findVarHandle(InversibleLock.class, "latch", CountDownLatch.class);
+        } catch (NoSuchFieldException | IllegalAccessException e) {
+            throw new ExceptionInInitializerError(e);
+        }
+    }
 
     private final StampedLock lock = new StampedLock();
+
     private volatile CountDownLatch latch;
 
     /**
@@ -43,7 +50,7 @@ public final class InversibleLock {
 
             // Write-locked. Read the corresponding latch and if present report an exception, which will propagate
             // and force release of locks.
-            final CountDownLatch local = latch;
+            final var local = latch;
             if (local != null) {
                 throw new InversibleLockException(local);
             }
@@ -57,18 +64,14 @@ public final class InversibleLock {
     }
 
     public long writeLock() {
-        final CountDownLatch local = new CountDownLatch(1);
-        final boolean taken = LATCH_UPDATER.compareAndSet(this, null, local);
-        Verify.verify(taken);
-
+        verify(LATCH.compareAndSet(this, null, new CountDownLatch(1)));
         return lock.writeLock();
     }
 
     public void unlockWrite(final long stamp) {
-        final CountDownLatch local = LATCH_UPDATER.getAndSet(this, null);
-        Verify.verifyNotNull(local);
+        final CountDownLatch local = (CountDownLatch) LATCH.getAndSet(this, null);
+        verifyNotNull(local);
         lock.unlockWrite(stamp);
         local.countDown();
     }
-
 }
index a2f2ffd7e87eb15b8bb9bbcf45460346eea7610a..82b6568459a34cdedaf24f7ddb91d32cba61b348 100644 (file)
@@ -9,17 +9,15 @@ package org.opendaylight.controller.cluster.access.client;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.annotations.Beta;
+import java.io.Serial;
 import java.util.concurrent.CountDownLatch;
 
 /**
  * Exception thrown from {@link InversibleLock#optimisticRead()} and can be used to wait for the racing write
  * to complete using {@link #awaitResolution()}.
- *
- * @author Robert Varga
  */
-@Beta
 public final class InversibleLockException extends RuntimeException {
+    @Serial
     private static final long serialVersionUID = 1L;
 
     private final transient CountDownLatch latch;