This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new da06a26b5fa IGNITE-27231 Improve marshaller error messages (#7135)
da06a26b5fa is described below
commit da06a26b5fa391294a7a8eef351907efd73f963e
Author: Andrew V. Mashenkov <[email protected]>
AuthorDate: Wed Dec 3 15:00:59 2025 +0300
IGNITE-27231 Improve marshaller error messages (#7135)
---
.../client/proto/ClientBinaryTupleUtils.java | 5 +-
.../requests/table/ClientHandlerTupleTests.java | 6 +-
.../internal/client/compute/ClientCompute.java | 3 +-
.../client/table/ClientKeyValueBinaryView.java | 4 +-
.../client/table/ClientRecordBinaryView.java | 2 +-
.../client/table/ClientTupleSerializer.java | 23 +++-
.../ignite/internal/rebalance/ItRebalanceTest.java | 2 +-
.../internal/marshaller/ValidationUtils.java | 3 +-
.../internal/marshaller/FieldAccessorTest.java | 4 +-
.../Table/SchemaValidationTest.cs | 14 +--
.../ItRaftCommandLeftInLogUntilRestartTest.java | 2 +-
.../runner/app/PlatformTestNodeRunner.java | 4 +-
.../app/client/ItThinClientMarshallingTest.java | 136 +++++++++++----------
.../ItThinClientSchemaSynchronizationTest.java | 28 ++---
.../internal/table/ItThinClientColocationTest.java | 2 +-
.../internal/schema/SchemaMismatchException.java | 10 ++
.../schema/marshaller/KvMarshallerTest.java | 2 +-
.../schema/marshaller/RecordMarshallerTest.java | 2 +-
.../ignite/internal/table/ItColocationTest.java | 2 +-
.../table/ItKeyValueBinaryViewApiTest.java | 15 +--
.../internal/table/ItRecordBinaryViewApiTest.java | 4 +-
...bstractHighAvailablePartitionsRecoveryTest.java | 2 +-
.../schema/marshaller/TupleMarshallerImpl.java | 36 ++++--
.../internal/table/KeyValueBinaryViewImpl.java | 2 +-
.../internal/table/RecordBinaryViewImpl.java | 2 +-
.../apache/ignite/internal/table/TableImpl.java | 2 +-
.../internal/table/TupleMarshallerCache.java | 7 +-
.../table/partition/HashPartitionManagerImpl.java | 2 +-
.../TupleMarshallerFixlenOnlyBenchmark.java | 4 +-
.../TupleMarshallerVarlenOnlyBenchmark.java | 4 +-
.../marshaller/TupleMarshallerStatisticsTest.java | 3 +-
.../table/ColocationHashCalculationTest.java | 5 +-
.../internal/table/MutableRowTupleAdapterTest.java | 33 +++--
.../table/TableKvOperationsMockedTest.java | 6 +-
.../table/type/NumericTypesSerializerTest.java | 29 ++---
.../ignite/internal/table/KeyValueTestUtils.java | 9 ++
.../ignite/internal/table/TxAbstractTest.java | 3 +-
37 files changed, 237 insertions(+), 185 deletions(-)
diff --git
a/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
b/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
index 3b74cb57dcc..73bc9cb2c33 100644
---
a/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
+++
b/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
@@ -32,7 +32,6 @@ import
org.apache.ignite.internal.binarytuple.BinaryTupleBuilder;
import org.apache.ignite.internal.binarytuple.BinaryTupleReader;
import org.apache.ignite.internal.type.NativeType;
import org.apache.ignite.internal.type.NativeTypes;
-import org.apache.ignite.lang.ErrorGroups.Marshalling;
import org.apache.ignite.lang.IgniteException;
import org.apache.ignite.lang.MarshallerException;
import org.apache.ignite.sql.ColumnType;
@@ -269,8 +268,6 @@ public class ClientBinaryTupleUtils {
if (nativeType == null) {
// Unsupported type (does not map to any Ignite type) - throw
(same behavior as embedded).
throw new MarshallerException(
- UUID.randomUUID(),
- Marshalling.COMMON_ERR,
String.format(
"Invalid value type provided for column
[name='%s', expected='%s', actual='%s']",
name,
@@ -287,7 +284,7 @@ public class ClientBinaryTupleUtils {
name, type.name(), actualType.name()
);
- throw new IgniteException(PROTOCOL_ERR, error, e);
+ throw new MarshallerException(error, e);
}
}
diff --git
a/modules/client-handler/src/test/java/org/apache/ignite/client/handler/requests/table/ClientHandlerTupleTests.java
b/modules/client-handler/src/test/java/org/apache/ignite/client/handler/requests/table/ClientHandlerTupleTests.java
index 8afb162e810..4a75aad34b3 100644
---
a/modules/client-handler/src/test/java/org/apache/ignite/client/handler/requests/table/ClientHandlerTupleTests.java
+++
b/modules/client-handler/src/test/java/org/apache/ignite/client/handler/requests/table/ClientHandlerTupleTests.java
@@ -42,7 +42,7 @@ import java.util.UUID;
import org.apache.ignite.internal.binarytuple.BinaryTupleReader;
import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
+import org.apache.ignite.internal.table.KeyValueTestUtils;
import org.apache.ignite.internal.testframework.IgniteTestUtils;
import org.apache.ignite.internal.type.NativeTypes;
import org.apache.ignite.table.Tuple;
@@ -87,7 +87,7 @@ public class ClientHandlerTupleTests {
public void testTupleEquality() {
Tuple tuple = createTuple();
- BinaryTupleReader binaryTuple = new
TupleMarshallerImpl(fullSchema).marshal(tuple).binaryTuple();
+ BinaryTupleReader binaryTuple =
KeyValueTestUtils.createMarshaller(fullSchema).marshal(tuple).binaryTuple();
Tuple clientHandlerTuple = new ClientHandlerTuple(fullSchema, null,
binaryTuple, false);
assertEquals(tuple, clientHandlerTuple);
@@ -97,7 +97,7 @@ public class ClientHandlerTupleTests {
public void testTupleEqualityKeyOnly() {
Tuple tuple = createKeyTuple();
- BinaryTupleReader binaryTuple = new
TupleMarshallerImpl(fullSchema).marshalKey(tuple).binaryTuple();
+ BinaryTupleReader binaryTuple =
KeyValueTestUtils.createMarshaller(fullSchema).marshalKey(tuple).binaryTuple();
Tuple clientHandlerTuple = new ClientHandlerTuple(fullSchema, null,
binaryTuple, true);
assertEquals(tuple, clientHandlerTuple);
diff --git
a/modules/client/src/main/java/org/apache/ignite/internal/client/compute/ClientCompute.java
b/modules/client/src/main/java/org/apache/ignite/internal/client/compute/ClientCompute.java
index f0ddd57e267..5f64e7261e3 100644
---
a/modules/client/src/main/java/org/apache/ignite/internal/client/compute/ClientCompute.java
+++
b/modules/client/src/main/java/org/apache/ignite/internal/client/compute/ClientCompute.java
@@ -386,9 +386,10 @@ public class ClientCompute implements IgniteCompute {
JobDescriptor<T, R> descriptor,
T arg
) {
+ ClientTupleSerializer ser = new ClientTupleSerializer(t.tableId(),
t::qualifiedName);
return executeColocatedInternal(
t,
- (outputChannel, schema) ->
ClientTupleSerializer.writeTupleRaw(key, schema, outputChannel, true),
+ (outputChannel, schema) -> ser.writeTupleRaw(key, schema,
outputChannel, true),
ClientTupleSerializer.getPartitionAwarenessProvider(key),
descriptor,
arg
diff --git
a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientKeyValueBinaryView.java
b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientKeyValueBinaryView.java
index c5c65c11e79..4e8aaed9b27 100644
---
a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientKeyValueBinaryView.java
+++
b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientKeyValueBinaryView.java
@@ -74,7 +74,7 @@ public class ClientKeyValueBinaryView extends
AbstractClientView<Entry<Tuple, Tu
ClientKeyValueBinaryView(ClientTable tbl, ClientSql sql) {
super(tbl, sql);
- ser = new ClientTupleSerializer(tbl.tableId());
+ ser = new ClientTupleSerializer(tbl.tableId(), tbl::qualifiedName);
}
/** {@inheritDoc} */
@@ -91,7 +91,7 @@ public class ClientKeyValueBinaryView extends
AbstractClientView<Entry<Tuple, Tu
return tbl.doSchemaOutInOpAsync(
ClientOp.TUPLE_GET,
(s, w, n) -> ser.writeTuple(tx, key, s, w, n, true),
- (s, r) -> ClientTupleSerializer.readValueTuple(s, r.in()),
+ (s, r) -> ser.readValueTuple(s, r.in()),
null,
getPartitionAwarenessProvider(key),
tx);
diff --git
a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientRecordBinaryView.java
b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientRecordBinaryView.java
index 426532278ef..9e9604561ae 100644
---
a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientRecordBinaryView.java
+++
b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientRecordBinaryView.java
@@ -62,7 +62,7 @@ public class ClientRecordBinaryView extends
AbstractClientView<Tuple> implements
ClientRecordBinaryView(ClientTable tbl, ClientSql sql) {
super(tbl, sql);
- ser = new ClientTupleSerializer(tbl.tableId());
+ ser = new ClientTupleSerializer(tbl.tableId(), tbl::qualifiedName);
}
/** {@inheritDoc} */
diff --git
a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTupleSerializer.java
b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTupleSerializer.java
index 7b52ccb4f66..0d8a93e08d4 100644
---
a/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTupleSerializer.java
+++
b/modules/client/src/main/java/org/apache/ignite/internal/client/table/ClientTupleSerializer.java
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.function.Supplier;
import org.apache.ignite.internal.binarytuple.BinaryTupleBuilder;
import org.apache.ignite.internal.binarytuple.BinaryTupleReader;
import org.apache.ignite.internal.client.PayloadOutputChannel;
@@ -38,8 +39,11 @@ import
org.apache.ignite.internal.client.proto.ClientMessagePacker;
import org.apache.ignite.internal.client.proto.ClientMessageUnpacker;
import org.apache.ignite.internal.client.proto.TuplePart;
import org.apache.ignite.internal.lang.IgniteBiTuple;
+import org.apache.ignite.internal.lang.IgniteStringFormatter;
import org.apache.ignite.internal.marshaller.UnmappedColumnsException;
import org.apache.ignite.internal.util.HashCalculator;
+import org.apache.ignite.lang.MarshallerException;
+import org.apache.ignite.table.QualifiedName;
import org.apache.ignite.table.Tuple;
import org.apache.ignite.table.TupleHelper;
import org.apache.ignite.table.mapper.Mapper;
@@ -53,13 +57,18 @@ public class ClientTupleSerializer {
/** Table ID. */
private final int tableId;
+ /** Table name resolver. */
+ private final Supplier<QualifiedName> tableNameSupplier;
+
/**
* Constructor.
*
* @param tableId Table id.
+ * @param tableNameSupplier Supplier of table name.
*/
- ClientTupleSerializer(int tableId) {
+ public ClientTupleSerializer(int tableId, Supplier<QualifiedName>
tableNameSupplier) {
this.tableId = tableId;
+ this.tableNameSupplier = tableNameSupplier;
}
/**
@@ -136,7 +145,7 @@ public class ClientTupleSerializer {
* @param out Out.
* @param keyOnly Key only.
*/
- public static void writeTupleRaw(Tuple tuple, ClientSchema schema,
PayloadOutputChannel out, boolean keyOnly) {
+ public void writeTupleRaw(Tuple tuple, ClientSchema schema,
PayloadOutputChannel out, boolean keyOnly) {
var columns = keyOnly ? schema.keyColumns() : schema.columns();
var builder = new BinaryTupleBuilder(columns.length);
@@ -483,7 +492,7 @@ public class ClientTupleSerializer {
return hashCalc.hash();
}
- private static void throwSchemaMismatchException(Tuple tuple, ClientSchema
schema, TuplePart part) {
+ private void throwSchemaMismatchException(Tuple tuple, ClientSchema
schema, TuplePart part) {
Set<String> extraColumns = new HashSet<>();
for (int i = 0; i < tuple.columnCount(); i++) {
@@ -502,7 +511,11 @@ public class ClientTupleSerializer {
prefix = "Value tuple";
}
- throw new IllegalArgumentException(String.format("%s doesn't match
schema: schemaVersion=%s, extraColumns=%s",
- prefix, schema.version(), extraColumns), new
UnmappedColumnsException());
+ QualifiedName tableName = tableNameSupplier.get();
+
+ String message = IgniteStringFormatter.format("Failed to serialize
tuple for table {}:"
+ + " {} doesn't match schema: schemaVersion={},
extraColumns={}",
+ tableName.toCanonicalForm(), prefix, schema.version(),
extraColumns);
+ throw new MarshallerException(message, new UnmappedColumnsException());
}
}
diff --git
a/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceTest.java
b/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceTest.java
index 704b4ebadb6..33878a2c2d0 100644
---
a/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceTest.java
+++
b/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/rebalance/ItRebalanceTest.java
@@ -148,7 +148,7 @@ public class ItRebalanceTest extends
ClusterPerTestIntegrationTest {
private static Row marshalTuple(TableViewInternal table, Tuple tuple) {
SchemaRegistry schemaReg = table.schemaView();
- var marshaller = new TupleMarshallerImpl(schemaReg.lastKnownSchema());
+ var marshaller = new TupleMarshallerImpl(table::qualifiedName,
schemaReg.lastKnownSchema());
return marshaller.marshal(tuple);
}
diff --git
a/modules/marshaller-common/src/main/java/org/apache/ignite/internal/marshaller/ValidationUtils.java
b/modules/marshaller-common/src/main/java/org/apache/ignite/internal/marshaller/ValidationUtils.java
index bb7f1ac56c0..f76bd26a1dd 100644
---
a/modules/marshaller-common/src/main/java/org/apache/ignite/internal/marshaller/ValidationUtils.java
+++
b/modules/marshaller-common/src/main/java/org/apache/ignite/internal/marshaller/ValidationUtils.java
@@ -25,6 +25,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.UUID;
+import org.apache.ignite.lang.MarshallerException;
import org.apache.ignite.table.mapper.Mapper;
import org.jetbrains.annotations.Nullable;
@@ -42,7 +43,7 @@ public class ValidationUtils {
public static void validateColumnType(MarshallerColumn col, Class<?> cls) {
if (!isColumnCompatible(col.type(), cls)) {
// Exception message is similar to embedded mode - see
o.a.i.i.schema.Column#validate
- throw new ClassCastException("Column's type mismatch ["
+ throw new MarshallerException("Column's type mismatch ["
+ "column=" + col.name()
+ ", expectedType=" + col.type()
+ ", actualType=" + cls + ']');
diff --git
a/modules/marshaller-common/src/test/java/org/apache/ignite/internal/marshaller/FieldAccessorTest.java
b/modules/marshaller-common/src/test/java/org/apache/ignite/internal/marshaller/FieldAccessorTest.java
index 8fb1a74c077..79ef9e4d1b2 100644
---
a/modules/marshaller-common/src/test/java/org/apache/ignite/internal/marshaller/FieldAccessorTest.java
+++
b/modules/marshaller-common/src/test/java/org/apache/ignite/internal/marshaller/FieldAccessorTest.java
@@ -297,7 +297,7 @@ public class FieldAccessorTest extends
BaseIgniteAbstractTest {
public void wrongAccessor() {
// Incompatible types.
assertThrows(
- ClassCastException.class,
+ MarshallerException.class,
() -> FieldAccessor.create(
TestObjectWrapper.class,
"data",
@@ -308,7 +308,7 @@ public class FieldAccessorTest extends
BaseIgniteAbstractTest {
// Implicit serialization is not supported yet.
assertThrows(
- ClassCastException.class,
+ MarshallerException.class,
() -> FieldAccessor.create(
TestObjectWrapper.class,
"data",
diff --git
a/modules/platforms/dotnet/Apache.Ignite.Tests/Table/SchemaValidationTest.cs
b/modules/platforms/dotnet/Apache.Ignite.Tests/Table/SchemaValidationTest.cs
index fdc13f9785a..51431b95c98 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/Table/SchemaValidationTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/Table/SchemaValidationTest.cs
@@ -120,7 +120,7 @@ public class SchemaValidationTest : IgniteTestsBase
};
var ex = Assert.ThrowsAsync<MarshallerException>(async () => await
TableRequiredVal.RecordBinaryView.UpsertAsync(null, igniteTuple));
- StringAssert.StartsWith("Column 'VAL' does not allow NULLs",
ex!.Message);
+ StringAssert.Contains("Column 'VAL' does not allow NULLs",
ex!.Message);
}
[Test]
@@ -134,7 +134,7 @@ public class SchemaValidationTest : IgniteTestsBase
};
var ex = Assert.ThrowsAsync<MarshallerException>(async () => await
Table.KeyValueBinaryView.PutAsync(null, keyTuple, valTuple));
- Assert.AreEqual("Missed key column: KEY", ex!.Message);
+ StringAssert.Contains("Missed key column: KEY", ex!.Message);
}
[Test]
@@ -149,7 +149,7 @@ public class SchemaValidationTest : IgniteTestsBase
var ex = Assert.ThrowsAsync<MarshallerException>(
async () => await
TableRequiredVal.KeyValueBinaryView.PutAsync(null, keyTuple, valTuple));
- StringAssert.StartsWith("Column 'VAL' does not allow NULLs",
ex!.Message);
+ StringAssert.Contains("Column 'VAL' does not allow NULLs",
ex!.Message);
}
[Test]
@@ -249,7 +249,7 @@ public class SchemaValidationTest : IgniteTestsBase
{
var ex = Assert.ThrowsAsync<MarshallerException>(async () => await
Table.GetRecordView<ValPoco>().UpsertAsync(null, new ValPoco()));
- Assert.AreEqual("Missed key column: KEY", ex!.Message);
+ StringAssert.Contains("Missed key column: KEY", ex!.Message);
}
[Test]
@@ -258,7 +258,7 @@ public class SchemaValidationTest : IgniteTestsBase
var ex = Assert.ThrowsAsync<MarshallerException>(
async () => await
TableRequiredVal.GetRecordView<KeyPoco>().UpsertAsync(null, new KeyPoco()));
- StringAssert.StartsWith("Column 'VAL' does not allow NULLs",
ex!.Message);
+ StringAssert.Contains("Column 'VAL' does not allow NULLs",
ex!.Message);
}
[Test]
@@ -267,7 +267,7 @@ public class SchemaValidationTest : IgniteTestsBase
var ex = Assert.ThrowsAsync<MarshallerException>(
async () => await Table.GetKeyValueView<ValPoco,
string>().PutAsync(null, new ValPoco(), "x"));
- Assert.AreEqual("Missed key column: KEY", ex!.Message);
+ StringAssert.Contains("Missed key column: KEY", ex!.Message);
}
[Test]
@@ -276,7 +276,7 @@ public class SchemaValidationTest : IgniteTestsBase
var ex = Assert.ThrowsAsync<MarshallerException>(
async () => await TableRequiredVal.GetKeyValueView<long,
KeyPoco>().PutAsync(null, 1L, new KeyPoco()));
- StringAssert.StartsWith("Column 'VAL' does not allow NULLs",
ex!.Message);
+ StringAssert.Contains("Column 'VAL' does not allow NULLs",
ex!.Message);
}
[Test]
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItRaftCommandLeftInLogUntilRestartTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItRaftCommandLeftInLogUntilRestartTest.java
index 894f88f4588..3bfb333d8cf 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItRaftCommandLeftInLogUntilRestartTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItRaftCommandLeftInLogUntilRestartTest.java
@@ -233,7 +233,7 @@ public class ItRaftCommandLeftInLogUntilRestartTest extends
ClusterPerClassInteg
private static Row marshalKey(TableViewInternal table, Tuple tuple) {
SchemaRegistry schemaReg = table.schemaView();
- var marshaller = new TupleMarshallerImpl(schemaReg.lastKnownSchema());
+ var marshaller = new TupleMarshallerImpl(table::qualifiedName,
schemaReg.lastKnownSchema());
return marshaller.marshalKey(tuple);
}
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java
index 5cfecff7be7..6fde10ceb1d 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/PlatformTestNodeRunner.java
@@ -91,12 +91,12 @@ import
org.apache.ignite.internal.runner.app.Jobs.JsonMarshaller;
import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.marshaller.TupleMarshaller;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.schema.row.Row;
import
org.apache.ignite.internal.security.authentication.basic.BasicAuthenticationProviderChange;
import org.apache.ignite.internal.security.configuration.SecurityChange;
import
org.apache.ignite.internal.security.configuration.SecurityExtensionChange;
import org.apache.ignite.internal.sql.SqlCommon;
+import org.apache.ignite.internal.table.KeyValueTestUtils;
import org.apache.ignite.internal.table.RecordBinaryViewImpl;
import org.apache.ignite.internal.table.partition.HashPartition;
import org.apache.ignite.internal.testframework.TestIgnitionManager;
@@ -714,7 +714,7 @@ public class PlatformTestNodeRunner {
List<String> colocationColumns =
columns.stream().map(Column::name).collect(toList());
var schema = new SchemaDescriptor(1, columns, colocationColumns,
null);
- var marsh = new TupleMarshallerImpl(schema);
+ var marsh = KeyValueTestUtils.createMarshaller(schema);
Row row = marsh.marshal(tuple);
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMarshallingTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMarshallingTest.java
index 0f440378272..4a75d938796 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMarshallingTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientMarshallingTest.java
@@ -17,17 +17,16 @@
package org.apache.ignite.internal.runner.app.client;
-import static
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrowsWithCause;
+import static
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrowsWithCode;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.endsWith;
-import static org.hamcrest.Matchers.startsWith;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.math.BigDecimal;
import org.apache.ignite.Ignite;
-import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.lang.ErrorGroups.Marshalling;
import org.apache.ignite.lang.MarshallerException;
import org.apache.ignite.table.RecordView;
import org.apache.ignite.table.Table;
@@ -35,6 +34,7 @@ import org.apache.ignite.table.Tuple;
import org.apache.ignite.table.mapper.Mapper;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.function.Executable;
/**
* Tests marshaller, ensures consistent behavior across client and embedded
modes.
@@ -55,11 +55,11 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
pojo.val = "val";
pojo.unmapped = "unmapped";
- Throwable ex = assertThrowsWithCause(() -> pojoView.upsert(null,
pojo), MarshallerException.class);
- assertEquals(
+ assertThrowsMarshallerException(
+ () -> pojoView.upsert(null, pojo),
"Fields [unmapped, unmapped2] of type "
- +
"org.apache.ignite.internal.runner.app.client.ItThinClientMarshallingTest$TestPojo2
are not mapped to columns",
- ex.getMessage());
+ +
"org.apache.ignite.internal.runner.app.client.ItThinClientMarshallingTest$TestPojo2
are not mapped to columns"
+ );
}
@Test
@@ -69,11 +69,10 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
var pojo = new TestPojo();
- Throwable ex = assertThrowsWithCause(() -> kvPojoView.put(null, pojo,
pojo), MarshallerException.class);
- assertEquals(
+ assertThrowsMarshallerException(
+ () -> kvPojoView.put(null, pojo, pojo),
"Fields [val] of type
org.apache.ignite.internal.runner.app.client.ItAbstractThinClientTest$TestPojo "
- + "are not mapped to columns",
- ex.getMessage());
+ + "are not mapped to columns");
}
@Test
@@ -83,11 +82,11 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
var pojo = new TestPojo();
- Throwable ex = assertThrowsWithCause(() -> kvPojoView.put(null, 1,
pojo), MarshallerException.class);
- assertEquals(
+ assertThrowsMarshallerException(
+ () -> kvPojoView.put(null, 1, pojo),
"Fields [key] of type
org.apache.ignite.internal.runner.app.client.ItAbstractThinClientTest$TestPojo "
- + "are not mapped to columns",
- ex.getMessage());
+ + "are not mapped to columns"
+ );
}
@Test
@@ -97,8 +96,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
var tuple = Tuple.create().set("key", 1).set("val",
"val").set("unmapped", "unmapped");
- Throwable ex = assertThrowsWithCause(() -> tupleView.upsert(null,
tuple), IgniteException.class);
- assertEquals("Tuple doesn't match schema: schemaVersion=1,
extraColumns=[UNMAPPED]", ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> tupleView.upsert(null, tuple),
+ "Tuple doesn't match schema: schemaVersion=1,
extraColumns=[UNMAPPED]");
}
@Test
@@ -108,8 +108,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
var tuple = Tuple.create().set("key", 1).set("val", "val");
- Throwable ex = assertThrowsWithCause(() -> tupleView.put(null, tuple,
tuple), IgniteException.class);
- assertEquals("Key tuple doesn't match schema: schemaVersion=1,
extraColumns=[VAL]", ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> tupleView.put(null, tuple, tuple),
+ "Key tuple doesn't match schema: schemaVersion=1,
extraColumns=[VAL]");
}
@Test
@@ -120,8 +121,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
var key = Tuple.create().set("key", 1);
var tuple = Tuple.create().set("key", 1).set("val", "val");
- Throwable ex = assertThrowsWithCause(() -> tupleView.put(null, key,
tuple), IgniteException.class);
- assertEquals("Value tuple doesn't match schema: schemaVersion=1,
extraColumns=[KEY]", ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> tupleView.put(null, key, tuple),
+ "Value tuple doesn't match schema: schemaVersion=1,
extraColumns=[KEY]");
}
@Test
@@ -129,8 +131,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(TABLE_NAME);
var pojoView = table.recordView(MissingFieldPojo.class);
- Throwable ex = assertThrowsWithCause(() -> pojoView.upsert(null, new
MissingFieldPojo()), MarshallerException.class);
- assertEquals("No mapped object field found for column 'KEY'",
ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> pojoView.upsert(null, new MissingFieldPojo()),
+ "No mapped object field found for column 'KEY'");
}
@Test
@@ -138,8 +141,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(TABLE_NAME);
var kvPojoView = table.keyValueView(MissingFieldPojo.class,
String.class);
- Throwable ex = assertThrowsWithCause(() -> kvPojoView.put(null, new
MissingFieldPojo(), ""), MarshallerException.class);
- assertEquals("No mapped object field found for column 'KEY'",
ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> kvPojoView.put(null, new MissingFieldPojo(), ""),
+ "No mapped object field found for column 'KEY'");
}
@Test
@@ -161,8 +165,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(TABLE_NAME);
var tupleView = table.recordView();
- Throwable ex = assertThrowsWithCause(() -> tupleView.upsert(null,
Tuple.create()), IgniteException.class);
- assertEquals("Missed key column: KEY", ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> tupleView.upsert(null, Tuple.create()),
+ "Missed key column: KEY");
}
@Test
@@ -173,8 +178,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(tableName);
var tupleView = table.recordView();
- Throwable ex = assertThrowsWithCause(() -> tupleView.upsert(null,
Tuple.create().set("KEY", 1)), IgniteException.class);
- assertThat(ex.getMessage(), containsString("Column 'VAL' does not
allow NULLs"));
+ assertThrowsMarshallerException(
+ () -> tupleView.upsert(null, Tuple.create().set("KEY", 1)),
+ "Column 'VAL' does not allow NULLs");
}
@Test
@@ -182,8 +188,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(TABLE_NAME);
var tupleView = table.keyValueView();
- Throwable ex = assertThrowsWithCause(() -> tupleView.put(null,
Tuple.create(), Tuple.create()), IgniteException.class);
- assertEquals("Missed key column: KEY", ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> tupleView.put(null, Tuple.create(), Tuple.create()),
+ "Missed key column: KEY");
}
@Test
@@ -194,11 +201,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(tableName);
var tupleView = table.keyValueView();
- Throwable ex = assertThrowsWithCause(
+ assertThrowsMarshallerException(
() -> tupleView.put(null, Tuple.create().set("KEY", 1),
Tuple.create()),
- IgniteException.class);
-
- assertThat(ex.getMessage(), containsString("Column 'VAL' does not
allow NULLs"));
+ "Column 'VAL' does not allow NULLs");
}
@Test
@@ -223,8 +228,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
rec.key = "1";
rec.val = BigDecimal.ONE;
- Throwable ex = assertThrows(IgniteException.class, () ->
pojoView.upsert(null, rec));
- assertThat(ex.getMessage(), startsWith("Column's type mismatch"));
+ assertThrowsMarshallerException(
+ () -> pojoView.upsert(null, rec),
+ "Column's type mismatch");
}
@Test
@@ -236,8 +242,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
rec.key = -1;
rec.val = "f";
- Throwable ex = assertThrows(IgniteException.class, () ->
pojoView.upsert(null, rec));
- assertThat(ex.getMessage(), startsWith("Column's type mismatch"));
+ assertThrowsMarshallerException(
+ () -> pojoView.upsert(null, rec),
+ "Column's type mismatch");
}
@Test
@@ -253,8 +260,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
// TODO: https://issues.apache.org/jira/browse/IGNITE-22965.
// The validation done on a client side (for a thin client), and
messages may differ between embedded clients and thin clients.
// For an embedded client the message include type precision, but for
a thin client it doesn't.
- Throwable ex = assertThrows(IgniteException.class, () ->
tupleView.upsert(null, rec));
- assertThat(ex.getMessage(), startsWith("Value type does not match
[column='VAL', expected=STRING"));
+ MarshallerException ex = assertThrows(MarshallerException.class, () ->
tupleView.upsert(null, rec));
+ assertEquals(Marshalling.COMMON_ERR, ex.code());
+ assertThat(ex.getMessage(), containsString("Value type does not match
[column='VAL', expected=STRING"));
assertThat(ex.getMessage(), endsWith(", actual=INT64]"));
}
@@ -288,8 +296,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(TABLE_NAME);
var tupleView = table.recordView();
- Throwable ex = assertThrowsWithCause(() -> tupleView.upsert(null,
Tuple.create().set("KEY", null)), IgniteException.class);
- assertThat(ex.getMessage(), containsString("Column 'KEY' does not
allow NULLs"));
+ assertThrowsMarshallerException(
+ () -> tupleView.upsert(null, Tuple.create().set("KEY", null)),
+ "Column 'KEY' does not allow NULLs");
}
@Test
@@ -301,8 +310,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
var tupleView = table.recordView();
Tuple rec = Tuple.create().set("KEY", 1).set("VAL", null);
- Throwable ex = assertThrowsWithCause(() -> tupleView.upsert(null,
rec), IgniteException.class);
- assertThat(ex.getMessage(), containsString("Column 'VAL' does not
allow NULLs"));
+ assertThrowsMarshallerException(
+ () -> tupleView.upsert(null, rec),
+ "Column 'VAL' does not allow NULLs");
}
@Test
@@ -310,8 +320,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(TABLE_NAME);
var tupleView = table.keyValueView();
- Throwable ex = assertThrowsWithCause(() -> tupleView.put(null,
Tuple.create(), Tuple.create()), IgniteException.class);
- assertEquals("Missed key column: KEY", ex.getMessage());
+ assertThrowsMarshallerException(
+ () -> tupleView.put(null, Tuple.create(), Tuple.create()),
+ "Missed key column: KEY");
}
@Test
@@ -322,11 +333,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(tableName);
var tupleView = table.keyValueView();
- Throwable ex = assertThrowsWithCause(
+ assertThrowsMarshallerException(
() -> tupleView.put(null, Tuple.create().set("KEY", 1),
Tuple.create().set("VAL", null)),
- IgniteException.class);
-
- assertThat(ex.getMessage(), containsString("Column 'VAL' does not
allow NULLs"));
+ "Column 'VAL' does not allow NULLs");
}
@Test
@@ -338,11 +347,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(tableName);
var tupleView = table.keyValueView();
- Throwable ex = assertThrowsWithCause(
+ assertThrowsMarshallerException(
() -> tupleView.put(null, Tuple.create().set("KEY", 1),
Tuple.create().set("VAL", "1".repeat(20))),
- IgniteException.class);
-
- assertThat(ex.getMessage(), containsString("Value too long
[column='VAL', type=STRING(10)]"));
+ "Value too long [column='VAL', type=STRING(10)]");
}
@Test
@@ -355,11 +362,9 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
Table table = ignite().tables().table(tableName);
var tupleView = table.keyValueView();
- Throwable ex = assertThrowsWithCause(
+ assertThrowsMarshallerException(
() -> tupleView.put(null, Tuple.create().set("KEY", 1),
Tuple.create().set("VAL", new BigDecimal("12345.1"))),
- IgniteException.class);
-
- assertThat(ex.getMessage(), containsString("Numeric field overflow in
column 'VAL'"));
+ "Numeric field overflow in column 'VAL'");
}
@Test
@@ -371,12 +376,15 @@ public class ItThinClientMarshallingTest extends
ItAbstractThinClientTest {
.set("KEY", 1)
.set("VAL", new TestPojo2());
- MarshallerException ex = assertThrows(MarshallerException.class, () ->
tupleView.upsert(null, rec));
-
- assertEquals(
+ assertThrowsMarshallerException(
+ () -> tupleView.upsert(null, rec),
"Invalid value type provided for column [name='VAL',
expected='java.lang.String', actual='"
- + TestPojo2.class.getName() + "']",
- ex.getMessage());
+ + TestPojo2.class.getName() + "']"
+ );
+ }
+
+ private static void assertThrowsMarshallerException(Executable run, String
messageFragment) {
+ assertThrowsWithCode(MarshallerException.class,
Marshalling.COMMON_ERR, run, messageFragment);
}
private static class TestPojo2 {
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSchemaSynchronizationTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSchemaSynchronizationTest.java
index 08b3199cc25..0176fdb91b6 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSchemaSynchronizationTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSchemaSynchronizationTest.java
@@ -20,11 +20,12 @@ package org.apache.ignite.internal.runner.app.client;
import static
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrowsWithCause;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.internal.testframework.IgniteTestUtils;
import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.lang.MarshallerException;
import org.apache.ignite.sql.IgniteSql;
import org.apache.ignite.sql.ResultSet;
import org.apache.ignite.sql.SqlRow;
@@ -63,8 +64,8 @@ public class ItThinClientSchemaSynchronizationTest extends
ItAbstractThinClientT
sql.execute(null, "ALTER TABLE " + tableName + " DROP COLUMN NAME");
Tuple rec2 = Tuple.create().set("ID", id).set("NAME", "name2");
- Throwable ex = assertThrowsWithCause(() -> recordView.upsert(null,
rec2), IllegalArgumentException.class);
- assertEquals("Tuple doesn't match schema: schemaVersion=2,
extraColumns=[NAME]", ex.getMessage());
+ assertThrowsWithCause(() -> recordView.upsert(null, rec2),
MarshallerException.class,
+ "Tuple doesn't match schema: schemaVersion=2,
extraColumns=[NAME]");
}
@Test
@@ -145,8 +146,8 @@ public class ItThinClientSchemaSynchronizationTest extends
ItAbstractThinClientT
: () -> recordView.insert(null, rec);
// Insert fails, because there is no NAME column.
- var ex = assertThrows(IgniteException.class, action::run);
- assertEquals("Tuple doesn't match schema: schemaVersion=1,
extraColumns=[NAME]", ex.getMessage());
+ IgniteTestUtils.assertThrows(IgniteException.class, action::run,
+ "Tuple doesn't match schema: schemaVersion=1,
extraColumns=[NAME]");
// Modify table, insert again - client will use old schema, throw
ClientSchemaMismatchException,
// reload schema, retry with new schema and succeed.
@@ -175,8 +176,8 @@ public class ItThinClientSchemaSynchronizationTest extends
ItAbstractThinClientT
? () -> kvView.getAndPut(null, key, val)
: () -> kvView.put(null, key, val);
- var ex = assertThrows(IgniteException.class, action::run);
- assertEquals("Value tuple doesn't match schema: schemaVersion=1,
extraColumns=[NAME]", ex.getMessage());
+ IgniteTestUtils.assertThrows(IgniteException.class, action::run,
+ "Value tuple doesn't match schema: schemaVersion=1,
extraColumns=[NAME]");
// Modify table, insert again - client will use old schema, throw
ClientSchemaMismatchException,
// reload schema, retry with new schema and succeed.
@@ -203,11 +204,9 @@ public class ItThinClientSchemaSynchronizationTest extends
ItAbstractThinClientT
? () -> recordView.getAndUpsert(null, rec)
: () -> recordView.insert(null, rec);
- var ex = assertThrows(IgniteException.class, action::run);
- assertEquals(
+ IgniteTestUtils.assertThrows(IgniteException.class, action::run,
"Fields [name] of type
org.apache.ignite.internal.runner.app.client.ItThinClientSchemaSynchronizationTest$Pojo
"
- + "are not mapped to columns",
- ex.getMessage());
+ + "are not mapped to columns");
// Modify table, insert again - client will use old schema, throw
ClientSchemaMismatchException,
// reload schema, retry with new schema and succeed.
@@ -237,12 +236,9 @@ public class ItThinClientSchemaSynchronizationTest extends
ItAbstractThinClientT
? () -> kvView.getAndPut(null, key, val)
: () -> kvView.put(null, key, val);
- var ex = assertThrows(IgniteException.class, action::run);
- assertEquals(
- "Fields [name] of type "
+ IgniteTestUtils.assertThrows(IgniteException.class, action::run,
"Fields [name] of type "
+
"org.apache.ignite.internal.runner.app.client.ItThinClientSchemaSynchronizationTest$ValPojo
"
- + "are not mapped to columns",
- ex.getMessage());
+ + "are not mapped to columns");
// Modify table, insert again - client will use old schema, throw
ClientSchemaMismatchException,
// reload schema, retry with new schema and succeed.
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItThinClientColocationTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItThinClientColocationTest.java
index 970b8d174cc..d26421e1d41 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItThinClientColocationTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/table/ItThinClientColocationTest.java
@@ -127,7 +127,7 @@ public class ItThinClientColocationTest extends
ClusterPerClassIntegrationTest {
var colocationColumns = List.of(columnName);
var schema = new SchemaDescriptor(1, columns, colocationColumns,
colocationColumns);
- return new TupleMarshallerImpl(schema);
+ return KeyValueTestUtils.createMarshaller(schema);
}
private static Stream<Arguments> nativeTypes() {
diff --git
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaMismatchException.java
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaMismatchException.java
index 267cc699dca..89fd94dd136 100644
---
a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaMismatchException.java
+++
b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaMismatchException.java
@@ -29,4 +29,14 @@ public class SchemaMismatchException extends SchemaException
{
public SchemaMismatchException(String msg) {
super(msg);
}
+
+ /**
+ * Constructor with error message and cause.
+ *
+ * @param msg Message.
+ * @param cause Cause.
+ */
+ public SchemaMismatchException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git
a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/KvMarshallerTest.java
b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/KvMarshallerTest.java
index ebbab334c6d..9c807825776 100644
---
a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/KvMarshallerTest.java
+++
b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/KvMarshallerTest.java
@@ -329,7 +329,7 @@ public class KvMarshallerTest {
);
Throwable ex = assertThrows(
- ClassCastException.class,
+ MarshallerException.class,
() -> factory.create(schema, TestSimpleObjectKey.class,
TestSimpleObjectVal.class));
assertThat(
diff --git
a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/RecordMarshallerTest.java
b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/RecordMarshallerTest.java
index 821bbaa8e3a..20fb7f00da9 100644
---
a/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/RecordMarshallerTest.java
+++
b/modules/schema/src/test/java/org/apache/ignite/internal/schema/marshaller/RecordMarshallerTest.java
@@ -215,7 +215,7 @@ public class RecordMarshallerTest {
}
);
- Throwable ex = assertThrows(ClassCastException.class, () ->
factory.create(schema, TestSimpleObject.class));
+ Throwable ex = assertThrows(MarshallerException.class, () ->
factory.create(schema, TestSimpleObject.class));
assertThat(
ex.getMessage(),
diff --git
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItColocationTest.java
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItColocationTest.java
index 3f20527a039..086d608930a 100644
---
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItColocationTest.java
+++
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItColocationTest.java
@@ -478,7 +478,7 @@ public class ItColocationTest extends
BaseIgniteAbstractTest {
tbl = new TableImpl(intTable, schemaRegistry, lockManager(), new
ConstantSchemaVersions(1), mock(IgniteSql.class), -1);
- marshaller = new TupleMarshallerImpl(schema);
+ marshaller = new TupleMarshallerImpl(tbl::qualifiedName, schema);
}
private static LockManager lockManager() {
diff --git
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItKeyValueBinaryViewApiTest.java
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItKeyValueBinaryViewApiTest.java
index 32986d57373..5bc8cc1f272 100644
---
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItKeyValueBinaryViewApiTest.java
+++
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItKeyValueBinaryViewApiTest.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.table;
+import static
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrows;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -39,7 +40,7 @@ import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaMismatchException;
import org.apache.ignite.internal.testframework.IgniteTestUtils;
import org.apache.ignite.internal.type.NativeTypes;
-import org.apache.ignite.lang.ErrorGroups.Client;
+import org.apache.ignite.lang.ErrorGroups.Marshalling;
import org.apache.ignite.lang.IgniteException;
import org.apache.ignite.lang.MarshallerException;
import org.apache.ignite.table.KeyValueView;
@@ -656,7 +657,7 @@ public class ItKeyValueBinaryViewApiTest extends
ItKeyValueViewApiBaseTest {
@SuppressWarnings("ThrowableNotThrown")
void checkNullValueError(Executable run) {
- IgniteTestUtils.assertThrows(NullPointerException.class, run,
"val");
+ assertThrows(NullPointerException.class, run, "val");
}
@SuppressWarnings("ThrowableNotThrown")
@@ -664,7 +665,7 @@ public class ItKeyValueBinaryViewApiTest extends
ItKeyValueViewApiBaseTest {
Executable e = wrap(run);
if (thin) {
- IgniteTestUtils.assertThrows(IgniteException.class, e,
expectedMessage);
+ assertThrows(IgniteException.class, e, expectedMessage);
} else {
IgniteTestUtils.assertThrowsWithCause(e::execute,
SchemaMismatchException.class, expectedMessage);
}
@@ -674,7 +675,7 @@ public class ItKeyValueBinaryViewApiTest extends
ItKeyValueViewApiBaseTest {
void checkInvalidTypeError(Executable run, String expectedMessage) {
if (thin) {
// TODO https://issues.apache.org/jira/browse/IGNITE-21793
Must throw MarshallerException
- IgniteTestUtils.assertThrows(IgniteException.class, run,
expectedMessage);
+ assertThrows(IgniteException.class, run, expectedMessage);
} else {
IgniteTestUtils.assertThrowsWithCause(run::execute,
InvalidTypeException.class, expectedMessage);
}
@@ -684,9 +685,9 @@ public class ItKeyValueBinaryViewApiTest extends
ItKeyValueViewApiBaseTest {
String expectedMessage = "Value type does not match [column='ID',
expected=INT64, actual=INT32]";
if (thin) {
- IgniteException ex = (IgniteException)
IgniteTestUtils.assertThrows(IgniteException.class, run, expectedMessage);
+ MarshallerException ex = (MarshallerException)
assertThrows(MarshallerException.class, run, expectedMessage);
- assertThat(ex.code(), is(Client.PROTOCOL_ERR));
+ assertThat(ex.code(), is(Marshalling.COMMON_ERR));
} else {
//noinspection ThrowableNotThrown
IgniteTestUtils.assertThrowsWithCause(run::execute,
SchemaMismatchException.class, expectedMessage);
@@ -698,7 +699,7 @@ public class ItKeyValueBinaryViewApiTest extends
ItKeyValueViewApiBaseTest {
String expectedMessage = "Missed key column: ID";
if (thin) {
- IgniteTestUtils.assertThrows(MarshallerException.class, run,
expectedMessage);
+ assertThrows(MarshallerException.class, run, expectedMessage);
} else {
IgniteTestUtils.assertThrowsWithCause(run::execute,
SchemaMismatchException.class, expectedMessage);
}
diff --git
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItRecordBinaryViewApiTest.java
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItRecordBinaryViewApiTest.java
index 613c98d8bed..94cd7865261 100644
---
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItRecordBinaryViewApiTest.java
+++
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/ItRecordBinaryViewApiTest.java
@@ -35,7 +35,7 @@ import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaMismatchException;
import org.apache.ignite.internal.testframework.IgniteTestUtils;
import org.apache.ignite.internal.type.NativeTypes;
-import org.apache.ignite.lang.ErrorGroups.Client;
+import org.apache.ignite.lang.ErrorGroups.Marshalling;
import org.apache.ignite.lang.IgniteException;
import org.apache.ignite.lang.MarshallerException;
import org.apache.ignite.lang.util.IgniteNameUtils;
@@ -896,7 +896,7 @@ public class ItRecordBinaryViewApiTest extends
ItRecordViewApiBaseTest {
if (thin) {
IgniteException ex = (IgniteException)
IgniteTestUtils.assertThrows(IgniteException.class, run, expectedMessage);
- assertThat(ex.code(), is(Client.PROTOCOL_ERR));
+ assertThat(ex.code(), is(Marshalling.COMMON_ERR));
} else {
//noinspection ThrowableNotThrown
IgniteTestUtils.assertThrowsWithCause(run::execute,
SchemaMismatchException.class, expectedMessage);
diff --git
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/distributed/disaster/AbstractHighAvailablePartitionsRecoveryTest.java
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/distributed/disaster/AbstractHighAvailablePartitionsRecoveryTest.java
index 53aca4b1589..ddaf871103a 100644
---
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/distributed/disaster/AbstractHighAvailablePartitionsRecoveryTest.java
+++
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/distributed/disaster/AbstractHighAvailablePartitionsRecoveryTest.java
@@ -583,7 +583,7 @@ public abstract class
AbstractHighAvailablePartitionsRecoveryTest extends Cluste
private static Row marshalKey(TableViewInternal table, Tuple key) {
SchemaRegistry schemaReg = table.schemaView();
- var marshaller = new TupleMarshallerImpl(schemaReg.lastKnownSchema());
+ var marshaller = new TupleMarshallerImpl(table::qualifiedName,
schemaReg.lastKnownSchema());
return marshaller.marshal(key, null);
}
diff --git
a/modules/table/src/main/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerImpl.java
b/modules/table/src/main/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerImpl.java
index 2c99f96e87c..c58d58de9f7 100644
---
a/modules/table/src/main/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerImpl.java
+++
b/modules/table/src/main/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerImpl.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.schema.marshaller;
+import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
import static
org.apache.ignite.internal.schema.marshaller.MarshallerUtil.getValueSize;
import static org.apache.ignite.internal.util.IgniteUtils.newHashMap;
@@ -25,7 +26,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.UUID;
+import java.util.function.Supplier;
import org.apache.ignite.internal.binarytuple.BinaryTupleCommon;
import org.apache.ignite.internal.binarytuple.BinaryTupleContainer;
import org.apache.ignite.internal.binarytuple.BinaryTupleReader;
@@ -39,9 +40,9 @@ import org.apache.ignite.internal.schema.row.Row;
import org.apache.ignite.internal.schema.row.RowAssembler;
import org.apache.ignite.internal.type.DecimalNativeType;
import org.apache.ignite.internal.type.NativeType;
-import org.apache.ignite.lang.ErrorGroups.Marshalling;
import org.apache.ignite.lang.MarshallerException;
import org.apache.ignite.sql.ColumnType;
+import org.apache.ignite.table.QualifiedName;
import org.apache.ignite.table.Tuple;
import org.apache.ignite.table.TupleHelper;
import org.jetbrains.annotations.Nullable;
@@ -54,6 +55,7 @@ public class TupleMarshallerImpl implements TupleMarshaller {
private static final Object POISON_OBJECT = new Object();
private final SchemaDescriptor schema;
+ private final Supplier<QualifiedName> tableNameSupplier;
private final int keyOnlyFixedLengthColumnSize;
private final int valueOnlyFixedLengthColumnSize;
@@ -61,10 +63,12 @@ public class TupleMarshallerImpl implements TupleMarshaller
{
/**
* Creates marshaller for given schema.
*
+ * @param tableNameSupplier Table name supplier.
* @param schema Schema.
*/
- public TupleMarshallerImpl(SchemaDescriptor schema) {
+ public TupleMarshallerImpl(Supplier<QualifiedName> tableNameSupplier,
SchemaDescriptor schema) {
this.schema = schema;
+ this.tableNameSupplier = tableNameSupplier;
keyOnlyFixedLengthColumnSize = schema.keyColumns().stream()
.map(Column::type)
@@ -121,13 +125,19 @@ public class TupleMarshallerImpl implements
TupleMarshaller {
return buildRow(part, valuesWithStatistics);
} catch (Exception ex) {
- throw new MarshallerException(ex.getMessage(), ex);
+ String msg = format("Failed to serialize row for table {}. {}",
+ tableNameSupplier.get().toCanonicalForm(),
+ ex.getMessage());
+
+ throw new MarshallerException(msg, ex);
}
}
/** {@inheritDoc} */
@Override
public Row marshal(Tuple keyTuple, @Nullable Tuple valTuple) throws
MarshallerException {
+ boolean keyOnly = valTuple == null;
+
try {
var valuesWithStatistics = new ValuesWithStatistics(valTuple ==
null ? schema.keyColumns().size() : schema.length());
@@ -139,7 +149,6 @@ public class TupleMarshallerImpl implements TupleMarshaller
{
schema.version(), extraColumnNames(keyTuple,
true, schema)));
}
- boolean keyOnly = valTuple == null;
if (!keyOnly) {
gatherStatistics(TuplePart.VALUE, valTuple,
valuesWithStatistics);
@@ -152,7 +161,12 @@ public class TupleMarshallerImpl implements
TupleMarshaller {
return buildRow(keyOnly ? TuplePart.KEY : TuplePart.KEY_VALUE,
valuesWithStatistics);
} catch (Exception ex) {
- throw new MarshallerException(ex.getMessage(), ex);
+ String msg = format("Failed to serialize {} for table {}. {}",
+ keyOnly ? "key tuple" : "row",
+ tableNameSupplier.get().toCanonicalForm(),
+ ex.getMessage());
+
+ throw new MarshallerException(msg, ex);
}
}
@@ -172,7 +186,11 @@ public class TupleMarshallerImpl implements
TupleMarshaller {
return buildRow(part, valuesWithStatistics);
} catch (Exception ex) {
- throw new MarshallerException(ex.getMessage(), ex);
+ String msg = format("Failed to serialize key tuple for table {}.
{}",
+ tableNameSupplier.get().toCanonicalForm(),
+ ex.getMessage());
+
+ throw new MarshallerException(msg, ex);
}
}
@@ -223,9 +241,7 @@ public class TupleMarshallerImpl implements TupleMarshaller
{
estimatedValueSize += getValueSize(val, colType);
} catch (ClassCastException e) {
- throw new MarshallerException(
- UUID.randomUUID(),
- Marshalling.COMMON_ERR,
+ throw new SchemaMismatchException(
String.format(
"Invalid value type provided for
column [name='%s', expected='%s', actual='%s']",
col.name(),
diff --git
a/modules/table/src/main/java/org/apache/ignite/internal/table/KeyValueBinaryViewImpl.java
b/modules/table/src/main/java/org/apache/ignite/internal/table/KeyValueBinaryViewImpl.java
index 958c48d3a11..e47242d107e 100644
---
a/modules/table/src/main/java/org/apache/ignite/internal/table/KeyValueBinaryViewImpl.java
+++
b/modules/table/src/main/java/org/apache/ignite/internal/table/KeyValueBinaryViewImpl.java
@@ -477,7 +477,7 @@ public class KeyValueBinaryViewImpl extends
AbstractTableView<Entry<Tuple, Tuple
* @throws MarshallerException If failed to marshal key and/or value.
*/
private Row marshal(Tuple key, @Nullable Tuple val, int schemaVersion) {
- return marshallerCache.marshaller(schemaVersion).marshal(key, val);
+ return marshallerCache.marshaller(tbl::name,
schemaVersion).marshal(key, val);
}
/**
diff --git
a/modules/table/src/main/java/org/apache/ignite/internal/table/RecordBinaryViewImpl.java
b/modules/table/src/main/java/org/apache/ignite/internal/table/RecordBinaryViewImpl.java
index fdbbe6162a3..caf76c3f74e 100644
---
a/modules/table/src/main/java/org/apache/ignite/internal/table/RecordBinaryViewImpl.java
+++
b/modules/table/src/main/java/org/apache/ignite/internal/table/RecordBinaryViewImpl.java
@@ -107,7 +107,7 @@ public class RecordBinaryViewImpl extends
AbstractTableView<Tuple> implements Re
* @param schemaVersion Schema version for which to obtain a marshaller.
*/
public TupleMarshaller marshaller(int schemaVersion) {
- return marshallerCache.marshaller(schemaVersion);
+ return marshallerCache.marshaller(tbl::name, schemaVersion);
}
@Override
diff --git
a/modules/table/src/main/java/org/apache/ignite/internal/table/TableImpl.java
b/modules/table/src/main/java/org/apache/ignite/internal/table/TableImpl.java
index 36202a26f3b..732f6d61167 100644
---
a/modules/table/src/main/java/org/apache/ignite/internal/table/TableImpl.java
+++
b/modules/table/src/main/java/org/apache/ignite/internal/table/TableImpl.java
@@ -223,7 +223,7 @@ public class TableImpl implements TableViewInternal {
// Taking latest schema version for marshaller here because it's only
used to calculate colocation hash, and colocation
// columns never change (so they are the same for all schema versions
of the table),
- Row keyRow = new
TupleMarshallerImpl(schemaReg.lastKnownSchema()).marshalKey(key);
+ Row keyRow = new TupleMarshallerImpl(tbl::name,
schemaReg.lastKnownSchema()).marshalKey(key);
return tbl.partitionId(keyRow);
}
diff --git
a/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerCache.java
b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerCache.java
index 282881dab64..399af7df8ed 100644
---
a/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerCache.java
+++
b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerCache.java
@@ -17,9 +17,11 @@
package org.apache.ignite.internal.table;
+import java.util.function.Supplier;
import org.apache.ignite.internal.schema.SchemaRegistry;
import org.apache.ignite.internal.schema.marshaller.TupleMarshaller;
import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
+import org.apache.ignite.table.QualifiedName;
import org.jetbrains.annotations.Nullable;
/**
@@ -37,16 +39,17 @@ class TupleMarshallerCache {
/**
* Returns a {@link TupleMarshaller} for the given schema version.
*
+ * @param tableNameSupplier Supplier of table name.
* @param schemaVersion Version for which to return a marshaller.
*/
- TupleMarshaller marshaller(int schemaVersion) {
+ TupleMarshaller marshaller(Supplier<QualifiedName> tableNameSupplier, int
schemaVersion) {
TupleMarshaller marshaller = cachedMarshaller;
if (marshaller != null && marshaller.schemaVersion() == schemaVersion)
{
return marshaller;
}
- marshaller = new
TupleMarshallerImpl(schemaRegistry.schema(schemaVersion));
+ marshaller = new TupleMarshallerImpl(tableNameSupplier,
schemaRegistry.schema(schemaVersion));
cachedMarshaller = marshaller;
diff --git
a/modules/table/src/main/java/org/apache/ignite/internal/table/partition/HashPartitionManagerImpl.java
b/modules/table/src/main/java/org/apache/ignite/internal/table/partition/HashPartitionManagerImpl.java
index a1bdc2da23a..e287854411b 100644
---
a/modules/table/src/main/java/org/apache/ignite/internal/table/partition/HashPartitionManagerImpl.java
+++
b/modules/table/src/main/java/org/apache/ignite/internal/table/partition/HashPartitionManagerImpl.java
@@ -115,7 +115,7 @@ public class HashPartitionManagerImpl implements
PartitionManager {
// Taking latest schema version for marshaller here because it's only
used to calculate colocation hash, and colocation
// columns never change (so they are the same for all schema versions
of the table),
- Row keyRow = new
TupleMarshallerImpl(schemaReg.lastKnownSchema()).marshalKey(key);
+ Row keyRow = new TupleMarshallerImpl(table::name,
schemaReg.lastKnownSchema()).marshalKey(key);
return completedFuture(new HashPartition(table.partitionId(keyRow)));
}
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java
b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java
index 6871c88ff84..ce14fcbec11 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerFixlenOnlyBenchmark.java
@@ -24,8 +24,8 @@ import java.util.stream.IntStream;
import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.marshaller.TupleMarshaller;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.schema.row.Row;
+import org.apache.ignite.internal.table.KeyValueTestUtils;
import org.apache.ignite.internal.type.NativeTypes;
import org.apache.ignite.table.Tuple;
import org.openjdk.jmh.annotations.Benchmark;
@@ -103,7 +103,7 @@ public class TupleMarshallerFixlenOnlyBenchmark {
.toArray(Column[]::new)
);
- marshaller = new TupleMarshallerImpl(schema);
+ marshaller = KeyValueTestUtils.createMarshaller(schema);
vals = new Object[schema.valueColumns().size()];
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java
b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java
index 1b839cbe674..597b5f8c82a 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/benchmarks/TupleMarshallerVarlenOnlyBenchmark.java
@@ -30,8 +30,8 @@ import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.DefaultValueProvider;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.marshaller.TupleMarshaller;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.schema.row.Row;
+import org.apache.ignite.internal.table.KeyValueTestUtils;
import org.apache.ignite.table.Tuple;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
@@ -124,7 +124,7 @@ public class TupleMarshallerVarlenOnlyBenchmark {
.toArray(Column[]::new)
);
- marshaller = new TupleMarshallerImpl(schema);
+ marshaller = KeyValueTestUtils.createMarshaller(schema);
switch (type) {
case RANDOM_STRING: {
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerStatisticsTest.java
b/modules/table/src/test/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerStatisticsTest.java
index 2a818a5c371..89d51858072 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerStatisticsTest.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/schema/marshaller/TupleMarshallerStatisticsTest.java
@@ -33,6 +33,7 @@ import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import
org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl.TuplePart;
import
org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl.ValuesWithStatistics;
+import org.apache.ignite.internal.table.KeyValueTestUtils;
import org.apache.ignite.internal.table.impl.TestTupleBuilder;
import org.apache.ignite.internal.type.NativeTypes;
import org.apache.ignite.table.Tuple;
@@ -55,7 +56,7 @@ public class TupleMarshallerStatisticsTest {
new Column[]{new Column("KEY",
NativeTypes.decimalOf(PRECISION, columnScale), false)},
new Column[]{new Column("UNUSED", NativeTypes.INT32, true)});
- TupleMarshallerImpl marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshallerImpl marshaller =
KeyValueTestUtils.createMarshaller(schema);
BigDecimal hugeScaledDecimal = new BigDecimal(1, new
MathContext(PRECISION))
.setScale(HUGE_DECIMAL_SCALE, RoundingMode.HALF_UP);
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/table/ColocationHashCalculationTest.java
b/modules/table/src/test/java/org/apache/ignite/internal/table/ColocationHashCalculationTest.java
index d6801262b93..1aa36fe8774 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/table/ColocationHashCalculationTest.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/table/ColocationHashCalculationTest.java
@@ -33,7 +33,6 @@ import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaTestUtils;
import org.apache.ignite.internal.schema.marshaller.TupleMarshaller;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.schema.row.Row;
import org.apache.ignite.internal.schema.row.RowAssembler;
import org.apache.ignite.internal.type.DecimalNativeType;
@@ -150,7 +149,7 @@ public class ColocationHashCalculationTest {
Row r = generateRandomRow(rnd, schema);
assertEquals(colocationHash(r), r.colocationHash());
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
for (int i = 0; i < 10; ++i) {
Column rndCol = schema.column(rnd.nextInt(schema.length()));
@@ -220,7 +219,7 @@ public class ColocationHashCalculationTest {
}
private static Row generateRandomRow(Random rnd, SchemaDescriptor schema) {
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
Tuple t = Tuple.create();
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java
b/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java
index 1c3292a2b00..7f2a015aa44 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/table/MutableRowTupleAdapterTest.java
@@ -56,7 +56,6 @@ import org.apache.ignite.internal.schema.SchemaAware;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.SchemaMismatchException;
import org.apache.ignite.internal.schema.marshaller.TupleMarshaller;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.schema.row.Row;
import org.apache.ignite.internal.type.NativeType;
import org.apache.ignite.internal.type.NativeTypes;
@@ -129,7 +128,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
.set("price", 5.99d)
.set("id2", 33L);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
Row row = marshaller.marshal(original);
@@ -158,7 +157,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
@Test
public void testRowTupleMutability() {
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
Row row = marshaller.marshal(Tuple.create().set("id",
1L).set("simpleName", "Shirt"));
@@ -185,7 +184,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
@Test
public void testKeyValueTupleMutability() {
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
Row row = marshaller.marshal(Tuple.create().set("id",
1L).set("simpleName", "Shirt"));
@@ -214,7 +213,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
@Test
public void testRowTupleSchemaAwareness() {
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
Row row = marshaller.marshal(Tuple.create().set("id",
1L).set("simpleName", "Shirt"));
@@ -237,7 +236,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
@Test
public void testKeyValueTupleSchemaAwareness() {
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
Row row = marshaller.marshal(Tuple.create().set("id",
1L).set("simpleName", "Shirt"));
@@ -285,7 +284,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
Tuple tuple = Tuple.copy(valTuple).set(keyTuple.columnName(0),
keyTuple.value(0));
// Check tuples backed with Row.
- TupleMarshaller marshaller = new TupleMarshallerImpl(fullSchema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(fullSchema);
Row row = marshaller.marshal(keyTuple, valTuple);
@@ -355,7 +354,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
Tuple key1 = Tuple.create().set("keyUuidCol", UUID.randomUUID());
Tuple val1 = addColumnOfAllTypes(Tuple.create());
- TupleMarshaller marshaller = new TupleMarshallerImpl(fullSchema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(fullSchema);
Row row = marshaller.marshal(key1, val1);
@@ -368,7 +367,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
@Test
public void testTupleNetworkSerialization() throws Exception {
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
Row row = marshaller.marshal(Tuple.create().set("id",
1L).set("simpleName", "Shirt"));
@@ -404,7 +403,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
.set("datetime", LocalDateTime.of(2022, 1, 2, 3, 4, 5,
670_000_000))
.set("timestamp", Instant.ofEpochSecond(123, 450_000_000));
- TupleMarshaller marshaller = new TupleMarshallerImpl(schemaDescriptor);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schemaDescriptor);
Row row = marshaller.marshal(tuple);
@@ -423,7 +422,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
}
);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schemaDescriptor);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schemaDescriptor);
Tuple tuple1 = Tuple.create().set("key", 1)
.set("string", "abcef")
@@ -457,7 +456,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
}
);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schemaDescriptor);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schemaDescriptor);
Tuple tuple1 = Tuple.create().set("key", 1).set("decimal", new
BigDecimal("123456.7"));
@@ -474,7 +473,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
}
);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schemaDescriptor);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schemaDescriptor);
Tuple tuple = Tuple.create().set("key", 1).set("decimal", new
BigDecimal("123.458"));
Tuple expected = Tuple.create().set("key", 1).set("decimal", new
BigDecimal("123.46")); // Rounded.
@@ -502,7 +501,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
tuple = transformer.apply(tuple);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
return TableRow.tuple(marshaller.marshal(tuple));
}
@@ -513,7 +512,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
tuple = addColumnsForDefaultSchema(tuple);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
return TableRow.tuple(marshaller.marshal(tuple));
}
@@ -524,7 +523,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
tuple = addColumnOfAllTypes(tuple);
- TupleMarshaller marshaller = new TupleMarshallerImpl(fullSchema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(fullSchema);
return TableRow.tuple(marshaller.marshal(tuple));
}
@@ -539,7 +538,7 @@ public class MutableRowTupleAdapterTest extends
AbstractMutableTupleTest {
Tuple tuple = Tuple.create().set(columnName, value);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller =
KeyValueTestUtils.createMarshaller(schema);
return TableRow.tuple(marshaller.marshal(tuple));
}
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/table/TableKvOperationsMockedTest.java
b/modules/table/src/test/java/org/apache/ignite/internal/table/TableKvOperationsMockedTest.java
index 356c0a52c9b..ef6a3bd5a75 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/table/TableKvOperationsMockedTest.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/table/TableKvOperationsMockedTest.java
@@ -154,7 +154,8 @@ public class TableKvOperationsMockedTest extends
BaseIgniteAbstractTest {
marshallers
);
- BinaryRow resultRow = new
TupleMarshallerImpl(simpleSchema).marshal(Tuple.create().set("ID",
1L).set("VAL", 2L));
+ BinaryRow resultRow = new TupleMarshallerImpl(internalTable::name,
simpleSchema)
+ .marshal(Tuple.create().set("ID", 1L).set("VAL", 2L));
doReturn(failedFuture(new InternalSchemaVersionMismatchException()))
.doReturn(completedFuture(resultRow))
@@ -182,7 +183,8 @@ public class TableKvOperationsMockedTest extends
BaseIgniteAbstractTest {
marshallers
);
- BinaryRow resultRow = new
TupleMarshallerImpl(simpleSchema).marshal(Tuple.create().set("id",
1L).set("val", 2L));
+ BinaryRow resultRow = new TupleMarshallerImpl(internalTable::name,
simpleSchema)
+ .marshal(Tuple.create().set("id", 1L).set("val", 2L));
doReturn(failedFuture(new InternalSchemaVersionMismatchException()))
.doReturn(completedFuture(resultRow))
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/table/type/NumericTypesSerializerTest.java
b/modules/table/src/test/java/org/apache/ignite/internal/table/type/NumericTypesSerializerTest.java
index dda677d91c6..e1330e9675b 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/table/type/NumericTypesSerializerTest.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/table/type/NumericTypesSerializerTest.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.table.type;
+import static
org.apache.ignite.internal.table.KeyValueTestUtils.createMarshaller;
import static
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrowsWithCause;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -30,7 +31,6 @@ import
org.apache.ignite.internal.catalog.commands.CatalogUtils;
import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.internal.schema.marshaller.TupleMarshaller;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.schema.row.Row;
import org.apache.ignite.internal.type.NativeTypes;
import org.apache.ignite.internal.util.Pair;
@@ -49,9 +49,6 @@ public class NumericTypesSerializerTest {
/** Random. */
private Random rnd = new Random();
- /** Schema descriptor. */
- private SchemaDescriptor schema;
-
/**
* Returns list of string decimal representations for test.
*/
@@ -91,7 +88,7 @@ public class NumericTypesSerializerTest {
@Test
public void testPrecisionRestrictionsForDecimal() {
- schema = new SchemaDescriptor(
+ SchemaDescriptor schema = new SchemaDescriptor(
42,
new Column[]{new Column("KEY", NativeTypes.INT64, false)},
new Column[]{
@@ -101,7 +98,7 @@ public class NumericTypesSerializerTest {
final Tuple badTup = createTuple().set("key", rnd.nextLong());
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller = createMarshaller(schema);
assertThrowsWithCause(
() -> marshaller.marshal(badTup.set("decimalCol", new
BigDecimal("123456789.0123"))),
@@ -127,7 +124,7 @@ public class NumericTypesSerializerTest {
@Test
public void testStringDecimalSpecialCase() {
- schema = new SchemaDescriptor(
+ SchemaDescriptor schema = new SchemaDescriptor(
42,
new Column[]{new Column("KEY", NativeTypes.INT64, false)},
new Column[]{
@@ -138,7 +135,7 @@ public class NumericTypesSerializerTest {
// representation of "0000" value.
final Tuple tup = createTuple().set("key",
rnd.nextLong()).set("decimalCol", new BigDecimal("0E+3"));
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller = createMarshaller(schema);
final Row row = marshaller.marshal(tup);
@@ -151,7 +148,7 @@ public class NumericTypesSerializerTest {
@ParameterizedTest
@MethodSource("stringDecimalRepresentation")
public void testUpscaleForDecimal(String decimalStr) {
- schema = new SchemaDescriptor(
+ SchemaDescriptor schema = new SchemaDescriptor(
42,
new Column[]{new Column("KEY", NativeTypes.INT64, false)},
new Column[]{
@@ -163,7 +160,7 @@ public class NumericTypesSerializerTest {
.set("key", rnd.nextLong())
.set("decimalCol1", new BigDecimal(decimalStr));
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller = createMarshaller(schema);
final Row row = marshaller.marshal(tup);
@@ -174,7 +171,7 @@ public class NumericTypesSerializerTest {
public void testDecimalMaxScale() {
int maxScale = CatalogUtils.MAX_DECIMAL_SCALE;
- schema = new SchemaDescriptor(
+ SchemaDescriptor schema = new SchemaDescriptor(
42,
new Column[]{new Column("KEY", NativeTypes.INT64, false)},
new Column[]{
@@ -186,7 +183,7 @@ public class NumericTypesSerializerTest {
.set("key", rnd.nextLong())
.set("decimalCol", BigDecimal.valueOf(123, maxScale));
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller = createMarshaller(schema);
final Row row = marshaller.marshal(tup);
@@ -199,7 +196,7 @@ public class NumericTypesSerializerTest {
"-32769, Decimal scale is too small: -32769 < -32768",
})
public void testDecimalScaleTooLarge(int scale, String message) {
- schema = new SchemaDescriptor(
+ SchemaDescriptor schema = new SchemaDescriptor(
42,
new Column[]{new Column("KEY", NativeTypes.INT64, false)},
new Column[]{
@@ -211,7 +208,7 @@ public class NumericTypesSerializerTest {
.set("key", rnd.nextLong())
.set("decimalCol", BigDecimal.valueOf(123, scale));
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller = createMarshaller(schema);
assertThrowsWithCause(
() -> marshaller.marshal(badTup),
@@ -226,7 +223,7 @@ public class NumericTypesSerializerTest {
@ParameterizedTest
@MethodSource("sameDecimals")
public void testSameBinaryRepresentation(Pair<BigDecimal, BigDecimal>
pair) {
- schema = new SchemaDescriptor(
+ SchemaDescriptor schema = new SchemaDescriptor(
42,
new Column[]{new Column("KEY", NativeTypes.INT64, false)},
new Column[]{
@@ -234,7 +231,7 @@ public class NumericTypesSerializerTest {
}
);
- TupleMarshaller marshaller = new TupleMarshallerImpl(schema);
+ TupleMarshaller marshaller = createMarshaller(schema);
long randomKey = rnd.nextLong();
diff --git
a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/KeyValueTestUtils.java
b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/KeyValueTestUtils.java
index 0ff719b6f21..569b9d23b82 100644
---
a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/KeyValueTestUtils.java
+++
b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/KeyValueTestUtils.java
@@ -35,12 +35,17 @@ import java.util.Objects;
import java.util.Random;
import
org.apache.ignite.internal.marshaller.testobjects.TestObjectWithAllTypes;
import org.apache.ignite.internal.schema.Column;
+import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.type.NativeTypes;
+import org.apache.ignite.table.QualifiedName;
/**
* Key-value view test utilities.
*/
public class KeyValueTestUtils {
+ public static final QualifiedName TEST_TABLE_NAME =
QualifiedName.of("default", "table");
+
public static final Column[] ALL_TYPES_COLUMNS = {
new Column("primitiveBooleanCol".toUpperCase(), BOOLEAN, false),
new Column("primitiveByteCol".toUpperCase(), INT8, false),
@@ -83,6 +88,10 @@ public class KeyValueTestUtils {
return TestObjectWithAllTypes.randomObject(rnd);
}
+ public static TupleMarshallerImpl createMarshaller(SchemaDescriptor
schema) {
+ return new TupleMarshallerImpl(() -> TEST_TABLE_NAME, schema);
+ }
+
/**
* Test object.
*/
diff --git
a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TxAbstractTest.java
b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TxAbstractTest.java
index b9c574c5cd3..94ccd6d0fb9 100644
---
a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TxAbstractTest.java
+++
b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/TxAbstractTest.java
@@ -77,7 +77,6 @@ import
org.apache.ignite.internal.replicator.ReplicationGroupId;
import org.apache.ignite.internal.schema.BinaryRow;
import org.apache.ignite.internal.schema.BinaryTuple;
import org.apache.ignite.internal.schema.SchemaRegistry;
-import org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl;
import org.apache.ignite.internal.schema.row.Row;
import org.apache.ignite.internal.storage.RowId;
import org.apache.ignite.internal.storage.impl.TestMvPartitionStorage;
@@ -2216,7 +2215,7 @@ public abstract class TxAbstractTest extends
TxInfrastructureTest {
var accountRecordsView = accounts.recordView();
SchemaRegistry schemaRegistry = accounts.schemaView();
- var marshaller = new
TupleMarshallerImpl(schemaRegistry.lastKnownSchema());
+ var marshaller =
KeyValueTestUtils.createMarshaller(schemaRegistry.lastKnownSchema());
int partId =
accounts.internalTable().partitionId(marshaller.marshalKey(makeKey(0)));