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);
-    }
 }

Reply via email to