You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by av...@apache.org on 2020/12/18 12:28:15 UTC

[ignite] branch ignite-ducktape updated: IGNITE-13829: added rotate log (#8578)

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 dd6f2f7  IGNITE-13829: added rotate log (#8578)
dd6f2f7 is described below

commit dd6f2f7e9bc8f360bfd77b1891b1d193147745f5
Author: Sergei Ryzhov <s....@gmail.com>
AuthorDate: Fri Dec 18 15:27:02 2020 +0300

    IGNITE-13829: added rotate log (#8578)
---
 modules/ducktests/tests/ignitetest/services/ignite.py |  2 +-
 .../ducktests/tests/ignitetest/services/ignite_app.py |  2 +-
 .../tests/ignitetest/services/utils/ignite_aware.py   | 19 ++++++++++++++++---
 .../ignitetest/services/utils/ignite_persistence.py   |  6 ++++--
 .../tests/ignitetest/services/utils/ignite_spec.py    | 13 ++++++-------
 .../tests/ignitetest/tests/discovery_test.py          |  6 +++---
 6 files changed, 31 insertions(+), 17 deletions(-)

diff --git a/modules/ducktests/tests/ignitetest/services/ignite.py b/modules/ducktests/tests/ignitetest/services/ignite.py
index e5ec3fa..7923dc7 100644
--- a/modules/ducktests/tests/ignitetest/services/ignite.py
+++ b/modules/ducktests/tests/ignitetest/services/ignite.py
@@ -83,7 +83,7 @@ def get_event_time(service, log_node, log_pattern, from_the_beginning=True, time
                                 backoff_sec=0.3)
 
     _, stdout, _ = log_node.account.ssh_client.exec_command(
-        "grep '%s' %s" % (log_pattern, IgniteAwareService.STDOUT_STDERR_CAPTURE))
+        "grep '%s' %s" % (log_pattern, log_node.log_file))
 
     return datetime.strptime(re.match("^\\[[^\\[]+\\]", stdout.read().decode("utf-8")).group(),
                              "[%Y-%m-%d %H:%M:%S,%f]")
diff --git a/modules/ducktests/tests/ignitetest/services/ignite_app.py b/modules/ducktests/tests/ignitetest/services/ignite_app.py
index bb93725..8833582 100644
--- a/modules/ducktests/tests/ignitetest/services/ignite_app.py
+++ b/modules/ducktests/tests/ignitetest/services/ignite_app.py
@@ -102,7 +102,7 @@ class IgniteApplicationService(IgniteAwareService):
 
         for node in self.nodes:
             output = node.account.ssh_capture(
-                "grep '%s' %s" % (name + "->", self.STDOUT_STDERR_CAPTURE), allow_fail=False)
+                "grep '%s' %s" % (name + "->", node.log_file), allow_fail=False)
             for line in output:
                 res.append(re.search("%s(.*)%s" % (name + "->", "<-"), line).group(1))
 
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
index 43fca2f..06fbe32 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
@@ -83,6 +83,8 @@ class IgniteAwareService(BackgroundThreadService, IgnitePersistenceAware, metacl
     def start_node(self, node):
         self.init_persistent(node)
 
+        self.__update_node_log_file(node)
+
         super().start_node(node)
 
         wait_until(lambda: self.alive(node), timeout_sec=10)
@@ -188,7 +190,7 @@ class IgniteAwareService(BackgroundThreadService, IgnitePersistenceAware, metacl
 
     # pylint: disable=W0613
     def _worker(self, idx, node):
-        cmd = self.spec.command
+        cmd = self.spec.command(node.log_file)
 
         self.logger.debug("Attempting to start Application Service on %s with command: %s" % (str(node.account), cmd))
 
@@ -201,7 +203,8 @@ class IgniteAwareService(BackgroundThreadService, IgnitePersistenceAware, metacl
         """
         return len(self.pids(node)) > 0
 
-    def await_event_on_node(self, evt_message, node, timeout_sec, from_the_beginning=False, backoff_sec=5):
+    @staticmethod
+    def await_event_on_node(evt_message, node, timeout_sec, from_the_beginning=False, backoff_sec=5):
         """
         Await for specific event message in a node's log file.
         :param evt_message: Event message.
@@ -211,7 +214,7 @@ class IgniteAwareService(BackgroundThreadService, IgnitePersistenceAware, metacl
         :param backoff_sec: Number of seconds to back off between each failure to meet the condition
                 before checking again.
         """
-        with monitor_log(node, self.STDOUT_STDERR_CAPTURE, from_the_beginning) as monitor:
+        with monitor_log(node, node.log_file, from_the_beginning) as monitor:
             monitor.wait_until(evt_message, timeout_sec=timeout_sec, backoff_sec=backoff_sec,
                                err_msg="Event [%s] was not triggered on '%s' in %d seconds" % (evt_message, node.name,
                                                                                                timeout_sec))
@@ -351,3 +354,13 @@ class IgniteAwareService(BackgroundThreadService, IgnitePersistenceAware, metacl
         Reads current netfilter settings on the node for debugging purposes.
         """
         return str(node.account.ssh_client.exec_command("sudo iptables -L -n")[1].read(), sys.getdefaultencoding())
+
+    def __update_node_log_file(self, node):
+        """
+        Update the node log file.
+        """
+        cnt = list(node.account.ssh_capture(f'ls {self.LOGS_DIR} | '
+                                            f'grep -E "^console_[0-9]*.log$" | '
+                                            f'wc -l', callback=int))[0]
+
+        node.log_file = self.STDOUT_STDERR_CAPTURE.replace('.log', f'_{cnt + 1}.log')
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_persistence.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_persistence.py
index 7cdc03c..4e018cc 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_persistence.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_persistence.py
@@ -28,12 +28,13 @@ class PersistenceAware:
     """
     # Root directory for persistent output
     PERSISTENT_ROOT = "/mnt/service"
-    STDOUT_STDERR_CAPTURE = os.path.join(PERSISTENT_ROOT, "console.log")
     TEMP_DIR = os.path.join(PERSISTENT_ROOT, "tmp")
+    LOGS_DIR = os.path.join(PERSISTENT_ROOT, "logs")
+    STDOUT_STDERR_CAPTURE = os.path.join(LOGS_DIR, "console.log")
 
     logs = {
         "console_log": {
-            "path": STDOUT_STDERR_CAPTURE,
+            "path": LOGS_DIR,
             "collect_default": True
         }
     }
@@ -45,6 +46,7 @@ class PersistenceAware:
         """
         node.account.mkdirs(self.PERSISTENT_ROOT)
         node.account.mkdirs(self.TEMP_DIR)
+        node.account.mkdirs(self.LOGS_DIR)
 
 
 class IgnitePersistenceAware(PersistenceAware):
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
index ac664f3..6b9ba9f 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
@@ -74,7 +74,6 @@ class IgniteSpec(metaclass=ABCMeta):
             return IgniteClientConfigTemplate()
         return IgniteServerConfigTemplate()
 
-    @property
     @abstractmethod
     def command(self):
         """
@@ -100,14 +99,14 @@ class IgniteNodeSpec(IgniteSpec, IgnitePersistenceAware):
     """
     Spec to run ignite node
     """
-    @property
-    def command(self):
+    # pylint: disable=W0221
+    def command(self, stdout_stderr):
         cmd = "%s %s %s %s 2>&1 | tee -a %s &" % \
               (self._envs(),
                self.path.script("ignite.sh"),
                self._jvm_opts(),
                self.CONFIG_FILE,
-               self.STDOUT_STDERR_CAPTURE)
+               stdout_stderr)
 
         return cmd
 
@@ -123,14 +122,14 @@ class IgniteApplicationSpec(IgniteSpec, IgnitePersistenceAware):
     def _app_args(self):
         return ",".join(self.args)
 
-    @property
-    def command(self):
+    # pylint: disable=W0221
+    def command(self, stdout_stderr):
         cmd = "%s %s %s %s 2>&1 | tee -a %s &" % \
               (self._envs(),
                self.path.script("ignite.sh"),
                self._jvm_opts(),
                self._app_args(),
-               self.STDOUT_STDERR_CAPTURE)
+               stdout_stderr)
 
         return cmd
 
diff --git a/modules/ducktests/tests/ignitetest/tests/discovery_test.py b/modules/ducktests/tests/ignitetest/tests/discovery_test.py
index eb0d250..658591e 100644
--- a/modules/ducktests/tests/ignitetest/tests/discovery_test.py
+++ b/modules/ducktests/tests/ignitetest/tests/discovery_test.py
@@ -244,13 +244,13 @@ class DiscoveryTest(IgniteTest):
 
     def _check_failed_number(self, failed_nodes, survived_node):
         """Ensures number of failed nodes is correct."""
-        cmd = "grep '%s' %s | wc -l" % (node_failed_event_pattern(), IgniteAwareService.STDOUT_STDERR_CAPTURE)
+        cmd = "grep '%s' %s | wc -l" % (node_failed_event_pattern(), survived_node.log_file)
 
         failed_cnt = int(str(survived_node.account.ssh_client.exec_command(cmd)[1].read(), sys.getdefaultencoding()))
 
         if failed_cnt != len(failed_nodes):
             failed = str(survived_node.account.ssh_client.exec_command(
-                "grep '%s' %s" % (node_failed_event_pattern(), IgniteAwareService.STDOUT_STDERR_CAPTURE))[1].read(),
+                "grep '%s' %s" % (node_failed_event_pattern(), survived_node.log_file))[1].read(),
                          sys.getdefaultencoding())
 
             self.logger.warn("Node '%s' (%s) has detected the following failures:%s%s" % (
@@ -263,7 +263,7 @@ class DiscoveryTest(IgniteTest):
         """Ensures only target nodes failed"""
         for service in [srv for srv in self.test_context.services if isinstance(srv, IgniteAwareService)]:
             for node in [srv_node for srv_node in service.nodes if srv_node not in failed_nodes]:
-                cmd = "grep -i '%s' %s | wc -l" % ("local node segmented", IgniteAwareService.STDOUT_STDERR_CAPTURE)
+                cmd = "grep -i '%s' %s | wc -l" % ("local node segmented", node.log_file)
 
                 failed = str(node.account.ssh_client.exec_command(cmd)[1].read(), sys.getdefaultencoding())