X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fmessages%2FReadyLocalTransactionSerializer.java;h=c44f9105c0c093e16005b13e888d37bf64a5b861;hb=99f80f27bee37bb23e345420bf14bb7bb4793c28;hp=a08a27fd04d495529754f964cf5e9a8b4447bf54;hpb=26721a6f2bc3ce4d524ccb562d7e7a38b4b76068;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializer.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializer.java index a08a27fd04..c44f9105c0 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializer.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializer.java @@ -7,8 +7,14 @@ */ package org.opendaylight.controller.cluster.datastore.messages; +import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; + +import akka.actor.ExtendedActorSystem; import akka.serialization.JSerializer; -import com.google.common.base.Preconditions; +import akka.util.ClassLoaderObjectInputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; import org.apache.commons.lang3.SerializationUtils; import org.opendaylight.controller.cluster.datastore.utils.AbstractBatchedModificationsCursor; @@ -19,6 +25,13 @@ import org.opendaylight.controller.cluster.datastore.utils.AbstractBatchedModifi * shards. */ public final class ReadyLocalTransactionSerializer extends JSerializer { + + private final ExtendedActorSystem system; + + public ReadyLocalTransactionSerializer(final ExtendedActorSystem system) { + this.system = requireNonNull(system); + } + @Override public int identifier() { return 97439437; @@ -31,13 +44,13 @@ public final class ReadyLocalTransactionSerializer extends JSerializer { @Override public byte[] toBinary(final Object obj) { - Preconditions.checkArgument(obj instanceof ReadyLocalTransaction, "Unsupported object type %s", obj.getClass()); + checkArgument(obj instanceof ReadyLocalTransaction, "Unsupported object type %s", obj.getClass()); final ReadyLocalTransaction readyLocal = (ReadyLocalTransaction) obj; - final BatchedModifications batched = new BatchedModifications(readyLocal.getTransactionID(), - readyLocal.getRemoteVersion(), ""); + final BatchedModifications batched = new BatchedModifications(readyLocal.getTransactionId(), + readyLocal.getRemoteVersion()); batched.setDoCommitOnReady(readyLocal.isDoCommitOnReady()); batched.setTotalMessagesSent(1); - batched.setReady(true); + batched.setReady(readyLocal.getParticipatingShardNames()); readyLocal.getModification().applyToCursor(new BatchedCursor(batched)); @@ -46,14 +59,19 @@ public final class ReadyLocalTransactionSerializer extends JSerializer { @Override public Object fromBinaryJava(final byte[] bytes, final Class clazz) { - return SerializationUtils.deserialize(bytes); + try (ClassLoaderObjectInputStream is = new ClassLoaderObjectInputStream(system.dynamicAccess().classLoader(), + new ByteArrayInputStream(bytes))) { + return is.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new IllegalStateException("Failed to deserialize object", e); + } } private static final class BatchedCursor extends AbstractBatchedModificationsCursor { private final BatchedModifications message; BatchedCursor(final BatchedModifications message) { - this.message = Preconditions.checkNotNull(message); + this.message = requireNonNull(message); } @Override