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

zstan 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 b00dec30d4e IGNITE-25807 Support disabling auto scale in SQL (#6263)
b00dec30d4e is described below

commit b00dec30d4eb918f20714d94ed5bc4d600d6d97a
Author: Evgeniy Stanilovskiy <[email protected]>
AuthorDate: Tue Jul 29 09:01:12 2025 +0300

    IGNITE-25807 Support disabling auto scale in SQL (#6263)
---
 .../ignite/internal/sql/engine/ItZoneDdlTest.java  |   2 +-
 modules/sql-engine/src/main/codegen/config.fmpp    |   4 +-
 .../src/main/codegen/includes/parserImpls.ftl      |  49 +++++---
 .../prepare/ddl/DdlSqlToCommandConverter.java      |  19 +++
 .../sql/engine/sql/IgniteSqlZoneOptionMode.java    |   5 +-
 .../DistributionZoneSqlToCommandConverterTest.java | 134 ++++++++++++++-------
 .../sql/DistributionZoneSqlDdlParserTest.java      |   6 -
 7 files changed, 152 insertions(+), 67 deletions(-)

diff --git 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java
 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java
index 49de7657c36..8d2aa5ca45f 100644
--- 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java
+++ 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItZoneDdlTest.java
@@ -298,7 +298,7 @@ public class ItZoneDdlTest extends 
ClusterPerClassIntegrationTest {
 
     private static void tryToAlterZone(String zoneName, int 
dataNodesAutoAdjust, boolean failIfNotExists) {
         sql(String.format(
-                "ALTER ZONE %s SET (AUTO ADJUST %s)",
+                "ALTER ZONE %s SET (AUTO SCALE UP %s)",
                 failIfNotExists ? zoneName : "IF EXISTS " + zoneName, 
dataNodesAutoAdjust
         ));
     }
diff --git a/modules/sql-engine/src/main/codegen/config.fmpp 
b/modules/sql-engine/src/main/codegen/config.fmpp
index 970792ff186..cdbd066449e 100644
--- a/modules/sql-engine/src/main/codegen/config.fmpp
+++ b/modules/sql-engine/src/main/codegen/config.fmpp
@@ -69,6 +69,7 @@ data: {
     # List of new keywords. Example: "DATABASES", "TABLES". If the keyword is
     # not a reserved keyword, add it to the 'nonReservedKeywords' section.
     keywords: [
+      "OFF"
       "AUTO"
       "DOWN"
       "PARTITIONS"
@@ -77,7 +78,6 @@ data: {
       "DISTRIBUTION"
       "ALGORITHM"
       "NODES"
-      "ADJUST"
       "CONSISTENCY"
       "MODE"
       "COLOCATE"
@@ -102,6 +102,7 @@ data: {
     # items in this list become non-reserved.
     nonReservedKeywordsToAdd: [
       # Keywords introduced by Ignite
+      "OFF"
       "AUTO"
       "DOWN"
       "PARTITIONS"
@@ -110,7 +111,6 @@ data: {
       "DISTRIBUTION"
       "ALGORITHM"
       "NODES"
-      "ADJUST"
       "CONSISTENCY"
       "MODE"
       "PROFILES"
diff --git a/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl 
b/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl
index f1741fb4c00..6fd9e4a2825 100644
--- a/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl
+++ b/modules/sql-engine/src/main/codegen/includes/parserImpls.ftl
@@ -618,7 +618,7 @@ SqlNodeList ZoneOptionsList() :
 void ZoneElement(List<SqlNode> zoneOptions) :
 {
     final Span s;
-    final SqlIdentifier key;
+    SqlIdentifier key;
     final SqlNode option;
     final SqlParserPos pos;
 }
@@ -629,24 +629,45 @@ void ZoneElement(List<SqlNode> zoneOptions) :
       (
           <SCALE>
           (
-              <UP> option = UnsignedIntegerLiteral()
-              {
-                  key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_UP.name(), pos);
-                  zoneOptions.add(new IgniteSqlZoneOption(key, option, 
s.end(this)));
-              }
+              <UP>
+              (
+                  option = UnsignedIntegerLiteral()
+                  {
+                      key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_UP.name(), pos);
+                      zoneOptions.add(new IgniteSqlZoneOption(key, option, 
s.end(this)));
+                  }
+                  |
+                  <OFF>
+                  {
+                      key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_UP.name(), pos);
+                      zoneOptions.add(new IgniteSqlZoneOption(key, 
IgniteSqlZoneOptionMode.SCALE_OFF.symbol(getPos()), s.end(this)));
+                  }
+              )
+              |
+              <DOWN>
+              (
+                  option = UnsignedIntegerLiteral()
+                  {
+                      key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_DOWN.name(), pos);
+                      zoneOptions.add(new IgniteSqlZoneOption(key, option, 
s.end(this)));
+                  }
+                  |
+                  <OFF>
+                  {
+                      key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_DOWN.name(), pos);
+                      zoneOptions.add(new IgniteSqlZoneOption(key, 
IgniteSqlZoneOptionMode.SCALE_OFF.symbol(getPos()), s.end(this)));
+                  }
+              )
               |
-              <DOWN> option = UnsignedIntegerLiteral()
+              <OFF>
               {
+                  key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_UP.name(), pos);
+                  zoneOptions.add(new IgniteSqlZoneOption(key, 
IgniteSqlZoneOptionMode.SCALE_OFF.symbol(getPos()), s.end(this)));
+
                   key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_DOWN.name(), pos);
-                  zoneOptions.add(new IgniteSqlZoneOption(key, option, 
s.end(this)));
+                  zoneOptions.add(new IgniteSqlZoneOption(key, 
IgniteSqlZoneOptionMode.SCALE_OFF.symbol(getPos()), s.end(this)));
               }
           )
-          |
-          <ADJUST> option = UnsignedIntegerLiteral()
-          {
-              key = new 
SqlIdentifier(ZoneOptionEnum.DATA_NODES_AUTO_ADJUST.name(), pos);
-              zoneOptions.add(new IgniteSqlZoneOption(key, option, 
s.end(this)));
-          }
       )
       |
       <PARTITIONS> { pos = getPos(); } option = UnsignedIntegerLiteral()
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
index 120e9d60123..ef7ae30646e 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DdlSqlToCommandConverter.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine.prepare.ddl;
 import static org.apache.calcite.rel.type.RelDataType.PRECISION_NOT_SPECIFIED;
 import static org.apache.calcite.rel.type.RelDataType.SCALE_NOT_SPECIFIED;
 import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_LENGTH;
+import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.defaultLength;
 import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
 import static 
org.apache.ignite.internal.sql.engine.prepare.ddl.ZoneOptionEnum.CONSISTENCY_MODE;
@@ -860,6 +861,24 @@ public class DdlSqlToCommandConverter {
         assert option.value() instanceof SqlLiteral : option.value();
         SqlLiteral literal = (SqlLiteral) option.value();
 
+        if (zoneOption == DATA_NODES_AUTO_ADJUST_SCALE_UP || zoneOption == 
DATA_NODES_AUTO_ADJUST_SCALE_DOWN) {
+            if (literal.getTypeName() == SqlTypeName.SYMBOL) {
+                IgniteSqlZoneOptionMode zoneOptionMode = 
literal.symbolValue(IgniteSqlZoneOptionMode.class);
+
+                if (zoneOptionMode != IgniteSqlZoneOptionMode.SCALE_OFF) {
+                    throw new SqlException(STMT_VALIDATION_ERR, format(
+                            "Unexpected value of zone auto adjust scale 
[expected OFF, was {}; query=\"{}\"",
+                            zoneOptionMode, ctx.query()
+                    ));
+                }
+
+                // Directly set the option value and return
+                zoneOptionInfo.setter.accept(target, 
Commons.cast(INFINITE_TIMER_VALUE));
+
+                return;
+            }
+        }
+
         if (zoneOption == REPLICAS) {
             if (literal.getTypeName() == SqlTypeName.SYMBOL) {
                 IgniteSqlZoneOptionMode zoneOptionMode = 
literal.symbolValue(IgniteSqlZoneOptionMode.class);
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/IgniteSqlZoneOptionMode.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/IgniteSqlZoneOptionMode.java
index b0002720987..a06147a050d 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/IgniteSqlZoneOptionMode.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/IgniteSqlZoneOptionMode.java
@@ -20,9 +20,10 @@ package org.apache.ignite.internal.sql.engine.sql;
 import org.apache.calcite.sql.Symbolizable;
 
 /**
- * Symbol for an {@code ALL} zone option.
+ * Special symbols for zone option processing.
  */
 public enum IgniteSqlZoneOptionMode implements Symbolizable {
-    ALL
+    ALL,
+    SCALE_OFF
 }
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DistributionZoneSqlToCommandConverterTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DistributionZoneSqlToCommandConverterTest.java
index 9a8ee625315..fb76af07953 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DistributionZoneSqlToCommandConverterTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/ddl/DistributionZoneSqlToCommandConverterTest.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.sql.engine.prepare.ddl;
 
 import static 
org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
+import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.INFINITE_TIMER_VALUE;
 import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
 import static 
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrows;
 import static 
org.apache.ignite.internal.testframework.IgniteTestUtils.assertThrowsWithCode;
@@ -59,6 +60,7 @@ import org.apache.ignite.internal.network.ClusterNodeImpl;
 import org.apache.ignite.internal.partitiondistribution.DistributionAlgorithm;
 import org.apache.ignite.network.NetworkAddress;
 import org.apache.ignite.sql.SqlException;
+import org.junit.jupiter.api.Assumptions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -203,15 +205,13 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
                             + "quorum_size=2, " // non-default value
                             + "distribution_algorithm='rendezvous', "
                             + "data_nodes_filter='$[?(@.region == \"US\")]', "
-                            + "data_nodes_auto_adjust=300, "
                             + "storage_profiles='" + ROCKSDB_STORAGE_PROFILE + 
" , " + AIPERSIST_STORAGE_PROFILE + " ' "
                     : "CREATE ZONE test "
                             + "(partitions 2, "
                             + "replicas 5, "
                             + "quorum size 2, " // non-default value
                             + "distribution algorithm 'rendezvous', "
-                            + "nodes filter '$[?(@.region == \"US\")]', "
-                            + "auto adjust 300) "
+                            + "nodes filter '$[?(@.region == \"US\")]') "
                             + "storage profiles ['" + ROCKSDB_STORAGE_PROFILE 
+ "' , '" + AIPERSIST_STORAGE_PROFILE + " '] ";
 
             CatalogCommand cmd = convert(sql);
@@ -223,7 +223,6 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
             // TODO https://issues.apache.org/jira/browse/IGNITE-22162
             // assertThat(desc.distributionAlgorithm(), equalTo("rendezvous"));
             assertThat(desc.filter(), equalTo("$[?(@.region == \"US\")]"));
-            assertThat(desc.dataNodesAutoAdjust(), equalTo(300));
 
             List<CatalogStorageProfileDescriptor> storageProfiles = 
desc.storageProfiles().profiles();
             assertThat(storageProfiles, hasSize(2));
@@ -259,6 +258,9 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
             emptyProfilesValidationError("CREATE ZONE test with 
storage_profiles=' ' ");
         } else {
             assertThrowsWithPos("CREATE ZONE test (partitions -1)", "-", 30);
+            assertThrowsWithPos("CREATE ZONE test (AUTO SCALE FALL)", "FALL", 
30);
+            assertThrowsWithPos("CREATE ZONE test (AUTO SCALE UP FALL)", 
"FALL", 33);
+            assertThrowsWithPos("CREATE ZONE test (AUTO SCALE DOWN FALL)", 
"FALL", 35);
             assertThrowsWithPos("CREATE ZONE test (replicas -1)", "-", 28);
             assertThrowsWithPos("CREATE ZONE test (replicas FALL)", "FALL", 
28);
             assertThrowsWithPos("CREATE ZONE test (replicas 1, partitions 
-1)", "-", 42);
@@ -286,6 +288,72 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
         assertThat(desc.replicas(), 
equalTo(DistributionAlgorithm.ALL_REPLICAS));
     }
 
+    @Test
+    public void testCreateZoneWithScaleOff() throws SqlParseException {
+        String sql = "CREATE ZONE test (AUTO SCALE UP OFF) STORAGE PROFILES 
['" + DEFAULT_STORAGE_PROFILE + "']";
+
+        CatalogCommand cmd = convert(sql);
+
+        CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
NewZoneEntry.class).descriptor();
+
+        assertThat(desc.dataNodesAutoAdjustScaleUp(), 
equalTo(INFINITE_TIMER_VALUE));
+
+        sql = "CREATE ZONE test (AUTO SCALE DOWN OFF) STORAGE PROFILES ['" + 
DEFAULT_STORAGE_PROFILE + "']";
+
+        cmd = convert(sql);
+
+        desc = invokeAndGetFirstEntry(cmd, NewZoneEntry.class).descriptor();
+
+        assertThat(desc.dataNodesAutoAdjustScaleDown(), 
equalTo(INFINITE_TIMER_VALUE));
+    }
+
+    @Test
+    public void testCreateZoneWithAllScaleOff() throws SqlParseException {
+        String sql = "CREATE ZONE test (AUTO SCALE OFF) STORAGE PROFILES ['" + 
DEFAULT_STORAGE_PROFILE + "']";
+
+        CatalogCommand cmd = convert(sql);
+
+        CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
NewZoneEntry.class).descriptor();
+
+        assertThat(desc.dataNodesAutoAdjustScaleUp(), 
equalTo(INFINITE_TIMER_VALUE));
+        assertThat(desc.dataNodesAutoAdjustScaleDown(), 
equalTo(INFINITE_TIMER_VALUE));
+    }
+
+    @Test
+    public void testAlterZoneWithScaleOff() throws SqlParseException {
+        CatalogCommand cmd = convert("ALTER ZONE test SET (AUTO SCALE UP 
OFF)");
+
+        assertThat(cmd, instanceOf(AlterZoneCommand.class));
+
+        mockCatalogZone("TEST");
+
+        CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
AlterZoneEntry.class).descriptor();
+
+        assertThat(desc.dataNodesAutoAdjustScaleUp(), 
equalTo(INFINITE_TIMER_VALUE));
+
+        cmd = convert("ALTER ZONE test SET (AUTO SCALE DOWN OFF)");
+
+        assertThat(cmd, instanceOf(AlterZoneCommand.class));
+
+        desc = invokeAndGetFirstEntry(cmd, AlterZoneEntry.class).descriptor();
+
+        assertThat(desc.dataNodesAutoAdjustScaleDown(), 
equalTo(INFINITE_TIMER_VALUE));
+    }
+
+    @Test
+    public void testAlterZoneWithAllScaleOff() throws SqlParseException {
+        CatalogCommand cmd = convert("ALTER ZONE test SET (AUTO SCALE OFF)");
+
+        assertThat(cmd, instanceOf(AlterZoneCommand.class));
+
+        mockCatalogZone("TEST");
+
+        CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
AlterZoneEntry.class).descriptor();
+
+        assertThat(desc.dataNodesAutoAdjustScaleUp(), 
equalTo(INFINITE_TIMER_VALUE));
+        assertThat(desc.dataNodesAutoAdjustScaleDown(), 
equalTo(INFINITE_TIMER_VALUE));
+    }
+
     @ParameterizedTest(name = "with syntax = {0}")
     @ValueSource(booleans = {true, false})
     public void testSingleNonExistedStorageProfile(boolean withPresent) {
@@ -494,12 +562,7 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
 
         assertThat(cmd, instanceOf(AlterZoneCommand.class));
 
-        CatalogZoneDescriptor zoneMock = mock(CatalogZoneDescriptor.class);
-
-        when(zoneMock.name()).thenReturn("TEST");
-        when(zoneMock.filter()).thenReturn("");
-
-        when(catalog.zone("TEST")).thenReturn(zoneMock);
+        mockCatalogZone("TEST");
 
         CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
AlterZoneEntry.class).descriptor();
 
@@ -527,23 +590,17 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
                     ? "ALTER ZONE test SET "
                             + "replicas=5, "
                             + "quorum_size=3, "
-                            + "data_nodes_filter='$[?(@.region == \"US\")]', "
-                            + "data_nodes_auto_adjust=300"
+                            + "data_nodes_filter='$[?(@.region == \"US\")]'"
                     : "ALTER ZONE test SET "
                             + "(replicas 5, "
                             + "quorum size 3, "
-                            + "nodes filter '$[?(@.region == \"US\")]', "
-                            + "auto adjust 300)";
+                            + "nodes filter '$[?(@.region == \"US\")]')";
 
             CatalogCommand cmd = convert(sql);
 
             assertThat(cmd, instanceOf(AlterZoneCommand.class));
 
-            CatalogZoneDescriptor zoneMock = mock(CatalogZoneDescriptor.class);
-            when(zoneMock.name()).thenReturn("TEST");
-            when(zoneMock.filter()).thenReturn("");
-
-            when(catalog.zone("TEST")).thenReturn(zoneMock);
+            mockCatalogZone("TEST");
 
             CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
AlterZoneEntry.class).descriptor();
 
@@ -552,7 +609,6 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
             assertThat(desc.replicas(), equalTo(5));
             assertThat(desc.quorumSize(), equalTo(3));
             assertThat(desc.filter(), equalTo("$[?(@.region == \"US\")]"));
-            assertThat(desc.dataNodesAutoAdjust(), equalTo(300));
         }
 
         // Check remaining options.
@@ -569,11 +625,7 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
 
             assertThat(cmd, instanceOf(AlterZoneCommand.class));
 
-            CatalogZoneDescriptor zoneMock = mock(CatalogZoneDescriptor.class);
-            when(zoneMock.name()).thenReturn("TEST");
-            when(zoneMock.filter()).thenReturn("");
-
-            when(catalog.zone("TEST")).thenReturn(zoneMock);
+            mockCatalogZone("TEST");
 
             CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
AlterZoneEntry.class).descriptor();
 
@@ -591,11 +643,7 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
 
         assertThat(cmd, instanceOf(AlterZoneCommand.class));
 
-        CatalogZoneDescriptor zoneMock = mock(CatalogZoneDescriptor.class);
-        when(zoneMock.name()).thenReturn("TEST");
-        when(zoneMock.filter()).thenReturn("");
-
-        when(catalog.zone("TEST")).thenReturn(zoneMock);
+        mockCatalogZone("TEST");
 
         CatalogZoneDescriptor desc = invokeAndGetFirstEntry(cmd, 
AlterZoneEntry.class).descriptor();
 
@@ -631,12 +679,14 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
     @MethodSource("numericOptions")
     public void testAlterZoneCommandWithInvalidOptions(boolean obsolete, 
ZoneOptionEnum option) {
         String sql = obsolete
-                ? "ALTER ZONE test SET replicas=2, data_nodes_auto_adjust=-100"
+                ? "ALTER ZONE test SET {}=-100"
                 : "ALTER ZONE test SET ({} -100)";
 
         if (obsolete) {
-            expectOptionValidationError(sql, "DATA_NODES_AUTO_ADJUST");
+            expectOptionValidationError(format(sql, option.name()), 
option.name());
         } else {
+            Assumptions.assumeFalse(option == 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST);
+
             String sqlName = option.sqlName;
             String prefix = "ALTER ZONE test SET (";
             assertThrowsWithPos(format(sql, sqlName, "-100"), "-", 
prefix.length() + sqlName.length() + 1 /* start pos*/
@@ -644,16 +694,6 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
         }
     }
 
-    @ParameterizedTest(name = "obsolete = {0}")
-    @ValueSource(booleans = {true, false})
-    public void testAlterZoneCommandWithDuplicateOptions(boolean obsolete) 
throws SqlParseException {
-        String sql = obsolete
-                ? "ALTER ZONE test SET replicas=2, data_nodes_auto_adjust=300, 
DATA_NODES_AUTO_ADJUST=400"
-                : "ALTER ZONE test SET (replicas 2, auto adjust 300, AUTO 
ADJUST 400)";
-
-        expectDuplicateOptionError(sql, 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST.sqlName);
-    }
-
     @Test
     public void testDropZone() throws SqlParseException {
         CatalogCommand cmd = convert("DROP ZONE test");
@@ -676,6 +716,8 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
         if (withPresent) {
             expectInvalidOptionType(format(sql, option, "'bar'"), 
option.name());
         } else {
+            Assumptions.assumeFalse(option == 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST);
+
             String sqlName = option.sqlName;
             String prefix = "create zone test_zone (";
             int errorPos = prefix.length() + sqlName.length() + 1 /* start 
pos*/ + 1 /* first symbol after bracket*/;
@@ -809,4 +851,12 @@ public class DistributionZoneSqlToCommandConverterTest 
extends AbstractDdlSqlToC
                 storageProfiles
         );
     }
+
+    private void mockCatalogZone(String zoneName) {
+        CatalogZoneDescriptor zoneMock = mock(CatalogZoneDescriptor.class);
+        when(zoneMock.name()).thenReturn(zoneName);
+        when(zoneMock.filter()).thenReturn("");
+
+        when(catalog.zone("TEST")).thenReturn(zoneMock);
+    }
 }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java
index f18b08e8823..c5ada917591 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/DistributionZoneSqlDdlParserTest.java
@@ -96,7 +96,6 @@ public class DistributionZoneSqlDdlParserTest extends 
AbstractParserTest {
                         + "partitions 3, "
                         + "nodes filter '(\"US\" || \"EU\") && \"SSD\"', "
                         + "distribution algorithm 'test_Distribution', "
-                        + "auto adjust 1, "
                         + "auto scale up 2, "
                         + "auto scale down 3, "
                         + "consistency mode 'HIGH_AVAILABILITY') "
@@ -112,7 +111,6 @@ public class DistributionZoneSqlDdlParserTest extends 
AbstractParserTest {
         assertThatZoneOptionPresent(optList, ZoneOptionEnum.PARTITIONS, 3);
         assertThatZoneOptionPresent(optList, 
ZoneOptionEnum.DISTRIBUTION_ALGORITHM, "test_Distribution");
         assertThatZoneOptionPresent(optList, ZoneOptionEnum.DATA_NODES_FILTER, 
"(\"US\" || \"EU\") && \"SSD\"");
-        assertThatZoneOptionPresent(optList, 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST, 1);
         assertThatZoneOptionPresent(optList, 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_UP, 2);
         assertThatZoneOptionPresent(optList, 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_DOWN, 3);
         assertThatZoneOptionPresent(optList, ZoneOptionEnum.CONSISTENCY_MODE, 
"HIGH_AVAILABILITY");
@@ -123,7 +121,6 @@ public class DistributionZoneSqlDdlParserTest extends 
AbstractParserTest {
                 + "PARTITIONS 3, "
                 + "NODES FILTER '(\"US\" || \"EU\") && \"SSD\"', "
                 + "DISTRIBUTION ALGORITHM 'test_Distribution', "
-                + "AUTO ADJUST 1, "
                 + "AUTO SCALE UP 2, "
                 + "AUTO SCALE DOWN 3, "
                 + "CONSISTENCY MODE 'HIGH_AVAILABILITY') "
@@ -337,7 +334,6 @@ public class DistributionZoneSqlDdlParserTest extends 
AbstractParserTest {
                         + "REPLICAS 2, "
                         + "QUORUM SIZE 2, "
                         + "NODES FILTER '(\"US\" || \"EU\") && \"SSD\"', "
-                        + "AUTO ADJUST 1, "
                         + "AUTO SCALE UP 2, "
                         + "AUTO SCALE DOWN 3)"
         );
@@ -351,7 +347,6 @@ public class DistributionZoneSqlDdlParserTest extends 
AbstractParserTest {
         assertThatZoneOptionPresent(optList, ZoneOptionEnum.REPLICAS, 2);
         assertThatZoneOptionPresent(optList, ZoneOptionEnum.QUORUM_SIZE, 2);
         assertThatZoneOptionPresent(optList, ZoneOptionEnum.DATA_NODES_FILTER, 
"(\"US\" || \"EU\") && \"SSD\"");
-        assertThatZoneOptionPresent(optList, 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST, 1);
         assertThatZoneOptionPresent(optList, 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_UP, 2);
         assertThatZoneOptionPresent(optList, 
ZoneOptionEnum.DATA_NODES_AUTO_ADJUST_SCALE_DOWN, 3);
 
@@ -359,7 +354,6 @@ public class DistributionZoneSqlDdlParserTest extends 
AbstractParserTest {
                 + "(REPLICAS 2, "
                 + "QUORUM SIZE 2, "
                 + "NODES FILTER '(\"US\" || \"EU\") && \"SSD\"', "
-                + "AUTO ADJUST 1, "
                 + "AUTO SCALE UP 2, "
                 + "AUTO SCALE DOWN 3)";
         expectUnparsed(alterZoneSet, expectedStmt);

Reply via email to