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=53731fa49170ffd22aa39512deebd825f7e12c08;hb=7a38f0591bc527178510d749ae361e317dcc9788;hp=b3254f58d6fa34926263475fbdfebff9787d8030;hpb=4d1709660b7af992d4c382a2a38debb5c7d64fb9;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 b3254f58d6..53731fa491 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,12 @@ */ package org.opendaylight.controller.cluster.datastore.messages; +import akka.actor.ExtendedActorSystem; import akka.serialization.JSerializer; +import akka.util.ClassLoaderObjectInputStream; import com.google.common.base.Preconditions; +import java.io.ByteArrayInputStream; +import java.io.IOException; import org.apache.commons.lang3.SerializationUtils; import org.opendaylight.controller.cluster.datastore.utils.AbstractBatchedModificationsCursor; @@ -19,6 +23,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 = Preconditions.checkNotNull(system); + } + @Override public int identifier() { return 97439437; @@ -33,11 +44,11 @@ public final class ReadyLocalTransactionSerializer extends JSerializer { public byte[] toBinary(final Object obj) { Preconditions.checkArgument(obj instanceof ReadyLocalTransaction, "Unsupported object type %s", obj.getClass()); final ReadyLocalTransaction readyLocal = (ReadyLocalTransaction) obj; - final BatchedModifications batched = new BatchedModifications(readyLocal.getTransactionID(), + 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,7 +57,12 @@ 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 {