*/
package org.opendaylight.controller.cluster.access.concepts;
-import com.google.common.annotations.Beta;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.base.MoreObjects.ToStringHelper;
-import com.google.common.base.Preconditions;
-import javax.annotation.Nonnull;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.access.ABIVersion;
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> {
+public abstract class RequestFailure<T extends WritableIdentifier, C extends RequestFailure<T, C>>
+ extends Response<T, C> {
+ /**
+ * Externalizable proxy for use with {@link RequestFailure} subclasses.
+ *
+ * @param <T> Target identifier type
+ */
+ protected interface SerialForm<T extends WritableIdentifier, C extends RequestFailure<T, C>>
+ extends Message.SerialForm<T, C> {
+ @Override
+ default C readExternal(final ObjectInput in, final T target, final long sequence)
+ throws IOException, ClassNotFoundException {
+ return createFailure(target, sequence, (RequestException) in.readObject());
+ }
+
+ @Override
+ default void writeExternal(final ObjectOutput out, final C msg) throws IOException {
+ out.writeObject(msg.getCause());
+ }
+
+ @NonNull C createFailure(@NonNull T target, long sequence, @NonNull RequestException failureCause);
+ }
+
+ @java.io.Serial
private static final long serialVersionUID = 1L;
- private final RequestException cause;
- protected RequestFailure(final @Nonnull C failure, final @Nonnull ABIVersion version) {
+ private final @NonNull RequestException cause;
+
+ protected RequestFailure(final @NonNull C failure, final @NonNull ABIVersion version) {
super(failure, version);
- this.cause = Preconditions.checkNotNull(failure.getCause());
+ this.cause = requireNonNull(failure.getCause());
}
- protected RequestFailure(final @Nonnull T target, final long sequence, final long retry,
- final @Nonnull RequestException cause) {
- super(target, sequence, retry);
- this.cause = Preconditions.checkNotNull(cause);
+ protected RequestFailure(final @NonNull T target, final long sequence, final @NonNull RequestException cause) {
+ super(target, sequence);
+ this.cause = requireNonNull(cause);
}
/**
*
* @return Failure cause.
*/
- public final @Nonnull RequestException getCause() {
+ public final @NonNull RequestException getCause() {
return cause;
}
}
@Override
- protected abstract AbstractRequestFailureProxy<T, C> externalizableProxy(@Nonnull ABIVersion version);
+ protected abstract SerialForm<T, C> externalizableProxy(ABIVersion version);
}