This is an automated email from the ASF dual-hosted git repository.
rpuch 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 b33e8de566b IGNITE-26826 Move aipersist and metastorage compatibility
test's jobs to "jobs" submodule (#6846)
b33e8de566b is described below
commit b33e8de566bafdb3908f469955556e98da3300f2
Author: Phillippko <[email protected]>
AuthorDate: Fri Oct 24 18:16:55 2025 +0400
IGNITE-26826 Move aipersist and metastorage compatibility test's jobs to
"jobs" submodule (#6846)
---
modules/compatibility-tests/jobs.gradle | 6 +++
.../internal/MetastorageRaftCompatibilityTest.java | 29 +++++-------
.../internal/PersistentCompatibilityTest.java | 13 +++---
.../ignite/internal/client/DeploymentUtils.java | 5 +-
.../ignite/internal/compute}/CheckpointJob.java | 7 +--
.../SendAllMetastorageCommandTypesJob.java | 10 ++--
.../ignite/internal/CompatibilityTestBase.java | 6 +++
.../ignite/internal/CompatibilityTestCommon.java | 53 ----------------------
8 files changed, 42 insertions(+), 87 deletions(-)
diff --git a/modules/compatibility-tests/jobs.gradle
b/modules/compatibility-tests/jobs.gradle
index 8697193e40d..ad765ec42e8 100644
--- a/modules/compatibility-tests/jobs.gradle
+++ b/modules/compatibility-tests/jobs.gradle
@@ -39,6 +39,12 @@ processIntegrationTestResources {
dependencies {
jobsImplementation project(':ignite-api')
jobsImplementation project(':ignite-core')
+ jobsImplementation project(':ignite-runner')
+ jobsImplementation project(':ignite-metastorage-api')
+ jobsImplementation project(':ignite-metastorage')
+ jobsImplementation project(':ignite-page-memory')
+ jobsImplementation project(':ignite-storage-api')
+ jobsImplementation project(':ignite-storage-page-memory')
integrationTestImplementation sourceSets.jobs.output
}
diff --git
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/MetastorageRaftCompatibilityTest.java
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/MetastorageRaftCompatibilityTest.java
index 49a9929b498..901db710480 100644
---
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/MetastorageRaftCompatibilityTest.java
+++
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/MetastorageRaftCompatibilityTest.java
@@ -17,25 +17,25 @@
package org.apache.ignite.internal;
+import static
org.apache.ignite.internal.AssignmentsTestUtils.awaitAssignmentsStabilization;
import static
org.apache.ignite.internal.CompatibilityTestCommon.TABLE_NAME_TEST;
import static
org.apache.ignite.internal.CompatibilityTestCommon.createDefaultTables;
import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl;
-import static
org.apache.ignite.internal.lang.IgniteSystemProperties.COLOCATION_FEATURE_FLAG;
+import static
org.apache.ignite.internal.client.ClientCompatibilityTests.JOBS_UNIT;
import static
org.apache.ignite.internal.testframework.IgniteTestUtils.waitForCondition;
import static org.junit.jupiter.api.Assertions.assertTrue;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
-import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import org.apache.ignite.Ignite;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.compute.JobDescriptor;
import org.apache.ignite.compute.JobTarget;
-import org.apache.ignite.deployment.DeploymentUnit;
+import org.apache.ignite.internal.client.DeploymentUtils;
+import org.apache.ignite.internal.compute.SendAllMetastorageCommandTypesJob;
import org.apache.ignite.internal.configuration.ComponentWorkingDir;
import org.apache.ignite.internal.metastorage.MetaStorageManager;
-import org.apache.ignite.internal.testframework.WithSystemProperty;
import org.apache.ignite.internal.util.IgniteUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
@@ -46,8 +46,6 @@ import org.junit.jupiter.params.provider.MethodSource;
@ParameterizedClass
@MethodSource("baseVersions")
@MicronautTest(rebuildContext = true)
-// Old version node starts with disabled colocation. New version nodes that
start from scratch would fail to join cluster.
-@WithSystemProperty(key = COLOCATION_FEATURE_FLAG, value = "false")
public class MetastorageRaftCompatibilityTest extends CompatibilityTestBase {
@Override
protected boolean restartWithCurrentEmbeddedVersion() {
@@ -61,17 +59,13 @@ public class MetastorageRaftCompatibilityTest extends
CompatibilityTestBase {
@Override
protected void setupBaseVersion(Ignite baseIgnite) {
+ DeploymentUtils.deployJobs();
+
createDefaultTables(baseIgnite);
Path nodeWorkDir = cluster.runnerNodeWorkDir(0);
- try {
- deploySendAllMetastorageCommandTypesJob();
-
- runSendAllMetastorageCommandTypesJob();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
+ runSendAllMetastorageCommandTypesJob();
cluster.stop();
@@ -95,6 +89,8 @@ public class MetastorageRaftCompatibilityTest extends
CompatibilityTestBase {
void testStreamToFollower() throws InterruptedException {
cluster.startEmbedded(2);
+ awaitAssignmentsStabilization(node(0), TABLE_NAME_TEST);
+
checkMetastorage();
MetaStorageManager newNodeMetastorage =
unwrapIgniteImpl(cluster.node(1)).metaStorageManager();
@@ -117,14 +113,11 @@ public class MetastorageRaftCompatibilityTest extends
CompatibilityTestBase {
assertTrue(IgniteUtils.deleteIfExists(metastorageDbDir));
}
- private <T, R> void deploySendAllMetastorageCommandTypesJob() throws
IOException {
-
CompatibilityTestCommon.deployJob(SendAllMetastorageCommandTypesJob.class,
workDir, deploymentClient);
- }
-
private void runSendAllMetastorageCommandTypesJob() {
try (IgniteClient client = cluster.createClient()) {
JobDescriptor<String, Void> job =
JobDescriptor.builder(SendAllMetastorageCommandTypesJob.class)
- .units(new
DeploymentUnit(SendAllMetastorageCommandTypesJob.class.getName(),
"1.0.0")).build();
+ .units(JOBS_UNIT)
+ .build();
JobTarget jobTarget = JobTarget.anyNode(client.cluster().nodes());
diff --git
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/PersistentCompatibilityTest.java
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/PersistentCompatibilityTest.java
index 1c790cb96c4..1b1d78f2cba 100644
---
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/PersistentCompatibilityTest.java
+++
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/PersistentCompatibilityTest.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal;
+import static
org.apache.ignite.internal.client.ClientCompatibilityTests.JOBS_UNIT;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -27,7 +28,8 @@ import org.apache.ignite.Ignite;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.compute.JobDescriptor;
import org.apache.ignite.compute.JobTarget;
-import org.apache.ignite.deployment.DeploymentUnit;
+import org.apache.ignite.internal.client.DeploymentUtils;
+import org.apache.ignite.internal.compute.CheckpointJob;
import org.apache.ignite.internal.lang.IgniteSystemProperties;
import org.apache.ignite.internal.testframework.WithSystemProperty;
import org.apache.ignite.tx.Transaction;
@@ -97,7 +99,7 @@ public class PersistentCompatibilityTest extends
CompatibilityTestBase {
@Override
protected void setupBaseVersion(Ignite baseIgnite) {
try {
- deployCheckpointJob();
+ DeploymentUtils.deployJobs();
createAndPopulateTable(baseIgnite, TABLE_WITHOUT_DELTA_FILES);
createAndPopulateTable(baseIgnite, TABLE_WITH_DELTA_FILES);
@@ -176,7 +178,8 @@ public class PersistentCompatibilityTest extends
CompatibilityTestBase {
private void doCheckpoint(boolean cancelCompaction) {
try (IgniteClient client = cluster.createClient()) {
JobDescriptor<Boolean, Void> job =
JobDescriptor.builder(CheckpointJob.class)
- .units(new DeploymentUnit(CheckpointJob.class.getName(),
"1.0.0")).build();
+ .units(JOBS_UNIT)
+ .build();
JobTarget jobTarget = JobTarget.anyNode(client.cluster().nodes());
@@ -184,10 +187,6 @@ public class PersistentCompatibilityTest extends
CompatibilityTestBase {
}
}
- private <T, R> void deployCheckpointJob() throws IOException {
- CompatibilityTestCommon.deployJob(CheckpointJob.class, workDir,
deploymentClient);
- }
-
private static void insertRow(Ignite baseIgnite, String tableName, int id,
String name) {
sql(baseIgnite, "INSERT INTO " + tableName + " (id, name) VALUES (?,
?)", id, name);
}
diff --git
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/DeploymentUtils.java
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/DeploymentUtils.java
index d1ca16f3cf4..36735315580 100644
---
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/DeploymentUtils.java
+++
b/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/client/DeploymentUtils.java
@@ -33,8 +33,9 @@ import org.apache.ignite.rest.client.model.DeployMode;
/**
* Utility class for deploying jobs.
*/
-class DeploymentUtils {
- static void deployJobs() {
+public class DeploymentUtils {
+ /** Deploys all jobs in the module. */
+ public static void deployJobs() {
File jobsJar = Path.of(
getResourcePath(ClientCompatibilityTests.class, ""),
"../../../libs/ignite-integration-test-jobs-1.0-SNAPSHOT.jar").toFile();
diff --git
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/CheckpointJob.java
b/modules/compatibility-tests/src/jobs/java/org/apache/ignite/internal/compute/CheckpointJob.java
similarity index 96%
rename from
modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/CheckpointJob.java
rename to
modules/compatibility-tests/src/jobs/java/org/apache/ignite/internal/compute/CheckpointJob.java
index f99ed2e7225..d0a6c65acdb 100644
---
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/CheckpointJob.java
+++
b/modules/compatibility-tests/src/jobs/java/org/apache/ignite/internal/compute/CheckpointJob.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.ignite.internal;
+package org.apache.ignite.internal.compute;
import static java.lang.Thread.sleep;
import static org.apache.ignite.internal.wrapper.Wrappers.unwrapNullable;
@@ -35,12 +35,13 @@ import
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorage
import org.apache.ignite.internal.wrapper.Wrappers;
/** A job that forces a checkpoint and optionally cancels the compaction
process on the node. */
-class CheckpointJob implements ComputeJob<Boolean, Void> {
+public class CheckpointJob implements ComputeJob<Boolean, Void> {
@Override
public CompletableFuture<Void> executeAsync(JobExecutionContext context,
Boolean shouldCancelCompaction) {
- IgniteImpl igniteImpl = Wrappers.unwrap(context.ignite(),
IgniteImpl.class);
try {
+ IgniteImpl igniteImpl = Wrappers.unwrap(context.ignite(),
IgniteImpl.class);
+
CheckpointManager checkpointManager =
checkpointManager(igniteImpl);
if (shouldCancelCompaction) {
diff --git
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/SendAllMetastorageCommandTypesJob.java
b/modules/compatibility-tests/src/jobs/java/org/apache/ignite/internal/compute/SendAllMetastorageCommandTypesJob.java
similarity index 89%
rename from
modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/SendAllMetastorageCommandTypesJob.java
rename to
modules/compatibility-tests/src/jobs/java/org/apache/ignite/internal/compute/SendAllMetastorageCommandTypesJob.java
index e2c255990b1..a42cc12aa97 100644
---
a/modules/compatibility-tests/src/integrationTest/java/org/apache/ignite/internal/SendAllMetastorageCommandTypesJob.java
+++
b/modules/compatibility-tests/src/jobs/java/org/apache/ignite/internal/compute/SendAllMetastorageCommandTypesJob.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.ignite.internal;
+package org.apache.ignite.internal.compute;
import static java.util.concurrent.CompletableFuture.allOf;
import static org.apache.ignite.internal.metastorage.dsl.Conditions.exists;
@@ -36,12 +36,13 @@ import
org.apache.ignite.internal.metastorage.impl.MetaStorageManagerImpl;
import org.apache.ignite.internal.wrapper.Wrappers;
/** A job that runs different MetastorageWriteCommands. */
-class SendAllMetastorageCommandTypesJob implements ComputeJob<String, Void> {
+public class SendAllMetastorageCommandTypesJob implements ComputeJob<String,
Void> {
@Override
public CompletableFuture<Void> executeAsync(JobExecutionContext context,
String arg) {
- IgniteImpl igniteImpl = Wrappers.unwrap(context.ignite(),
IgniteImpl.class);
try {
+ IgniteImpl igniteImpl = Wrappers.unwrap(context.ignite(),
IgniteImpl.class);
+
byte[] value = "value".getBytes();
MetaStorageManagerImpl metastorage = (MetaStorageManagerImpl)
igniteImpl.metaStorageManager();
@@ -53,7 +54,8 @@ class SendAllMetastorageCommandTypesJob implements
ComputeJob<String, Void> {
metastorage.removeAll(Set.of(ByteArray.fromString("removeAll"))),
metastorage.removeByPrefix(ByteArray.fromString("removeByPrefix")),
metastorage.invoke(exists(ByteArray.fromString("key")),
noop(), noop()),
-
metastorage.invoke(iif(exists(ByteArray.fromString("key")), ops().yield(),
ops().yield())),
+ metastorage.invoke(
+ iif(exists(ByteArray.fromString("key")),
ops().yield(), ops().yield())),
metastorage.evictIdempotentCommandsCache(HybridTimestamp.MAX_VALUE),
sendCompactionCommand(metastorage)
);
diff --git
a/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestBase.java
b/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestBase.java
index b1f6cf880d5..57b37983812 100644
---
a/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestBase.java
+++
b/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestBase.java
@@ -21,6 +21,7 @@ import static
org.apache.ignite.internal.TestDefaultProfilesNames.DEFAULT_AIMEM_
import static
org.apache.ignite.internal.TestDefaultProfilesNames.DEFAULT_AIPERSIST_PROFILE_NAME;
import static
org.apache.ignite.internal.TestDefaultProfilesNames.DEFAULT_ROCKSDB_PROFILE_NAME;
import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl;
+import static
org.apache.ignite.internal.lang.IgniteSystemProperties.COLOCATION_FEATURE_FLAG;
import static
org.apache.ignite.internal.testframework.flow.TestFlowUtils.subscribeToList;
import static
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willBe;
import static org.awaitility.Awaitility.await;
@@ -39,6 +40,7 @@ import java.util.stream.Collectors;
import org.apache.ignite.Ignite;
import org.apache.ignite.InitParametersBuilder;
import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.deployment.version.Version;
import org.apache.ignite.internal.app.IgniteImpl;
import org.apache.ignite.internal.distributionzones.rebalance.RebalanceUtil;
import
org.apache.ignite.internal.distributionzones.rebalance.ZoneRebalanceUtil;
@@ -122,6 +124,10 @@ public abstract class CompatibilityTestBase extends
BaseIgniteAbstractTest {
setupBaseVersion(client);
}
+ boolean shouldEnableColocation =
Version.parseVersion(baseVersion).compareTo(Version.parseVersion("3.1")) >= 0;
+
+ System.setProperty(COLOCATION_FEATURE_FLAG,
String.valueOf(shouldEnableColocation));
+
if (restartWithCurrentEmbeddedVersion()) {
cluster.stop();
diff --git
a/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestCommon.java
b/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestCommon.java
index f5c10891cc1..69b8e9b1825 100644
---
a/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestCommon.java
+++
b/modules/compatibility-tests/src/testFixtures/java/org/apache/ignite/internal/CompatibilityTestCommon.java
@@ -17,27 +17,9 @@
package org.apache.ignite.internal;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-
-import io.micronaut.http.HttpRequest;
-import io.micronaut.http.HttpResponse;
-import io.micronaut.http.HttpStatus;
-import io.micronaut.http.MediaType;
-import io.micronaut.http.MutableHttpRequest;
-import io.micronaut.http.client.HttpClient;
-import io.micronaut.http.client.multipart.MultipartBody;
-import io.micronaut.http.client.multipart.MultipartBody.Builder;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarOutputStream;
import org.apache.ignite.Ignite;
import org.apache.ignite.sql.SqlRow;
import org.jetbrains.annotations.Nullable;
@@ -103,39 +85,4 @@ public class CompatibilityTestCommon {
return cursor.wasApplied();
}
}
-
- /** Deploys class to the cluster using the given deployment client. */
- public static void deployJob(Class<?> clazz, Path workDir, HttpClient
deploymentClient) throws IOException {
- Path jarFile = createJar(clazz, workDir);
-
- HttpResponse<Object> deploy = deploy(clazz.getName(), "1.0.0",
jarFile.toFile(), deploymentClient);
- assertThat(deploy.status(), is(HttpStatus.OK));
-
- }
-
- private static Path createJar(Class<?> clazz, Path workDir) throws
IOException {
- String resource = clazz.getName().replace('.', '/') + ".class";
- Path path =
Path.of(clazz.getClassLoader().getResource(resource).getPath());
- Path jarFile = Files.createFile(workDir.resolve(clazz.getName() +
".jar"));
-
- try (FileOutputStream fos = new FileOutputStream(jarFile.toFile());
JarOutputStream jos = new JarOutputStream(fos)) {
- JarEntry entry = new JarEntry(resource);
- jos.putNextEntry(entry);
- Files.copy(path, jos);
- jos.closeEntry();
- }
-
- return jarFile;
- }
-
- private static HttpResponse<Object> deploy(String id, String version, File
file, HttpClient deploymentClient) {
- Builder builder = MultipartBody.builder();
- builder.addPart("unitContent", file);
- MultipartBody body = builder.build();
-
- MutableHttpRequest<MultipartBody> post = HttpRequest.POST("units/" +
id + "/" + version, body)
- .contentType(MediaType.MULTIPART_FORM_DATA);
-
- return deploymentClient.toBlocking().exchange(post);
- }
}