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 abe9afe59b8 IGNITE-26888 Add compatibility data for Ignite 3.1.0 
(#6872)
abe9afe59b8 is described below

commit abe9afe59b8df939048717d6e9a251b5c5b06bbb
Author: Evgeniy Stanilovskiy <[email protected]>
AuthorDate: Mon Nov 10 08:45:52 2025 +0300

    IGNITE-26888 Add compatibility data for Ignite 3.1.0 (#6872)
---
 .../CatalogTableDescriptorSerializers.java         |  150 +-
 ...logSerializationCompatibilityV2ReadsV2Test.java |    3 +-
 .../catalog/storage/TestTableDescriptors.java      |   22 +
 .../serialization_v2/NewSchemaEntry_2.bin          |  Bin 117341 -> 165269 
bytes
 .../resources/serialization_v2/NewTableEntry_2.bin |  Bin 35787 -> 51763 bytes
 .../resources/serialization_v2/NewTableEntry_3.bin |  Bin 37160 -> 41157 bytes
 .../SnapshotEntryNoDefaultZone_2.bin               |  Bin 117466 -> 165394 
bytes
 .../resources/serialization_v2/SnapshotEntry_2.bin |  Bin 117469 -> 165397 
bytes
 ...ldClientWithCurrentServerCompatibilityTest.java |   15 +-
 .../ignite/internal/ApiCompatibilityTest.java      |    4 +
 .../src/test/resources/versions/3.1.0/openapi.yaml | 2283 ++++++++++++++++++++
 .../src/testFixtures/resources/igniteVersions.json |    5 +-
 .../compatibility/configuration/ignite-3.1.0.bin   |  Bin 0 -> 5532 bytes
 13 files changed, 2447 insertions(+), 35 deletions(-)

diff --git 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptorSerializers.java
 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptorSerializers.java
index 3659e3b2c66..e2a8fd4b703 100644
--- 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptorSerializers.java
+++ 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/descriptors/CatalogTableDescriptorSerializers.java
@@ -203,7 +203,99 @@ public class CatalogTableDescriptorSerializers {
             long updateTimestampLong = input.readVarInt();
             HybridTimestamp updateTimestamp = updateTimestampLong == 0 ? 
MIN_VALUE : hybridTimestamp(updateTimestampLong);
 
-            CatalogTableSchemaVersions schemaVersions =  
input.readEntry(CatalogTableSchemaVersions.class);
+            CatalogTableSchemaVersions schemaVersions = 
input.readEntry(CatalogTableSchemaVersions.class);
+            input.readEntryList(CatalogTableColumnDescriptor.class); // column 
list
+
+            String storageProfile = input.readUTF();
+
+            int schemaId = input.readVarIntAsInt();
+            int pkIndexId = input.readVarIntAsInt();
+            int zoneId = input.readVarIntAsInt();
+
+            int pkKeysLen = input.readVarIntAsInt();
+            int[] pkColumnIndexes = input.readIntArray(pkKeysLen);
+
+            List<CatalogTableColumnDescriptor> columns = 
schemaVersions.latestVersionColumns();
+
+            IntList primaryKeyColumns = new 
IntArrayList(pkColumnIndexes.length);
+
+            for (int idx : pkColumnIndexes) {
+                primaryKeyColumns.add(columns.get(idx).id());
+            }
+
+            int colocationColumnsLen = input.readVarIntAsInt();
+
+            IntList colocationColumns;
+
+            if (colocationColumnsLen == -1) {
+                colocationColumns = primaryKeyColumns;
+            } else {
+                colocationColumns = new IntArrayList(colocationColumnsLen);
+
+                int[] colocationColumnIdxs = 
input.readIntArray(colocationColumnsLen);
+
+                for (int idx : colocationColumnIdxs) {
+                    colocationColumns.add(columns.get(idx).id());
+                }
+            }
+
+            return CatalogTableDescriptor.builder()
+                    .id(id)
+                    .schemaId(schemaId)
+                    .primaryKeyIndexId(pkIndexId)
+                    .name(name)
+                    .zoneId(zoneId)
+                    .primaryKeyColumns(primaryKeyColumns)
+                    .colocationColumns(colocationColumns)
+                    .schemaVersions(schemaVersions)
+                    .storageProfile(storageProfile)
+                    .timestamp(updateTimestamp)
+                    .build();
+        }
+
+        @Override
+        public void writeTo(CatalogTableDescriptor descriptor, 
CatalogObjectDataOutput output) throws IOException {
+            output.writeVarInt(descriptor.id());
+            output.writeUTF(descriptor.name());
+            output.writeVarInt(descriptor.updateTimestamp().longValue());
+
+            output.writeEntry(descriptor.schemaVersions());
+            output.writeEntryList(descriptor.columns());
+            output.writeUTF(descriptor.storageProfile());
+
+            output.writeVarInt(descriptor.schemaId());
+            output.writeVarInt(descriptor.primaryKeyIndexId());
+            output.writeVarInt(descriptor.zoneId());
+
+            int[] pkIndexes = resolvePkColumnIndexes(descriptor);
+
+            output.writeVarInt(pkIndexes.length);
+            output.writeIntArray(pkIndexes);
+
+            if (descriptor.colocationColumnNames() == 
descriptor.primaryKeyColumnNames()) {
+                output.writeVarInt(-1);
+            } else {
+                int[] colocationIndexes = 
resolveColocationColumnIndexes(pkIndexes, descriptor);
+
+                output.writeVarInt(colocationIndexes.length);
+                output.writeIntArray(colocationIndexes);
+            }
+        }
+    }
+
+    /**
+     * Serializer for {@link CatalogTableDescriptor}.
+     */
+    @CatalogSerializer(version = 3, since = "3.2.0")
+    static class TableDescriptorSerializerV3 implements 
CatalogObjectSerializer<CatalogTableDescriptor> {
+        @Override
+        public CatalogTableDescriptor readFrom(CatalogObjectDataInput input) 
throws IOException {
+            int id = input.readVarIntAsInt();
+            String name = input.readUTF();
+            long updateTimestampLong = input.readVarInt();
+            HybridTimestamp updateTimestamp = updateTimestampLong == 0 ? 
MIN_VALUE : hybridTimestamp(updateTimestampLong);
+
+            CatalogTableSchemaVersions schemaVersions = 
input.readEntry(CatalogTableSchemaVersions.class);
             List<CatalogTableColumnDescriptor> columns = 
schemaVersions.latestVersionColumns();
             String storageProfile = input.readUTF();
 
@@ -284,50 +376,50 @@ public class CatalogTableDescriptorSerializers {
             output.writeDouble(descriptor.properties().staleRowsFraction());
             output.writeVarInt(descriptor.properties().minStaleRowsCount());
         }
+    }
 
-        private static int[] resolveColocationColumnIndexes(int[] 
pkColumnIndexes, CatalogTableDescriptor descriptor) {
-            int[] colocationColumnIndexes = new 
int[descriptor.colocationColumnNames().size()];
+    private static int[] resolveColocationColumnIndexes(int[] pkColumnIndexes, 
CatalogTableDescriptor descriptor) {
+        int[] colocationColumnIndexes = new 
int[descriptor.colocationColumnNames().size()];
 
-            for (int idx : pkColumnIndexes) {
-                String columnName = descriptor.columns().get(idx).name();
+        for (int idx : pkColumnIndexes) {
+            String columnName = descriptor.columns().get(idx).name();
 
-                for (int j = 0; j < descriptor.colocationColumnNames().size(); 
j++) {
-                    if 
(descriptor.colocationColumnNames().get(j).equals(columnName)) {
-                        colocationColumnIndexes[j] = idx;
+            for (int j = 0; j < descriptor.colocationColumnNames().size(); 
j++) {
+                if 
(descriptor.colocationColumnNames().get(j).equals(columnName)) {
+                    colocationColumnIndexes[j] = idx;
 
-                        break;
-                    }
+                    break;
                 }
             }
-
-            return colocationColumnIndexes;
         }
 
-        private static int[] resolvePkColumnIndexes(CatalogTableDescriptor 
descriptor) {
-            List<CatalogTableColumnDescriptor> columns = descriptor.columns();
-            List<String> pkColumns = descriptor.primaryKeyColumnNames();
+        return colocationColumnIndexes;
+    }
 
-            assert columns.size() >= pkColumns.size();
+    private static int[] resolvePkColumnIndexes(CatalogTableDescriptor 
descriptor) {
+        List<CatalogTableColumnDescriptor> columns = descriptor.columns();
+        List<String> pkColumns = descriptor.primaryKeyColumnNames();
 
-            int[] pkColumnIndexes = new int[pkColumns.size()];
-            int foundCount = 0;
+        assert columns.size() >= pkColumns.size();
 
-            for (int i = 0; i < columns.size() && foundCount < 
pkColumnIndexes.length; i++) {
-                for (int j = 0; j < pkColumns.size(); j++) {
-                    String pkColumn = pkColumns.get(j);
+        int[] pkColumnIndexes = new int[pkColumns.size()];
+        int foundCount = 0;
 
-                    if (pkColumn.equals(columns.get(i).name())) {
-                        pkColumnIndexes[j] = i;
-                        foundCount++;
+        for (int i = 0; i < columns.size() && foundCount < 
pkColumnIndexes.length; i++) {
+            for (int j = 0; j < pkColumns.size(); j++) {
+                String pkColumn = pkColumns.get(j);
 
-                        break;
-                    }
+                if (pkColumn.equals(columns.get(i).name())) {
+                    pkColumnIndexes[j] = i;
+                    foundCount++;
+
+                    break;
                 }
             }
+        }
 
-            assert foundCount == pkColumnIndexes.length;
+        assert foundCount == pkColumnIndexes.length;
 
-            return pkColumnIndexes;
-        }
+        return pkColumnIndexes;
     }
 }
diff --git 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogSerializationCompatibilityV2ReadsV2Test.java
 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogSerializationCompatibilityV2ReadsV2Test.java
index 962e4d2338b..96a17541471 100644
--- 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogSerializationCompatibilityV2ReadsV2Test.java
+++ 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/CatalogSerializationCompatibilityV2ReadsV2Test.java
@@ -406,7 +406,7 @@ public class CatalogSerializationCompatibilityV2ReadsV2Test 
extends CatalogSeria
 
     @Test
     public void newTableV3() {
-        int tableSerializerVersion = 2;
+        int tableSerializerVersion = 3;
         int tableVersionsSerializerVersion = 3;
         int tableColumnSerializerVersion = 3;
         int snapshotFileSuffix = 3;
@@ -418,6 +418,7 @@ public class CatalogSerializationCompatibilityV2ReadsV2Test 
extends CatalogSeria
 
         
checker.addExpectedVersion(MarshallableEntryType.DESCRIPTOR_TABLE_SCHEMA_VERSIONS.id(),
 tableVersionsSerializerVersion);
         
checker.addExpectedVersion(MarshallableEntryType.DESCRIPTOR_TABLE_COLUMN.id(), 
tableColumnSerializerVersion);
+        
checker.addExpectedVersion(MarshallableEntryType.DESCRIPTOR_TABLE.id(), 
tableSerializerVersion);
         checker.compareEntries(entries, "NewTableEntry", snapshotFileSuffix);
     }
 }
diff --git 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/TestTableDescriptors.java
 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/TestTableDescriptors.java
index 77bc4b30448..70621e117e6 100644
--- 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/TestTableDescriptors.java
+++ 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/TestTableDescriptors.java
@@ -40,6 +40,8 @@ final class TestTableDescriptors {
             case 1:
             case 2:
                 return tablesV0(state);
+            case 3:
+                return tablesV3(state);
             default:
                 throw new IllegalArgumentException("Unexpected table version: 
" + version);
         }
@@ -125,4 +127,24 @@ final class TestTableDescriptors {
 
         return list;
     }
+
+    private static List<CatalogTableDescriptor> tablesV3(TestDescriptorState 
state) {
+        List<CatalogTableDescriptor> tables = new ArrayList<>(tablesV0(state));
+
+        tables.add(CatalogTableDescriptor.builder()
+                .id(state.id())
+                .schemaId(state.id())
+                .primaryKeyIndexId(state.id())
+                .name(state.name("TABLE"))
+                .zoneId(101)
+                .newColumns(TestTableColumnDescriptors.columns(state))
+                .primaryKeyColumns(IntList.of(4))
+                .storageProfile("S2")
+                .staleRowsFraction(0.3d)
+                .minStaleRowsCount(state.id() * 10_000L)
+                .build()
+        );
+
+        return tables;
+    }
 }
diff --git 
a/modules/catalog/src/test/resources/serialization_v2/NewSchemaEntry_2.bin 
b/modules/catalog/src/test/resources/serialization_v2/NewSchemaEntry_2.bin
index 4bc3b3c8307..098148e8710 100644
Binary files 
a/modules/catalog/src/test/resources/serialization_v2/NewSchemaEntry_2.bin and 
b/modules/catalog/src/test/resources/serialization_v2/NewSchemaEntry_2.bin 
differ
diff --git 
a/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_2.bin 
b/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_2.bin
index 50e9f6e2039..a5e8521c204 100644
Binary files 
a/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_2.bin and 
b/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_2.bin differ
diff --git 
a/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_3.bin 
b/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_3.bin
index fa5dd5504db..9585b4d8536 100644
Binary files 
a/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_3.bin and 
b/modules/catalog/src/test/resources/serialization_v2/NewTableEntry_3.bin differ
diff --git 
a/modules/catalog/src/test/resources/serialization_v2/SnapshotEntryNoDefaultZone_2.bin
 
b/modules/catalog/src/test/resources/serialization_v2/SnapshotEntryNoDefaultZone_2.bin
index ba733857857..e18849dc603 100644
Binary files 
a/modules/catalog/src/test/resources/serialization_v2/SnapshotEntryNoDefaultZone_2.bin
 and 
b/modules/catalog/src/test/resources/serialization_v2/SnapshotEntryNoDefaultZone_2.bin
 differ
diff --git 
a/modules/catalog/src/test/resources/serialization_v2/SnapshotEntry_2.bin 
b/modules/catalog/src/test/resources/serialization_v2/SnapshotEntry_2.bin
index a0c41701c3f..1e9163feac3 100644
Binary files 
a/modules/catalog/src/test/resources/serialization_v2/SnapshotEntry_2.bin and 
b/modules/catalog/src/test/resources/serialization_v2/SnapshotEntry_2.bin differ
diff --git 
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/OldClientWithCurrentServerCompatibilityTest.java
 
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/OldClientWithCurrentServerCompatibilityTest.java
index 501b403bf6e..0e546f9a8a4 100644
--- 
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/OldClientWithCurrentServerCompatibilityTest.java
+++ 
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/OldClientWithCurrentServerCompatibilityTest.java
@@ -256,15 +256,15 @@ public class OldClientWithCurrentServerCompatibilityTest 
extends BaseIgniteAbstr
         delegate.testStreamerWithReceiverArg();
     }
 
-    private static ClientCompatibilityTests 
createTestInstanceWithOldClient(String igniteVersion)
+    private ClientCompatibilityTests createTestInstanceWithOldClient(String 
igniteVersion)
             throws Exception {
         var loader = OldClientLoader.getIsolatedClassLoader(igniteVersion);
 
         // Load test class instance in the old client classloader.
         Object clientBuilder = 
loader.loadClass(IgniteClient.class.getName()).getDeclaredMethod("builder").invoke(null);
-        Constructor<?> testCtor = 
loader.loadClass(Delegate.class.getName()).getDeclaredConstructor(clientBuilder.getClass());
+        Constructor<?> testCtor = 
loader.loadClass(Delegate.class.getName()).getDeclaredConstructor(clientBuilder.getClass(),
 String.class);
         testCtor.setAccessible(true);
-        Object testInstance = testCtor.newInstance(clientBuilder);
+        Object testInstance = testCtor.newInstance(clientBuilder, 
clientVersion);
 
         // Wrap the test instance from another classloader using the interface 
from the current classloader.
         return proxy(ClientCompatibilityTests.class, testInstance);
@@ -289,9 +289,11 @@ public class OldClientWithCurrentServerCompatibilityTest 
extends BaseIgniteAbstr
         private final AtomicInteger idGen = new AtomicInteger(1000);
 
         private final IgniteClient client;
+        private final String clientVersion;
 
-        private Delegate(IgniteClient.Builder client) {
+        private Delegate(IgniteClient.Builder client, String clientVersion) {
             this.client = client.addresses("localhost:10800").build();
+            this.clientVersion = clientVersion;
         }
 
         @Override
@@ -314,5 +316,10 @@ public class OldClientWithCurrentServerCompatibilityTest 
extends BaseIgniteAbstr
         public Collection<ClusterNode> clusterNodes() {
             return client.clusterNodes();
         }
+
+        @Override
+        public String tableNamePrefix() {
+            return clientVersion.compareTo("3.0.0") > 0 ? "PUBLIC." : "";
+        }
     }
 }
diff --git 
a/modules/compatibility-tests/src/test/java/org/apache/ignite/internal/ApiCompatibilityTest.java
 
b/modules/compatibility-tests/src/test/java/org/apache/ignite/internal/ApiCompatibilityTest.java
index 70ee1d49470..b15fa978ca8 100644
--- 
a/modules/compatibility-tests/src/test/java/org/apache/ignite/internal/ApiCompatibilityTest.java
+++ 
b/modules/compatibility-tests/src/test/java/org/apache/ignite/internal/ApiCompatibilityTest.java
@@ -61,6 +61,10 @@ class ApiCompatibilityTest {
                     
"org.apache.ignite.table.IgniteTables#tableAsync(java.lang.String)", // 
METHOD_ABSTRACT_NOW_DEFAULT
                     "org.apache.ignite.table.QualifiedName", // CLASS_NOW_FINAL
                     "org.apache.ignite.table.Table#name()" // 
METHOD_ABSTRACT_NOW_DEFAULT
+            ),
+            "3.1.0", List.of(
+                    // Erroneous error code remove between versions
+                    
"org.apache.ignite.lang.ErrorGroups$DisasterRecovery#RESTART_WITH_CLEAN_UP_ERR"
             )
     );
 
diff --git 
a/modules/compatibility-tests/src/test/resources/versions/3.1.0/openapi.yaml 
b/modules/compatibility-tests/src/test/resources/versions/3.1.0/openapi.yaml
new file mode 100644
index 00000000000..182045da148
--- /dev/null
+++ b/modules/compatibility-tests/src/test/resources/versions/3.1.0/openapi.yaml
@@ -0,0 +1,2283 @@
+openapi: 3.0.1
+info:
+  title: Apache Ignite REST module
+  contact:
+    email: [email protected]
+  license:
+    name: Apache 2.0
+    url: https://ignite.apache.org
+  version: 3.1.0
+servers:
+- url: http://localhost:10300
+security:
+- basicAuth: []
+paths:
+  /management/v1/cluster/init:
+    post:
+      tags:
+      - clusterManagement
+      summary: Initialize cluster
+      description: Initialize a new cluster.
+      operationId: init
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/InitCommand'
+        required: true
+      responses:
+        "200":
+          description: Cluster initialized.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Incorrect configuration.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/cluster/state:
+    get:
+      tags:
+      - clusterManagement
+      summary: Get cluster state
+      description: Returns current cluster status.
+      operationId: clusterState
+      responses:
+        "200":
+          description: Cluster status returned.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ClusterState'
+        "404":
+          description: "Cluster status not found. Most likely, the cluster is 
not\
+            \ initialized."
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/cluster/topology/logical:
+    get:
+      tags:
+      - topology
+      summary: Get logical topology
+      description: Gets information about logical cluster topology.
+      operationId: logical
+      responses:
+        "200":
+          description: Logical topology returned.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/ClusterNode'
+        "404":
+          description: "Logical topology not found. Most likely, the cluster 
is not\
+            \ initialized."
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "500":
+          description: Internal error
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/cluster/topology/physical:
+    get:
+      tags:
+      - topology
+      summary: Get physical topology
+      description: Gets information about physical cluster topology.
+      operationId: physical
+      responses:
+        "200":
+          description: Physical topology returned.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/ClusterNode'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/compute/jobs:
+    get:
+      tags:
+      - compute
+      summary: Retrieve all job states
+      description: Fetches the current states of all compute jobs.
+      operationId: jobStates
+      responses:
+        "200":
+          description: Successfully retrieved job states.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/JobState'
+  /management/v1/compute/jobs/{jobId}:
+    get:
+      tags:
+      - compute
+      summary: Retrieve job state
+      description: Fetches the current state of a specific compute job 
identified
+        by jobId.
+      operationId: jobState
+      parameters:
+      - name: jobId
+        in: path
+        description: The unique identifier of the compute job.
+        required: true
+        schema:
+          type: string
+          description: The unique identifier of the compute job.
+          format: uuid
+      responses:
+        "200":
+          description: Successfully retrieved the job state.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/JobState'
+        "404":
+          description: Compute job not found.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+    delete:
+      tags:
+      - compute
+      summary: Cancel job
+      description: Cancels a specific compute job identified by jobId.
+      operationId: cancelJob
+      parameters:
+      - name: jobId
+        in: path
+        description: The unique identifier of the compute job.
+        required: true
+        schema:
+          type: string
+          description: The unique identifier of the compute job.
+          format: uuid
+      responses:
+        "200":
+          description: Successfully cancelled the job.
+          content:
+            application/json: {}
+        "404":
+          description: Compute job not found.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "409":
+          description: Compute job is in an illegal state.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/compute/jobs/{jobId}/priority:
+    put:
+      tags:
+      - compute
+      summary: Update job priority
+      description: Updates the priority of a specific compute job identified 
by jobId.
+      operationId: updatePriority
+      parameters:
+      - name: jobId
+        in: path
+        description: The unique identifier of the compute job.
+        required: true
+        schema:
+          type: string
+          description: The unique identifier of the compute job.
+          format: uuid
+      requestBody:
+        description: The new priority data for the job.
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UpdateJobPriorityBody'
+        required: true
+      responses:
+        "200":
+          description: Successfully updated job priority.
+          content:
+            application/json: {}
+        "404":
+          description: Compute job not found.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "409":
+          description: Compute job is in an illegal state.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/configuration/cluster:
+    get:
+      tags:
+      - clusterConfiguration
+      summary: Get cluster configuration
+      description: Gets the current configuration of the cluster. The 
configuration
+        is returned in HOCON format.
+      operationId: getClusterConfiguration
+      responses:
+        "200":
+          description: Received cluster configuration.
+          content:
+            text/plain:
+              schema:
+                type: string
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Incorrect configuration.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "404":
+          description: "Configuration not found. Most likely, the cluster is 
not initialized."
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+    patch:
+      tags:
+      - clusterConfiguration
+      summary: Update cluster configuration
+      description: Updates cluster configuration. New configuration should be 
provided
+        in HOCON format.
+      operationId: updateClusterConfiguration
+      requestBody:
+        description: The cluster configuration to update.
+        content:
+          text/plain:
+            schema:
+              type: string
+        required: true
+      responses:
+        "200":
+          description: Configuration updated.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Incorrect configuration.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "404":
+          description: "Configuration not found. Most likely, the cluster is 
not initialized."
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "422":
+          description: Configuration parse error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/configuration/cluster/{path}:
+    get:
+      tags:
+      - clusterConfiguration
+      summary: Get configuration represented by path
+      description: Gets the configuration on the specific path. Configuration 
is in
+        HOCON format
+      operationId: getClusterConfigurationByPath
+      parameters:
+      - name: path
+        in: path
+        description: "Configuration tree address. For example: 
`element.subelement`."
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          description: Configuration of the cluster on the specified path.
+          content:
+            text/plain:
+              schema:
+                type: string
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Incorrect configuration.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "404":
+          description: "Configuration not found. Most likely, the cluster is 
not initialized."
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/configuration/node:
+    get:
+      tags:
+      - nodeConfiguration
+      summary: Get node configuration
+      description: Gets node configuration in HOCON format.
+      operationId: getNodeConfiguration
+      responses:
+        "200":
+          description: Full node configuration.
+          content:
+            text/plain:
+              schema:
+                type: string
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Incorrect configuration.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+    patch:
+      tags:
+      - nodeConfiguration
+      summary: Update node configuration
+      description: Updates node configuration. New configuration should be 
provided
+        in HOCON format.
+      operationId: updateNodeConfiguration
+      requestBody:
+        description: The node configuration to update.
+        content:
+          text/plain:
+            schema:
+              type: string
+        required: true
+      responses:
+        "200":
+          description: Configuration successfully updated.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Incorrect configuration.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "405":
+          description: Configuration is read-only.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "422":
+          description: Configuration parse/apply error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/configuration/node/{path}:
+    get:
+      tags:
+      - nodeConfiguration
+      summary: Get configuration represented by path
+      description: "Gets a configuration of a specific node, in HOCON format."
+      operationId: getNodeConfigurationByPath
+      parameters:
+      - name: path
+        in: path
+        description: "Configuration tree address. For example: 
`element.subelement`."
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          description: Returned node configuration.
+          content:
+            text/plain:
+              schema:
+                type: string
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Incorrect configuration.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/deployment/cluster/units:
+    get:
+      tags:
+      - deployment
+      summary: Get cluster unit statuses
+      description: Cluster unit statuses.
+      operationId: listClusterStatuses
+      parameters:
+      - name: statuses
+        in: query
+        schema:
+          type: array
+          description: Deployment status filter.
+          nullable: true
+          items:
+            $ref: '#/components/schemas/DeploymentStatus'
+      responses:
+        "200":
+          description: All statuses returned successfully.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/UnitStatus'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/deployment/cluster/units/{unitId}:
+    get:
+      tags:
+      - deployment
+      summary: Get specific cluster unit statuses
+      description: Cluster unit statuses by unit.
+      operationId: listClusterStatusesByUnit
+      parameters:
+      - name: unitId
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The ID of the deployment unit.
+      - name: version
+        in: query
+        schema:
+          type: string
+          description: Unit version filter.
+          nullable: true
+      - name: statuses
+        in: query
+        schema:
+          type: array
+          description: Deployment status filter.
+          nullable: true
+          items:
+            $ref: '#/components/schemas/DeploymentStatus'
+      responses:
+        "200":
+          description: All statuses returned successfully.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/UnitStatus'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/deployment/node/units:
+    get:
+      tags:
+      - deployment
+      summary: Get node unit statuses
+      description: Returns a list of unit statuses per node.
+      operationId: listNodeStatuses
+      parameters:
+      - name: statuses
+        in: query
+        schema:
+          type: array
+          description: Deployment status filter.
+          nullable: true
+          items:
+            $ref: '#/components/schemas/DeploymentStatus'
+      responses:
+        "200":
+          description: All statuses were returned successfully.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/UnitStatus'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/deployment/node/units/{unitId}:
+    get:
+      tags:
+      - deployment
+      summary: Get specific node unit statuses
+      description: Returns a list of node unit statuses by unit.
+      operationId: listNodeStatusesByUnit
+      parameters:
+      - name: unitId
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The ID of the deployment unit.
+      - name: version
+        in: query
+        schema:
+          type: string
+          description: Unit version filter.
+          nullable: true
+      - name: statuses
+        in: query
+        schema:
+          type: array
+          description: Deployment status filter.
+          nullable: true
+          items:
+            $ref: '#/components/schemas/DeploymentStatus'
+      responses:
+        "200":
+          description: All statuses returned successfully.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/UnitStatus'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/deployment/units/zip/{unitId}/{unitVersion}:
+    post:
+      tags:
+      - deployment
+      summary: Deploy unit with folders structure in zip.
+      description: Deploys provided unit in zip file to the cluster with 
folders structure.
+      operationId: deployZipUnit
+      parameters:
+      - name: unitId
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The ID of the deployment unit.
+      - name: unitVersion
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The version of the deployment unit.
+      - name: deployMode
+        in: query
+        schema:
+          nullable: true
+          allOf:
+          - $ref: '#/components/schemas/deployMode'
+          - description: ALL or MAJORITY.
+      - name: initialNodes
+        in: query
+        schema:
+          type: array
+          description: List of node identifiers to deploy to.
+          nullable: true
+          items:
+            type: string
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              required:
+              - unitContent
+              type: object
+              properties:
+                unitContent:
+                  type: array
+                  description: The zip file with unit content to deploy.
+                  items:
+                    type: string
+                    format: binary
+            encoding: {}
+        required: true
+      responses:
+        "200":
+          description: Unit deployed successfully.
+          content:
+            application/json:
+              schema:
+                type: boolean
+        "409":
+          description: Unit with same identifier and version is already 
deployed.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Deployment unit with unzip supports only single zip 
file.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/deployment/units/{unitId}/{unitVersion}:
+    post:
+      tags:
+      - deployment
+      summary: Deploy unit
+      description: Deploys provided unit to the cluster.
+      operationId: deployUnit
+      parameters:
+      - name: unitId
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The ID of the deployment unit.
+      - name: unitVersion
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The version of the deployment unit.
+      - name: deployMode
+        in: query
+        schema:
+          nullable: true
+          allOf:
+          - $ref: '#/components/schemas/deployMode'
+          - description: ALL or MAJORITY.
+      - name: initialNodes
+        in: query
+        schema:
+          type: array
+          description: List of node identifiers to deploy to.
+          nullable: true
+          items:
+            type: string
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              required:
+              - unitContent
+              type: object
+              properties:
+                unitContent:
+                  type: array
+                  description: The code to deploy.
+                  items:
+                    type: string
+                    format: binary
+            encoding: {}
+        required: true
+      responses:
+        "200":
+          description: Unit deployed successfully.
+          content:
+            application/json:
+              schema:
+                type: boolean
+        "409":
+          description: Unit with same identifier and version is already 
deployed.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+    delete:
+      tags:
+      - deployment
+      summary: Undeploy unit
+      description: Undeploys the unit with provided unitId and unitVersion.
+      operationId: undeployUnit
+      parameters:
+      - name: unitId
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The ID of the deployment unit.
+      - name: unitVersion
+        in: path
+        required: true
+        schema:
+          type: string
+          description: The version of the deployment unit.
+      responses:
+        "200":
+          description: Unit undeployed successfully.
+          content:
+            application/json:
+              schema:
+                type: boolean
+        "404":
+          description: Unit with provided identifier and version does not 
exist.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/metric/cluster/disable:
+    post:
+      tags:
+      - clusterMetric
+      summary: Disable metric source
+      description: Disables the specified metric source.
+      operationId: disableClusterMetric
+      requestBody:
+        content:
+          text/plain:
+            schema:
+              type: string
+        required: true
+      responses:
+        "200":
+          description: Metric source disabled.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "404":
+          description: Metric source not found.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/metric/cluster/enable:
+    post:
+      tags:
+      - clusterMetric
+      summary: Enable metric source
+      description: Enables the specified metric source.
+      operationId: enableClusterMetric
+      requestBody:
+        content:
+          text/plain:
+            schema:
+              type: string
+        required: true
+      responses:
+        "200":
+          description: Metric source enabled.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "404":
+          description: Metric source not found.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/metric/cluster/source:
+    get:
+      tags:
+      - clusterMetric
+      summary: List metric sources
+      description: Gets a list of all available metric sources.
+      operationId: listClusterMetricSources
+      responses:
+        "200":
+          description: Returned a list of metric sources.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/NodeMetricSources'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/metric/node/disable:
+    post:
+      tags:
+      - nodeMetric
+      summary: Disable metric source
+      description: Disables the specified metric source.
+      operationId: disableNodeMetric
+      requestBody:
+        content:
+          text/plain:
+            schema:
+              type: string
+        required: true
+      responses:
+        "200":
+          description: Metric source disabled.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "404":
+          description: Metric source not found.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/metric/node/enable:
+    post:
+      tags:
+      - nodeMetric
+      summary: Enable metric source
+      description: Enables the specified metric source.
+      operationId: enableNodeMetric
+      requestBody:
+        content:
+          text/plain:
+            schema:
+              type: string
+        required: true
+      responses:
+        "200":
+          description: Metric source enabled.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "404":
+          description: Metric source not found.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/metric/node/set:
+    get:
+      tags:
+      - nodeMetric
+      summary: List metric sets
+      description: Gets a list of all enabled metric sets.
+      operationId: listNodeMetricSets
+      responses:
+        "200":
+          description: Returned a list of metric sets.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/MetricSet'
+        "500":
+          description: Internal error
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/metric/node/source:
+    get:
+      tags:
+      - nodeMetric
+      summary: List metric sources
+      description: Gets a list of all available metric sources.
+      operationId: listNodeMetricSources
+      responses:
+        "200":
+          description: Returned a list of metric sources.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/MetricSource'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/node/info:
+    get:
+      tags:
+      - nodeManagement
+      summary: Get node information
+      description: Gets information about the node.
+      operationId: nodeInfo
+      responses:
+        "200":
+          description: Node info.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NodeInfo'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/node/state:
+    get:
+      tags:
+      - nodeManagement
+      summary: Get node state
+      description: Gets node state.
+      operationId: nodeState
+      responses:
+        "200":
+          description: Node state.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NodeState'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/node/version:
+    get:
+      tags:
+      - nodeManagement
+      summary: Get application version on node
+      description: Gets the version of Apache Ignite the node uses.
+      operationId: nodeVersion
+      responses:
+        "200":
+          description: Node version.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/NodeVersion'
+        "500":
+          description: Internal error
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/cluster/migrate:
+    post:
+      tags:
+      - recovery
+      - system
+      description: Migrates nodes from old cluster to new (repaired) cluster.
+      operationId: migrate
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/MigrateRequest'
+        required: true
+      responses:
+        "200":
+          description: Migration initiated.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/cluster/reset:
+    post:
+      tags:
+      - recovery
+      - system
+      description: Initiates cluster reset to repair CMG/Metastorage 
group/both.
+      operationId: resetCluster
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ResetClusterRequest'
+        required: true
+      responses:
+        "200":
+          description: Cluster reset initiated.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/partitions/reset:
+    post:
+      tags:
+      - recovery
+      description: "Updates assignments of partitions in a forced manner, 
allowing\
+        \ for the recovery of raft groups with lost majorities."
+      operationId: resetPartitions
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ResetPartitionsRequest'
+        required: true
+      responses:
+        "200":
+          description: Partition states reset.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/partitions/restart:
+    post:
+      tags:
+      - recovery
+      description: Restarts replica service and raft group of passed 
partitions.
+      operationId: restartPartitions
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RestartPartitionsRequest'
+        required: true
+      responses:
+        "200":
+          description: Partitions restarted.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/partitions/restartWithCleanup:
+    post:
+      tags:
+      - recovery
+      description: Restarts replica service and raft group of passed 
partitions with
+        cleaning up of the storage.
+      operationId: restartPartitionsWithCleanup
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RestartPartitionsRequest'
+        required: true
+      responses:
+        "200":
+          description: Partitions restarted.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/state/global:
+    get:
+      tags:
+      - recovery
+      description: Returns global partition states.
+      operationId: getGlobalPartitionStates
+      parameters:
+      - name: zoneNames
+        in: query
+        schema:
+          type: array
+          description: "Names specifying zones to get partition states from. 
Case-sensitive,\
+            \ all zones if empty."
+          nullable: true
+          items:
+            type: string
+      - name: partitionIds
+        in: query
+        schema:
+          type: array
+          description: IDs of partitions to get states of. All partitions if 
empty.
+          nullable: true
+          items:
+            type: integer
+            format: int32
+      responses:
+        "200":
+          description: Partition states returned.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalPartitionStatesResponse'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/state/local:
+    get:
+      tags:
+      - recovery
+      description: Returns local partition states.
+      operationId: getLocalPartitionStates
+      parameters:
+      - name: zoneNames
+        in: query
+        schema:
+          type: array
+          description: "Names specifying zones to get partition states from. 
Case-sensitive,\
+            \ all zones if empty."
+          nullable: true
+          items:
+            type: string
+      - name: nodeNames
+        in: query
+        schema:
+          type: array
+          description: "Names specifying nodes to get partition states from. 
Case-sensitive,\
+            \ all nodes if empty."
+          nullable: true
+          items:
+            type: string
+      - name: partitionIds
+        in: query
+        schema:
+          type: array
+          description: IDs of partitions to get states. All partitions if 
empty.
+          nullable: true
+          items:
+            type: integer
+            format: int32
+      responses:
+        "200":
+          description: Partition states returned.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LocalPartitionStatesResponse'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/zone/partitions/reset:
+    post:
+      tags:
+      - recovery
+      description: "Updates assignments of zone's partitions in a forced 
manner, allowing\
+        \ for the recovery of raft groups with lost majorities."
+      operationId: resetZonePartitions
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ResetZonePartitionsRequest'
+        required: true
+      responses:
+        "200":
+          description: Partition states reset.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/zone/partitions/restart:
+    post:
+      tags:
+      - recovery
+      description: Restarts replica service and raft group of passed zone 
partitions.
+      operationId: restartZonePartitions
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RestartZonePartitionsRequest'
+        required: true
+      responses:
+        "200":
+          description: Zone partitions restarted.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/zone/partitions/restartWithCleanup:
+    post:
+      tags:
+      - recovery
+      description: Restarts replica service and raft group of passed zone 
partitions
+        with cleaning up of the storage.
+      operationId: restartZonePartitionsWithCleanup
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RestartZonePartitionsRequest'
+        required: true
+      responses:
+        "200":
+          description: Zone partitions restarted.
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/zone/state/global:
+    get:
+      tags:
+      - recovery
+      description: Returns global zone partition states.
+      operationId: getZoneGlobalPartitionStates
+      parameters:
+      - name: zoneNames
+        in: query
+        schema:
+          type: array
+          description: "Names specifying zones to get partition states from. 
Case-sensitive,\
+            \ all zones if empty."
+          nullable: true
+          items:
+            type: string
+      - name: partitionIds
+        in: query
+        schema:
+          type: array
+          description: IDs of partitions to get states of. All partitions if 
empty.
+          nullable: true
+          items:
+            type: integer
+            format: int32
+      responses:
+        "200":
+          description: Zone partition states returned.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalZonePartitionStatesResponse'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/recovery/zone/state/local:
+    get:
+      tags:
+      - recovery
+      description: Returns local zone partition states.
+      operationId: getZoneLocalPartitionStates
+      parameters:
+      - name: zoneNames
+        in: query
+        schema:
+          type: array
+          description: "Names specifying zones to get partition states from. 
Case-sensitive,\
+            \ all zones if empty."
+          nullable: true
+          items:
+            type: string
+      - name: nodeNames
+        in: query
+        schema:
+          type: array
+          description: "Names specifying nodes to get partition states from. 
Case-sensitive,\
+            \ all nodes if empty."
+          nullable: true
+          items:
+            type: string
+      - name: partitionIds
+        in: query
+        schema:
+          type: array
+          description: IDs of partitions to get states. All partitions if 
empty.
+          nullable: true
+          items:
+            type: integer
+            format: int32
+      responses:
+        "200":
+          description: Zone partition states returned.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LocalZonePartitionStatesResponse'
+        "500":
+          description: Internal error.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "400":
+          description: Bad request.
+          content:
+            application/problem+json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/sql/plan/clear-cache:
+    get:
+      tags:
+      - sql
+      summary: Invalidates SQL planner cache.
+      description: Invalidates SQL planner cache records on node that related 
to provided
+        table names.
+      operationId: clearCache
+      parameters:
+      - name: tableNames
+        in: query
+        schema:
+          type: array
+          description: "SQL query plans, which are related to given tables, 
will be\
+            \ evicted from cache. Case-sensitive, cache will be reset if 
empty."
+          nullable: true
+          items:
+            type: string
+      responses:
+        "200":
+          description: Successfully cleared SQL query plan cache.
+  /management/v1/sql/queries:
+    get:
+      tags:
+      - sql
+      summary: Retrieve all running sql queries.
+      description: Fetches all running sql queries.
+      operationId: queries
+      responses:
+        "200":
+          description: Successfully retrieved all running sql queries.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/SqlQuery'
+  /management/v1/sql/queries/{queryId}:
+    get:
+      tags:
+      - sql
+      summary: Retrieve sql query.
+      description: Fetches the current state of a specific sql query.
+      operationId: query
+      parameters:
+      - name: queryId
+        in: path
+        description: The unique identifier of the sql query.
+        required: true
+        schema:
+          type: string
+          description: The unique identifier of the sql query.
+          format: uuid
+      responses:
+        "200":
+          description: Successfully retrieved the sql query.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SqlQuery'
+        "404":
+          description: Query not found.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+    delete:
+      tags:
+      - sql
+      summary: Kill sql query.
+      description: Kills a specific sql query identified by query id.
+      operationId: killQuery
+      parameters:
+      - name: queryId
+        in: path
+        description: The unique identifier of the sql query.
+        required: true
+        schema:
+          type: string
+          description: The unique identifier of the sql query.
+          format: uuid
+      responses:
+        "200":
+          description: Successfully killed the sql query.
+          content:
+            application/json: {}
+        "404":
+          description: Query not found.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "409":
+          description: Query is in an illegal state.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+  /management/v1/transactions:
+    get:
+      tags:
+      - transactions
+      summary: Retrieve all in progress transactions
+      description: Fetches all in progress transactions.
+      operationId: transactions
+      responses:
+        "200":
+          description: Successfully retrieved in progress transactions.
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/Transaction'
+  /management/v1/transactions/{transactionId}:
+    get:
+      tags:
+      - transactions
+      summary: Retrieve transaction state
+      description: Fetches the current state of a specific transaction 
identified
+        by transactionId.
+      operationId: transaction
+      parameters:
+      - name: transactionId
+        in: path
+        description: The unique identifier of the transaction.
+        required: true
+        schema:
+          type: string
+          description: The unique identifier of the transaction.
+          format: uuid
+      responses:
+        "200":
+          description: Successfully retrieved the transaction state.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Transaction'
+        "404":
+          description: Transaction not found.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+    delete:
+      tags:
+      - transactions
+      summary: Kill transaction.
+      description: Kills a specific transaction identified by transactionId.
+      operationId: killTransaction
+      parameters:
+      - name: transactionId
+        in: path
+        description: The unique identifier of the transaction.
+        required: true
+        schema:
+          type: string
+          description: The unique identifier of the transaction.
+          format: uuid
+      responses:
+        "200":
+          description: Successfully killed the transaction.
+          content:
+            application/json: {}
+        "404":
+          description: Transaction not found.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+        "409":
+          description: Transaction is in an illegal state.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Problem'
+components:
+  schemas:
+    ClusterNode:
+      type: object
+      properties:
+        id:
+          type: string
+          description: Node ID.
+          format: uuid
+        name:
+          type: string
+          description: Unique cluster name.
+        address:
+          allOf:
+          - $ref: '#/components/schemas/NetworkAddress'
+          - description: Cluster network address information.
+        metadata:
+          allOf:
+          - $ref: '#/components/schemas/NodeMetadata'
+          - description: Node metadata information.
+      description: Information about the cluster node.
+    ClusterState:
+      type: object
+      properties:
+        cmgNodes:
+          type: array
+          description: List of cluster management group nodes. These nodes are 
responsible
+            for maintaining RAFT cluster topology.
+          items:
+            type: string
+        msNodes:
+          type: array
+          description: List of metastorage nodes. These nodes are responsible 
for
+            storing RAFT cluster metadata.
+          items:
+            type: string
+        igniteVersion:
+          type: string
+          description: Version of Apache Ignite that the cluster was created 
on.
+        clusterTag:
+          allOf:
+          - $ref: '#/components/schemas/ClusterTag'
+          - description: Unique tag that identifies the cluster.
+        formerClusterIds:
+          type: array
+          description: IDs the cluster had before.
+          nullable: true
+          items:
+            type: string
+            format: uuid
+      description: Information about current cluster state.
+    ClusterTag:
+      type: object
+      properties:
+        clusterId:
+          type: string
+          description: Unique cluster UUID. Generated automatically.
+          format: uuid
+        clusterName:
+          type: string
+          description: Unique cluster name.
+      description: Unique tag that identifies the cluster.
+    DeploymentStatus:
+      type: string
+      description: Status of deployment process.
+      enum:
+      - UPLOADING
+      - DEPLOYED
+      - OBSOLETE
+      - REMOVING
+    GlobalPartitionStateResponse:
+      required:
+      - partitionId
+      - schemaName
+      - state
+      - tableId
+      - tableName
+      - zoneName
+      type: object
+      properties:
+        partitionId:
+          type: integer
+          format: int32
+        zoneName:
+          type: string
+        tableId:
+          type: integer
+          format: int32
+        schemaName:
+          type: string
+        tableName:
+          type: string
+        state:
+          type: string
+      description: Information about global partition state.
+    GlobalPartitionStatesResponse:
+      type: object
+      properties:
+        states:
+          type: array
+          items:
+            $ref: '#/components/schemas/GlobalPartitionStateResponse'
+      description: Information about global partition states.
+    GlobalZonePartitionStateResponse:
+      required:
+      - partitionId
+      - state
+      - zoneName
+      type: object
+      properties:
+        partitionId:
+          type: integer
+          format: int32
+        zoneName:
+          type: string
+        state:
+          type: string
+      description: Information about global zone partition state.
+    GlobalZonePartitionStatesResponse:
+      type: object
+      properties:
+        states:
+          type: array
+          items:
+            $ref: '#/components/schemas/GlobalZonePartitionStateResponse'
+      description: Information about global zone partition states.
+    InitCommand:
+      type: object
+      properties:
+        metaStorageNodes:
+          type: array
+          description: A list of RAFT metastorage nodes.
+          items:
+            type: string
+        cmgNodes:
+          type: array
+          description: A list of RAFT cluster management nodes.
+          items:
+            type: string
+        clusterName:
+          type: string
+          description: The name of the cluster.
+        clusterConfiguration:
+          type: string
+          description: Cluster configuration in HOCON format.
+      description: Cluster initialization configuration.
+    InvalidParam:
+      type: object
+      properties:
+        name:
+          type: string
+          description: Parameter name.
+        reason:
+          type: string
+          description: The issue with the parameter.
+      description: Information about invalid request parameter.
+    JobState:
+      required:
+      - createTime
+      - id
+      - status
+      type: object
+      properties:
+        id:
+          type: string
+          description: Job ID.
+          format: uuid
+        status:
+          description: Job status.
+          allOf:
+          - $ref: '#/components/schemas/JobStatus'
+          - {}
+        createTime:
+          type: string
+          description: Job create time.
+          format: date-time
+        startTime:
+          type: string
+          description: Job start time.
+          format: date-time
+          nullable: true
+        finishTime:
+          type: string
+          description: Job finish time.
+          format: date-time
+          nullable: true
+      description: Rest representation of org.apache.ignite.compute.JobState.
+    JobStatus:
+      type: string
+      description: Job status.
+      enum:
+      - QUEUED
+      - EXECUTING
+      - FAILED
+      - COMPLETED
+      - CANCELING
+      - CANCELED
+    LocalPartitionStateResponse:
+      required:
+      - estimatedRows
+      - nodeName
+      - partitionId
+      - schemaName
+      - state
+      - tableId
+      - tableName
+      - zoneName
+      type: object
+      properties:
+        partitionId:
+          type: integer
+          format: int32
+        zoneName:
+          type: string
+        tableId:
+          type: integer
+          format: int32
+        schemaName:
+          type: string
+        tableName:
+          type: string
+        nodeName:
+          type: string
+        state:
+          type: string
+        estimatedRows:
+          type: integer
+          format: int64
+      description: Information about local partition state.
+    LocalPartitionStatesResponse:
+      type: object
+      properties:
+        states:
+          type: array
+          items:
+            $ref: '#/components/schemas/LocalPartitionStateResponse'
+      description: Information about local partition states.
+    LocalZonePartitionStateResponse:
+      required:
+      - estimatedRows
+      - nodeName
+      - partitionId
+      - state
+      - zoneName
+      type: object
+      properties:
+        partitionId:
+          type: integer
+          format: int32
+        zoneName:
+          type: string
+        nodeName:
+          type: string
+        state:
+          type: string
+        estimatedRows:
+          type: integer
+          format: int64
+      description: Information about local zone partition state.
+    LocalZonePartitionStatesResponse:
+      type: object
+      properties:
+        states:
+          type: array
+          items:
+            $ref: '#/components/schemas/LocalZonePartitionStateResponse'
+      description: Information about local zone partition states.
+    Metric:
+      type: object
+      properties:
+        name:
+          type: string
+          description: Metric name.
+        desc:
+          type: string
+          description: Metric description.
+          nullable: true
+      description: Metric representation.
+    MetricSet:
+      required:
+      - metrics
+      - name
+      type: object
+      properties:
+        name:
+          type: string
+          description: Metric set name.
+        metrics:
+          type: array
+          description: Metrics.
+          items:
+            $ref: '#/components/schemas/Metric'
+      description: Metrics set representation.
+    MetricSource:
+      required:
+      - enabled
+      - name
+      type: object
+      properties:
+        name:
+          type: string
+          description: Metric source name.
+        enabled:
+          type: boolean
+          description: "If True, the metric is tracked. Otherwise, the metric 
is not\
+            \ tracked."
+      description: A list of metric sources provided by modules.
+    MigrateRequest:
+      type: object
+      properties:
+        cmgNodes:
+          type: array
+          description: Names of the CMG node names.
+          items:
+            type: string
+        metaStorageNodes:
+          type: array
+          description: Names of the Metastorage node names.
+          items:
+            type: string
+        version:
+          type: string
+          description: Ignite version.
+        clusterId:
+          type: string
+          description: ID of the cluster.
+          format: uuid
+        clusterName:
+          type: string
+          description: Name of the cluster.
+        formerClusterIds:
+          type: array
+          description: "IDs the cluster had before. If CMG/Metastorage group 
were\
+            \ never repaired, this is null."
+          nullable: true
+          items:
+            type: string
+            format: uuid
+      description: Migrate nodes to new cluster.
+    NetworkAddress:
+      type: object
+      properties:
+        host:
+          type: string
+          description: Name of the host node runs on.
+        port:
+          type: integer
+          description: Port the node runs on.
+          format: int32
+      description: Node network address information.
+    NodeInfo:
+      required:
+      - jdbcPort
+      - name
+      type: object
+      properties:
+        name:
+          type: string
+          description: Unique node name.
+        jdbcPort:
+          type: integer
+          description: Node JDBC port.
+          format: int32
+      description: Node info.
+    NodeMetadata:
+      type: object
+      properties:
+        restHost:
+          type: string
+          description: The host exposed to REST API.
+        httpPort:
+          type: integer
+          description: The HTTP port exposed to REST API.
+          format: int32
+        httpsPort:
+          type: integer
+          description: The HTTPS port exposed to REST API.
+          format: int32
+      description: Node metadata information.
+    NodeMetricSources:
+      required:
+      - node
+      - sources
+      type: object
+      properties:
+        node:
+          type: string
+          description: Consistent id of the node.
+        sources:
+          type: array
+          description: Metric sources.
+          items:
+            $ref: '#/components/schemas/MetricSource'
+      description: A list of metric sources for a node.
+    NodeState:
+      required:
+      - name
+      - state
+      type: object
+      properties:
+        name:
+          type: string
+          description: Unique node name.
+        state:
+          allOf:
+          - $ref: '#/components/schemas/State'
+          - description: Node state.
+      description: Node state.
+    NodeVersion:
+      required:
+      - product
+      - version
+      type: object
+      properties:
+        version:
+          type: string
+          description: Node version.
+        product:
+          type: string
+          description: Node product.
+      description: Node version.
+    Problem:
+      type: object
+      properties:
+        title:
+          type: string
+          description: Short summary of the issue.
+        status:
+          type: integer
+          description: Returned HTTP status code.
+          format: int32
+        code:
+          type: string
+          description: Ignite 3 error code.
+        type:
+          type: string
+          description: URI to documentation regarding the issue.
+        detail:
+          type: string
+          description: Extended explanation of the issue.
+        node:
+          type: string
+          description: Name of the node the issue happened on.
+        traceId:
+          type: string
+          description: Unique issue identifier. This identifier can be used to 
find
+            logs related to the issue.
+          format: uuid
+        invalidParams:
+          type: array
+          description: A list of parameters that did not pass validation and 
the reason
+            for it.
+          items:
+            $ref: '#/components/schemas/InvalidParam'
+      description: Extended description of the problem with the request.
+    ResetClusterRequest:
+      type: object
+      properties:
+        cmgNodeNames:
+          type: array
+          description: "Names of the proposed CMG nodes. Optional if the MG 
group\
+            \ is being repaired. If not specified, the current CMG nodes are 
used."
+          nullable: true
+          items:
+            type: string
+        metastorageReplicationFactor:
+          type: integer
+          description: Number of nodes in the voting member set of the 
Metastorage
+            RAFT group.
+          format: int32
+          nullable: true
+      description: Reset cluster.
+    ResetPartitionsRequest:
+      type: object
+      properties:
+        zoneName:
+          type: string
+          description: "Name of the zone to reset partitions of. Without 
quotes, case-sensitive."
+        partitionIds:
+          type: array
+          description: IDs of partitions to reset. All if empty.
+          items:
+            type: integer
+            format: int32
+        tableName:
+          type: string
+          description: "Fully-qualified name of the table to reset partitions 
of.\
+            \ Without quotes, case-sensitive."
+      description: Reset partitions configuration.
+    ResetZonePartitionsRequest:
+      type: object
+      properties:
+        zoneName:
+          type: string
+          description: "Name of the zone to reset partitions of. Without 
quotes, case-sensitive."
+        partitionIds:
+          type: array
+          description: IDs of partitions to reset. All if empty.
+          items:
+            type: integer
+            format: int32
+      description: Reset zone partitions configuration.
+    RestartPartitionsRequest:
+      type: object
+      properties:
+        nodeNames:
+          type: array
+          description: "Names specifying nodes to restart partitions. 
Case-sensitive.\
+            \ If empty/omitted, partitions on all nodes are restarted."
+          items:
+            type: string
+        zoneName:
+          type: string
+          description: "Name of the zone to restart partitions of. Without 
quotes,\
+            \ case-sensitive."
+        partitionIds:
+          type: array
+          description: "IDs of partitions to restart. If empty/omitted, all 
partitions\
+            \ will be restarted."
+          items:
+            type: integer
+            format: int32
+        tableName:
+          type: string
+          description: Fully-qualified name of the table to restart partitions 
of.
+      description: restart partitions configuration.
+    RestartZonePartitionsRequest:
+      type: object
+      properties:
+        nodeNames:
+          type: array
+          description: "Names specifying nodes to restart zone partitions. 
Case-sensitive.\
+            \ If empty/omitted, partitions on all nodes are restarted."
+          items:
+            type: string
+        zoneName:
+          type: string
+          description: "Name of the zone to restart partitions of. Without 
quotes,\
+            \ case-sensitive."
+        partitionIds:
+          type: array
+          description: "IDs of partitions to restart. If empty/omitted, all 
partitions\
+            \ will be restarted."
+          items:
+            type: integer
+            format: int32
+      description: restart partitions configuration.
+    SqlQuery:
+      required:
+      - id
+      - node
+      - phase
+      - schema
+      - sql
+      - startTime
+      - type
+      type: object
+      properties:
+        id:
+          type: string
+          description: Sql query ID.
+          format: uuid
+        node:
+          type: string
+          description: Initiator node.
+        phase:
+          type: string
+          description: Phase.
+        type:
+          type: string
+          description: Type.
+        schema:
+          type: string
+          description: Schema.
+        sql:
+          type: string
+          description: SQL statement.
+        startTime:
+          type: string
+          description: Start time.
+          format: date-time
+      description: Rest representation of sql query.
+    State:
+      type: string
+      description: Possible node states.
+      enum:
+      - STARTING
+      - STARTED
+      - STOPPING
+    Transaction:
+      required:
+      - id
+      - node
+      - priority
+      - startTime
+      - state
+      - type
+      type: object
+      properties:
+        id:
+          type: string
+          description: Transaction ID.
+          format: uuid
+        node:
+          type: string
+          description: Coordinator node.
+        state:
+          type: string
+          description: State.
+        type:
+          type: string
+          description: Type.
+        priority:
+          type: string
+          description: Priority.
+        startTime:
+          type: string
+          description: Start time.
+          format: date-time
+      description: Rest representation of transaction.
+    UnitStatus:
+      required:
+      - id
+      - versionToStatus
+      type: object
+      properties:
+        id:
+          type: string
+          description: Unit identifier.
+        versionToStatus:
+          type: array
+          description: Map from unit version to unit deployment status.
+          items:
+            $ref: '#/components/schemas/UnitVersionStatus'
+      description: Unit status.
+    UnitVersionStatus:
+      required:
+      - status
+      - version
+      type: object
+      properties:
+        version:
+          type: string
+          description: Unit version.
+        status:
+          allOf:
+          - $ref: '#/components/schemas/DeploymentStatus'
+          - description: Unit status.
+      description: Unit version and status.
+    UpdateJobPriorityBody:
+      required:
+      - priority
+      type: object
+      properties:
+        priority:
+          type: integer
+          description: Priority.
+          format: int32
+      description: DTO of update job priority request body.
+    deployMode:
+      type: string
+      description: Initial set of nodes to deploy.
+      enum:
+      - MAJORITY
+      - ALL
+  securitySchemes:
+    basicAuth:
+      type: http
+      scheme: basic
diff --git 
a/modules/compatibility-tests/src/testFixtures/resources/igniteVersions.json 
b/modules/compatibility-tests/src/testFixtures/resources/igniteVersions.json
index 54c3d59bc4f..da56b3dc040 100644
--- a/modules/compatibility-tests/src/testFixtures/resources/igniteVersions.json
+++ b/modules/compatibility-tests/src/testFixtures/resources/igniteVersions.json
@@ -18,6 +18,9 @@
   "versions": [
     {
       "version": "3.0.0"
+    },
+    {
+      "version": "3.1.0"
     }
   ]
-}
+}
\ No newline at end of file
diff --git 
a/modules/runner/src/test/resources/compatibility/configuration/ignite-3.1.0.bin
 
b/modules/runner/src/test/resources/compatibility/configuration/ignite-3.1.0.bin
new file mode 100644
index 00000000000..04a739bc4a8
Binary files /dev/null and 
b/modules/runner/src/test/resources/compatibility/configuration/ignite-3.1.0.bin
 differ


Reply via email to