You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2021/05/24 07:47:33 UTC

[ignite-3] 01/01: Merge branch 'main' into ignite-14759

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-14759
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 4d5620629d951a4c18c98c35fa4f8c0db5dac283
Merge: 4d29729 70e0c1c
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Mon May 24 09:58:44 2021 +0300

    Merge branch 'main' into ignite-14759
    
    # Conflicts:
    #	modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/DynamicTableCreationTest.java

 .../ignite/internal/affinity/AffinityManager.java  | 51 +++++++++-------------
 .../internal/affinity/AffinityManagerTest.java     |  6 +--
 .../schemas/runner/ClusterConfigurationSchema.java |  4 +-
 .../configuration/internal/ConfigurationNode.java  |  8 ++--
 .../internal/metastorage/MetaStorageManager.java   | 19 ++------
 .../scalecube/DelegatingTransportFactory.java      | 30 ++++++++-----
 .../java/org/apache/ignite/internal/raft/Loza.java | 15 +------
 .../runner/app/DynamicTableCreationTest.java       | 40 +++++++++++++----
 .../apache/ignite/internal/app/IgnitionImpl.java   |  2 +-
 .../storage/DistributedConfigurationStorage.java   | 16 +++++--
 .../storage/LocalConfigurationStorage.java         |  2 +-
 .../org/apache/ignite/internal/schema/Column.java  | 10 ++---
 .../org/apache/ignite/internal/schema/Columns.java |  3 +-
 .../apache/ignite/internal/schema/NativeType.java  | 10 ++++-
 .../ignite/internal/schema/NativeTypeSpec.java     | 14 +++++-
 .../apache/ignite/internal/schema/NativeTypes.java | 11 ++++-
 .../ignite/internal/schema/NumericNativeType.java  |  7 ++-
 .../ignite/internal/schema/SchemaDescriptor.java   |  7 ++-
 .../ignite/internal/schema/SchemaManager.java      | 17 ++++----
 .../schema/registry/SchemaRegistryException.java   |  1 +
 .../schema/registry/SchemaRegistryImpl.java        |  1 +
 .../internal/table/distributed/TableManager.java   | 11 +++--
 .../ignite/internal/table/TableManagerTest.java    |  2 +-
 23 files changed, 165 insertions(+), 122 deletions(-)

diff --cc modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/DynamicTableCreationTest.java
index 9302046,385d1f7..9cf1e02
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/DynamicTableCreationTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/DynamicTableCreationTest.java
@@@ -22,7 -22,8 +22,9 @@@ import java.util.List
  import java.util.UUID;
  import org.apache.ignite.app.Ignite;
  import org.apache.ignite.app.IgnitionManager;
+ import org.apache.ignite.internal.schema.SchemaManager;
+ import org.apache.ignite.lang.IgniteLogger;
 +import org.apache.ignite.table.KeyValueBinaryView;
  import org.apache.ignite.table.Table;
  import org.apache.ignite.table.Tuple;
  import org.junit.jupiter.api.Disabled;
@@@ -106,28 -109,12 +111,28 @@@ class DynamicTableCreationTest 
              ));
  
          // Put data on node 1.
-         Table tbl1 = clusterNodes.get(1).tables().table("tbl1");
 -        Table tbl1 = waitForTable(clusterNodex.get(1));
 -        tbl1.insert(tbl1.tupleBuilder().set("key", 1).set("val", 111).build());
++        Table tbl1 = waitForTable(clusterNodes.get(1));
 +        KeyValueBinaryView kvView1 = tbl1.kvView();
 +
 +        tbl1.insert(tbl1.tupleBuilder().set("key", 1L).set("val", 111).build());
 +        kvView1.put(tbl1.tupleBuilder().set("key", 2L).build(), tbl1.tupleBuilder().set("val", 222).build());
  
          // Get data on node 2.
-         Table tbl2 = clusterNodes.get(2).tables().table("tbl1");
 -        Table tbl2 = waitForTable(clusterNodex.get(2));
 -        assertEquals(111, (int)tbl2.get(tbl2.tupleBuilder().set("key", 1).build()).value("val"));
++        Table tbl2 = waitForTable(clusterNodes.get(2));
 +        KeyValueBinaryView kvView2 = tbl2.kvView();
 +
 +        final Tuple keyTuple1 = tbl2.tupleBuilder().set("key", 1L).build();
 +        final Tuple keyTuple2 = kvView2.tupleBuilder().set("key", 2L).build();
 +
 +        assertThrows(IllegalArgumentException.class, () -> kvView2.get(keyTuple1).value("key"));
 +        assertThrows(IllegalArgumentException.class, () -> kvView2.get(keyTuple1).value("key"));
 +        assertEquals(1, (Long)tbl2.get(keyTuple1).value("key"));
 +        assertEquals(2, (Long)tbl2.get(keyTuple2).value("key"));
 +
 +        assertEquals(111, (Integer)tbl2.get(keyTuple1).value("val"));
 +        assertEquals(111, (Integer)kvView2.get(keyTuple1).value("val"));
 +        assertEquals(222, (Integer)tbl2.get(keyTuple2).value("val"));
 +        assertEquals(222, (Integer)kvView2.get(keyTuple2).value("val"));
      }
  
      /**
@@@ -166,51 -172,18 +190,51 @@@
              ));
  
          final UUID uuid = UUID.randomUUID();
 +        final UUID uuid2 = UUID.randomUUID();
  
          // Put data on node 1.
-         Table tbl1 = clusterNodes.get(1).tables().table("tbl1");
+         Table tbl1 = waitForTable(clusterNodes.get(1));
 -        tbl1.insert(tbl1.tupleBuilder().set("key", uuid).set("affKey", 42)
 -            .set("valStr", "String value").set("valInt", 73).set("valNullable", null).build());
 +        KeyValueBinaryView kvView1 = tbl1.kvView();
 +
 +        tbl1.insert(tbl1.tupleBuilder().set("key", uuid).set("affKey", 42L)
 +            .set("valStr", "String value").set("valInt", 73).set("valNull", null).build());
 +
 +        kvView1.put(kvView1.tupleBuilder().set("key", uuid2).set("affKey", 4242L).build(),
 +            kvView1.tupleBuilder().set("valStr", "String value 2").set("valInt", 7373).set("valNull", null).build());
  
          // Get data on node 2.
-         Table tbl2 = clusterNodes.get(2).tables().table("tbl1");
+         Table tbl2 = waitForTable(clusterNodes.get(2));
 -        final Tuple val = tbl2.get(tbl2.tupleBuilder().set("key", uuid).set("affKey", 42).build());
 -
 -        assertEquals("String value", val.value("valStr"));
 -        assertEquals(73, (int)val.value("valInt"));
 -        assertNull(val.value("valNullable"));
 +        KeyValueBinaryView kvView2 = tbl2.kvView();
 +
 +        final Tuple keyTuple1 = tbl2.tupleBuilder().set("key", uuid).set("affKey", 42L).build();
 +        final Tuple keyTuple2 = tbl2.tupleBuilder().set("key", uuid2).set("affKey", 4242L).build();
 +
 +        // KV view must NOT return key columns in value.
 +        assertThrows(IllegalArgumentException.class, () -> kvView2.get(keyTuple1).value("key"));
 +        assertThrows(IllegalArgumentException.class, () -> kvView2.get(keyTuple1).value("affKey"));
 +        assertThrows(IllegalArgumentException.class, () -> kvView2.get(keyTuple2).value("key"));
 +        assertThrows(IllegalArgumentException.class, () -> kvView2.get(keyTuple2).value("affKey"));
 +
 +        // Record binary view MUST return key columns in value.
 +        assertEquals(uuid, tbl2.get(keyTuple1).value("key"));
 +        assertEquals(42L, (Long)tbl2.get(keyTuple1).value("affKey"));
 +        assertEquals(uuid2, tbl2.get(keyTuple2).value("key"));
 +        assertEquals(4242L, (Long)tbl2.get(keyTuple2).value("affKey"));
 +
 +        assertEquals("String value", tbl2.get(keyTuple1).value("valStr"));
 +        assertEquals(73, (Integer)tbl2.get(keyTuple1).value("valInt"));
 +        assertNull(tbl2.get(keyTuple1).value("valNull"));
 +
 +        assertEquals("String value 2", tbl2.get(keyTuple2).value("valStr"));
 +        assertEquals(7373, (Integer)tbl2.get(keyTuple2).value("valInt"));
 +        assertNull(tbl2.get(keyTuple2).value("valNull"));
 +
 +        assertEquals("String value", kvView2.get(keyTuple1).value("valStr"));
 +        assertEquals(73, (Integer)kvView2.get(keyTuple1).value("valInt"));
 +        assertNull(kvView2.get(keyTuple1).value("valNull"));
 +
 +        assertEquals("String value 2", kvView2.get(keyTuple2).value("valStr"));
 +        assertEquals(7373, (Integer)kvView2.get(keyTuple2).value("valInt"));
 +        assertNull(kvView2.get(keyTuple2).value("valNull"));
      }
  }
diff --cc modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
index 90b6fc5,83233a9..fa28f93
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaManager.java
@@@ -182,14 -182,12 +182,13 @@@ public class SchemaManager extends Prod
  
                  final SchemaDescriptor desc = createSchemaDescriptor(tblId, schemaVer, tblConfig);
  
-                 return metaStorageMgr.invoke(
-                     Conditions.value(lastVerKey).eq(entry.value()), // Won't to rewrite if the version goes ahead.
-                     List.of(
+                 return metaStorageMgr.invoke(Conditions.notExists(schemaKey),
+                     Operations.put(schemaKey, ByteUtils.toBytes(desc)),
+                     Operations.noop())
+                     .thenCompose(res -> metaStorageMgr.invoke(Conditions.notExists(lastVerKey),
 +                        //TODO: IGNITE-14679 Serialize schema.
-                         Operations.put(schemaKey, ByteUtils.toBytes(desc)),
-                         Operations.put(lastVerKey, ByteUtils.longToBytes(schemaVer))
-                     ),
-                     List.of(Operations.noop()));
+                         Operations.put(lastVerKey, ByteUtils.longToBytes(schemaVer)),
+                         Operations.noop()));
              });
      }