This is an automated email from the ASF dual-hosted git repository.
av pushed a commit to branch ignite-ducktape
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-ducktape by this push:
new cdb395b IGNITE-14701 Simple PDS upgrade test (#9093)
cdb395b is described below
commit cdb395b1543e696b242b6f7ef3087b29fec8eecf
Author: Anton Vinogradov <[email protected]>
AuthorDate: Thu May 13 17:29:43 2021 +0300
IGNITE-14701 Simple PDS upgrade test (#9093)
---
.../compatibility/PdsCompatiblityApplication.java | 107 ------------------
.../DataLoaderAndCheckerApplication.java | 121 +++++++++++++++++++++
.../ignitetest/tests/compatibility/__init__.py | 18 ---
.../tests/compatibility/pds_compatibility_test.py | 98 -----------------
.../ignitetest/tests/persistence_upgrade_test.py | 66 +++++++++++
.../ducktests/tests/ignitetest/utils/version.py | 1 +
6 files changed, 188 insertions(+), 223 deletions(-)
diff --git
a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/compatibility/PdsCompatiblityApplication.java
b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/compatibility/PdsCompatiblityApplication.java
deleted file mode 100644
index b2d1116..0000000
---
a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/compatibility/PdsCompatiblityApplication.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.ducktest.tests.compatibility;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.ducktest.utils.IgniteAwareApplication;
-
-/**
- * Simple application that have 2 options.
- * "load" - load some predefined data to cache.
- * "check" - check if we have that predifined data in that cache.
- */
-public class PdsCompatiblityApplication extends IgniteAwareApplication {
- /** Predefined test data. */
- private static List<User> users = Arrays.asList(
- new User(0, "John Connor"),
- new User(1, "Sarah Connor"),
- new User(2, "Kyle Reese"));
-
- /** {@inheritDoc} */
- @Override protected void run(JsonNode jsonNode) throws
IgniteCheckedException {
- String operation = jsonNode.get("operation").asText();
-
- markInitialized();
-
- IgniteCache<Integer, User> cache = ignite.getOrCreateCache("users");
-
- switch (operation) {
- case "load":
- for (int i = 0; i < users.size(); i++)
- cache.put(i, users.get(i));
-
- break;
-
- case "check":
- for (int i = 0; i < users.size(); i++)
- assert cache.get(i).equals(users.get(i));
-
- break;
-
- default:
- throw new IgniteCheckedException("Unknown operation: " +
operation + ".");
- }
-
- markFinished();
- }
-
- /**
- * Data model class, which instances used as cache entry values.
- */
- private static class User {
- /** */
- private Integer id;
-
- /** */
- private String fullName;
-
- /**
- * @param id user id.
- * @param fullName user full name.
- */
- public User(Integer id, String fullName) {
- this.id = id;
- this.fullName = fullName;
- }
-
- /** {@inheritDoc} */
- @Override public boolean equals(Object o) {
- if (this == o)
- return true;
-
- if (o == null || getClass() != o.getClass())
- return false;
-
- User person = (User)o;
-
- return Objects.equals(id, person.id) &&
- Objects.equals(fullName, person.fullName);
- }
-
- /** {@inheritDoc} */
- @Override public int hashCode() {
- return Objects.hash(id, fullName);
- }
- }
-}
diff --git
a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/persistence_upgrade_test/DataLoaderAndCheckerApplication.java
b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/persistence_upgrade_test/DataLoaderAndCheckerApplication.java
new file mode 100644
index 0000000..11d8e70
--- /dev/null
+++
b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/persistence_upgrade_test/DataLoaderAndCheckerApplication.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.ducktest.tests.persistence_upgrade_test;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.internal.IgniteInterruptedCheckedException;
+import org.apache.ignite.internal.ducktest.utils.IgniteAwareApplication;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+/**
+ * Loads/checks the data.
+ */
+public class DataLoaderAndCheckerApplication extends IgniteAwareApplication {
+ /** {@inheritDoc} */
+ @Override public void run(JsonNode jNode) throws
IgniteInterruptedCheckedException {
+ boolean check = jNode.get("check").asBoolean();
+
+ markInitialized();
+ waitForActivation();
+
+ CacheConfiguration<Integer, CustomObject> cacheCfg = new
CacheConfiguration<>("cache");
+
+ IgniteCache<Integer, CustomObject> cache =
ignite.getOrCreateCache(cacheCfg);
+
+ log.info(check ? "Checking..." : " Preparing...");
+
+ for (int i = 0; i < 10_000; i++) {
+ CustomObject obj = new CustomObject(i);
+
+ if (!check)
+ cache.put(i, obj);
+ else
+ assert cache.get(i).equals(obj);
+ }
+
+ log.info(check ? "Checked." : " Prepared.");
+
+ while (!terminated())
+ U.sleep(100); // Keeping node alive.
+
+ markFinished();
+ }
+
+ /**
+ *
+ */
+ private static class CustomObject {
+ /** String value. */
+ private final String sVal;
+
+ /** Integer value. */
+ private final Integer iVal;
+
+ /** Boolean value. */
+ private final Boolean bVal;
+
+ /** char value. */
+ private final char cVal;
+
+ /** Integer array value. */
+ private final Integer[] iArVal;
+
+ /** Integer List. */
+ private final List<Integer> iLiVal;
+
+ /**
+ * @param idx Index.
+ */
+ public CustomObject(int idx) {
+ sVal = String.valueOf(idx);
+ iVal = idx;
+ bVal = idx % 2 == 0;
+ cVal = sVal.charAt(0);
+ iArVal = new Integer[] {idx, idx * 2, idx * idx};
+ iLiVal = Arrays.asList(iArVal);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+ CustomObject obj = (CustomObject)o;
+ return cVal == obj.cVal
+ && Objects.equals(sVal, obj.sVal)
+ && Objects.equals(iVal, obj.iVal)
+ && Objects.equals(bVal, obj.bVal)
+ && Arrays.equals(iArVal, obj.iArVal)
+ && Objects.equals(iLiVal, obj.iLiVal);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ int result = Objects.hash(sVal, iVal, bVal, cVal, iLiVal);
+ result = 31 * result + Arrays.hashCode(iArVal);
+ return result;
+ }
+ }
+
+}
diff --git a/modules/ducktests/tests/ignitetest/tests/compatibility/__init__.py
b/modules/ducktests/tests/ignitetest/tests/compatibility/__init__.py
deleted file mode 100644
index 96c8d85..0000000
--- a/modules/ducktests/tests/ignitetest/tests/compatibility/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-This package contains compatibility tests.
-"""
diff --git
a/modules/ducktests/tests/ignitetest/tests/compatibility/pds_compatibility_test.py
b/modules/ducktests/tests/ignitetest/tests/compatibility/pds_compatibility_test.py
deleted file mode 100644
index a17ce65..0000000
---
a/modules/ducktests/tests/ignitetest/tests/compatibility/pds_compatibility_test.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-This module contains test that checks that PDS "from_version" compatible with
"to_version"
-"""
-from ducktape.mark import parametrize
-
-from ignitetest.services.ignite import IgniteService
-from ignitetest.services.ignite_app import IgniteApplicationService
-from ignitetest.services.utils.control_utility import ControlUtility
-from ignitetest.services.utils.ignite_configuration.discovery import
from_ignite_cluster
-from ignitetest.services.utils.ignite_configuration import
IgniteConfiguration, DataStorageConfiguration
-from ignitetest.services.utils.ignite_configuration.data_storage import
DataRegionConfiguration
-from ignitetest.utils import cluster
-from ignitetest.utils.ignite_test import IgniteTest
-from ignitetest.utils.version import DEV_BRANCH, LATEST, IgniteVersion
-
-
-# pylint: disable=W0223
-# pylint: disable=no-member
-class PdsCompatibilityTest(IgniteTest):
- """
- A simple test to check PDS compatibility of different Ignite versions.
-
- Start Ignite cluster version "from_version" with PDS enabled.
- Start a client application that puts prepared data.
- Stop cluster and client.
- Start Ignite cluster version "to_version" without PDS clearing.
- Start client that reads data and checks that it can be read and have not
changed.
-
- """
- APP_CLASS =
"org.apache.ignite.internal.ducktest.tests.compatibility.PdsCompatiblityApplication"
- LOAD_OPERATION = "load"
- CHECK_OPERATION = "check"
-
- @cluster(num_nodes=2)
- @parametrize(version_from=str(LATEST), version_to=str(DEV_BRANCH))
- def test_pds_compatibility(self, version_from, version_to):
- """
- Saves data using one version of ignite and then load with another.
- """
-
- server_configuration_from =
IgniteConfiguration(version=IgniteVersion(version_from),
-
data_storage=DataStorageConfiguration(
-
default=DataRegionConfiguration(persistent=True)))
- ignite_from = IgniteService(self.test_context,
server_configuration_from, num_nodes=1)
-
- ignite_from.start()
-
- ControlUtility(ignite_from).activate()
-
- loader = IgniteApplicationService(
- self.test_context,
- config=ignite_from.config._replace(client_mode=True,
discovery_spi=from_ignite_cluster(ignite_from)),
- java_class_name=self.APP_CLASS,
- params={"operation": self.LOAD_OPERATION})
-
- app_nodes = loader.nodes.copy()
- loader.run()
- loader.free()
-
- ignite_from.stop()
- nodes = ignite_from.nodes.copy()
- ignite_from.free()
-
- ignite_to = IgniteService(
- self.test_context,
-
config=server_configuration_from._replace(version=IgniteVersion(version_to)),
- num_nodes=1)
-
- ignite_to.nodes = nodes
-
- ignite_to.start(clean=False)
-
- ControlUtility(ignite_to).activate()
-
- checker = IgniteApplicationService(
- self.test_context,
- config=ignite_to.config._replace(client_mode=True,
discovery_spi=from_ignite_cluster(ignite_to)),
- java_class_name=self.APP_CLASS,
- params={"operation": self.CHECK_OPERATION})
-
- checker.nodes = app_nodes
- checker.start(clean=False)
- checker.await_stopped()
diff --git
a/modules/ducktests/tests/ignitetest/tests/persistence_upgrade_test.py
b/modules/ducktests/tests/ignitetest/tests/persistence_upgrade_test.py
new file mode 100644
index 0000000..9092137
--- /dev/null
+++ b/modules/ducktests/tests/ignitetest/tests/persistence_upgrade_test.py
@@ -0,0 +1,66 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+Module contains snapshot test.
+"""
+from ducktape.mark import parametrize
+
+from ignitetest.services.ignite_app import IgniteApplicationService
+from ignitetest.services.utils.control_utility import ControlUtility
+from ignitetest.services.utils.ignite_configuration import
IgniteConfiguration, DataStorageConfiguration
+from ignitetest.services.utils.ignite_configuration.data_storage import
DataRegionConfiguration
+from ignitetest.utils import cluster
+from ignitetest.utils.ignite_test import IgniteTest
+from ignitetest.utils.version import IgniteVersion, LATEST, DEV_BRANCH, OLDEST
+
+
+# pylint: disable=W0223
+class PersistenceUpgradeTest(IgniteTest):
+ """
+ Test checks persistence upgrade.
+ """
+
+ @cluster(num_nodes=1)
+ @parametrize(versions=[str(OLDEST), str(LATEST), str(DEV_BRANCH)])
+ def upgrade_test(self, versions):
+ """
+ Basic upgrade test.
+ """
+ versions = sorted(list(map(IgniteVersion, versions)))
+
+ self.logger.info(f"Testing: {versions}")
+
+ service = IgniteApplicationService(
+ self.test_context,
+ config=None, # will be defined later.
+
java_class_name="org.apache.ignite.internal.ducktest.tests.persistence_upgrade_test."
+ "DataLoaderAndCheckerApplication"
+ )
+
+ for version in versions:
+ service.config = IgniteConfiguration(
+
data_storage=DataStorageConfiguration(default=DataRegionConfiguration(persistent=True)),
+ version=version
+ )
+
+ service.params = {"check": service.stopped}
+
+ service.start(clean=False)
+
+ control_utility = ControlUtility(service)
+ control_utility.activate()
+
+ service.stop()
diff --git a/modules/ducktests/tests/ignitetest/utils/version.py
b/modules/ducktests/tests/ignitetest/utils/version.py
index cbb2f4d..38dd040 100644
--- a/modules/ducktests/tests/ignitetest/utils/version.py
+++ b/modules/ducktests/tests/ignitetest/utils/version.py
@@ -98,3 +98,4 @@ V_2_11_0 = IgniteVersion("2.11.0")
# if you updated the LATEST version
# please check DEV version in 'tests/ignitetest/__init__.py'
LATEST = LATEST_2_10
+OLDEST = V_2_7_6