This is an automated email from the ASF dual-hosted git repository.
nizhikov 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 c314e7f IGNITE-14668 SSL certificates generation on parallel run
(#9065)
c314e7f is described below
commit c314e7f900f3087dc7b80ac6dfce3247a144ae6f
Author: Mikhail Filatov <[email protected]>
AuthorDate: Fri May 14 11:15:43 2021 +0300
IGNITE-14668 SSL certificates generation on parallel run (#9065)
---
.../ignitetest/services/utils/ignite_aware.py | 23 +++++++++++++++--
.../tests/ignitetest/services/utils/ignite_spec.py | 30 +++++++++++++---------
2 files changed, 39 insertions(+), 14 deletions(-)
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
index c7aa560..ee47144 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
@@ -21,10 +21,13 @@ import re
import signal
import sys
import time
+import tempfile
from abc import ABCMeta
from datetime import datetime
from enum import IntEnum
+from pathlib import Path
from threading import Thread
+from filelock import FileLock
from ducktape.cluster.remoteaccount import RemoteCommandError
from ducktape.utils.util import wait_until
@@ -32,7 +35,7 @@ from ducktape.utils.util import wait_until
from ignitetest.services.utils import IgniteServiceType
from ignitetest.services.utils.background_thread import BackgroundThreadService
from ignitetest.services.utils.concurrent import CountDownLatch, AtomicValue
-from ignitetest.services.utils.ignite_spec import resolve_spec
+from ignitetest.services.utils.ignite_spec import resolve_spec,
SHARED_PREPARED_FILE
from ignitetest.services.utils.jmx_utils import ignite_jmx_mixin
from ignitetest.services.utils.log_utils import monitor_log
from ignitetest.services.utils.path import IgnitePathAware
@@ -177,7 +180,7 @@ class IgniteAwareService(BackgroundThreadService,
IgnitePathAware, metaclass=ABC
Init shared directory. Content of shared directory must be equal on
all test nodes.
:param node: Ignite service node.
"""
- local_shared_dir = self.spec.init_local_shared()
+ local_shared_dir = self._init_local_shared()
if not os.path.isdir(local_shared_dir):
self.logger.debug("Local shared dir not exists. Nothing to copy. "
+ str(local_shared_dir))
@@ -189,6 +192,22 @@ class IgniteAwareService(BackgroundThreadService,
IgnitePathAware, metaclass=ABC
self.logger.debug("Copying shared file to node. " + str(file))
node.account.copy_to(os.path.join(local_shared_dir, file),
self.shared_root)
+ def _init_local_shared(self):
+ """
+ :return: path to local share folder. Files should be copied on all
nodes in `shared_root` folder.
+ """
+ local_dir = os.path.join(tempfile.gettempdir(),
str(self.context.session_context.session_id))
+
+ if not self.spec.is_prepare_shared_files(local_dir):
+ return local_dir
+
+ with FileLock("init_shared.lock", timeout=120):
+ if self.spec.is_prepare_shared_files(local_dir):
+ self.spec.prepare_shared_files(local_dir)
+ Path(os.path.join(local_dir, SHARED_PREPARED_FILE)).touch()
+
+ return local_dir
+
def _prepare_configs(self, node):
config = self.spec \
.extend_config(self.config) \
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
index 3a76af7..2761c3b 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
@@ -22,7 +22,6 @@ import importlib
import json
import os
import subprocess
-import tempfile
from abc import ABCMeta, abstractmethod
from ignitetest.services.utils import IgniteServiceType
@@ -34,6 +33,8 @@ from ignitetest.services.utils.ssl.ssl_params import
is_ssl_enabled
from ignitetest.utils.ignite_test import JFR_ENABLED
from ignitetest.utils.version import DEV_BRANCH
+SHARED_PREPARED_FILE = ".ignite_prepared"
+
def resolve_spec(service, **kwargs):
"""
@@ -173,23 +174,30 @@ class IgniteSpec(metaclass=ABCMeta):
"""
return self.service.config_file
- def init_local_shared(self):
+ def is_prepare_shared_files(self, local_dir):
"""
- :return: path to local share folder. Files should be copied on all
nodes in `shared_root` folder.
+ :return True if we have something to prepare.
"""
- local_dir = os.path.join(tempfile.gettempdir(),
str(self.service.context.session_context.session_id))
-
if not is_ssl_enabled(self.service.context.globals) and \
not (self.service.config.service_type ==
IgniteServiceType.NODE and self.service.config.ssl_params):
self.service.logger.debug("Ssl disabled. Nothing to generate.")
- return local_dir
+ return False
+
+ if os.path.isfile(os.path.join(local_dir, SHARED_PREPARED_FILE)):
+ self.service.logger.debug("Local shared dir already prepared.
Exiting. " + local_dir)
+ return False
- if os.path.isdir(local_dir):
- self.service.logger.debug("Local shared dir already exists.
Exiting. " + local_dir)
- return local_dir
+ return True
+ def prepare_shared_files(self, local_dir):
+ """
+ Prepare files that should be copied on all nodes.
+ """
self.service.logger.debug("Local shared dir not exists. Creating. " +
local_dir)
- os.mkdir(local_dir)
+ try:
+ os.mkdir(local_dir)
+ except FileExistsError:
+ self.service.logger.debug("Shared dir already exists, ignoring and
continue." + local_dir)
script_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
"..", "..", "..", "certs")
@@ -197,8 +205,6 @@ class IgniteSpec(metaclass=ABCMeta):
self._runcmd(f"chmod a+x {local_dir}/*.sh")
self._runcmd(f"{local_dir}/mkcerts.sh")
- return local_dir
-
def _jvm_opts(self):
"""
:return: line with extra JVM params for ignite.sh script:
-J-Dparam=value -J-ea