Skip to content

Commit

Permalink
IGNITE-14668 SSL certificates generation on parallel run (#9065)
Browse files Browse the repository at this point in the history
  • Loading branch information
map7000 committed May 14, 2021
1 parent cdb395b commit c314e7f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 14 deletions.
23 changes: 21 additions & 2 deletions modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,21 @@
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

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
Expand Down Expand Up @@ -177,7 +180,7 @@ def init_shared(self, node):
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))
Expand All @@ -189,6 +192,22 @@ def init_shared(self, node):
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) \
Expand Down
30 changes: 18 additions & 12 deletions modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import json
import os
import subprocess
import tempfile
from abc import ABCMeta, abstractmethod

from ignitetest.services.utils import IgniteServiceType
Expand All @@ -34,6 +33,8 @@
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):
"""
Expand Down Expand Up @@ -173,32 +174,37 @@ def config_file_path(self):
"""
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")

self._runcmd(f"cp {script_dir}/* {local_dir}")
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
Expand Down

0 comments on commit c314e7f

Please sign in to comment.