diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java index 4ba39fc01741d..b88f306223517 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java @@ -198,7 +198,7 @@ class BinaryClassDescriptor { initialSerializer = serializer; // If serializer is not defined at this point, then we have to use OptimizedMarshaller. - useOptMarshaller = serializer == null || CommonUtils.isGeometryClass(cls); + useOptMarshaller = serializer == null || CommonUtils.isGeometryClass(cls) || cls.isRecord(); // Reset reflective serializer so that we rely on existing reflection-based serialization. if (serializer instanceof BinaryReflectiveSerializer) @@ -231,8 +231,8 @@ else if (useOptMarshaller) if (useOptMarshaller && userType && !CommonUtils.isIgnite(cls) && !CommonUtils.isJdk(cls) && !CommonUtils.isGeometryClass(cls)) { CommonUtils.warnDevOnly(ctx.log(), "Class \"" + cls.getName() + "\" cannot be serialized using " + - BinaryMarshaller.class.getSimpleName() + " because it either implements Externalizable interface " + - "or have writeObject/readObject methods. " + OptimizedMarshaller.class.getSimpleName() + " will be " + + BinaryMarshaller.class.getSimpleName() + " because it either implements Externalizable interface, " + + "have writeObject/readObject methods, or is a record. " + OptimizedMarshaller.class.getSimpleName() + " will be " + "used instead and class instances will be deserialized on the server. Please ensure that all nodes " + "have this class in classpath. To enable binary serialization either implement " + Binarylizable.class.getSimpleName() + " interface or set explicit serializer using " + 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 3e52bbc0e35e5..f3537f2df44fd 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 @@ -127,6 +127,16 @@ public void testNull() throws Exception { assertNull(marshalUnmarshal(null)); } + /** + * @throws Exception If failed. + */ + @Test + public void testRecord() throws Exception { + TestRecord testRecord = new TestRecord("value", 42L); + + assertEquals(testRecord, marshalUnmarshal(testRecord)); + } + /** * @throws Exception If failed. */ @@ -6277,4 +6287,10 @@ public TwoCollections() { v = new Value(127); } } + + /** */ + private record TestRecord(String value, long timestamp) implements Serializable { + // No-op. + } + }