From b2fbf0e61c64d81b7fca35f2deb522253da5a496 Mon Sep 17 00:00:00 2001 From: Vladimir Dmitrienko Date: Thu, 17 Apr 2025 11:10:51 +0200 Subject: [PATCH 1/3] Use the new CREATE ZONE syntax --- .../ycsb/db/ignite3/IgniteAbstractClient.java | 29 ++++++++++++------- .../db/ignite3/IgniteAbstractClientTest.java | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java b/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java index 9ec3d02437..33177880f0 100644 --- a/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java +++ b/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java @@ -36,7 +36,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BooleanSupplier; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteServer; import org.apache.ignite.InitParameters; @@ -460,17 +459,25 @@ public String createZoneSQL() { String.join(",", storageProfile, secondaryStorageProfile) : storageProfile; - String paramStorageProfiles = String.format("STORAGE_PROFILES='%s'", storageProfiles); - String paramReplicas = replicas.isEmpty() ? "" : "replicas=" + replicas; - String paramPartitions = partitions.isEmpty() ? "" : "partitions=" + partitions; - String paramNodesFilter = nodesFilter.isEmpty() ? "" : - String.format("DATA_NODES_FILTER='$[?(@.%s == \"%s\")]'", NODES_FILTER_ATTRIBUTE, nodesFilter); - String params = Stream.of(paramStorageProfiles, paramReplicas, paramPartitions, paramNodesFilter) - .filter(s -> !s.isEmpty()) - .collect(Collectors.joining(", ")); - String reqWithParams = params.isEmpty() ? "" : " WITH " + params; + List params = new ArrayList<>(); + + if (!replicas.isEmpty()) { + params.add("replicas " + replicas); + } + + if (!partitions.isEmpty()) { + params.add("partitions " + partitions); + } + + if (!nodesFilter.isEmpty()) { + params.add(String.format("NODES FILTER '$[?(@.%s == \"%s\")]'", NODES_FILTER_ATTRIBUTE, nodesFilter)); + } + + String paramsStr = params.isEmpty() ? "" : " (" + String.join(", ", params) + ")"; + + String storageProfilesStr = String.format(" STORAGE PROFILES ['%s']", storageProfiles); - return String.format("CREATE ZONE IF NOT EXISTS %s%s;", zoneName, reqWithParams); + return String.format("CREATE ZONE IF NOT EXISTS %s%s%s;", zoneName, paramsStr, storageProfilesStr); } /** diff --git a/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java b/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java index 2585ffee34..1e1e55e579 100644 --- a/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java +++ b/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java @@ -27,7 +27,7 @@ public static Properties properties() { @Test public void testCreateDdl() throws DBException { doTestCreateDdl( - "CREATE ZONE IF NOT EXISTS Z1 WITH STORAGE_PROFILES='default,myColumnarStore';", + "CREATE ZONE IF NOT EXISTS Z1 STORAGE PROFILES ['default,myColumnarStore'];", List.of(CREATE_TABLE_DDL + " ZONE \"Z1\" STORAGE PROFILE 'default' SECONDARY ZONE \"Z1\" SECONDARY STORAGE PROFILE 'myColumnarStore'"), true); From 7489664dcb01d90a99c18c52e977e285a988f3dc Mon Sep 17 00:00:00 2001 From: Vladimir Dmitrienko Date: Thu, 17 Apr 2025 12:24:26 +0200 Subject: [PATCH 2/3] Add tests to cover the new syntax --- .../db/ignite3/IgniteAbstractClientTest.java | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java b/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java index 1e1e55e579..0defbf719d 100644 --- a/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java +++ b/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java @@ -19,32 +19,56 @@ public class IgniteAbstractClientTest { public static Properties properties() { Properties result = new Properties(); - result.put("hosts","192.168.209.148"); + result.put("hosts", "192.168.209.148"); return result; } @Test public void testCreateDdl() throws DBException { + Properties properties = properties(); + + doTestCreateDdl( + "", + List.of(CREATE_TABLE_DDL), + properties); + } + + @Test + public void testCreateDdlWithColumnar() throws DBException { + Properties properties = properties(); + + properties.put("useColumnar", String.valueOf(true)); + doTestCreateDdl( "CREATE ZONE IF NOT EXISTS Z1 STORAGE PROFILES ['default,myColumnarStore'];", List.of(CREATE_TABLE_DDL + - " ZONE \"Z1\" STORAGE PROFILE 'default' SECONDARY ZONE \"Z1\" SECONDARY STORAGE PROFILE 'myColumnarStore'"), - true); + " ZONE \"Z1\" STORAGE PROFILE 'default' SECONDARY ZONE \"Z1\" SECONDARY STORAGE PROFILE 'myColumnarStore'"), + properties); + } + + @Test + public void testCreateDdlWithReplicasAndPartitionsAndNodesFilter() throws DBException { + Properties properties = properties(); + + properties.put("useColumnar", String.valueOf(false)); + properties.put("replicas", "1"); + properties.put("partitions", "2"); + properties.put("nodesFilter", "test_filter"); + doTestCreateDdl( - "", - List.of(CREATE_TABLE_DDL), - false); + "CREATE ZONE IF NOT EXISTS Z1 " + + "(replicas 1, partitions 2, NODES FILTER '$[?(@.ycsbFilter == \"test_filter\")]') STORAGE PROFILES ['default'];", + List.of(CREATE_TABLE_DDL + " ZONE \"Z1\""), + properties); } public void doTestCreateDdl( String createZoneDdlExpected, List createTableDdlExpected, - boolean useColumnar + Properties properties ) throws DBException { IgniteAbstractClient client = new IgniteClient(); - Properties properties = properties(); - properties.put("useColumnar", String.valueOf(useColumnar)); client.initProperties(properties); String createZoneDdlActual = client.createZoneSQL(); From 929d28227b63e0e20940b755d6a00c2870e83c11 Mon Sep 17 00:00:00 2001 From: Vladimir Dmitrienko Date: Thu, 17 Apr 2025 19:49:38 +0200 Subject: [PATCH 3/3] Fix storage profiles syntax --- .../main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java | 2 +- .../java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java b/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java index 33177880f0..ae699fa6ea 100644 --- a/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java +++ b/ignite3/src/main/java/site/ycsb/db/ignite3/IgniteAbstractClient.java @@ -456,7 +456,7 @@ public String createZoneSQL() { secondaryStorageProfile; String storageProfiles = useColumnar ? - String.join(",", storageProfile, secondaryStorageProfile) : + String.join("', '", storageProfile, secondaryStorageProfile) : storageProfile; List params = new ArrayList<>(); diff --git a/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java b/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java index 0defbf719d..e8843b8ddb 100644 --- a/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java +++ b/ignite3/src/test/java/site/ycsb/db/ignite3/IgniteAbstractClientTest.java @@ -41,7 +41,7 @@ public void testCreateDdlWithColumnar() throws DBException { properties.put("useColumnar", String.valueOf(true)); doTestCreateDdl( - "CREATE ZONE IF NOT EXISTS Z1 STORAGE PROFILES ['default,myColumnarStore'];", + "CREATE ZONE IF NOT EXISTS Z1 STORAGE PROFILES ['default', 'myColumnarStore'];", List.of(CREATE_TABLE_DDL + " ZONE \"Z1\" STORAGE PROFILE 'default' SECONDARY ZONE \"Z1\" SECONDARY STORAGE PROFILE 'myColumnarStore'"), properties);