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