X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Fstream%2FValueTypes.java;h=1afc73a3c8deb04a471eee01b437ffd06ed769f3;hb=09419e51e2e0b771b1ae013bb4c8bdf7a4f984eb;hp=83099f8a5bd656b9c776d60108fd9b3e000e359b;hpb=c37b95d3a9347913a4854b2f448e216cd17cae87;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/ValueTypes.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/ValueTypes.java index 83099f8a5b..1afc73a3c8 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/ValueTypes.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/ValueTypes.java @@ -18,6 +18,9 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; final class ValueTypes { + // The String length threshold beyond which a String should be encoded as bytes + public static final int STRING_BYTES_LENGTH_THRESHOLD = Short.MAX_VALUE / 4; + public static final byte SHORT_TYPE = 1; public static final byte BYTE_TYPE = 2; public static final byte INT_TYPE = 3; @@ -31,6 +34,7 @@ final class ValueTypes { public static final byte BIG_DECIMAL_TYPE = 11; public static final byte BINARY_TYPE = 12; public static final byte NULL_TYPE = 13; + public static final byte STRING_BYTES_TYPE = 14; private static final Map, Byte> TYPES; @@ -43,7 +47,6 @@ final class ValueTypes { b.put(Long.class, Byte.valueOf(LONG_TYPE)); b.put(Boolean.class, Byte.valueOf(BOOL_TYPE)); b.put(QName.class, Byte.valueOf(QNAME_TYPE)); - b.put(YangInstanceIdentifier.class, Byte.valueOf(YANG_IDENTIFIER_TYPE)); b.put(Short.class, Byte.valueOf(SHORT_TYPE)); b.put(BigInteger.class, Byte.valueOf(BIG_INTEGER_TYPE)); b.put(BigDecimal.class, Byte.valueOf(BIG_DECIMAL_TYPE)); @@ -63,12 +66,20 @@ final class ValueTypes { final Byte type = TYPES.get(node.getClass()); if (type != null) { + if(type == STRING_TYPE && ((String) node).length() >= STRING_BYTES_LENGTH_THRESHOLD ){ + return STRING_BYTES_TYPE; + } return type; } + if (node instanceof Set) { return BITS_TYPE; } + if (node instanceof YangInstanceIdentifier) { + return YANG_IDENTIFIER_TYPE; + } + throw new IllegalArgumentException("Unknown value type " + node.getClass().getSimpleName()); } }