Maksim Zhuravkov created IGNITE-27729:
-----------------------------------------

             Summary: Failed to serialize tuple for table PUBLIC.KV: Value 
tuple doesn't match schema
                 Key: IGNITE-27729
                 URL: https://issues.apache.org/jira/browse/IGNITE-27729
             Project: Ignite
          Issue Type: Bug
          Components: sql ai3, thin clients ai3
    Affects Versions: 3.1
            Reporter: Maksim Zhuravkov


Apache Ignite incorrectly converts 'i' character when locale tr_TR is used (it 
converts 'i' to 'İ' instead of 'I'. This issue is most likely caused by calls 
to `toUpperCase` w/o proper locale parameters inside the `IgniteNameUtils`.

Reproducer with a key value view:

{noformat}
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.sql.IgniteSql;
import org.apache.ignite.table.KeyValueView;
import org.apache.ignite.table.Table;
import org.apache.ignite.table.Tuple;

import java.util.Locale;
import java.util.Map;

public class LocalProblem {

    public static void main(String[] args) throws Exception {
        Locale.setDefault(new Locale("tr", "TR"));
        
        try (var client = IgniteClient.builder()
                .addresses("localhost:10801")
                .build()
        ) {
            IgniteSql sql = client.sql();

            try (var rs = sql.execute(null, "DROP TABLE IF EXISTS kv")) {
                System.err.println(rs.affectedRows());
            }

            try (var rs = sql.execute(null, "CREATE TABLE kv (key INT, val INT, 
iloc VARCHAR, PRIMARY KEY (key) )")) {
                System.err.println(rs.affectedRows());
            }

            // Insert
            try (var rs = sql.execute(null, "INSERT INTO kv VALUES(1, 1, 
'0:1')")) {
                System.err.println(rs.affectedRows());
            }
            
            Table table = client.tables().table("kv");

            KeyValueView<Tuple, Tuple> view = table.keyValueView();
            Tuple key = Tuple.create(Map.of("key", 2));
            Tuple value = Tuple.create(Map.of("val", 2, "iloc", "0:1"));
            
            view.put(null, key, value);
        }
    }
}
{noformat}

Error:

{noformat}
Şub 03, 2026 6:08:31 ÖS org.apache.ignite.internal.logger.IgniteLoggerImpl warn
WARNING: Failed to send request sync [id=8, op=10, 
remoteAddress=localhost:10801]: Failed to serialize tuple for table PUBLIC.KV: 
Value tuple doesn't match schema: schemaVersion=1, extraColumns=[İLOC]
org.apache.ignite.lang.MarshallerException: IGN-MARSHALLING-1 Failed to 
serialize tuple for table PUBLIC.KV: Value tuple doesn't match schema: 
schemaVersion=1, extraColumns=[İLOC] TraceId:4b2ced51
        at 
org.apache.ignite.internal.client.table.ClientTupleSerializer.throwSchemaMismatchException(ClientTupleSerializer.java:563)
        at 
org.apache.ignite.internal.client.table.ClientTupleSerializer.writeKvTuple(ClientTupleSerializer.java:258)
        at 
org.apache.ignite.internal.client.table.ClientKeyValueBinaryView.lambda$putAsync$16(ClientKeyValueBinaryView.java:249)
        at 
org.apache.ignite.internal.client.table.ClientTable.lambda$doSchemaOutInOpAsync$7(ClientTable.java:682)
        at 
org.apache.ignite.internal.client.TcpClientChannel.send(TcpClientChannel.java:392)
        at 
org.apache.ignite.internal.client.TcpClientChannel.serviceAsync(TcpClientChannel.java:347)
        at 
org.apache.ignite.internal.client.ReliableChannel.serviceAsyncInternal(ReliableChannel.java:386)
        at 
org.apache.ignite.internal.client.ReliableChannel.lambda$serviceAsync$4(ReliableChannel.java:322)
        at 
java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
        at 
java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
        at 
org.apache.ignite.internal.client.ReliableChannel.lambda$serviceAsync$5(ReliableChannel.java:322)
        at 
org.apache.ignite.internal.client.ClientFutureUtils.doWithRetryAsync(ClientFutureUtils.java:46)
        at 
org.apache.ignite.internal.client.ClientFutureUtils.doWithRetryAsync(ClientFutureUtils.java:36)
        at 
org.apache.ignite.internal.client.ReliableChannel.serviceAsync(ReliableChannel.java:320)
        at 
org.apache.ignite.internal.client.table.ClientTable.lambda$doSchemaOutInOpAsync$15(ClientTable.java:680)
        at 
java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
        at 
java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
        at 
org.apache.ignite.internal.client.table.ClientTable.lambda$doSchemaOutInOpAsync$16(ClientTable.java:679)
        at 
java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106)
        at 
java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235)
        at 
org.apache.ignite.internal.client.table.ClientTable.doSchemaOutInOpAsync(ClientTable.java:656)
        at 
org.apache.ignite.internal.client.table.ClientTable.doSchemaOutOpAsync(ClientTable.java:521)
        at 
org.apache.ignite.internal.client.table.ClientKeyValueBinaryView.putAsync(ClientKeyValueBinaryView.java:247)
        at 
org.apache.ignite.internal.client.table.ClientKeyValueBinaryView.put(ClientKeyValueBinaryView.java:238)
        at 
org.apache.ignite.internal.client.table.ClientKeyValueBinaryView.put(ClientKeyValueBinaryView.java:69)
        at 
org.apache.ignite.internal.client.table.api.PublicApiClientKeyValueView.lambda$put$12(PublicApiClientKeyValueView.java:108)
        at 
org.apache.ignite.internal.thread.PublicApiThreading.lambda$execUserSyncOperation$1(PublicApiThreading.java:108)
        at 
org.apache.ignite.internal.thread.PublicApiThreading.executeWithRole(PublicApiThreading.java:136)
        at 
org.apache.ignite.internal.thread.PublicApiThreading.execUserSyncOperation(PublicApiThreading.java:94)
        at 
org.apache.ignite.internal.thread.PublicApiThreading.execUserSyncOperation(PublicApiThreading.java:107)
        at 
org.apache.ignite.internal.client.table.api.PublicApiClientViewBase.executeSyncOp(PublicApiClientViewBase.java:97)
        at 
org.apache.ignite.internal.client.table.api.PublicApiClientKeyValueView.put(PublicApiClientKeyValueView.java:108)
        at 
org.apache.ignite.internal.table.CloseableKeyValueView.put(CloseableKeyValueView.java:152)
        at LocalProblem.main(LocalProblem.java:40)
Caused by: org.apache.ignite.internal.marshaller.UnmappedColumnsException
        ... 34 more
{noformat}





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to