Maksim Zhuravkov created IGNITE-27744:
-----------------------------------------

             Summary: KeyValueView.  NOT NULL constraint violation has 
INTERNAL_ERR code in its cause
                 Key: IGNITE-27744
                 URL: https://issues.apache.org/jira/browse/IGNITE-27744
             Project: Ignite
          Issue Type: Bug
            Reporter: Maksim Zhuravkov


Looks like this issue is caused by usage of `SchemaMismatchException(String) 
constructor` that calls deprecated constructor of its superclass which sets 
error code to INTERNAL_ERR.

{noformat}
Caused by: org.apache.ignite.lang.IgniteException: IGN-MARSHALLING-1 
org.apache.ignite.lang.MarshallerException: IGN-MARSHALLING-1 Failed to 
serialize row for table PUBLIC.KV. Column 'VAL' does not allow NULLs 
TraceId:8c28c8c0
        at 
org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl.marshal(TupleMarshallerImpl.java:132)
        at 
org.apache.ignite.internal.table.RecordBinaryViewImpl.marshal(RecordBinaryViewImpl.java:445)
        at 
org.apache.ignite.internal.table.RecordBinaryViewImpl.marshal(RecordBinaryViewImpl.java:429)

<omitted for brevity>

        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.apache.ignite.internal.schema.SchemaMismatchException: 
IGN-CMN-65535 Column 'VAL' does not allow NULLs TraceId:8c28c8c0
        at org.apache.ignite.internal.schema.Column.validate(Column.java:212)
        at 
org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl.gatherStatistics(TupleMarshallerImpl.java:235)
        at 
org.apache.ignite.internal.schema.marshaller.TupleMarshallerImpl.marshal(TupleMarshallerImpl.java:118)
        ... 21 more
 TraceId:8c28c8c0
{noformat}

This happens in both client and embedded modes.

*Expected behaviour *
This one and similar SchemaExceptions should not have INTERNAL_ERROR.


Reproducer:
{noformat}

import static org.junit.jupiter.api.Assertions.fail;

import java.util.Map;
import org.apache.ignite.Ignite;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.internal.ClusterPerClassIntegrationTest;
import org.apache.ignite.table.KeyValueView;
import org.apache.ignite.table.Tuple;
import org.junit.jupiter.api.Test;

public class NullsTest extends ClusterPerClassIntegrationTest {
    
    @Test
    public void client() {
        try (var client = 
IgniteClient.builder().addresses("localhost:10800").build()) {
            example(client);
        }
    }
    
    @Test
    public void embedded() {
        example(node(0));
    }
    
    private static void example(Ignite ignite) {
        ignite.sql().executeScript("DROP TABLE IF EXISTS kv; CREATE TABLE kv 
(key INT, val INT NOT NULL, PRIMARY KEY (key))");
        
        KeyValueView<Tuple, Tuple> view = 
ignite.tables().table("kv").keyValueView();
        
        try {
            view.put(null, Tuple.create(Map.of("key", 1)), Tuple.create());
            fail();
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }
}
{noformat}





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

Reply via email to