diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java index 690e6c91f303d..4ce858fca0e34 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java @@ -2921,12 +2921,19 @@ static BinaryReaderEx reader(BinaryContext ctx, /** * @param ctx Context. + * @param failIfUnregistered Flag to fail while writing object of unregistered type. * @return Writer instance. */ - public static BinaryWriterEx writer(BinaryContext ctx) { + public static BinaryWriterEx writer(BinaryContext ctx, boolean failIfUnregistered) { BinaryThreadLocalContext locCtx = BinaryThreadLocalContext.get(); - return new BinaryWriterExImpl(ctx, BinaryStreams.outputStream((int)CommonUtils.KB, locCtx.chunk()), locCtx.schemaHolder(), null); + return new BinaryWriterExImpl( + ctx, + BinaryStreams.outputStream((int)CommonUtils.KB, locCtx.chunk()), + locCtx.schemaHolder(), + null, + failIfUnregistered + ); } /** @@ -2935,7 +2942,7 @@ public static BinaryWriterEx writer(BinaryContext ctx) { * @return Writer instance. */ public static BinaryWriterEx writer(BinaryContext ctx, BinaryOutputStream out) { - return new BinaryWriterExImpl(ctx, out, BinaryThreadLocalContext.get().schemaHolder(), null); + return new BinaryWriterExImpl(ctx, out, BinaryThreadLocalContext.get().schemaHolder(), null, false); } /** @@ -2944,7 +2951,7 @@ public static BinaryWriterEx writer(BinaryContext ctx, BinaryOutputStream out) { * @return Writer instance. */ public static BinaryWriterEx writer(BinaryContext ctx, BinaryOutputStream out, BinaryWriterSchemaHolder schema) { - return new BinaryWriterExImpl(ctx, out, schema, null); + return new BinaryWriterExImpl(ctx, out, schema, null, false); } /** @return Instance of caching handler. */ diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterEx.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterEx.java index fdd8882b306f3..5c73676c6bf28 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterEx.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterEx.java @@ -66,11 +66,6 @@ public interface BinaryWriterEx extends BinaryWriter, BinaryRawWriter, ObjectOut */ public boolean failIfUnregistered(); - /** - * @param failIfUnregistered Fail if unregistered. - */ - public void failIfUnregistered(boolean failIfUnregistered); - /** * @param obj Object. * @throws org.apache.ignite.binary.BinaryObjectException In case of error. diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java index 4ab8eadac6091..ed1b092e9ad64 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java @@ -83,18 +83,26 @@ class BinaryWriterExImpl implements BinaryWriterEx { private BinaryInternalMapper mapper; /** */ - private boolean failIfUnregistered; + private final boolean failIfUnregistered; /** * @param ctx Context. * @param out Output stream. * @param handles Handles. + * @param failIfUnregistered Flag to fail while writing object of unregistered type. */ - public BinaryWriterExImpl(BinaryContext ctx, BinaryOutputStream out, BinaryWriterSchemaHolder schema, BinaryWriterHandles handles) { + public BinaryWriterExImpl( + BinaryContext ctx, + BinaryOutputStream out, + BinaryWriterSchemaHolder schema, + BinaryWriterHandles handles, + boolean failIfUnregistered + ) { this.ctx = ctx; this.out = out; this.schema = schema; this.handles = handles; + this.failIfUnregistered = failIfUnregistered; start = out.position(); } @@ -104,11 +112,6 @@ public BinaryWriterExImpl(BinaryContext ctx, BinaryOutputStream out, BinaryWrite return failIfUnregistered; } - /** {@inheritDoc} */ - @Override public void failIfUnregistered(boolean failIfUnregistered) { - this.failIfUnregistered = failIfUnregistered; - } - /** {@inheritDoc} */ @Override public void typeId(int typeId) { this.typeId = typeId; @@ -844,9 +847,7 @@ void writeBooleanField(@Nullable Boolean val) { if (obj == null) out.writeByte(GridBinaryMarshaller.NULL); else { - BinaryWriterExImpl writer = new BinaryWriterExImpl(ctx, out, schema, handles()); - - writer.failIfUnregistered(failIfUnregistered); + BinaryWriterExImpl writer = new BinaryWriterExImpl(ctx, out, schema, handles(), failIfUnregistered); writer.marshal(obj); } @@ -857,9 +858,7 @@ void writeBooleanField(@Nullable Boolean val) { if (obj == null) out.writeByte(GridBinaryMarshaller.NULL); else { - BinaryWriterExImpl writer = new BinaryWriterExImpl(ctx, out, schema, null); - - writer.failIfUnregistered(failIfUnregistered); + BinaryWriterExImpl writer = new BinaryWriterExImpl(ctx, out, schema, null, failIfUnregistered); writer.marshal(obj); } @@ -1538,9 +1537,7 @@ boolean tryWriteAsHandle(Object obj) { /** {@inheritDoc} */ @Override public BinaryWriterEx newWriter(int typeId) { - BinaryWriterExImpl res = new BinaryWriterExImpl(ctx, out, schema, handles()); - - res.failIfUnregistered(failIfUnregistered); + BinaryWriterExImpl res = new BinaryWriterExImpl(ctx, out, schema, handles(), failIfUnregistered); res.typeId(typeId); diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java index 311c629b5535e..eed925e070db6 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java @@ -250,9 +250,7 @@ public byte[] marshal(@Nullable Object obj, boolean failIfUnregistered) throws B if (obj == null) return new byte[] { NULL }; - try (BinaryWriterEx writer = BinaryUtils.writer(ctx)) { - writer.failIfUnregistered(failIfUnregistered); - + try (BinaryWriterEx writer = BinaryUtils.writer(ctx, failIfUnregistered)) { writer.marshal(obj); return writer.array(); diff --git a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java index 1993d1b01c151..3eca70ca1f6cd 100644 --- a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java @@ -172,12 +172,12 @@ public BinaryObjectBuilderImpl(BinaryObjectEx obj) { /** {@inheritDoc} */ @Override public BinaryObject build() { - try (BinaryWriterEx writer = BinaryUtils.writer(ctx)) { - Thread curThread = Thread.currentThread(); - - if (curThread instanceof IgniteThread) - writer.failIfUnregistered(((IgniteThread)curThread).isForbiddenToRequestBinaryMetadata()); + Thread curThread = Thread.currentThread(); + try (BinaryWriterEx writer = BinaryUtils.writer( + ctx, + curThread instanceof IgniteThread && ((IgniteThread)curThread).isForbiddenToRequestBinaryMetadata()) + ) { writer.typeId(typeId); BinaryBuilderSerializer serializationCtx = new BinaryBuilderSerializer(); 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 1423f520b5bc7..955826b8f3fa4 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 @@ -3019,7 +3019,7 @@ public void testThreadLocalArrayReleased() throws Exception { BinaryMarshaller marsh = binaryMarshaller(); - try (BinaryWriterEx writer = BinaryUtils.writer(binaryContext(marsh))) { + try (BinaryWriterEx writer = BinaryUtils.writer(binaryContext(marsh), false)) { assertEquals(true, BinaryStreamsTestUtils.threadLocalIsAcquired()); writer.writeString("Thread local test"); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java index 1f4fe14c8fac9..3cf2d7b570f3b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/RawBinaryObjectExtractorTest.java @@ -49,7 +49,7 @@ public void test() throws Exception { byte[] serializedTestObjectsBytes; - try (BinaryWriterEx writer = BinaryUtils.writer(ctx)) { + try (BinaryWriterEx writer = BinaryUtils.writer(ctx, false)) { testObjects.forEach(writer::writeObject); serializedTestObjectsBytes = writer.array();