From: Robert Varga Date: Wed, 25 Sep 2019 06:07:50 +0000 (+0200) Subject: Add Magnesium stream version X-Git-Tag: release/magnesium~77 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=545a41e805a53f0e636e625cfa5aaa9262faeaac Add Magnesium stream version This is a variant of Sodium SR1 streaming format, which does not allow presence of BigInteger tokens, as those values are superseded by Uint64. JIRA: CONTROLLER-1919 Change-Id: I1dc5c7376bf1ecf105e965e42d74806ed99ab9b1 Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/MagnesiumDataInput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/MagnesiumDataInput.java new file mode 100644 index 0000000000..74c8a691d8 --- /dev/null +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/MagnesiumDataInput.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * 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.node.utils.stream; + +import java.io.DataInput; +import java.io.IOException; +import java.math.BigInteger; + +final class MagnesiumDataInput extends AbstractMagnesiumDataInput { + MagnesiumDataInput(final DataInput input) { + super(input); + } + + @Override + public NormalizedNodeStreamVersion getVersion() { + return NormalizedNodeStreamVersion.MAGNESIUM; + } + + @Override + BigInteger readBigInteger() throws IOException { + throw new InvalidNormalizedNodeStreamException("BigInteger coding is not supported"); + } +} diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/MagnesiumDataOutput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/MagnesiumDataOutput.java new file mode 100644 index 0000000000..a43826832e --- /dev/null +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/MagnesiumDataOutput.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * 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.node.utils.stream; + +import java.io.DataOutput; +import java.io.IOException; +import java.math.BigInteger; + +final class MagnesiumDataOutput extends AbstractMagnesiumDataOutput { + MagnesiumDataOutput(final DataOutput output) { + super(output); + } + + @Override + short streamVersion() { + return TokenTypes.MAGNESIUM_VERSION; + } + + @Override + void writeValue(final BigInteger value) throws IOException { + throw new IOException("BigInteger values are not supported"); + } +} diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputOutput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputOutput.java index e134d09e7f..7e2fb2906f 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputOutput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputOutput.java @@ -69,6 +69,8 @@ public final class NormalizedNodeInputOutput { return new NeonSR2NormalizedNodeOutputStreamWriter(output); case SODIUM_SR1: return new SodiumSR1DataOutput(output); + case MAGNESIUM: + return new MagnesiumDataOutput(output); default: throw new IllegalStateException("Unhandled version " + version); } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamVersion.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamVersion.java index 9352347a22..e8adc25ba3 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamVersion.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamVersion.java @@ -18,5 +18,6 @@ import org.eclipse.jdt.annotation.NonNullByDefault; public enum NormalizedNodeStreamVersion { LITHIUM, NEON_SR2, - SODIUM_SR1; + SODIUM_SR1, + MAGNESIUM; } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/TokenTypes.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/TokenTypes.java index e597cb95bd..e09c3e9eae 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/TokenTypes.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/TokenTypes.java @@ -27,4 +27,9 @@ final class TokenTypes { * From-scratch designed version shipping in Sodium SR1. */ static final short SODIUM_SR1_VERSION = 3; + /** + * Magnesium version. Structurally matches {@link #SODIUM_SR1_VERSION}, but does not allow BigIntegers to be + * present. + */ + static final short MAGNESIUM_VERSION = 4; } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/VersionedNormalizedNodeDataInput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/VersionedNormalizedNodeDataInput.java index 510b91dd15..68618fccbb 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/VersionedNormalizedNodeDataInput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/VersionedNormalizedNodeDataInput.java @@ -43,6 +43,9 @@ final class VersionedNormalizedNodeDataInput extends ForwardingNormalizedNodeDat case TokenTypes.SODIUM_SR1_VERSION: ret = new SodiumSR1DataInput(input); break; + case TokenTypes.MAGNESIUM_VERSION: + ret = new MagnesiumDataInput(input); + break; default: throw defunct("Unhandled stream version %s", version); }