import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.opendaylight.yangtools.concepts.WritableObjects;
+
/**
* Serialization proxy for {@link ClientIdentifier}.
*/
-final class CI implements ClientIdentifier.SerialForm {
+final class CI implements Externalizable {
@java.io.Serial
private static final long serialVersionUID = 1L;
}
@Override
- public ClientIdentifier identifier() {
- return verifyNotNull(identifier);
+ public void readExternal(final ObjectInput in) throws IOException {
+ identifier = new ClientIdentifier(FrontendIdentifier.readFrom(in), WritableObjects.readLong(in));
}
@Override
- public void setIdentifier(final ClientIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
+ public void writeExternal(final ObjectOutput out) throws IOException {
+ identifier.getFrontendId().writeTo(out);
+ WritableObjects.writeLong(out, identifier.getGeneration());
}
- @Override
- public Object readResolve() {
- return identifier();
+ @java.io.Serial
+ private Object readResolve() {
+ return verifyNotNull(identifier);
}
}
*/
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.base.MoreObjects;
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 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;
* of a particular frontend.
*/
public final class ClientIdentifier implements WritableIdentifier {
- interface SerialForm extends Externalizable {
- @NonNull ClientIdentifier identifier();
-
- void setIdentifier(@NonNull ClientIdentifier identifier);
-
- @java.io.Serial
- Object readResolve();
-
- @Override
- default void readExternal(final ObjectInput in) throws IOException {
- setIdentifier(new ClientIdentifier(FrontendIdentifier.readFrom(in), WritableObjects.readLong(in)));
- }
-
- @Override
- default void writeExternal(final ObjectOutput out) throws IOException {
- final var id = identifier();
- id.getFrontendId().writeTo(out);
- WritableObjects.writeLong(out, id.getGeneration());
- }
- }
-
- @Deprecated(since = "7.0.0", forRemoval = true)
- private static final class Proxy implements SerialForm {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private ClientIdentifier identifier;
-
- // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
- // be able to create instances via reflection.
- @SuppressWarnings("checkstyle:RedundantModifier")
- public Proxy() {
- // Needed for Externalizable
- }
-
- Proxy(final ClientIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public ClientIdentifier identifier() {
- return verifyNotNull(identifier);
- }
-
- @Override
- public void setIdentifier(final ClientIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public Object readResolve() {
- return identifier();
- }
- }
-
@java.io.Serial
private static final long serialVersionUID = 1L;
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import java.io.ObjectInput;
+
/**
* Serialization proxy for {@link FailureEnvelope}.
*/
-final class FE implements FailureEnvelope.SerialForm {
+final class FE implements ResponseEnvelope.SerialForm<RequestFailure<?, ?>, FailureEnvelope> {
@java.io.Serial
private static final long serialVersionUID = 1L;
this.envelope = requireNonNull(envelope);
}
+ @Override
+ public FailureEnvelope readExternal(final ObjectInput in, final long sessionId, final long txSequence,
+ final RequestFailure<?, ?> message, final long executionTimeNanos) {
+ return new FailureEnvelope(message, sessionId, txSequence, executionTimeNanos);
+ }
+
@Override
public Object readResolve() {
return envelope();
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
/**
* Serialization proxy for {@link FrontendIdentifier}.
*/
-final class FI implements FrontendIdentifier.SerialForm {
+final class FI implements Externalizable {
@java.io.Serial
private static final long serialVersionUID = 1L;
}
@Override
- public FrontendIdentifier identifier() {
- return verifyNotNull(identifier);
+ public void readExternal(final ObjectInput in) throws IOException {
+ identifier = new FrontendIdentifier(MemberName.readFrom(in), FrontendType.readFrom(in));
}
@Override
- public void setIdentifier(final FrontendIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
+ public void writeExternal(final ObjectOutput out) throws IOException {
+ identifier.getMemberName().writeTo(out);
+ identifier.getClientType().writeTo(out);
}
- @Override
- public Object readResolve() {
- return identifier();
+ @java.io.Serial
+ private Object readResolve() {
+ return verifyNotNull(identifier);
}
}
*/
package org.opendaylight.controller.cluster.access.concepts;
-import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.nio.charset.StandardCharsets;
+
/**
* Serialization proxy for {@link FrontendType}.
*/
-final class FT implements FrontendType.SerialForm {
+final class FT implements Externalizable {
@java.io.Serial
private static final long serialVersionUID = 1L;
- private FrontendType type;
+ private byte[] serialized;
@SuppressWarnings("checkstyle:RedundantModifier")
public FT() {
// for Externalizable
}
- FT(final FrontendType type) {
- this.type = requireNonNull(type);
+ FT(final byte[] serialized) {
+ this.serialized = requireNonNull(serialized);
}
@Override
- public FrontendType type() {
- return verifyNotNull(type);
+ public void writeExternal(final ObjectOutput out) throws IOException {
+ out.writeInt(serialized.length);
+ out.write(serialized);
}
@Override
- public void setType(final FrontendType type) {
- this.type = requireNonNull(type);
+ public void readExternal(final ObjectInput in) throws IOException {
+ serialized = new byte[in.readInt()];
+ in.readFully(serialized);
}
- @Override
- public Object readResolve() {
- return type();
+ @java.io.Serial
+ private Object readResolve() {
+ // TODO: consider caching instances here
+ return new FrontendType(new String(serialized, StandardCharsets.UTF_8), serialized);
}
}
*/
package org.opendaylight.controller.cluster.access.concepts;
-import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
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.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.
*/
public final class FrontendIdentifier implements WritableIdentifier {
- interface SerialForm extends Externalizable {
- @NonNull FrontendIdentifier identifier();
-
- void setIdentifier(@NonNull FrontendIdentifier identifier);
-
- @java.io.Serial
- Object readResolve();
-
- @Override
- default void writeExternal(final ObjectOutput out) throws IOException {
- final var id = identifier();
- id.memberName.writeTo(out);
- id.clientType.writeTo(out);
- }
-
- @Override
- default void readExternal(final ObjectInput in) throws IOException {
- setIdentifier(new FrontendIdentifier(MemberName.readFrom(in), FrontendType.readFrom(in)));
- }
- }
-
- @Deprecated(since = "7.0.0", forRemoval = true)
- private static final class Proxy implements SerialForm {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private FrontendIdentifier identifier;
-
- // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
- // be able to create instances via reflection.
- @SuppressWarnings("checkstyle:RedundantModifier")
- public Proxy() {
- // Needed for Externalizable
- }
-
- Proxy(final FrontendIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public FrontendIdentifier identifier() {
- return verifyNotNull(identifier);
- }
-
- @Override
- public void setIdentifier(final FrontendIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public Object readResolve() {
- return identifier();
- }
- }
-
@java.io.Serial
private static final long serialVersionUID = 1L;
}
public static @NonNull FrontendIdentifier readFrom(final DataInput in) throws IOException {
- final MemberName memberName = MemberName.readFrom(in);
- final FrontendType clientType = FrontendType.readFrom(in);
+ final var memberName = MemberName.readFrom(in);
+ final var clientType = FrontendType.readFrom(in);
return new FrontendIdentifier(memberName, clientType);
}
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
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.nio.charset.StandardCharsets;
import java.util.regex.Pattern;
import org.eclipse.jdt.annotation.NonNull;
* discerned.
*/
public final class FrontendType implements Comparable<FrontendType>, WritableIdentifier {
- interface SerialForm extends Externalizable {
- @NonNull FrontendType type();
-
- void setType(@NonNull FrontendType type);
-
- @java.io.Serial
- Object readResolve();
-
- @Override
- default void writeExternal(final ObjectOutput out) throws IOException {
- final var serialized = type().getSerialized();
- out.writeInt(serialized.length);
- out.write(serialized);
- }
-
- @Override
- default void readExternal(final ObjectInput in) throws IOException {
- final var serialized = new byte[in.readInt()];
- in.readFully(serialized);
- // TODO: consider caching instances here
- setType(new FrontendType(new String(serialized, StandardCharsets.UTF_8), serialized));
- }
- }
-
- @Deprecated(since = "7.0.0", forRemoval = true)
- private static final class Proxy implements SerialForm {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private FrontendType type;
-
- // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
- // be able to create instances via reflection.
- @SuppressWarnings("checkstyle:RedundantModifier")
- public Proxy() {
- // For Externalizable
- }
-
- Proxy(final FrontendType type) {
- this.type = requireNonNull(type);
- }
-
- @Override
- public FrontendType type() {
- return verifyNotNull(type);
- }
-
- @Override
- public void setType(final FrontendType type) {
- this.type = requireNonNull(type);
- }
-
- @Override
- public Object readResolve() {
- return type();
- }
- }
-
@java.io.Serial
private static final long serialVersionUID = 1L;
private static final String SIMPLE_STRING_REGEX = "^[a-zA-Z0-9-_.*+:=,!~';]+$";
@java.io.Serial
private Object writeReplace() {
- return new FT(this);
+ return new FT(getSerialized());
}
}
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.opendaylight.yangtools.concepts.WritableObjects;
+
/**
* Serialization proxy for {@link LocalHistoryIdentifier}.
+ *
+ * @implNote
+ * cookie is currently required only for module-based sharding, which is implemented as part of normal
+ * DataBroker interfaces. For DOMDataTreeProducer cookie will always be zero, hence we may end up not needing
+ * cookie at all.
+ * We use WritableObjects.writeLongs() to output historyId and cookie (in that order). If we end up not needing
+ * the cookie at all, we can switch to writeLong() and use zero flags for compatibility.
*/
-final class HI implements LocalHistoryIdentifier.SerialForm {
+final class HI implements Externalizable {
@java.io.Serial
private static final long serialVersionUID = 1L;
}
@Override
- public LocalHistoryIdentifier identifier() {
- return verifyNotNull(identifier);
+ public void writeExternal(final ObjectOutput out) throws IOException {
+ identifier.getClientId().writeTo(out);
+ WritableObjects.writeLongs(out, identifier.getHistoryId(), identifier.getCookie());
}
@Override
- public void setIdentifier(final LocalHistoryIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
+ public void readExternal(final ObjectInput in) throws IOException {
+ final var clientId = ClientIdentifier.readFrom(in);
+ final byte header = WritableObjects.readLongHeader(in);
+ final var historyId = WritableObjects.readFirstLong(in, header);
+ final var cookie = WritableObjects.readSecondLong(in, header);
+ identifier = new LocalHistoryIdentifier(clientId, historyId, cookie);
}
- @Override
- public Object readResolve() {
- return identifier();
+ @java.io.Serial
+ private Object readResolve() {
+ return verifyNotNull(identifier);
}
}
*/
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.base.MoreObjects;
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 org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.WritableIdentifier;
import org.opendaylight.yangtools.concepts.WritableObjects;
* - an unsigned long cookie, assigned by the client and meaningless on the backend, which just reflects it back
*/
public final class LocalHistoryIdentifier implements WritableIdentifier {
- /**
- * Serialized form of {@link LocalHistoryIdentifier}.
- *
- * @implNote
- * cookie is currently required only for module-based sharding, which is implemented as part of normal
- * DataBroker interfaces. For DOMDataTreeProducer cookie will always be zero, hence we may end up not needing
- * cookie at all.
- * We use WritableObjects.writeLongs() to output historyId and cookie (in that order). If we end up not needing
- * the cookie at all, we can switch to writeLong() and use zero flags for compatibility.
- */
- interface SerialForm extends Externalizable {
- @NonNull LocalHistoryIdentifier identifier();
-
- void setIdentifier(@NonNull LocalHistoryIdentifier identifier);
-
- @java.io.Serial
- Object readResolve();
-
- @Override
- default void writeExternal(final ObjectOutput out) throws IOException {
- final var id = identifier();
- id.getClientId().writeTo(out);
- WritableObjects.writeLongs(out, id.getHistoryId(), id.getCookie());
- }
-
- @Override
- default void readExternal(final ObjectInput in) throws IOException {
- final var clientId = ClientIdentifier.readFrom(in);
-
- final byte header = WritableObjects.readLongHeader(in);
- final var historyId = WritableObjects.readFirstLong(in, header);
- final var cookie = WritableObjects.readSecondLong(in, header);
- setIdentifier(new LocalHistoryIdentifier(clientId, historyId, cookie));
- }
- }
-
- @Deprecated(since = "7.0.0", forRemoval = true)
- private static final class Proxy implements SerialForm {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private LocalHistoryIdentifier identifier;
-
- // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
- // be able to create instances via reflection.
- @SuppressWarnings("checkstyle:RedundantModifier")
- public Proxy() {
- // For Externalizable
- }
-
- Proxy(final LocalHistoryIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public LocalHistoryIdentifier identifier() {
- return verifyNotNull(identifier);
- }
-
- @Override
- public void setIdentifier(final LocalHistoryIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public Object readResolve() {
- return identifier();
- }
- }
-
@java.io.Serial
private static final long serialVersionUID = 1L;
*/
package org.opendaylight.controller.cluster.access.concepts;
-import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.nio.charset.StandardCharsets;
+
/**
* Serialization proxy for {@link MemberName}.
*/
-final class MN implements MemberName.SerialForm {
+final class MN implements Externalizable {
@java.io.Serial
private static final long serialVersionUID = 1L;
- private MemberName name;
+ private byte[] serialized;
@SuppressWarnings("checkstyle:RedundantModifier")
public MN() {
// for Externalizable
}
- MN(final MemberName name) {
- this.name = requireNonNull(name);
+ MN(final byte[] serialized) {
+ this.serialized = requireNonNull(serialized);
}
@Override
- public MemberName name() {
- return verifyNotNull(name);
+ public void writeExternal(final ObjectOutput out) throws IOException {
+ out.writeInt(serialized.length);
+ out.write(serialized);
}
@Override
- public void setName(final MemberName name) {
- this.name = requireNonNull(name);
+ public void readExternal(final ObjectInput in) throws IOException {
+ serialized = new byte[in.readInt()];
+ in.readFully(serialized);
}
- @Override
- public Object readResolve() {
- return name();
+ @java.io.Serial
+ private Object readResolve() {
+ // TODO: consider caching instances here
+ return new MemberName(new String(serialized, StandardCharsets.UTF_8), serialized);
}
}
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
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.nio.charset.StandardCharsets;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.WritableIdentifier;
* Type-safe encapsulation of a cluster member name.
*/
public final class MemberName implements Comparable<MemberName>, WritableIdentifier {
- interface SerialForm extends Externalizable {
- @NonNull MemberName name();
-
- void setName(@NonNull MemberName name);
-
- @java.io.Serial
- Object readResolve();
-
- @Override
- default void writeExternal(final ObjectOutput out) throws IOException {
- final var serialized = name().getSerialized();
- out.writeInt(serialized.length);
- out.write(serialized);
- }
-
- @Override
- default void readExternal(final ObjectInput in) throws IOException {
- final var serialized = new byte[in.readInt()];
- in.readFully(serialized);
- // TODO: consider caching instances here
- setName(new MemberName(new String(serialized, StandardCharsets.UTF_8), serialized));
- }
- }
-
- @Deprecated(since = "7.0.0", forRemoval = true)
- private static final class Proxy implements SerialForm {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private MemberName name;
-
- // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
- // be able to create instances via reflection.
- @SuppressWarnings("checkstyle:RedundantModifier")
- public Proxy() {
- // For Externalizable
- }
-
- Proxy(final MemberName name) {
- this.name = requireNonNull(name);
- }
-
- @Override
- public MemberName name() {
- return verifyNotNull(name);
- }
-
- @Override
- public void setName(final MemberName name) {
- this.name = requireNonNull(name);
- }
-
- @Override
- public Object readResolve() {
- return name();
- }
- }
-
@java.io.Serial
private static final long serialVersionUID = 1L;
@java.io.Serial
Object writeReplace() {
- return new MN(this);
+ return new MN(getSerialized());
}
}
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.opendaylight.yangtools.concepts.WritableObjects;
+
/**
* Serialization proxy for {@link TransactionIdentifier}.
*/
-final class TI implements TransactionIdentifier.SerialForm {
+final class TI implements Externalizable {
@java.io.Serial
private static final long serialVersionUID = 1L;
}
@Override
- public TransactionIdentifier identifier() {
- return verifyNotNull(identifier);
+ public void readExternal(final ObjectInput in) throws IOException {
+ identifier = new TransactionIdentifier(LocalHistoryIdentifier.readFrom(in), WritableObjects.readLong(in));
}
@Override
- public void setIdentifier(final TransactionIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
+ public void writeExternal(final ObjectOutput out) throws IOException {
+ identifier.getHistoryId().writeTo(out);
+ WritableObjects.writeLong(out, identifier.getTransactionId());
}
- @Override
- public Object readResolve() {
- return identifier();
+ @java.io.Serial
+ private Object readResolve() {
+ return verifyNotNull(identifier);
}
}
*/
package org.opendaylight.controller.cluster.access.concepts;
-import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
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 org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.WritableIdentifier;
import org.opendaylight.yangtools.concepts.WritableObjects;
* Globally-unique identifier of a transaction.
*/
public final class TransactionIdentifier implements WritableIdentifier {
- interface SerialForm extends Externalizable {
- @NonNull TransactionIdentifier identifier();
-
- void setIdentifier(@NonNull TransactionIdentifier identifier);
-
- @java.io.Serial
- Object readResolve();
-
- @Override
- default void readExternal(final ObjectInput in) throws IOException {
- setIdentifier(new TransactionIdentifier(LocalHistoryIdentifier.readFrom(in), WritableObjects.readLong(in)));
- }
-
- @Override
- default void writeExternal(final ObjectOutput out) throws IOException {
- final var id = identifier();
- id.getHistoryId().writeTo(out);
- WritableObjects.writeLong(out, id.getTransactionId());
- }
- }
-
- @Deprecated(since = "7.0.0", forRemoval = true)
- private static final class Proxy implements SerialForm {
- @java.io.Serial
- private static final long serialVersionUID = 1L;
-
- private TransactionIdentifier identifier;
-
- // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
- // be able to create instances via reflection.
- @SuppressWarnings("checkstyle:RedundantModifier")
- public Proxy() {
- // For Externalizable
- }
-
- Proxy(final TransactionIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public @NonNull TransactionIdentifier identifier() {
- return verifyNotNull(identifier);
- }
-
- @Override
- public void setIdentifier(final TransactionIdentifier identifier) {
- this.identifier = requireNonNull(identifier);
- }
-
- @Override
- public Object readResolve() {
- return identifier();
- }
- }
-
@java.io.Serial
private static final long serialVersionUID = 1L;