This is an automated email from the ASF dual-hosted git repository. nizhikov pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new 006f95acd5a IGNITE-25186 Move BinaryArray to package-private (#12014) 006f95acd5a is described below commit 006f95acd5adb9834e4fafe87c81841e04f67ec2 Author: Nikolay <nizhi...@apache.org> AuthorDate: Tue Apr 29 13:38:11 2025 +0300 IGNITE-25186 Move BinaryArray to package-private (#12014) --- .../org/apache/ignite/IgniteSystemProperties.java | 6 +- .../org/apache/ignite/internal/IgnitionEx.java | 4 +- .../apache/ignite/internal/binary/BinaryArray.java | 44 +---- .../binary/BinaryArrayIdentityResolver.java | 16 +- .../internal/binary/BinaryClassDescriptor.java | 4 +- .../ignite/internal/binary/BinaryObjectEx.java | 21 +++ .../ignite/internal/binary/BinaryObjectExImpl.java | 8 +- .../ignite/internal/binary/BinaryObjectImpl.java | 4 +- .../internal/binary/BinaryObjectOffheapImpl.java | 4 +- .../ignite/internal/binary/BinaryReaderExImpl.java | 4 +- .../binary/BinarySerializedFieldComparator.java | 2 +- .../apache/ignite/internal/binary/BinaryUtils.java | 43 ++++- .../ignite/internal/binary/BinaryWriterExImpl.java | 2 +- .../binary/builder/BinaryBuilderReader.java | 2 +- .../binary/builder/BinaryBuilderSerializer.java | 8 +- .../binary/builder/BinaryObjectBuilderImpl.java | 3 +- .../ignite/internal/client/thin/ClientUtils.java | 2 +- .../processors/cache/CacheObjectUtils.java | 5 +- .../binary/CacheObjectBinaryProcessorImpl.java | 3 +- .../client/service/ClientServiceInvokeRequest.java | 4 +- .../platform/compute/PlatformCompute.java | 4 +- .../platform/services/PlatformServices.java | 4 +- .../processors/query/QueryTypeDescriptorImpl.java | 3 +- .../query/stat/ColumnStatisticsCollector.java | 2 +- .../processors/service/GridServiceProxy.java | 4 +- .../apache/ignite/internal/util/lang/GridFunc.java | 4 +- .../ignite/startup/cmdline/CommandLineStartup.java | 4 +- .../internal/binary/AbstractBinaryArraysTest.java | 4 +- .../BinaryArrayIdentityResolverSelfTest.java | 4 +- .../internal/binary/BinaryArraySelfTest.java | 4 +- .../internal/binary/BinaryMarshallerSelfTest.java | 30 ++-- .../binary/BinaryObjectExceptionSelfTest.java | 2 +- .../BinarySerialiedFieldComparatorSelfTest.java | 4 +- .../BinaryObjectBuilderAdditionalSelfTest.java | 12 +- .../ignite/internal/client/thin/ServicesTest.java | 6 +- .../cache/AbstractDataTypesCoverageTest.java | 8 +- .../ignite/platform/PlatformDeployServiceTask.java | 9 +- .../platform/PlatformSetUseBinaryArrayTask.java | 4 +- .../internal/processors/query/h2/H2Utils.java | 3 +- .../internal/processors/query/h2/dml/DmlUtils.java | 4 +- .../processors/cache/index/ArrayIndexTest.java | 6 +- .../internal/binary/BinaryArraySerializer.java} | 25 ++- .../binary/BinaryObjectImplSerializer.java | 75 ++++++++ .../ignite/internal/binary/BinarySerializers.java} | 18 +- .../internal/jackson/IgniteObjectMapper.java | 66 +------ .../org/apache/ignite/dump/IgniteJsonSuite.java | 3 +- .../java/org/apache/ignite/dump/JsonArrayTest.java | 192 +++++++++++++++++++++ parent/pom.xml | 15 +- 48 files changed, 468 insertions(+), 240 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java index 7b91c68792e..f0430f0178d 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java @@ -32,7 +32,7 @@ import org.apache.ignite.configuration.DataStorageConfiguration; import org.apache.ignite.configuration.DeploymentMode; import org.apache.ignite.configuration.DiskPageCompression; import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender; import org.apache.ignite.internal.client.GridClient; import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; @@ -58,7 +58,7 @@ import static org.apache.ignite.internal.IgniteKernal.DFLT_LONG_OPERATIONS_DUMP_ import static org.apache.ignite.internal.LongJVMPauseDetector.DEFAULT_JVM_PAUSE_DETECTOR_THRESHOLD; import static org.apache.ignite.internal.LongJVMPauseDetector.DFLT_JVM_PAUSE_DETECTOR_LAST_EVENTS_COUNT; import static org.apache.ignite.internal.LongJVMPauseDetector.DFLT_JVM_PAUSE_DETECTOR_PRECISION; -import static org.apache.ignite.internal.binary.BinaryArray.DFLT_IGNITE_USE_BINARY_ARRAYS; +import static org.apache.ignite.internal.binary.BinaryUtils.DFLT_IGNITE_USE_BINARY_ARRAYS; import static org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE; import static org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_RECHECK; import static org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender.DFLT_THROTTLE_INLINE_SIZE_CALCULATION; @@ -2051,7 +2051,7 @@ public final class IgniteSystemProperties extends IgniteCommonsSystemProperties /** * Enables storage of typed arrays. - * The default value is {@link BinaryArray#DFLT_IGNITE_USE_BINARY_ARRAYS}. + * The default value is {@link BinaryUtils#DFLT_IGNITE_USE_BINARY_ARRAYS}. */ @SystemProperty(value = "Flag to enable store of array in binary format and keep component type", defaults = "" + DFLT_IGNITE_USE_BINARY_ARRAYS) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java index 3f56675c95e..867aaf81f5c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java @@ -73,7 +73,7 @@ import org.apache.ignite.configuration.SystemDataRegionConfiguration; import org.apache.ignite.configuration.TransactionConfiguration; import org.apache.ignite.failure.FailureContext; import org.apache.ignite.failure.FailureType; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager; import org.apache.ignite.internal.processors.cache.CacheGroupContext; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap; @@ -1794,7 +1794,7 @@ public class IgnitionEx { */ private IgniteConfiguration initializeConfiguration(IgniteConfiguration cfg) throws IgniteCheckedException { - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); IgniteConfiguration myCfg = new IgniteConfiguration(cfg); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java index fdecc30fae8..b5269f4a11d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java @@ -24,7 +24,6 @@ import java.io.ObjectOutput; import java.lang.reflect.Array; import java.util.Arrays; import java.util.Objects; -import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.binary.BinaryObjectBuilder; import org.apache.ignite.binary.BinaryObjectException; @@ -39,20 +38,12 @@ import org.apache.ignite.internal.util.typedef.internal.S; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS; import static org.apache.ignite.internal.binary.GridBinaryMarshaller.UNREGISTERED_TYPE_ID; /** * Binary object representing array. */ -public class BinaryArray implements BinaryObjectEx, Externalizable, Comparable<BinaryArray> { - /** Default value of {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */ - public static final boolean DFLT_IGNITE_USE_BINARY_ARRAYS = false; - - /** Value of {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */ - private static boolean USE_BINARY_ARRAYS = - IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, DFLT_IGNITE_USE_BINARY_ARRAYS); - +class BinaryArray implements BinaryObjectEx, Externalizable, Comparable<BinaryArray> { /** */ private static final long serialVersionUID = 0L; @@ -143,17 +134,13 @@ public class BinaryArray implements BinaryObjectEx, Externalizable, Comparable<B } } - /** - * @return Underlying array. - */ - public Object[] array() { + /** {@inheritDoc} */ + @Override public Object[] array() { return arr; } - /** - * @return Component type ID. - */ - public int componentTypeId() { + /** {@inheritDoc} */ + @Override public int componentTypeId() { // This can happen when binary type was not registered in time of binary array creation. // In this case same type will be written differently: // arr1 = [compTypeId=UNREGISTERED_TYPE_ID,compClsName="org.apache.Pojo"] @@ -162,10 +149,8 @@ public class BinaryArray implements BinaryObjectEx, Externalizable, Comparable<B return compTypeId == UNREGISTERED_TYPE_ID ? ctx.typeId(compClsName) : compTypeId; } - /** - * @return Component class name. - */ - public String componentClassName() { + /** {@inheritDoc} */ + @Override public String componentClassName() { return compClsName; } @@ -268,19 +253,4 @@ public class BinaryArray implements BinaryObjectEx, Externalizable, Comparable<B @Override public String toString() { return S.toString(BinaryArray.class, this); } - - /** @return {@code True} if typed arrays should be used, {@code false} otherwise. */ - public static boolean useBinaryArrays() { - return USE_BINARY_ARRAYS; - } - - /** - * Initialize {@link #USE_BINARY_ARRAYS} value with - * {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS} system property value. - * - * This method invoked using reflection in tests. - */ - public static void initUseBinaryArrays() { - USE_BINARY_ARRAYS = IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, DFLT_IGNITE_USE_BINARY_ARRAYS); - } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java index 9f7e6572d80..7a17dfd2f63 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java @@ -56,8 +56,8 @@ class BinaryArrayIdentityResolver extends BinaryAbstractIdentityResolver { int start = ex.dataStartOffset(); int end = ex.footerStartOffset(); - if (ex.hasArray()) - return hashCode(ex.array(), start, end); + if (ex.hasBytes()) + return hashCode(ex.bytes(), start, end); else { // Handle offheap object. int hash = 1; @@ -114,10 +114,10 @@ class BinaryArrayIdentityResolver extends BinaryAbstractIdentityResolver { BinaryObjectExImpl exx1 = (BinaryObjectExImpl)ex1; BinaryObjectExImpl exx2 = (BinaryObjectExImpl)ex2; - if (exx1.hasArray()) - return exx2.hasArray() ? equalsHeap(exx1, exx2) : equalsHeapOffheap(exx1, exx2); + if (exx1.hasBytes()) + return exx2.hasBytes() ? equalsHeap(exx1, exx2) : equalsHeapOffheap(exx1, exx2); else - return exx2.hasArray() ? equalsHeapOffheap(exx2, exx1) : equalsOffheap(exx1, exx2); + return exx2.hasBytes() ? equalsHeapOffheap(exx2, exx1) : equalsOffheap(exx1, exx2); } else { // Handle enums. @@ -142,8 +142,8 @@ class BinaryArrayIdentityResolver extends BinaryAbstractIdentityResolver { * @return Result. */ private static boolean equalsHeap(BinaryObjectExImpl o1, BinaryObjectExImpl o2) { - byte[] arr1 = o1.array(); - byte[] arr2 = o2.array(); + byte[] arr1 = o1.bytes(); + byte[] arr2 = o2.bytes(); assert arr1 != null && arr2 != null; @@ -172,7 +172,7 @@ class BinaryArrayIdentityResolver extends BinaryAbstractIdentityResolver { * @return Result. */ private static boolean equalsHeapOffheap(BinaryObjectExImpl o1, BinaryObjectExImpl o2) { - byte[] arr1 = o1.array(); + byte[] arr1 = o1.bytes(); long ptr2 = o2.offheapAddress(); assert arr1 != null && ptr2 != 0; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java index f0266038c35..c5841e8c7c0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java @@ -769,7 +769,7 @@ class BinaryClassDescriptor { break; case OBJECT_ARR: - if (obj instanceof BinaryArray) + if (BinaryUtils.isBinaryArray(obj)) writer.writeBinaryArray(((BinaryArray)obj)); else writer.writeObjectArray((Object[])obj); @@ -797,7 +797,7 @@ class BinaryClassDescriptor { break; case ENUM_ARR: - if (obj instanceof BinaryArray) + if (BinaryUtils.isBinaryArray(obj)) writer.writeBinaryArray(((BinaryArray)obj)); else writer.doWriteEnumArray((Object[])obj); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java index 4e137b7c816..80402a42382 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java @@ -46,4 +46,25 @@ public interface BinaryObjectEx extends BinaryObject { * @return {@code true} if flag is set, {@code false} otherwise. */ public boolean isFlagSet(short flag); + + /** + * @return Component class name. + */ + public default String componentClassName() { + throw new UnsupportedOperationException("Not array"); + } + + /** + * @return Component type ID. + */ + public default int componentTypeId() { + throw new UnsupportedOperationException("Not array"); + } + + /** + * @return Underlying array. + */ + public default Object[] array() { + throw new UnsupportedOperationException("Not array"); + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java index efd868293bf..33c1853552c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java @@ -53,14 +53,14 @@ public abstract class BinaryObjectExImpl implements BinaryObjectEx { public abstract int start(); /** - * @return {@code True} if object is array based. + * @return {@code True} if object has bytes array. */ - public abstract boolean hasArray(); + public abstract boolean hasBytes(); /** - * @return Object array if object is array based, otherwise {@code null}. + * @return Object array if object has byte array based, otherwise {@code null}. */ - public abstract byte[] array(); + public abstract byte[] bytes(); /** * @return Object offheap address is object is offheap based, otherwise 0. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java index 8e5e50ac967..0e9cb65787c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java @@ -341,7 +341,7 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern } /** {@inheritDoc} */ - @Override public byte[] array() { + @Override public byte[] bytes() { return arr; } @@ -356,7 +356,7 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern } /** {@inheritDoc} */ - @Override public boolean hasArray() { + @Override public boolean hasBytes() { return true; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java index 3e8eaeeae26..fba0e6d06d2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java @@ -145,7 +145,7 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Externalizab } /** {@inheritDoc} */ - @Override public byte[] array() { + @Override public byte[] bytes() { return null; } @@ -176,7 +176,7 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Externalizab } /** {@inheritDoc} */ - @Override public boolean hasArray() { + @Override public boolean hasBytes() { return false; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java index 3f17f5c2066..01f72d4408a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java @@ -1349,7 +1349,7 @@ class BinaryReaderExImpl implements BinaryReaderEx { case HANDLE: Object arr = readHandleField(); - if (arr instanceof BinaryArray) + if (BinaryUtils.isBinaryArray(arr)) return ((BinaryArray)arr).deserialize(ldr); else return (Object[])arr; @@ -1462,7 +1462,7 @@ class BinaryReaderExImpl implements BinaryReaderEx { case HANDLE: Object arr = readHandleField(); - if (arr instanceof BinaryArray) + if (BinaryUtils.isBinaryArray(arr)) return ((BinaryArray)arr).deserialize(ldr); else return (Object[])arr; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java index 4c2b3da313c..d69094b336d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java @@ -246,7 +246,7 @@ class BinarySerializedFieldComparator { Object val1 = c1.currentField(); Object val2 = c2.currentField(); - return (F.isArray(val1) || val1 instanceof BinaryArray) ? F.arrayEq(val1, val2) : Objects.equals(val1, val2); + return (F.isArray(val1) || BinaryUtils.isBinaryArray(val1)) ? F.arrayEq(val1, val2) : Objects.equals(val1, val2); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java index 053be3e4c72..b9033da21e6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java @@ -85,6 +85,7 @@ import org.jetbrains.annotations.Nullable; import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2; +import static org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS; import static org.apache.ignite.internal.util.GridUnsafe.align; /** @@ -113,6 +114,13 @@ public class BinaryUtils { public static final boolean USE_STR_SERIALIZATION_VER_2 = IgniteSystemProperties.getBoolean( IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2, false); + /** Default value of {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */ + public static final boolean DFLT_IGNITE_USE_BINARY_ARRAYS = false; + + /** Value of {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */ + private static boolean USE_BINARY_ARRAYS = + IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, DFLT_IGNITE_USE_BINARY_ARRAYS); + /** Map from class to associated write replacer. */ public static final Map<Class, BinaryWriteReplacer> CLS_TO_WRITE_REPLACER = Map.of( TreeMap.class, new BinaryTreeMapWriteReplacer(), @@ -2032,7 +2040,7 @@ public class BinaryUtils { return doReadTimeArray(in); case GridBinaryMarshaller.OBJ_ARR: - if (BinaryArray.useBinaryArrays() && !deserialize) + if (useBinaryArrays() && !deserialize) return doReadBinaryArray(in, ctx, ldr, handles, detach, deserialize, false); else return doReadObjectArray(in, ctx, ldr, handles, detach, deserialize); @@ -2051,7 +2059,7 @@ public class BinaryUtils { return doReadBinaryEnum(in, ctx, doReadEnumType(in)); case GridBinaryMarshaller.ENUM_ARR: - if (BinaryArray.useBinaryArrays() && !deserialize) + if (useBinaryArrays() && !deserialize) return doReadBinaryArray(in, ctx, ldr, handles, detach, deserialize, true); else { doReadEnumType(in); // Simply skip this part as we do not need it. @@ -2100,7 +2108,7 @@ public class BinaryUtils { for (int i = 0; i < len; i++) { Object res = deserializeOrUnmarshal(in, ctx, ldr, handles, detach, deserialize); - if (deserialize && BinaryArray.useBinaryArrays() && res instanceof BinaryObject) + if (deserialize && useBinaryArrays() && res instanceof BinaryObject) arr[i] = ((BinaryObject)res).deserialize(ldr); else arr[i] = res; @@ -2686,9 +2694,9 @@ public class BinaryUtils { * @return Objects array. */ public static Object[] rawArrayFromBinary(Object obj) { - if (obj instanceof BinaryArray) + if (isBinaryArray(obj)) // We want raw data(no deserialization). - return ((BinaryArray)obj).array(); + return ((BinaryObjectEx)obj).array(); else // This can happen even in BinaryArray.USE_TYPED_ARRAY = true. // In case user pass special array type to arguments, String[], for example. @@ -2766,7 +2774,7 @@ public class BinaryUtils { private final long byteArrOffset = GridUnsafe.arrayBaseOffset(byte[].class); @Override public int applyAsInt(Object bo) { - return (int)align(byteArrOffset + ((BinaryObjectImpl)bo).array().length); + return (int)align(byteArrOffset + ((BinaryObjectImpl)bo).bytes().length); } }, BinaryEnumObjectImpl.class, bo -> ((BinaryObject)bo).size() @@ -2864,6 +2872,29 @@ public class BinaryUtils { return BinaryCachingMetadataHandler.create(); } + /** + * @param val Value to check. + * @return {@code True} if {@code val} instance of {@link BinaryArray}. + */ + public static boolean isBinaryArray(Object val) { + return val instanceof BinaryArray; + } + + /** @return {@code True} if typed arrays should be used, {@code false} otherwise. */ + public static boolean useBinaryArrays() { + return USE_BINARY_ARRAYS; + } + + /** + * Initialize {@link #USE_BINARY_ARRAYS} value with + * {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS} system property value. + * + * This method invoked using reflection in tests. + */ + public static void initUseBinaryArrays() { + USE_BINARY_ARRAYS = IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, DFLT_IGNITE_USE_BINARY_ARRAYS); + } + /** * Enum type. */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java index 1936c680f48..bc9fb24143f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java @@ -604,7 +604,7 @@ class BinaryWriterExImpl implements BinaryWriterEx { if (po == null) out.writeByte(GridBinaryMarshaller.NULL); else { - byte[] poArr = po.array(); + byte[] poArr = po.bytes(); out.unsafeEnsure(1 + 4 + poArr.length + 4); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java index e9e152b01ca..11170bae4cc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java @@ -64,7 +64,7 @@ class BinaryBuilderReader implements BinaryPositionReadable { */ BinaryBuilderReader(BinaryObjectImpl objImpl) { ctx = objImpl.context(); - arr = objImpl.array(); + arr = objImpl.bytes(); pos = objImpl.start(); reader = BinaryUtils.reader(ctx, diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java index f5348e76b3f..73df4a8aebb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java @@ -21,8 +21,8 @@ import java.util.Collection; import java.util.IdentityHashMap; import java.util.Map; import org.apache.ignite.binary.BinaryObject; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryEnumObjectImpl; +import org.apache.ignite.internal.binary.BinaryObjectEx; import org.apache.ignite.internal.binary.BinaryObjectExImpl; import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.binary.BinaryWriterEx; @@ -181,7 +181,7 @@ class BinaryBuilderSerializer { } if (BinaryUtils.isBinaryEnumArray(val)) { - BinaryArray val0 = (BinaryArray)val; + BinaryObjectEx val0 = (BinaryObjectEx)val; if (val0.componentTypeId() == GridBinaryMarshaller.UNREGISTERED_TYPE_ID) writeArray(writer, GridBinaryMarshaller.ENUM_ARR, val0.array(), val0.componentClassName()); @@ -191,8 +191,8 @@ class BinaryBuilderSerializer { return; } - if (val instanceof BinaryArray) { - BinaryArray val0 = (BinaryArray)val; + if (BinaryUtils.isBinaryArray(val)) { + BinaryObjectEx val0 = (BinaryObjectEx)val; if (val0.componentTypeId() == GridBinaryMarshaller.UNREGISTERED_TYPE_ID) writeArray(writer, GridBinaryMarshaller.OBJ_ARR, val0.array(), val0.componentClassName()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java index 142462abac8..8cc91713a5d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java @@ -30,7 +30,6 @@ import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.binary.BinaryObjectBuilder; import org.apache.ignite.binary.BinaryObjectException; import org.apache.ignite.binary.BinaryType; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryContext; import org.apache.ignite.internal.binary.BinaryEnumObjectImpl; import org.apache.ignite.internal.binary.BinaryFieldMetadata; @@ -384,7 +383,7 @@ class BinaryObjectBuilderImpl implements BinaryObjectBuilder { else if (BinaryUtils.isBinaryEnumArray(newVal)) newFldTypeId = GridBinaryMarshaller.ENUM_ARR; - else if (newVal instanceof BinaryArray) + else if (BinaryUtils.isBinaryArray(newVal)) newFldTypeId = GridBinaryMarshaller.OBJ_ARR; else diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java index 9930be83d0b..31f782e0a68 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java @@ -585,7 +585,7 @@ public final class ClientUtils { if (obj instanceof BinaryObjectImpl) { BinaryObjectImpl obj0 = (BinaryObjectImpl)obj; - return marsh.deserialize(BinaryStreams.inputStream(obj0.array(), obj0.start()), hnds); + return marsh.deserialize(BinaryStreams.inputStream(obj0.bytes(), obj0.start()), hnds); } else if (obj instanceof BinaryObject) return ((BinaryObject)obj).deserialize(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java index 88eaeaf0916..a08ab1cf40d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Map; import org.apache.ignite.binary.BinaryObject; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.util.MutableSingletonList; import org.apache.ignite.internal.util.typedef.F; @@ -203,9 +202,9 @@ public class CacheObjectUtils { return unwrapKnownCollection(ctx, (Collection<Object>)o, keepBinary, cpy); else if (BinaryUtils.knownMap(o)) return unwrapBinariesIfNeeded(ctx, (Map<Object, Object>)o, keepBinary, cpy); - else if (o instanceof Object[] && !BinaryArray.useBinaryArrays()) + else if (o instanceof Object[] && !BinaryUtils.useBinaryArrays()) return unwrapBinariesInArrayIfNeeded(ctx, (Object[])o, keepBinary, cpy); - else if (o instanceof BinaryArray && !keepBinary) + else if (BinaryUtils.isBinaryArray(o) && !keepBinary) return ((BinaryObject)o).deserialize(ldr); return o; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java index 027a12389dc..55be4d92641 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java @@ -58,7 +58,6 @@ import org.apache.ignite.internal.IgniteInterruptedCheckedException; import org.apache.ignite.internal.IgniteNodeAttributes; import org.apache.ignite.internal.NodeStoppingException; import org.apache.ignite.internal.UnregisteredBinaryTypeException; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryContext; import org.apache.ignite.internal.binary.BinaryEnumObjectImpl; import org.apache.ignite.internal.binary.BinaryFieldMetadata; @@ -459,7 +458,7 @@ public class CacheObjectBinaryProcessorImpl extends GridProcessorAdapter impleme for (int i = 0; i < arr.length; i++) pArr[i] = marshalToBinary(arr[i], failIfUnregistered); - if (!BinaryArray.useBinaryArrays()) + if (!BinaryUtils.useBinaryArrays()) return pArr; return binaryCtx.createBinaryArray(obj.getClass().getComponentType(), pArr); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java index 83b09c4e8e5..3c10a8231fd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java @@ -28,8 +28,8 @@ import org.apache.ignite.IgniteBinary; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteServices; import org.apache.ignite.internal.IgniteServicesImpl; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryReaderEx; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.cluster.ClusterGroupAdapter; import org.apache.ignite.internal.processors.platform.PlatformNativeException; import org.apache.ignite.internal.processors.platform.client.ClientConnectionContext; @@ -183,7 +183,7 @@ public class ClientServiceInvokeRequest extends ClientRequest { Method method = resolveMethod(ctx, svcCls); - if (!BinaryArray.useBinaryArrays()) + if (!BinaryUtils.useBinaryArrays()) PlatformServices.convertArrayArgs(args, method); res = proxy.invokeMethod(method, args, callAttrs); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java index e7ba512df09..7ab823211bc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java @@ -30,9 +30,9 @@ import org.apache.ignite.cluster.ClusterGroup; import org.apache.ignite.compute.ComputeTaskFuture; import org.apache.ignite.internal.IgniteComputeHandler; import org.apache.ignite.internal.IgniteInternalFuture; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryObjectImpl; import org.apache.ignite.internal.binary.BinaryReaderEx; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.binary.BinaryWriterEx; import org.apache.ignite.internal.processors.platform.PlatformAbstractTarget; import org.apache.ignite.internal.processors.platform.PlatformContext; @@ -387,7 +387,7 @@ public class PlatformCompute extends PlatformAbstractTarget { Collection<UUID> nodeIds = readNodeIds(reader); - if (!keepBinary && (arg instanceof BinaryObjectImpl || arg instanceof BinaryArray)) + if (!keepBinary && (arg instanceof BinaryObjectImpl || BinaryUtils.isBinaryArray(arg))) arg = ((BinaryObject)arg).deserialize(); if (nodeIds != null) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java index f51506b04c0..4b91eb94c86 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java @@ -29,8 +29,8 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteServices; import org.apache.ignite.internal.IgniteServicesImpl; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryReaderEx; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.binary.BinaryWriterEx; import org.apache.ignite.internal.processors.platform.PlatformAbstractTarget; import org.apache.ignite.internal.processors.platform.PlatformContext; @@ -638,7 +638,7 @@ public class PlatformServices extends PlatformAbstractTarget { Method mtd = getMethod(serviceClass, mthdName, args); - if (!BinaryArray.useBinaryArrays()) + if (!BinaryUtils.useBinaryArrays()) convertArrayArgs(args, mtd); return ((GridServiceProxy)proxy).invokeMethod(mtd, args, callAttrs); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java index f24850a04bb..bdd8b810e4c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java @@ -32,7 +32,6 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.cache.QueryIndexType; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; @@ -718,7 +717,7 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor { * @param expColType Type of the column based on Query Property info. */ private boolean isCompatibleWithPropertyType(Object val, Class<?> expColType) { - if (!(val instanceof BinaryObject) || val instanceof BinaryArray) { + if (!(val instanceof BinaryObject) || BinaryUtils.isBinaryArray(val)) { if (U.box(expColType).isAssignableFrom(U.box(val.getClass()))) return true; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java index 4967f882e56..7d59c4a1dd7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java @@ -319,7 +319,7 @@ public class ColumnStatisticsCollector { else if (cls.isAssignableFrom(String.class)) buf = ((String)obj).getBytes(StandardCharsets.UTF_8); else if (obj instanceof BinaryObjectImpl) - buf = ((BinaryObjectImpl)obj).array(); + buf = ((BinaryObjectImpl)obj).bytes(); else { try { buf = IndexProcessor.serializer.serialize(obj); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java index 2601bce8d3b..80ee4f0d600 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java @@ -44,8 +44,8 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.GridClosureCallMode; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.IgniteEx; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryMarshaller; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException; import org.apache.ignite.internal.processors.metric.impl.HistogramMetricImpl; import org.apache.ignite.internal.processors.platform.PlatformNativeException; @@ -344,7 +344,7 @@ public class GridServiceProxy<T> implements Serializable { private Object unmarshalResult(byte[] res) throws IgniteCheckedException { BinaryMarshaller marsh = ctx.marshaller(); - if (keepBinary && BinaryArray.useBinaryArrays()) { + if (keepBinary && BinaryUtils.useBinaryArrays()) { // To avoid deserializing of enum types and BinaryArrays. return marsh.binaryMarshaller().unmarshal(res, null); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java index 5299d53b0fe..f6fdda25c6b 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java @@ -39,7 +39,7 @@ import java.util.concurrent.ThreadLocalRandom; import javax.cache.Cache; import org.apache.ignite.cluster.BaselineNode; import org.apache.ignite.cluster.ClusterNode; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.util.F0; import org.apache.ignite.internal.util.GridCommonFunc; import org.apache.ignite.internal.util.GridConcurrentHashSet; @@ -2035,7 +2035,7 @@ public class GridFunc extends GridCommonFunc { return Arrays.equals((float[])a1, (float[])a2); else if (a1 instanceof double[]) return Arrays.equals((double[])a1, (double[])a2); - else if (a1 instanceof BinaryArray) + else if (BinaryUtils.isBinaryArray(a1)) return a1.equals(a2); return Arrays.deepEquals((Object[])a1, (Object[])a2); diff --git a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java index 90d46f88eae..59fe4a22035 100644 --- a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java +++ b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java @@ -40,7 +40,6 @@ import org.apache.ignite.IgniteState; import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.IgnitionListener; import org.apache.ignite.SystemProperty; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.processors.cache.GridCacheMapEntry; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.PartitionsEvictManager; import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager; @@ -98,8 +97,7 @@ public final class CommandLineStartup { CacheContinuousQueryEventBuffer.class, CacheContinuousQueryHandler.class, OffheapReadWriteLock.class, - TcpCommunicationConfiguration.class, - BinaryArray.class + TcpCommunicationConfiguration.class )); static { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java index b5f31738886..3c0f74d6fc0 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java @@ -41,7 +41,7 @@ public abstract class AbstractBinaryArraysTest extends GridCommonAbstractTest { /** {@inheritDoc} */ @Override protected void beforeTest() throws Exception { System.setProperty(IGNITE_USE_BINARY_ARRAYS, Boolean.toString(useBinaryArrays)); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); super.beforeTest(); } @@ -51,6 +51,6 @@ public abstract class AbstractBinaryArraysTest extends GridCommonAbstractTest { super.afterTest(); System.clearProperty(IGNITE_USE_BINARY_ARRAYS); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java index 57e47c3f9e3..a0e53442792 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java @@ -246,7 +246,7 @@ public class BinaryArrayIdentityResolverSelfTest extends GridCommonAbstractTest BinaryObjectExImpl obj0 = (BinaryObjectExImpl)obj; if (offheap) { - byte[] arr = obj0.array(); + byte[] arr = obj0.bytes(); long ptr = GridUnsafe.allocateMemory(arr.length); @@ -254,7 +254,7 @@ public class BinaryArrayIdentityResolverSelfTest extends GridCommonAbstractTest GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length); - obj0 = new BinaryObjectOffheapImpl(obj0.context(), ptr, 0, obj0.array().length); + obj0 = new BinaryObjectOffheapImpl(obj0.context(), ptr, 0, obj0.bytes().length); } return obj0; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java index 1d047eeb000..a6e7a05d449 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java @@ -240,7 +240,7 @@ public class BinaryArraySelfTest extends AbstractBinaryArraysTest { Object[] res0; if (useBinaryArrays) { - assertTrue(res instanceof BinaryArray); + assertTrue(BinaryUtils.isBinaryArray(res)); res0 = ((BinaryArray)res).deserialize(); } @@ -269,7 +269,7 @@ public class BinaryArraySelfTest extends AbstractBinaryArraysTest { Object deser; if (useBinaryArrays) { - assertTrue(obj instanceof BinaryArray); + assertTrue(BinaryUtils.isBinaryArray(obj)); deser = ((BinaryArray)obj).deserialize(); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java index 26b0854a04a..f870bf1bf81 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java @@ -2821,7 +2821,7 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { BinaryObjectOffheapImpl offheapObj = new BinaryObjectOffheapImpl(ctx, ptr, 0, - obj.array().length); + obj.bytes().length); assertTrue(offheapObj.equals(offheapObj)); assertEquals(offheapObj.size(), obj.size()); @@ -2835,7 +2835,7 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { BinaryObjectOffheapImpl offheapObj1 = new BinaryObjectOffheapImpl(ctx, ptr1, 0, - obj.array().length); + obj.bytes().length); assertTrue(offheapObj.equals(offheapObj1)); assertTrue(offheapObj1.equals(offheapObj)); @@ -2876,7 +2876,7 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { BinaryObjectOffheapImpl offheapObj2 = new BinaryObjectOffheapImpl(ctx, ptr2, 0, - obj.array().length); + obj.bytes().length); assertFalse(offheapObj.equals(offheapObj2)); assertFalse(offheapObj2.equals(offheapObj)); @@ -2903,7 +2903,7 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { BinaryObjectImpl binaryObj = marshal(MySingleton.INSTANCE, marsh); - assertTrue(binaryObj.array().length <= 1024); // Check that big string was not serialized. + assertTrue(binaryObj.bytes().length <= 1024); // Check that big string was not serialized. MySingleton singleton = binaryObj.deserialize(); @@ -3519,9 +3519,9 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { BinaryObjectImpl binObjRaw0 = marshal(objRaw, m0); BinaryObjectImpl binObjRaw1 = marshal(objRaw, m1); - assertNotEquals(binObj0.array().length, binObj1.array().length); - assertNotEquals(binObjWithRaw0.array().length, binObjWithRaw1.array().length); - assertNotEquals(binObjRaw0.array().length, binObjRaw1.array().length); + assertNotEquals(binObj0.bytes().length, binObj1.bytes().length); + assertNotEquals(binObjWithRaw0.bytes().length, binObjWithRaw1.bytes().length); + assertNotEquals(binObjRaw0.bytes().length, binObjRaw1.bytes().length); checkEquals(binObj0, binObj1); @@ -3649,18 +3649,18 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { BinaryObjectImpl binObj02 = marshal(obj2, m0); // The length of array must be equal. Object are different only by the class. - assertEquals(binObj00.array().length, binObj01.array().length); - assertEquals(binObj00.array().length, binObj02.array().length); + assertEquals(binObj00.bytes().length, binObj01.bytes().length); + assertEquals(binObj00.bytes().length, binObj02.bytes().length); BinaryObjectImpl binObj10 = marshal(obj0, m1); BinaryObjectImpl binObj11 = marshal(obj1, m1); BinaryObjectImpl binObj12 = marshal(obj2, m1); // The length of array must be equal. Object are different only by the class. - assertEquals(binObj10.array().length, binObj11.array().length); - assertEquals(binObj10.array().length, binObj12.array().length); + assertEquals(binObj10.bytes().length, binObj11.bytes().length); + assertEquals(binObj10.bytes().length, binObj12.bytes().length); - assertNotEquals(binObj10.array().length, binObj00.array().length); + assertNotEquals(binObj10.bytes().length, binObj00.bytes().length); assertEquals(binObj00, binObj10); assertEquals(binObj01, binObj11); @@ -3759,7 +3759,7 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { return new BinaryObjectOffheapImpl(binaryContext(marsh), ptr, 0, - obj.array().length); + obj.bytes().length); } /** @@ -3980,7 +3980,7 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { * @return Offheap address. */ private long copyOffheap(BinaryObjectImpl obj) { - byte[] arr = obj.array(); + byte[] arr = obj.bytes(); long ptr = GridUnsafe.allocateMemory(arr.length); @@ -4064,7 +4064,7 @@ public class BinaryMarshallerSelfTest extends AbstractBinaryArraysTest { * @return Result object. */ private <T> T unmarshal(BinaryObjectImpl bo, BinaryMarshaller marsh) throws IgniteCheckedException { - return marsh.unmarshal(bo.array(), null); + return marsh.unmarshal(bo.bytes(), null); } /** diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java index 7203c6c6d17..878a9aa41fa 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java @@ -90,7 +90,7 @@ public class BinaryObjectExceptionSelfTest extends GridCommonAbstractTest { b.deserialize(); // deserialize working - byte[] a = b.array(); + byte[] a = b.bytes(); int unexpectedCnt = 0; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java index 3591b47db9d..736129dd90e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java @@ -507,7 +507,7 @@ public class BinarySerialiedFieldComparatorSelfTest extends GridCommonAbstractTe */ private BinaryObjectExImpl convert(BinaryObjectExImpl obj, boolean offheap) { if (offheap) { - byte[] arr = obj.array(); + byte[] arr = obj.bytes(); long ptr = GridUnsafe.allocateMemory(arr.length); @@ -515,7 +515,7 @@ public class BinarySerialiedFieldComparatorSelfTest extends GridCommonAbstractTe GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length); - obj = new BinaryObjectOffheapImpl(obj.context(), ptr, 0, obj.array().length); + obj = new BinaryObjectOffheapImpl(obj.context(), ptr, 0, obj.bytes().length); } return obj; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java index 168e466f7cb..dada3c48938 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java @@ -58,9 +58,9 @@ import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.MarshallerPlatformIds; import org.apache.ignite.internal.binary.AbstractBinaryArraysTest; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryContext; import org.apache.ignite.internal.binary.BinaryMarshallerSelfTest.TestClass1; +import org.apache.ignite.internal.binary.BinaryObjectEx; import org.apache.ignite.internal.binary.BinaryObjectTestUtils; import org.apache.ignite.internal.binary.mutabletest.GridBinaryMarshalerAwareTestClass; import org.apache.ignite.internal.binary.mutabletest.GridBinaryTestClasses; @@ -1655,7 +1655,7 @@ public class BinaryObjectBuilderAdditionalSelfTest extends AbstractBinaryArraysT assertEquals(exp, extObj.field("extVal")); Assert.assertArrayEquals( expArr, - useBinaryArrays ? extObj.<BinaryArray>field("extArr").array() : extObj.field("extArr") + useBinaryArrays ? extObj.<BinaryObjectEx>field("extArr").array() : extObj.field("extArr") ); builder = extObj.toBuilder(); @@ -1665,7 +1665,7 @@ public class BinaryObjectBuilderAdditionalSelfTest extends AbstractBinaryArraysT assertEquals(exp, extObj.field("extVal")); Assert.assertArrayEquals( expArr, - useBinaryArrays ? extObj.<BinaryArray>field("extArr").array() : extObj.field("extArr") + useBinaryArrays ? extObj.<BinaryObjectEx>field("extArr").array() : extObj.field("extArr") ); assertEquals(Integer.valueOf(10), extObj.field("intVal")); @@ -1676,7 +1676,7 @@ public class BinaryObjectBuilderAdditionalSelfTest extends AbstractBinaryArraysT assertEquals(exp, extObj.field("extVal")); Assert.assertArrayEquals( expArr, - useBinaryArrays ? extObj.<BinaryArray>field("extArr").array() : extObj.field("extArr") + useBinaryArrays ? extObj.<BinaryObjectEx>field("extArr").array() : extObj.field("extArr") ); assertEquals(Integer.valueOf(10), extObj.field("intVal")); assertEquals("some string", extObj.field("strVal")); @@ -1790,7 +1790,7 @@ public class BinaryObjectBuilderAdditionalSelfTest extends AbstractBinaryArraysT BiConsumer<TestClass1[], BinaryObject> checker = (arr, bobj) -> { Object[] val = useBinaryArrays - ? bobj.<BinaryArray>field("arr").deserialize() + ? bobj.<BinaryObjectEx>field("arr").deserialize() : PlatformUtils.unwrapBinariesInArray(bobj.field("arr")); Assert.assertArrayEquals(arr, val); @@ -1838,7 +1838,7 @@ public class BinaryObjectBuilderAdditionalSelfTest extends AbstractBinaryArraysT */ private TestEnum[] deserializeEnumBinaryArray(Object obj) { if (useBinaryArrays) - return ((BinaryArray)obj).deserialize(); + return ((BinaryObject)obj).deserialize(); Object[] arr; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java index 306fd1ca222..14fc4e0c4ad 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java @@ -32,7 +32,7 @@ import org.apache.ignite.client.ClientException; import org.apache.ignite.client.ClientServiceDescriptor; import org.apache.ignite.client.IgniteClient; import org.apache.ignite.client.Person; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.platform.PlatformType; import org.apache.ignite.resources.IgniteInstanceResource; @@ -71,7 +71,7 @@ public class ServicesTest extends AbstractThinClientTest { super.beforeTestsStarted(); System.setProperty(IGNITE_USE_BINARY_ARRAYS, Boolean.toString(useBinaryArrays)); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); startGrids(3); @@ -103,7 +103,7 @@ public class ServicesTest extends AbstractThinClientTest { super.afterTestsStopped(); System.clearProperty(IGNITE_USE_BINARY_ARRAYS); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); } /** diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java index 742b01e9ef8..f558b3f0512 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java @@ -45,7 +45,7 @@ import org.apache.ignite.cache.CacheWriteSynchronizationMode; import org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicyFactory; import org.apache.ignite.configuration.DataStorageConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; @@ -54,7 +54,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import static org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS; -import static org.apache.ignite.internal.binary.BinaryArray.DFLT_IGNITE_USE_BINARY_ARRAYS; +import static org.apache.ignite.internal.binary.BinaryUtils.DFLT_IGNITE_USE_BINARY_ARRAYS; /** * Abstract data types coverage test. @@ -249,7 +249,7 @@ public abstract class AbstractDataTypesCoverageTest extends GridCommonAbstractTe /** {@inheritDoc} */ @Override protected void beforeTest() throws Exception { System.setProperty(IGNITE_USE_BINARY_ARRAYS, Boolean.toString(useBinaryArrays)); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); super.beforeTest(); } @@ -259,7 +259,7 @@ public abstract class AbstractDataTypesCoverageTest extends GridCommonAbstractTe super.afterTest(); System.clearProperty(IGNITE_USE_BINARY_ARRAYS); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java b/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java index 21c14c01cef..2a6b5a525d5 100644 --- a/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java +++ b/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java @@ -45,7 +45,8 @@ import org.apache.ignite.compute.ComputeJobResult; import org.apache.ignite.compute.ComputeTaskAdapter; import org.apache.ignite.compute.ComputeTaskSplitAdapter; import org.apache.ignite.internal.IgniteEx; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryObjectEx; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.util.lang.IgnitePair; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; @@ -451,10 +452,10 @@ public class PlatformDeployServiceTask extends ComputeTaskAdapter<Object[], Obje public BinaryObject[] testBinaryObjectArray(Object arg0) { Object[] arg; - if (BinaryArray.useBinaryArrays()) { - assertTrue(arg0 instanceof BinaryArray); + if (BinaryUtils.useBinaryArrays()) { + assertTrue(BinaryUtils.isBinaryArray(arg0)); - arg = ((BinaryArray)arg0).array(); + arg = ((BinaryObjectEx)arg0).array(); } else { assertTrue(arg0 instanceof Object[]); diff --git a/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java b/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java index 15797351b59..a0ce0714097 100644 --- a/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java +++ b/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java @@ -27,7 +27,7 @@ import org.apache.ignite.compute.ComputeJob; import org.apache.ignite.compute.ComputeJobAdapter; import org.apache.ignite.compute.ComputeJobResult; import org.apache.ignite.compute.ComputeTaskAdapter; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -63,7 +63,7 @@ public class PlatformSetUseBinaryArrayTask extends ComputeTaskAdapter<Boolean, V /** {@inheritDoc} */ @Nullable @Override public Object execute() { System.setProperty(IGNITE_USE_BINARY_ARRAYS, Boolean.toString(argument(0))); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); return null; } diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java index 88293c5a582..2f66cea08ee 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java @@ -44,7 +44,6 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.indexing.IndexingQueryEngineConfiguration; import org.apache.ignite.internal.GridKernalContext; -import org.apache.ignite.internal.binary.BinaryArray; import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; @@ -760,7 +759,7 @@ public class H2Utils { stmt.setObject(idx, obj, Types.JAVA_OBJECT); else if (obj instanceof BigDecimal) stmt.setObject(idx, obj, Types.DECIMAL); - else if (obj instanceof BinaryArray) + else if (BinaryUtils.isBinaryArray(obj)) stmt.setObject(idx, BinaryUtils.rawArrayFromBinary(obj)); else stmt.setObject(idx, obj); diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java index 354f15b5cba..44bc49b07be 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java @@ -31,7 +31,7 @@ import java.util.Map; import javax.cache.processor.MutableEntry; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.cache.query.SqlFieldsQuery; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.processors.cache.CacheOperationContext; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.QueryCursorImpl; @@ -109,7 +109,7 @@ public class DmlUtils { // We have to convert arrays of reference types manually - // see https://issues.apache.org/jira/browse/IGNITE-4327 // Still, we only can convert from Object[] to something more precise. - if (type == Value.ARRAY && val instanceof BinaryArray) + if (type == Value.ARRAY && BinaryUtils.isBinaryArray(val)) return val; if (type == Value.ARRAY && currCls != expCls) { diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java index d7aa7af97a9..57ab4f34db9 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java @@ -36,7 +36,7 @@ import org.apache.ignite.configuration.DataRegionConfiguration; import org.apache.ignite.configuration.DataStorageConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.IgniteEx; -import org.apache.ignite.internal.binary.BinaryArray; +import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.processors.query.GridQueryProcessor; import org.junit.After; import org.junit.Before; @@ -185,7 +185,7 @@ public class ArrayIndexTest extends AbstractIndexingCommonTest { /** */ private void checkTableExpression(boolean useTypedArrays) throws Exception { System.setProperty(IGNITE_USE_BINARY_ARRAYS, Boolean.toString(useTypedArrays)); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); try (IgniteEx ex = startGrid(0); IgniteEx cli = startClientGrid(1); @@ -221,7 +221,7 @@ public class ArrayIndexTest extends AbstractIndexingCommonTest { } finally { System.clearProperty(IGNITE_USE_BINARY_ARRAYS); - BinaryArray.initUseBinaryArrays(); + BinaryUtils.initUseBinaryArrays(); } } diff --git a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryArraySerializer.java similarity index 56% copy from modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java copy to modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryArraySerializer.java index b82cbe8ef2b..114e8aab4a6 100644 --- a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java +++ b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryArraySerializer.java @@ -15,17 +15,24 @@ * limitations under the License. */ -package org.apache.ignite.dump; +package org.apache.ignite.internal.binary; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; +import java.io.IOException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; /** - * Json test suite. + * Custom serializer for {@link BinaryArray}. */ -@RunWith(Suite.class) -@Suite.SuiteClasses({ - JsonDumpConsumerTest.class -}) -public class IgniteJsonSuite { +class BinaryArraySerializer extends JsonSerializer<BinaryArray> { + /** {@inheritDoc} */ + @Override public void serialize(BinaryArray val, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeStartArray(); + + for (Object o : val.array()) + gen.writeObject(o); + + gen.writeEndArray(); + } } diff --git a/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImplSerializer.java b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImplSerializer.java new file mode 100644 index 00000000000..20d2d131b18 --- /dev/null +++ b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImplSerializer.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.binary; + +import java.io.IOException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.apache.ignite.binary.BinaryObject; +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.binary.BinaryType; +import org.apache.ignite.internal.processors.cache.query.GridCacheSqlIndexMetadata; +import org.apache.ignite.internal.util.typedef.F; + +/** + * Custom serializer for {@link GridCacheSqlIndexMetadata} + */ +class BinaryObjectImplSerializer extends JsonSerializer<BinaryObjectImpl> { + /** {@inheritDoc} */ + @Override public void serialize(BinaryObjectImpl bin, JsonGenerator gen, SerializerProvider ser) throws IOException { + try { + BinaryType meta = bin.rawType(); + + // Serialize to JSON if we have metadata. + if (meta != null && !F.isEmpty(meta.fieldNames())) { + gen.writeStartObject(); + + for (String name : meta.fieldNames()) { + Object val = bin.field(name); + + if (val instanceof BinaryObjectImpl) { + BinaryObjectImpl ref = (BinaryObjectImpl)val; + + if (ref.hasCircularReferences()) { + throw ser.mappingException("Failed convert to JSON object for circular references"); + } + } + + if (val instanceof BinaryEnumObjectImpl) { + gen.writeObjectField(name, ((BinaryObject)val).enumName()); + } + else { + gen.writeObjectField(name, val); + } + } + + gen.writeEndObject(); + } + else { + // Otherwise serialize as Java object. + Object obj = bin.deserialize(); + + gen.writeObject(obj); + } + } + catch (BinaryObjectException ignore) { + gen.writeNull(); + } + } +} diff --git a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinarySerializers.java similarity index 63% copy from modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java copy to modules/json/src/main/java/org/apache/ignite/internal/binary/BinarySerializers.java index b82cbe8ef2b..a1a1f671106 100644 --- a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java +++ b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinarySerializers.java @@ -15,17 +15,17 @@ * limitations under the License. */ -package org.apache.ignite.dump; +package org.apache.ignite.internal.binary; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; +import com.fasterxml.jackson.databind.module.SimpleModule; /** - * Json test suite. + * Simple utility class to init binary related serializers. */ -@RunWith(Suite.class) -@Suite.SuiteClasses({ - JsonDumpConsumerTest.class -}) -public class IgniteJsonSuite { +public class BinarySerializers { + /** Adds binary serializers to module. */ + public static void init(SimpleModule module) { + module.addSerializer(BinaryObjectImpl.class, new BinaryObjectImplSerializer()); + module.addSerializer(BinaryArray.class, new BinaryArraySerializer()); + } } diff --git a/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java b/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java index 804f5159532..07456e2fb20 100644 --- a/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java +++ b/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java @@ -42,12 +42,8 @@ import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider; import com.fasterxml.jackson.databind.ser.SerializerFactory; import org.apache.ignite.IgniteException; import org.apache.ignite.binary.BinaryObject; -import org.apache.ignite.binary.BinaryObjectException; -import org.apache.ignite.binary.BinaryType; import org.apache.ignite.internal.GridKernalContext; -import org.apache.ignite.internal.binary.BinaryArray; -import org.apache.ignite.internal.binary.BinaryEnumObjectImpl; -import org.apache.ignite.internal.binary.BinaryObjectImpl; +import org.apache.ignite.internal.binary.BinarySerializers; import org.apache.ignite.internal.processors.cache.query.GridCacheSqlIndexMetadata; import org.apache.ignite.internal.processors.cache.query.GridCacheSqlMetadata; import org.apache.ignite.internal.util.typedef.F; @@ -85,8 +81,8 @@ public class IgniteObjectMapper extends ObjectMapper { module.addSerializer(IgniteUuid.class, IGNITE_UUID_SERIALIZER); module.addSerializer(GridCacheSqlMetadata.class, IGNITE_SQL_METADATA_SERIALIZER); module.addSerializer(GridCacheSqlIndexMetadata.class, IGNITE_SQL_INDEX_METADATA_SERIALIZER); - module.addSerializer(BinaryObjectImpl.class, IGNITE_BINARY_OBJECT_SERIALIZER); - module.addSerializer(BinaryArray.class, IGNITE_BINARY_ARRAY_SERIALIZER); + + BinarySerializers.init(module); // Standard serializer loses nanoseconds. module.addSerializer(Timestamp.class, IGNITE_TIMESTAMP_SERIALIZER); @@ -268,61 +264,6 @@ public class IgniteObjectMapper extends ObjectMapper { } }; - /** Custom serializer for {@link GridCacheSqlIndexMetadata} */ - private static final JsonSerializer<BinaryObjectImpl> IGNITE_BINARY_OBJECT_SERIALIZER = new JsonSerializer<BinaryObjectImpl>() { - /** {@inheritDoc} */ - @Override public void serialize(BinaryObjectImpl bin, JsonGenerator gen, SerializerProvider ser) throws IOException { - try { - BinaryType meta = bin.rawType(); - - // Serialize to JSON if we have metadata. - if (meta != null && !F.isEmpty(meta.fieldNames())) { - gen.writeStartObject(); - - for (String name : meta.fieldNames()) { - Object val = bin.field(name); - - if (val instanceof BinaryObjectImpl) { - BinaryObjectImpl ref = (BinaryObjectImpl)val; - - if (ref.hasCircularReferences()) - throw ser.mappingException("Failed convert to JSON object for circular references"); - } - - if (val instanceof BinaryEnumObjectImpl) - gen.writeObjectField(name, ((BinaryObject)val).enumName()); - else - gen.writeObjectField(name, val); - } - - gen.writeEndObject(); - } - else { - // Otherwise serialize as Java object. - Object obj = bin.deserialize(); - - gen.writeObject(obj); - } - } - catch (BinaryObjectException ignore) { - gen.writeNull(); - } - } - }; - - /** Custom serializer for {@link BinaryArray}. */ - private static final JsonSerializer<BinaryArray> IGNITE_BINARY_ARRAY_SERIALIZER = new JsonSerializer<BinaryArray>() { - /** {@inheritDoc} */ - @Override public void serialize(BinaryArray val, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeStartArray(); - - for (Object o : val.array()) - gen.writeObject(o); - - gen.writeEndArray(); - } - }; - /** Custom serializer for {@link java.sql.Timestamp}. */ private static final JsonSerializer<Timestamp> IGNITE_TIMESTAMP_SERIALIZER = new JsonSerializer<Timestamp>() { /** {@inheritDoc} */ @@ -382,4 +323,5 @@ public class IgniteObjectMapper extends ObjectMapper { return false; } } + } diff --git a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java b/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java index b82cbe8ef2b..1eab144c5a5 100644 --- a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java +++ b/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java @@ -25,7 +25,8 @@ import org.junit.runners.Suite; */ @RunWith(Suite.class) @Suite.SuiteClasses({ - JsonDumpConsumerTest.class + JsonDumpConsumerTest.class, + JsonArrayTest.class }) public class IgniteJsonSuite { } diff --git a/modules/json/src/test/java/org/apache/ignite/dump/JsonArrayTest.java b/modules/json/src/test/java/org/apache/ignite/dump/JsonArrayTest.java new file mode 100644 index 00000000000..ad2cd069698 --- /dev/null +++ b/modules/json/src/test/java/org/apache/ignite/dump/JsonArrayTest.java @@ -0,0 +1,192 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.dump; + +import java.util.Map; +import com.fasterxml.jackson.core.type.TypeReference; +import org.apache.ignite.binary.BinaryObject; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.binary.BinaryUtils; +import org.apache.ignite.internal.jackson.IgniteObjectMapper; +import org.apache.ignite.platform.model.Department; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS; +import static org.apache.ignite.internal.binary.BinaryUtils.DFLT_IGNITE_USE_BINARY_ARRAYS; + +/** */ +@RunWith(Parameterized.class) +public class JsonArrayTest extends GridCommonAbstractTest { + /** */ + @Parameterized.Parameter + public boolean useBinaryArrays; + + /** + * @return Test parameters. + */ + @Parameterized.Parameters(name = "useBinaryArrays={0}") + public static Object[] parameters() { + return new Object[] {true, false}; + } + + /** {@inheritDoc} */ + @Override protected void beforeTest() throws Exception { + super.beforeTest(); + + System.setProperty(IGNITE_USE_BINARY_ARRAYS, useBinaryArrays + ""); + BinaryUtils.initUseBinaryArrays(); + } + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + super.afterTest(); + + System.setProperty(IGNITE_USE_BINARY_ARRAYS, DFLT_IGNITE_USE_BINARY_ARRAYS + ""); + BinaryUtils.initUseBinaryArrays(); + } + + /** */ + @Test + public void testArrayFieldToBinary() throws Exception { + try (IgniteEx srv = startGrid(0)) { + IgniteObjectMapper mapper = new IgniteObjectMapper(srv.context()); + + Strings strs = new Strings(); + + strs.setValues(new String[]{"John Connor", "Sarah Connor", "Kyle Reese"}); + + BinaryObject binary = srv.binary().toBinary(strs); + + String json = mapper.writeValueAsString(binary); + + assertNotNull(json); + + Strings fromJson = mapper.readValue(json, new TypeReference<>() {}); + + assertNotNull(fromJson); + assertEquals(strs.values.length, fromJson.values.length); + + for (int i = 0; i < strs.values.length; i++) + assertEquals(strs.values[i], fromJson.values[i]); + } + } + + /** */ + @Test + public void testCustomClassArrayToBinary() throws Exception { + try (IgniteEx srv = startGrid(0)) { + IgniteObjectMapper mapper = new IgniteObjectMapper(srv.context()); + + User[] raw = new User[]{ + new User("John Connor", 10.0d, new Department("IT")), + new User("Sarah Connor", 20.0d, new Department("SEC")), + new User("Kyle Reese", 50.0d, new Department("SEC")), + }; + + Object binary = srv.binary().toBinary(raw); + + assertEquals(useBinaryArrays, BinaryUtils.isBinaryArray(binary)); + + String json = mapper.writeValueAsString(binary); + + assertNotNull(json); + + Object[] fromJson = mapper.readValue(json, new TypeReference<>() {}); + + assertNotNull(fromJson); + assertEquals(raw.length, fromJson.length); + + for (int i = 0; i < raw.length; i++) { + User user = raw[i]; + Map<String, Object> data = (Map<String, Object>)fromJson[i]; + + assertEquals(user.name, data.get("name")); + assertEquals(user.salary, data.get("salary")); + assertEquals(user.dep.getName(), ((Map)data.get("dep")).get("name")); + } + } + } + + /** */ + public static class User { + /** */ + private String name; + + /** */ + private Double salary; + + /** */ + private Department dep; + + /** */ + public User(String name, Double salary, Department dep) { + this.name = name; + this.salary = salary; + this.dep = dep; + } + + /** */ + public String getName() { + return name; + } + + /** */ + public void setName(String name) { + this.name = name; + } + + /** */ + public Double getSalary() { + return salary; + } + + /** */ + public void setSalary(Double salary) { + this.salary = salary; + } + + /** */ + public Department getDep() { + return dep; + } + + /** */ + public void setDep(Department dep) { + this.dep = dep; + } + } + + /** */ + public static class Strings { + /** */ + public String[] values; + + /** */ + public String[] getValues() { + return values; + } + + /** */ + public void setValues(String[] values) { + this.values = values; + } + } +} diff --git a/parent/pom.xml b/parent/pom.xml index 5f0367c94fb..57e2a80b581 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -930,16 +930,11 @@ <version>3.7.0</version> <configuration> <compilerArgs> - <arg>--add-exports</arg> - <arg>java.base/jdk.internal.misc=ALL-UNNAMED</arg> - <arg>--add-exports</arg> - <arg>java.base/sun.nio.ch=ALL-UNNAMED</arg> - <arg>--add-exports</arg> - <arg>java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED</arg> - <arg>--add-exports</arg> - <arg>jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED</arg> - <arg>--add-exports</arg> - <arg>java.base/sun.net.util=ALL-UNNAMED</arg> + <arg>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED</arg> + <arg>--add-exports=java.base/sun.nio.ch=ALL-UNNAMED</arg> + <arg>--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED</arg> + <arg>--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED</arg> + <arg>--add-exports=java.base/sun.net.util=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin>