}
}
+ public static void writeNormalizedNode(final DataOutput out, final NormalizedNodeStreamVersion version,
+ final @Nullable NormalizedNode<?, ?> node) throws IOException {
+ if (node != null) {
+ out.writeBoolean(true);
+
+ try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out, version)) {
+ stream.writeNormalizedNode(node);
+ }
+ } else {
+ out.writeBoolean(false);
+ }
+ }
+
public static YangInstanceIdentifier readPath(final DataInput in) throws IOException {
return NormalizedNodeInputOutput.newDataInput(in).readYangInstanceIdentifier();
}
}
}
+ public static void writePath(final DataOutput out, final NormalizedNodeStreamVersion version,
+ final @NonNull YangInstanceIdentifier path) throws IOException {
+ try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out, version)) {
+ stream.writeYangInstanceIdentifier(path);
+ }
+ }
+
public static <T> void readNodeAndPath(final DataInput in, final T instance, final Applier<T> applier)
throws IOException {
final NormalizedNodeDataInput stream = NormalizedNodeInputOutput.newDataInput(in);
package org.opendaylight.controller.cluster.datastore;
/**
- * Defines version numbers.
+ * Defines version numbers where ask-based protocol is concerned.
*
* @author Thomas Pantelis
*/
-public interface DataStoreVersions {
- short BASE_HELIUM_VERSION = 0;
- short HELIUM_1_VERSION = 1;
- short HELIUM_2_VERSION = 2;
- short LITHIUM_VERSION = 3;
- short BORON_VERSION = 5;
- short FLUORINE_VERSION = 9;
- short CURRENT_VERSION = FLUORINE_VERSION;
+public final class DataStoreVersions {
+ public static final short BASE_HELIUM_VERSION = 0;
+ public static final short HELIUM_1_VERSION = 1;
+ public static final short HELIUM_2_VERSION = 2;
+ public static final short LITHIUM_VERSION = 3;
+ public static final short BORON_VERSION = 5;
+ public static final short FLUORINE_VERSION = 9;
+ public static final short SODIUM_VERSION = 10;
+ public static final short CURRENT_VERSION = SODIUM_VERSION;
+
+ private DataStoreVersions() {
+
+ }
}
@Override
public void writeExternal(final ObjectOutput out) throws IOException {
super.writeExternal(out);
- SerializationUtils.writePath(out, path);
+ SerializationUtils.writePath(out, getStreamVersion(), path);
}
public AbstractRead<T> asVersion(final short version) {
@Override
public void writeExternal(final ObjectOutput out) throws IOException {
super.writeExternal(out);
- SerializationUtils.writeNormalizedNode(out, normalizedNode);
+ SerializationUtils.writeNormalizedNode(out, getStreamVersion(), normalizedNode);
}
public static ReadDataReply fromSerializable(final Object serializable) {
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.cluster.datastore.DataStoreVersions;
+import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeStreamVersion;
/**
* Abstract base class for a versioned Externalizable message.
public VersionedExternalizableMessage() {
}
- public VersionedExternalizableMessage(short version) {
+ public VersionedExternalizableMessage(final short version) {
this.version = version <= DataStoreVersions.CURRENT_VERSION ? version : DataStoreVersions.CURRENT_VERSION;
}
return version;
}
+ protected final @NonNull NormalizedNodeStreamVersion getStreamVersion() {
+ return version < DataStoreVersions.SODIUM_VERSION
+ ? NormalizedNodeStreamVersion.LITHIUM : NormalizedNodeStreamVersion.SODIUM;
+ }
+
@Override
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
version = in.readShort();
}
@Override
- public void writeExternal(ObjectOutput out) throws IOException {
+ public void writeExternal(final ObjectOutput out) throws IOException {
out.writeShort(version);
}
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.controller.cluster.datastore.modification;
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
* @param modification the modification to add.
*/
public void addModification(final Modification modification) {
- Preconditions.checkNotNull(modification);
- modifications.add(modification);
+ modifications.add(requireNonNull(modification));
}
public void addModifications(final Iterable<Modification> newMods) {
final int size = modifications.size();
out.writeInt(size);
if (size > 0) {
- try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out)) {
+ try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out, getStreamVersion())) {
for (Modification mod : modifications) {
out.writeByte(mod.getType());
mod.writeTo(stream);
}
public static MutableCompositeModification fromSerializable(final Object serializable) {
- Preconditions.checkArgument(serializable instanceof MutableCompositeModification);
+ checkArgument(serializable instanceof MutableCompositeModification);
return (MutableCompositeModification)serializable;
}