From 31d8e7c1a73fafcffd8d715f7e93d9d20561c82c Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 12 Jun 2024 02:16:44 +0800 Subject: [PATCH 01/23] [CoreEngine] Adjust the design of FedML Python Agent to a decentralized architecture that supports Launch Master, Launch Slave, Deploy Master, and Deploy Slave at the same time. --- .../scheduler/master/base_master_agent.py | 26 +++++-- .../master/base_master_job_runner_manager.py | 22 ++++-- .../master/base_master_protocol_manager.py | 10 ++- .../scheduler/master/cloud_server_manager.py | 4 ++ .../master/master_protocol_manager.py | 3 +- .../scheduler_core/account_manager.py | 5 ++ .../scheduler_core/message_center.py | 13 +++- .../scheduler_base_protocol_manager.py | 55 ++++++++++----- .../scheduler/scheduler_core/status_center.py | 3 + .../scheduler/slave/base_slave_agent.py | 25 +++++-- .../computing/scheduler/slave/client_login.py | 16 ++--- .../scheduler/slave/slave_protocol_manager.py | 13 ++-- .../scheduler/slave/united_agents.py | 67 +++++++++++++++++++ python/fedml/core/mlops/__init__.py | 16 +++-- 14 files changed, 219 insertions(+), 59 deletions(-) create mode 100755 python/fedml/computing/scheduler/slave/united_agents.py diff --git a/python/fedml/computing/scheduler/master/base_master_agent.py b/python/fedml/computing/scheduler/master/base_master_agent.py index 3aff523c24..b27ed9547a 100755 --- a/python/fedml/computing/scheduler/master/base_master_agent.py +++ b/python/fedml/computing/scheduler/master/base_master_agent.py @@ -23,7 +23,8 @@ def __init__(self): def login( self, user_id, api_key=None, device_id=None, - os_name=None, role=None, runner_cmd=None + os_name=None, role=None, runner_cmd=None, + communication_manager=None, sender_message_queue=None, status_center_queue=None ): # Login account login_result = FedMLAccountManager.get_instance().login( @@ -48,14 +49,18 @@ def login( # Initialize the protocol manager # noinspection PyBoardException try: - self._initialize_protocol_manager() + self._initialize_protocol_manager( + communication_manager=communication_manager, + sender_message_queue=sender_message_queue, + status_center_queue=status_center_queue) except Exception as e: FedMLAccountManager.write_login_failed_file(is_client=False) self.protocol_mgr.stop() raise e # Start the protocol manager to process the messages from MLOps and slave agents. - self.protocol_mgr.start() + if communication_manager is None: + self.protocol_mgr.start() @staticmethod def logout(): @@ -69,7 +74,11 @@ def _create_protocol_manager(self, role, login_result): login_result, agent_config=login_result.agent_config) self.protocol_mgr.run_as_edge_server_and_agent = True \ if role == FedMLAccountManager.ROLE_EDGE_SERVER else False - self.protocol_mgr.run_as_cloud_agent = True if role == FedMLAccountManager.ROLE_CLOUD_AGENT else False + self.protocol_mgr.run_as_cloud_agent = True \ + if role == FedMLAccountManager.ROLE_CLOUD_AGENT or role == FedMLAccountManager.ROLE_GPU_MASTER_SERVER \ + else False + self.use_local_process_as_cloud_server = True \ + if role == FedMLAccountManager.ROLE_GPU_MASTER_SERVER else self.use_local_process_as_cloud_server self.protocol_mgr.run_as_cloud_server = True if role == FedMLAccountManager.ROLE_CLOUD_SERVER else False self.protocol_mgr.args = login_result self.protocol_mgr.edge_id = login_result.edge_id @@ -79,12 +88,17 @@ def _create_protocol_manager(self, role, login_result): self.protocol_mgr.enable_simulation_cloud_agent = self.enable_simulation_cloud_agent self.protocol_mgr.use_local_process_as_cloud_server = self.use_local_process_as_cloud_server - def _initialize_protocol_manager(self): + def _initialize_protocol_manager( + self, communication_manager=None, sender_message_queue=None, status_center_queue=None + ): # Init local database self._init_database() # Initialize the master protocol - self.protocol_mgr.initialize() + self.protocol_mgr.initialize( + communication_manager=communication_manager, + sender_message_queue=sender_message_queue, + status_center_queue=status_center_queue) # Report the IDLE status to MLOps self.mlops_metrics.report_server_training_status( diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py index 6831c9d034..08ef1d640e 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py @@ -1,10 +1,12 @@ import base64 import json import logging +import os import time from abc import ABC from multiprocessing import Process from .cloud_server_manager import FedMLCloudServerManager +from ..comm_utils.run_process_utils import RunProcessUtils from ..scheduler_core.scheduler_base_job_runner_manager import FedMLSchedulerBaseJobRunnerManager @@ -38,26 +40,38 @@ def start_job_runner( def stop_job_runner( self, run_id, args=None, server_id=None, request_json=None, - run_as_cloud_agent=False, run_as_cloud_server=False + run_as_cloud_agent=False, run_as_cloud_server=False, + use_local_process_as_cloud_server=False ): super().stop_job_runner(run_id) if run_as_cloud_agent or run_as_cloud_server: stopping_process = Process( - target=FedMLCloudServerManager.stop_cloud_server, args=(run_id, server_id, args.agent_config)) + target=FedMLCloudServerManager.stop_cloud_server, + args=(run_id, server_id, args.agent_config)) stopping_process.start() + if run_as_cloud_server: + time.sleep(1) + RunProcessUtils.kill_process(os.getpid()) + def complete_job_runner( self, run_id, args=None, server_id=None, request_json=None, - run_as_cloud_agent=False, run_as_cloud_server=False + run_as_cloud_agent=False, run_as_cloud_server=False, + use_local_process_as_cloud_server=False ): super().complete_job_runner(run_id) if run_as_cloud_agent or run_as_cloud_server: stopping_process = Process( - target=FedMLCloudServerManager.stop_cloud_server, args=(run_id, server_id, args.agent_config)) + target=FedMLCloudServerManager.stop_cloud_server, + args=(run_id, server_id, args.agent_config)) stopping_process.start() + if run_as_cloud_server: + time.sleep(1) + RunProcessUtils.kill_process(os.getpid()) + def _start_cloud_server( self, args, run_id, request_json, edge_id=None, use_local_process_as_cloud_server=False diff --git a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py index 1c4cbba4f4..a6b47855c6 100755 --- a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py @@ -197,7 +197,7 @@ def callback_start_train(self, topic=None, payload=None): self.run_edge_ids[run_id_str] = edge_id_list # report server running status to master agent - if not self.run_as_cloud_server: + if not self.run_as_cloud_server and not self.run_as_cloud_agent: self.mlops_metrics.report_server_id_status( run_id, GeneralConstants.MSG_MLOPS_SERVER_STATUS_STARTING, edge_id=self.edge_id, server_id=self.edge_id, server_agent_id=self.edge_id, running_json=payload) @@ -390,6 +390,9 @@ def callback_request_job_status(self, topic, payload): def callback_request_device_status_in_job(self, topic, payload): self.response_device_status_in_job(topic, payload) + def process_extra_queues(self, extra_queues): + self.rebuild_status_center(extra_queues[0]) + def generate_protocol_manager(self): message_status_runner = self._generate_protocol_manager_instance( self.args, agent_config=self.agent_config @@ -476,6 +479,8 @@ def init_job_task(self, request_json): self.setup_listener_for_run_logs(run_id) def setup_listeners_for_edge_status(self, run_id, edge_ids, server_id): + if self.run_as_cloud_agent: + return edge_status_topic = "fl_client/flclient_agent_" + str(server_id) + "/status" payload = {"run_id": run_id, "init_all_edge_id_list": edge_ids, "init_server_id": server_id} self.callback_edge_status(edge_status_topic, json.dumps(payload)) @@ -486,6 +491,9 @@ def setup_listeners_for_edge_status(self, run_id, edge_ids, server_id): self.subscribe_msg(edge_status_topic) def remove_listeners_for_edge_status(self, edge_ids=None): + if self.run_as_cloud_agent: + return + if edge_ids is None: edge_ids = self.request_json["edgeids"] diff --git a/python/fedml/computing/scheduler/master/cloud_server_manager.py b/python/fedml/computing/scheduler/master/cloud_server_manager.py index 040a0f38a3..aa9c07e84f 100755 --- a/python/fedml/computing/scheduler/master/cloud_server_manager.py +++ b/python/fedml/computing/scheduler/master/cloud_server_manager.py @@ -2,6 +2,7 @@ import json import logging import os +import platform import traceback import fedml @@ -32,6 +33,9 @@ def __init__(self, args, run_id=None, edge_id=None, request_json=None, agent_con @staticmethod def start_local_cloud_server(user, version, cloud_device_id, runner_cmd_encoded): + if platform.system() != "Windows": + os.setsid() + print(f"start cloud server, device id {cloud_device_id}, runner cmd {runner_cmd_encoded}") pip_source_dir = os.path.dirname(__file__) login_cmd = os.path.join(pip_source_dir, "server_login.py") diff --git a/python/fedml/computing/scheduler/master/master_protocol_manager.py b/python/fedml/computing/scheduler/master/master_protocol_manager.py index ca9621e41d..eb8cde239f 100755 --- a/python/fedml/computing/scheduler/master/master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/master_protocol_manager.py @@ -40,4 +40,5 @@ def _process_job_complete_status(self, run_id, server_id, complete_payload): # Complete the job runner self._get_job_runner_manager().complete_job_runner( run_id, args=self.args, server_id=server_id, request_json=complete_payload, - run_as_cloud_agent=self.run_as_cloud_agent, run_as_cloud_server=self.run_as_cloud_server) + run_as_cloud_agent=self.run_as_cloud_agent, run_as_cloud_server=self.run_as_cloud_server, + use_local_process_as_cloud_server=self.use_local_process_as_cloud_server) diff --git a/python/fedml/computing/scheduler/scheduler_core/account_manager.py b/python/fedml/computing/scheduler/scheduler_core/account_manager.py index 3491e102f6..20c5fcd842 100755 --- a/python/fedml/computing/scheduler/scheduler_core/account_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/account_manager.py @@ -25,6 +25,7 @@ class FedMLAccountManager(Singleton): ROLE_CLOUD_SERVER = "cloud_server" ROLE_EDGE_DEVICE = "client" ROLE_GPU_PROVIDER = "gpu_supplier" + ROLE_GPU_MASTER_SERVER = "gpu_master_server" ROLE_DEPLOY_MASTER_ON_PREM = "md.on_premise_device.master" ROLE_DEPLOY_WORKER_ON_PREM = "md.on_premise_device" @@ -33,6 +34,7 @@ class FedMLAccountManager(Singleton): DEVICE_ID_SUFFIX_CLOUD_SERVER = ".Public.Server" DEVICE_ID_SUFFIX_EDGE_DEVICE = ".Edge.Device" DEVICE_ID_SUFFIX_GPU_PROVIDER = ".Edge.GPU.Supplier" + DEVICE_ID_SUFFIX_GPU_MASTER_SERVER = ".Edge.GPU.MasterServer" DEVICE_ID_SUFFIX_DEPLOY = "MDA" DEVICE_ID_SUFFIX_DEPLOY_MASTER_ON_PREM = ".OnPremise.Master.Device" DEVICE_ID_SUFFIX_DEPLOY_WORKER_ON_PREM = ".OnPremise.Device" @@ -144,6 +146,9 @@ def build_agent_args(self, user_id, api_key=None, device_id=None, os_name=None, device_id_suffix = FedMLAccountManager.DEVICE_ID_SUFFIX_EDGE_DEVICE elif role == FedMLAccountManager.ROLE_GPU_PROVIDER: device_id_suffix = FedMLAccountManager.DEVICE_ID_SUFFIX_GPU_PROVIDER + elif role == FedMLAccountManager.ROLE_GPU_MASTER_SERVER: + device_id_suffix = FedMLAccountManager.DEVICE_ID_SUFFIX_GPU_MASTER_SERVER + is_master = True elif role == FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM: device_id_suffix = FedMLAccountManager.DEVICE_ID_SUFFIX_DEPLOY_MASTER_ON_PREM is_master = True diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index 869ed6e510..b716a8a373 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -19,6 +19,7 @@ class FedMLMessageCenter(object): FUNC_SETUP_MESSAGE_CENTER = "setup_message_center" FUNC_REBUILD_MESSAGE_CENTER = "rebuild_message_center" + FUNC_PROCESS_EXTRA_QUEUES = "process_extra_queues" ENABLE_SAVE_MESSAGE_TO_FILE = True PUBLISH_MESSAGE_RETRY_TIMEOUT = 60 * 1000.0 PUBLISH_MESSAGE_RETRY_COUNT = 3 @@ -295,7 +296,10 @@ def get_listener_message_queue(self): def setup_listener_message_queue(self): self.listener_message_queue = Queue() - def start_listener(self, sender_message_queue=None, listener_message_queue=None, agent_config=None, message_center_name=None): + def start_listener( + self, sender_message_queue=None, listener_message_queue=None, + agent_config=None, message_center_name=None, extra_queues=None + ): if self.listener_message_center_process is not None: return @@ -313,7 +317,7 @@ def start_listener(self, sender_message_queue=None, listener_message_queue=None, target=message_runner.run_listener_dispatcher, args=( self.listener_message_event, self.listener_message_queue, self.listener_handler_funcs, sender_message_queue, - message_center_name + message_center_name, extra_queues ) ) self.listener_message_center_process.start() @@ -349,7 +353,7 @@ def unsubscribe_msg(self, topic): def run_listener_dispatcher( self, message_event, message_queue, listener_funcs, sender_message_queue, - message_center_name + message_center_name, extra_queues ): self.listener_message_event = message_event self.listener_message_queue = message_queue @@ -363,6 +367,9 @@ def run_listener_dispatcher( else: methodcaller(FedMLMessageCenter.FUNC_REBUILD_MESSAGE_CENTER, sender_message_queue)(self) + if extra_queues is not None: + methodcaller(FedMLMessageCenter.FUNC_PROCESS_EXTRA_QUEUES, extra_queues)(self) + while True: message_entity = None try: diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py index 9bb8b7a7ec..9cc3544647 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py @@ -60,38 +60,51 @@ def add_protocol_handler(self): # self.add_message_listener(self.topic_start_train, self.callback_start_train) pass - def initialize(self): + def initialize( + self, communication_manager=None, sender_message_queue=None, status_center_queue=None + ): # Generate the message topics self.generate_topics() # Setup MQTT connection - self.communication_mgr = MqttManager( - self.agent_config["mqtt_config"]["BROKER_HOST"], - self.agent_config["mqtt_config"]["BROKER_PORT"], - self.agent_config["mqtt_config"]["MQTT_USER"], - self.agent_config["mqtt_config"]["MQTT_PWD"], - self.agent_config["mqtt_config"]["MQTT_KEEPALIVE"], - f"FedML_Agent_Daemon_@{self.user_name}@_@{self.current_device_id}@_@{str(uuid.uuid4())}@", - self.topic_last_will, - json.dumps({"ID": self.edge_id, "status": GeneralConstants.MSG_MLOPS_SERVER_STATUS_OFFLINE}) - ) + if communication_manager is None: + self.communication_mgr = MqttManager( + self.agent_config["mqtt_config"]["BROKER_HOST"], + self.agent_config["mqtt_config"]["BROKER_PORT"], + self.agent_config["mqtt_config"]["MQTT_USER"], + self.agent_config["mqtt_config"]["MQTT_PWD"], + self.agent_config["mqtt_config"]["MQTT_KEEPALIVE"], + f"FedML_Agent_Daemon_@{self.user_name}@_@{self.current_device_id}@_@{str(uuid.uuid4())}@", + self.topic_last_will, + json.dumps({"ID": self.edge_id, "status": GeneralConstants.MSG_MLOPS_SERVER_STATUS_OFFLINE}) + ) + else: + self.communication_mgr = communication_manager # Add the message listeners for all topics self.add_protocol_handler() # Start the message center to process edge related messages. - self.setup_message_center() + if sender_message_queue is None: + self.setup_message_center() + else: + self.rebuild_message_center(sender_message_queue) # Setup the message listener queue self.setup_listener_message_queue() # Start the status center to process edge related status. - self.start_status_listener_center() + if status_center_queue is None: + self.start_status_listener_center() + else: + self.set_status_queue(status_center_queue) + self.rebuild_status_center(status_center_queue) # Start the message center for listener self.start_listener(sender_message_queue=self.message_center.get_sender_message_queue(), agent_config=self.agent_config, - message_center_name=self.message_center_name) + message_center_name=self.message_center_name, + extra_queues=[self.get_status_queue()]) # Init extra items, e.g. database, recovery, etc. self._init_extra_items() @@ -99,11 +112,11 @@ def initialize(self): # Setup MQTT connected listener self.communication_mgr.add_connected_listener(self.on_agent_communication_connected) self.communication_mgr.add_disconnected_listener(self.on_agent_communication_disconnected) - self.communication_mgr.connect() def start(self): # Start MQTT message loop try: + self.communication_mgr.connect() self.communication_mgr.loop_forever() except Exception as e: if str(e) == "Restarting after upgraded...": @@ -233,6 +246,9 @@ def rebuild_status_center(self, status_center_queue): self.status_reporter.edge_id = self.edge_id self.status_reporter.server_agent_id = self.server_agent_id + def process_extra_queues(self, extra_queues): + pass + def generate_status_report(self, run_id, edge_id, server_agent_id=None): status_reporter = MLOpsMetrics() status_reporter.set_messenger(self, send_message_func=self.send_status_message) @@ -268,6 +284,15 @@ def get_status_runner(self): return None + def get_get_protocol_communication_manager(self): + return self.communication_mgr + + def get_protocol_sender_message_queue(self): + return self.message_center.get_sender_message_queue() + + def get_get_protocol_status_center_queue(self): + return self.get_status_queue() + def send_agent_active_msg(self, edge_id): active_msg = {"ID": edge_id, "status": GeneralConstants.MSG_MLOPS_SERVER_STATUS_IDLE} self.message_center.send_message_json(self.topic_active, json.dumps(active_msg)) diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index 97c2115e76..53dd73c1df 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -142,6 +142,9 @@ def send_status_message(self, topic, payload): def get_status_queue(self): return self.status_queue + def set_status_queue(self, status_queue): + self.status_queue = status_queue + def status_center_process_master_status(self, topic, payload): pass diff --git a/python/fedml/computing/scheduler/slave/base_slave_agent.py b/python/fedml/computing/scheduler/slave/base_slave_agent.py index 01c0a39195..a8ac9fa1cb 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_agent.py +++ b/python/fedml/computing/scheduler/slave/base_slave_agent.py @@ -24,7 +24,8 @@ def __init__(self): def login( self, userid, api_key=None, device_id=None, - os_name=None, need_to_check_gpu=False, role=None + os_name=None, need_to_check_gpu=False, role=None, + communication_manager=None, sender_message_queue=None, status_center_queue=None ): # Preprocess the login args if need_to_check_gpu: @@ -57,17 +58,21 @@ def login( # Initialize the protocol manager # noinspection PyBoardException try: - self._initialize_protocol_manager() + self._initialize_protocol_manager( + communication_manager=communication_manager, + sender_message_queue=sender_message_queue, + status_center_queue=status_center_queue) except Exception as e: FedMLAccountManager.write_login_failed_file(is_client=True) self.protocol_mgr.stop() raise e + return login_result + + def start(self): # Start the protocol manager to process the messages from MLOps and slave agents. self.protocol_mgr.start() - return login_result - @staticmethod def logout(): GeneralConstants.cleanup_run_process(None) @@ -84,12 +89,17 @@ def _create_protocol_manager(self, login_result): self.protocol_mgr.user_name = login_result.user_name self.protocol_mgr.agent_config = login_result.agent_config - def _initialize_protocol_manager(self): + def _initialize_protocol_manager( + self, communication_manager=None, sender_message_queue=None, status_center_queue=None + ): # Init local database self._init_database() # Initialize the master protocol - self.protocol_mgr.initialize() + self.protocol_mgr.initialize( + communication_manager=communication_manager, + sender_message_queue=sender_message_queue, + status_center_queue=status_center_queue) # Start the client API process self._start_slave_api() @@ -122,6 +132,9 @@ def _start_slave_api(self): should_capture_stderr=False ) + def get_protocol_manager(self): + return self.protocol_mgr + @abstractmethod def _get_log_file_dir(self): pass diff --git a/python/fedml/computing/scheduler/slave/client_login.py b/python/fedml/computing/scheduler/slave/client_login.py index 37a6dc8064..7a1c759410 100755 --- a/python/fedml/computing/scheduler/slave/client_login.py +++ b/python/fedml/computing/scheduler/slave/client_login.py @@ -1,11 +1,11 @@ import argparse import os import fedml -from fedml.computing.scheduler.slave.slave_agent import FedMLLaunchSlaveAgent +from fedml.computing.scheduler.slave.united_agents import FedMLUnitedAgent def logout(): - FedMLLaunchSlaveAgent.logout() + FedMLUnitedAgent.get_instance().logout() if __name__ == "__main__": @@ -18,6 +18,7 @@ def logout(): parser.add_argument("--version", "-v", type=str, default="release") parser.add_argument("--local_server", "-ls", type=str, default="127.0.0.1") parser.add_argument("--role", "-r", type=str, default="client") + parser.add_argument("--runner_cmd", "-rc", type=str, default="{}") parser.add_argument("--device_id", "-id", type=str, default="0") parser.add_argument("--os_name", "-os", type=str, default="") parser.add_argument("--api_key", "-k", type=str, default="") @@ -30,17 +31,16 @@ def logout(): if args.api_key == "": args.api_key = args.user - fedml.set_env_version("test") - if args.local_on_premise_platform_host != "127.0.0.1": fedml.set_local_on_premise_platform_host(args.local_on_premise_platform_host) if args.local_on_premise_platform_port != 80: fedml.set_local_on_premise_platform_port(args.local_on_premise_platform_port) fedml.set_env_version(args.version) - slave_agent = FedMLLaunchSlaveAgent() + united_agents = FedMLUnitedAgent.get_instance() if args.type == 'login': - slave_agent.login(args.api_key, api_key=args.api_key, device_id=args.device_id, - os_name=args.os_name, role=args.role) + united_agents.login( + args.api_key, api_key=args.api_key, device_id=args.device_id, + os_name=args.os_name, role=args.role, runner_cmd=args.runner_cmd) else: - FedMLLaunchSlaveAgent.logout() + united_agents.logout() diff --git a/python/fedml/computing/scheduler/slave/slave_protocol_manager.py b/python/fedml/computing/scheduler/slave/slave_protocol_manager.py index a1067a0d96..6e3cb2ebe1 100755 --- a/python/fedml/computing/scheduler/slave/slave_protocol_manager.py +++ b/python/fedml/computing/scheduler/slave/slave_protocol_manager.py @@ -1,7 +1,5 @@ import copy -import json import os -import fedml from ..comm_utils.job_cleanup import JobCleanup from .base_slave_protocol_manager import FedMLBaseSlaveProtocolManager from .launch_job_runner_manager import FedMLLaunchJobRunnerManager @@ -34,7 +32,8 @@ def _get_job_runner_manager(self): def _process_connection_ready(self): from fedml.core.mlops import sync_deploy_id sync_deploy_id( - self.edge_id, self.model_device_server.edge_id, self.model_device_client_edge_id_list) + self.edge_id, self.model_device_server_id, self.model_device_client_edge_id_list, + message_center=self.message_center) # Override def _process_connection_lost(self): @@ -73,9 +72,8 @@ def _init_extra_items(self): model_device_client.redis_port = infer_redis_port if infer_redis_password is not None: model_device_client.redis_password = infer_redis_password - model_device_client.start() self.model_device_client_list.append(model_device_client) - self.model_device_client_edge_id_list.append(model_device_client.get_edge_id()) + self.model_device_client_edge_id_list.append(model_device_client.bind_device()) self.args = copy.deepcopy(in_args) if self.model_device_server is None: @@ -91,8 +89,7 @@ def _init_extra_items(self): if infer_redis_password is not None: self.model_device_server.redis_password = infer_redis_password - self.model_device_server.start() - self.model_device_server_id = self.model_device_server.get_edge_id() + self.model_device_server_id = self.model_device_server.bind_device() # Save the deployed master and worker id list to the environment variable. os.environ["FEDML_DEPLOY_MASTER_ID"] = str(self.model_device_server_id) @@ -102,4 +99,4 @@ def _init_extra_items(self): self.args = copy.deepcopy(in_args) self.mlops_metrics.stop_device_realtime_perf() self.mlops_metrics.report_device_realtime_perf(self.args, self.args.agent_config["mqtt_config"]) - pass \ No newline at end of file + pass diff --git a/python/fedml/computing/scheduler/slave/united_agents.py b/python/fedml/computing/scheduler/slave/united_agents.py new file mode 100755 index 0000000000..e365de8860 --- /dev/null +++ b/python/fedml/computing/scheduler/slave/united_agents.py @@ -0,0 +1,67 @@ + +from fedml.computing.scheduler.scheduler_core.account_manager import FedMLAccountManager +from fedml.computing.scheduler.slave.slave_agent import FedMLLaunchSlaveAgent +from fedml.computing.scheduler.master.master_agent import FedMLLaunchMasterAgent +from fedml.computing.scheduler.model_scheduler.model_device_server import FedMLDeployMasterAgent +from fedml.computing.scheduler.model_scheduler.model_device_client import FedMLDeployWorkerAgent +from fedml.core.common.singleton import Singleton + + +class FedMLUnitedAgent(Singleton): + + @staticmethod + def get_instance(): + return FedMLUnitedAgent() + + def logout(self): + FedMLLaunchSlaveAgent.logout() + + def login(self, userid, api_key=None, device_id=None, + os_name=None, need_to_check_gpu=False, role=None, runner_cmd=None): + # Create the launch master/slave and deploy master/slave agents. + launch_slave_agent = FedMLLaunchSlaveAgent() + launch_master_agent = FedMLLaunchMasterAgent() + deploy_slave_agent = FedMLDeployWorkerAgent() + deploy_master_agent = FedMLDeployMasterAgent() + + # Login with the launch slave role + launch_slave_agent.login( + api_key, api_key=api_key, device_id=device_id, + os_name=os_name, role=role + ) + + # Get the communication manager, sender message queue and status center queue + shared_communication_mgr = launch_slave_agent.get_protocol_manager().get_get_protocol_communication_manager() + shared_sender_message_queue = launch_slave_agent.get_protocol_manager().get_protocol_sender_message_queue() + shared_status_center_queue = launch_slave_agent.get_protocol_manager().get_get_protocol_status_center_queue() + + # Login with the launch master role based on the shared communication manager + launch_master_agent.login( + api_key, api_key=api_key, device_id=device_id, + os_name=os_name, runner_cmd=runner_cmd, + role=FedMLAccountManager.ROLE_GPU_MASTER_SERVER, + communication_manager=shared_communication_mgr, + sender_message_queue=shared_sender_message_queue, + status_center_queue=shared_status_center_queue + ) + + # Login with the deployment master role based on the shared communication manager + deploy_master_agent.login( + userid, api_key=api_key, device_id=device_id, + os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM, + communication_manager=shared_communication_mgr, + sender_message_queue=shared_sender_message_queue, + status_center_queue=shared_status_center_queue + ) + + # Login with the deployment slave role based on the shared communication manager + deploy_slave_agent.login( + userid, api_key=api_key, device_id=device_id, + os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM, + communication_manager=shared_communication_mgr, + sender_message_queue=shared_sender_message_queue, + status_center_queue=shared_status_center_queue + ) + + # Start the slave agent to connect to servers and loop forever. + launch_slave_agent.start() diff --git a/python/fedml/core/mlops/__init__.py b/python/fedml/core/mlops/__init__.py index 148427fe1f..121c8e26bb 100644 --- a/python/fedml/core/mlops/__init__.py +++ b/python/fedml/core/mlops/__init__.py @@ -1453,12 +1453,14 @@ def release_resources(run_id, device_id): MLOpsConstants.MSG_TOPIC_LAUNCH_RELEASE_GPU_IDS, json.dumps(payload)) -def sync_deploy_id(device_id, master_deploy_id, worker_deploy_id_list): - fedml_args = get_fedml_args() - - setup_log_mqtt_mgr() - +def sync_deploy_id(device_id, master_deploy_id, worker_deploy_id_list, message_center=None): payload = {"device_id": device_id, "master_deploy_id": master_deploy_id, "worker_deploy_ids": worker_deploy_id_list} - MLOpsStore.mlops_log_mqtt_mgr.send_message_json( - MLOpsConstants.MSG_TOPIC_LAUNCH_SYNC_DEPLOY_IDS, json.dumps(payload)) + if message_center is None: + fedml_args = get_fedml_args() + setup_log_mqtt_mgr() + MLOpsStore.mlops_log_mqtt_mgr.send_message_json( + MLOpsConstants.MSG_TOPIC_LAUNCH_SYNC_DEPLOY_IDS, json.dumps(payload)) + else: + message_center.send_message( MLOpsConstants.MSG_TOPIC_LAUNCH_SYNC_DEPLOY_IDS, json.dumps(payload)) + From edd148e42a8c2afdf194907cb7bd64804709c9ad Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 12 Jun 2024 02:45:48 +0800 Subject: [PATCH 02/23] [CoreEngine] Use the fork process on the MacOS and linux to avoid the crash issue. --- .../master/base_master_job_runner.py | 2 +- .../scheduler_core/message_center.py | 5 +++-- .../scheduler_base_job_runner.py | 4 +++- .../scheduler/scheduler_core/status_center.py | 4 +++- .../scheduler/slave/base_slave_job_runner.py | 3 ++- python/fedml/core/mlops/mlops_device_perfs.py | 19 ++++++++++--------- python/fedml/core/mlops/mlops_job_perfs.py | 5 +++-- .../core/mlops/mlops_runtime_log_daemon.py | 4 ++-- 8 files changed, 27 insertions(+), 19 deletions(-) diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner.py b/python/fedml/computing/scheduler/master/base_master_job_runner.py index 9ebab258bb..1383c9058c 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner.py @@ -425,7 +425,7 @@ def start_runner_process( server_runner.edge_id_status_queue = self.run_edge_id_status_queue server_runner.edge_device_info_queue = self.run_edge_device_info_queue self.run_extend_queue_list = self._generate_extend_queue_list() - self.run_process = Process( + self.run_process = fedml.get_multiprocessing_context().Process( target=server_runner.run if not is_server_job else server_runner.run_server_job, args=( self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index f698d61816..74510c6939 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -10,6 +10,7 @@ import queue from os.path import expanduser +import fedml from fedml.core.distributed.communication.mqtt.mqtt_manager import MqttManager from ..slave.client_constants import ClientConstants from ....core.mlops.mlops_metrics import MLOpsMetrics @@ -137,7 +138,7 @@ def start_sender(self, message_center_name=None): self.message_event.clear() message_center = FedMLMessageCenter(agent_config=self.sender_agent_config, sender_message_queue=self.sender_message_queue) - self.message_center_process = Process( + self.message_center_process = fedml.get_multiprocessing_context().Process( target=message_center.run_sender, args=( self.message_event, self.sender_message_queue, message_center_name @@ -314,7 +315,7 @@ def start_listener( self.listener_agent_config = agent_config message_runner = self.get_message_runner() message_runner.listener_agent_config = agent_config - self.listener_message_center_process = Process( + self.listener_message_center_process = fedml.get_multiprocessing_context().Process( target=message_runner.run_listener_dispatcher, args=( self.listener_message_event, self.listener_message_queue, self.listener_handler_funcs, sender_message_queue, diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py index 6e0010f556..44562c65f0 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py @@ -9,6 +9,8 @@ import traceback import zipfile import queue + +import fedml from ..comm_utils.constants import SchedulerConstants from ..comm_utils.job_utils import JobRunnerUtils, DockerArgs from ..scheduler_entry.constants import Constants @@ -209,7 +211,7 @@ def retrieve_and_unzip_package(self, package_name, package_url): from multiprocessing import Process completed_event = multiprocessing.Event() info_queue = multiprocessing.Queue() - download_process = Process(target=self.download_package_proc, + download_process = fedml.get_multiprocessing_context().Process(target=self.download_package_proc, args=(package_url, local_package_file, completed_event, info_queue)) download_process.start() allowed_block_download_time = 60 diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index 53dd73c1df..0897f94c19 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -5,6 +5,8 @@ import multiprocessing from multiprocessing import Process, Queue import queue + +import fedml from .message_common import FedMLMessageEntity, FedMLStatusEntity from .message_center import FedMLMessageCenter import traceback @@ -114,7 +116,7 @@ def start_status_center(self, sender_message_center_queue=None, self.status_runner = self.get_status_runner() target_func = self.status_runner.run_status_dispatcher if not is_slave_agent else \ self.status_runner.run_status_dispatcher_in_slave - self.status_center_process = Process( + self.status_center_process = fedml.get_multiprocessing_context().Process( target=target_func, args=( self.status_event, self.status_queue, self.status_sender_message_center_queue, self.status_listener_message_center_queue diff --git a/python/fedml/computing/scheduler/slave/base_slave_job_runner.py b/python/fedml/computing/scheduler/slave/base_slave_job_runner.py index 5e530dbba7..a495a17dd0 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_job_runner.py +++ b/python/fedml/computing/scheduler/slave/base_slave_job_runner.py @@ -7,6 +7,7 @@ import traceback from abc import ABC, abstractmethod +import fedml from ....core.mlops.mlops_runtime_log import MLOpsRuntimeLog from ....core.mlops.mlops_runtime_log_daemon import MLOpsRuntimeLogDaemon from .client_data_interface import FedMLClientDataInterface @@ -259,7 +260,7 @@ def start_runner_process( client_runner.server_id = request_json.get("server_id", "0") self.run_extend_queue_list = self._generate_extend_queue_list() logging.info("start the runner process.") - self.run_process = Process(target=client_runner.run, args=( + self.run_process = fedml.get_multiprocessing_context().Process(target=client_runner.run, args=( self.run_process_event, self.run_process_completed_event, self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue )) diff --git a/python/fedml/core/mlops/mlops_device_perfs.py b/python/fedml/core/mlops/mlops_device_perfs.py index 29183a6e78..13fca2e354 100644 --- a/python/fedml/core/mlops/mlops_device_perfs.py +++ b/python/fedml/core/mlops/mlops_device_perfs.py @@ -9,6 +9,7 @@ import multiprocessing import psutil +import fedml from fedml.computing.scheduler.comm_utils import sys_utils from .device_info_report_protocol import FedMLDeviceInfoReportProtocol from .mlops_utils import MLOpsUtils @@ -76,52 +77,52 @@ def setup_realtime_stats_process(self, sys_args): self.device_realtime_stats_event.clear() perf_stats.device_realtime_stats_event = self.device_realtime_stats_event - self.device_realtime_stats_process = multiprocessing.Process( + self.device_realtime_stats_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client)) self.device_realtime_stats_process.start() if self.enable_job_total_monitor: - self.job_total_monitor_process = multiprocessing.Process( + self.job_total_monitor_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client)) self.job_total_monitor_process.start() else: if self.is_client: - self.monitor_endpoint_master_process = multiprocessing.Process( + self.monitor_endpoint_master_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER)) self.monitor_endpoint_master_process.start() - self.monitor_run_slave_process = multiprocessing.Process( + self.monitor_run_slave_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE)) self.monitor_run_slave_process.start() - self.monitor_endpoint_logs_process = multiprocessing.Process( + self.monitor_endpoint_logs_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS)) self.monitor_endpoint_logs_process.start() # Register auto-scaler process - self.monitor_auto_scaler_process = multiprocessing.Process( + self.monitor_auto_scaler_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER)) self.monitor_auto_scaler_process.start() # Register replica number report channel - self.monitor_replica_num_process = multiprocessing.Process( + self.monitor_replica_num_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM)) self.monitor_replica_num_process.start() # Register replica performance report channel - self.monitor_replica_perf_process = multiprocessing.Process( + self.monitor_replica_perf_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF)) self.monitor_replica_perf_process.start() else: - self.monitor_run_master_process = multiprocessing.Process( + self.monitor_run_master_process = fedml.get_multiprocessing_context().Process( target=perf_stats.report_device_realtime_stats_entry, args=(self.device_realtime_stats_event, ROLE_RUN_MASTER)) self.monitor_run_master_process.start() diff --git a/python/fedml/core/mlops/mlops_job_perfs.py b/python/fedml/core/mlops/mlops_job_perfs.py index fe3d921558..b1f674a5c9 100644 --- a/python/fedml/core/mlops/mlops_job_perfs.py +++ b/python/fedml/core/mlops/mlops_job_perfs.py @@ -8,6 +8,7 @@ import multiprocess as multiprocessing import psutil +import fedml from .mlops_utils import MLOpsUtils from .system_stats import SysStats from ...core.distributed.communication.mqtt.mqtt_manager import MqttManager @@ -139,8 +140,8 @@ def setup_job_stats_process(self, sys_args): perf_stats.job_stats_event = self.job_stats_event perf_stats.job_process_id_map = self.job_process_id_map - self.job_stats_process = multiprocessing.Process(target=perf_stats.report_job_stats_entry, - args=(self.job_stats_event,)) + self.job_stats_process = fedml.get_multiprocessing_context().Process( + target=perf_stats.report_job_stats_entry, args=(self.job_stats_event,)) self.job_stats_process.start() def report_job_stats(self, sys_args): diff --git a/python/fedml/core/mlops/mlops_runtime_log_daemon.py b/python/fedml/core/mlops/mlops_runtime_log_daemon.py index ff06dc91b3..88d49b7a22 100644 --- a/python/fedml/core/mlops/mlops_runtime_log_daemon.py +++ b/python/fedml/core/mlops/mlops_runtime_log_daemon.py @@ -431,8 +431,8 @@ def start_log_processor(self, log_run_id, log_device_id, log_source=None, log_fi self.log_process_event_map[event_map_id] = multiprocessing.Event() self.log_process_event_map[event_map_id].clear() log_processor.log_process_event = self.log_process_event_map[event_map_id] - log_child_process = multiprocessing.Process(target=log_processor.log_process, - args=(self.log_process_event_map[event_map_id],)) + log_child_process = fedml.get_multiprocessing_context().Process( + target=log_processor.log_process, args=(self.log_process_event_map[event_map_id],)) # process = threading.Thread(target=log_processor.log_process) # process.start() if log_child_process is not None: From fd5af7ec6ff09d2c7e1d4051a33758353f17e987 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 12 Jun 2024 02:47:53 +0800 Subject: [PATCH 03/23] [CoreEngine] Use the fork process on the MacOS and linux to avoid the crash issue. --- python/fedml/__init__.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/python/fedml/__init__.py b/python/fedml/__init__.py index c96d65adc5..e5ba1b304b 100644 --- a/python/fedml/__init__.py +++ b/python/fedml/__init__.py @@ -452,14 +452,21 @@ def _init_multiprocessing(): """ if platform.system() == "Windows": if multiprocessing.get_start_method() != "spawn": - # force all platforms (Windows/Linux/macOS) to use the same way (spawn) for multiprocessing + # force all platforms (Windows) to use the same way (spawn) for multiprocessing multiprocessing.set_start_method("spawn", force=True) else: if multiprocessing.get_start_method() != "fork": - # force all platforms (Windows/Linux/macOS) to use the same way (fork) for multiprocessing + # force all platforms (Linux/macOS) to use the same way (fork) for multiprocessing multiprocessing.set_start_method("fork", force=True) +def get_multiprocessing_context(): + if platform.system() == "Windows": + return multiprocessing.get_context("spawn") + else: + return multiprocessing.get_context("fork") + + def set_env_version(version): set_env_kv("FEDML_ENV_VERSION", version) load_env() From 653fe660df5a79db4375b4f7311290fc32d9cdac Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 12 Jun 2024 05:05:31 +0800 Subject: [PATCH 04/23] [CoreEngine] make the multiprocess work on windows, linux and mac. --- python/fedml/__init__.py | 7 ++ .../master/base_master_job_runner.py | 45 ++++---- .../model_scheduler/master_job_runner.py | 3 +- .../scheduler_core/message_center.py | 47 +++++--- .../scheduler_base_job_runner.py | 12 ++- .../scheduler/scheduler_core/status_center.py | 22 ++-- .../scheduler/slave/base_slave_job_runner.py | 16 ++- python/fedml/core/mlops/mlops_device_perfs.py | 100 +++++++++++++----- python/fedml/core/mlops/mlops_job_perfs.py | 10 +- .../core/mlops/mlops_runtime_log_daemon.py | 9 +- 10 files changed, 190 insertions(+), 81 deletions(-) diff --git a/python/fedml/__init__.py b/python/fedml/__init__.py index e5ba1b304b..bf07838e56 100644 --- a/python/fedml/__init__.py +++ b/python/fedml/__init__.py @@ -467,6 +467,13 @@ def get_multiprocessing_context(): return multiprocessing.get_context("fork") +def get_process(target=None, args=None): + if platform.system() == "Windows": + return multiprocessing.Process(target=target, args=args) + else: + return multiprocessing.get_context("fork").Process(target=target, args=args) + + def set_env_version(version): set_env_kv("FEDML_ENV_VERSION", version) load_env() diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner.py b/python/fedml/computing/scheduler/master/base_master_job_runner.py index 1383c9058c..fe2d426af4 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner.py @@ -19,7 +19,6 @@ from fedml.utils.debugging import debug from ..scheduler_core.status_center import JobStatus from ..scheduler_core.compute_cache_manager import ComputeCacheManager -from multiprocessing import Process, Queue from ..scheduler_core.general_constants import GeneralConstants from ..scheduler_core.scheduler_base_job_runner import FedMLSchedulerBaseJobRunner, RunnerError, RunnerCompletedError from abc import ABC, abstractmethod @@ -43,13 +42,13 @@ def __init__(self, args, run_id=0, request_json=None, agent_config=None, edge_id is_master_runner=True ) - self.run_edge_id_status_queue = Queue() - self.run_metrics_queue = Queue() - self.run_events_queue = Queue() - self.run_artifacts_queue = Queue() - self.run_logs_queue = Queue() - self.run_edge_device_info_queue = Queue() - self.run_edge_device_info_global_queue = Queue() + self.run_edge_id_status_queue = multiprocessing.Manager().Queue(-1) + self.run_metrics_queue = multiprocessing.Manager().Queue(-1) + self.run_events_queue = multiprocessing.Manager().Queue(-1) + self.run_artifacts_queue = multiprocessing.Manager().Queue(-1) + self.run_logs_queue = multiprocessing.Manager().Queue(-1) + self.run_edge_device_info_queue = multiprocessing.Manager().Queue(-1) + self.run_edge_device_info_global_queue = multiprocessing.Manager().Queue(-1) self.run_extend_queue_list = None self.async_check_timeout = 0 self.enable_async_cluster = False @@ -425,14 +424,24 @@ def start_runner_process( server_runner.edge_id_status_queue = self.run_edge_id_status_queue server_runner.edge_device_info_queue = self.run_edge_device_info_queue self.run_extend_queue_list = self._generate_extend_queue_list() - self.run_process = fedml.get_multiprocessing_context().Process( - target=server_runner.run if not is_server_job else server_runner.run_server_job, args=( - self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, - self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, - self.run_artifacts_queue, self.run_logs_queue, self.run_edge_device_info_global_queue, - self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue + if platform.system() == "Windows": + self.run_process = multiprocessing.Process( + target=server_runner.run if not is_server_job else server_runner.run_server_job, args=( + self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, + self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, + self.run_artifacts_queue, self.run_logs_queue, self.run_edge_device_info_global_queue, + self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue + ) + ) + else: + self.run_process = fedml.get_process( + target=server_runner.run if not is_server_job else server_runner.run_server_job, args=( + self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, + self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, + self.run_artifacts_queue, self.run_logs_queue, self.run_edge_device_info_global_queue, + self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue + ) ) - ) self.run_process.start() ServerConstants.save_run_process(run_id, self.run_process.pid) return self.run_process @@ -444,7 +453,7 @@ def put_run_edge_device_info_to_queue(self, run_id, edge_id, device_info): if int(edge_id) in edge_ids or str(edge_id) in edge_ids: run_id_str = str(run_id) if self.run_edge_device_info_queue is None: - self.run_edge_device_info_queue = Queue() + self.run_edge_device_info_queue = multiprocessing.Manager().Queue(-1) self.run_edge_device_info_queue.put(device_info) def should_continue_run_job(self, run_id): @@ -572,7 +581,7 @@ def callback_run_logs(self, topic, payload): run_id = str(topic).split('/')[-1] run_id_str = str(run_id) if self.run_logs_queue is None: - self.run_logs_queue = Queue() + self.run_logs_queue = multiprocessing.Manager().Queue(-1) self.run_logs_queue.put(payload) def callback_run_metrics(self, topic, payload): @@ -580,7 +589,7 @@ def callback_run_metrics(self, topic, payload): run_id = str(topic).split('/')[-1] run_id_str = str(run_id) if self.run_metrics_queue is None: - self.run_metrics_queue = Queue() + self.run_metrics_queue = multiprocessing.Manager().Queue(-1) self.run_metrics_queue.put(payload) # def send_training_request_to_edges(self, active_edge_info_dict): diff --git a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py index a10bd2c559..e504ded561 100755 --- a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py +++ b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py @@ -6,7 +6,6 @@ import queue import traceback from abc import ABC -from multiprocessing import Queue import fedml from fedml.core.mlops import MLOpsRuntimeLog, MLOpsConfigs @@ -50,7 +49,7 @@ def __init__(self, args, run_id=0, request_json=None, agent_config=None, edge_id self.replica_controller = None self.deployed_replica_payload = None self.slave_deployment_results_map = dict() - self.deployment_result_queue = Queue() + self.deployment_result_queue = multiprocessing.Manager().Queue(-1) self.is_fresh_endpoint = True # Override diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index 74510c6939..2bfa3b514f 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -1,12 +1,12 @@ import json import logging import os +import platform import threading import time import traceback import uuid import multiprocessing -from multiprocessing import Process, Queue import queue from os.path import expanduser @@ -133,17 +133,25 @@ def get_sender_message_queue(self): return self.sender_message_queue def start_sender(self, message_center_name=None): - self.sender_message_queue = Queue() + self.sender_message_queue = multiprocessing.Manager().Queue(-1) self.message_event = multiprocessing.Event() self.message_event.clear() message_center = FedMLMessageCenter(agent_config=self.sender_agent_config, sender_message_queue=self.sender_message_queue) - self.message_center_process = fedml.get_multiprocessing_context().Process( - target=message_center.run_sender, args=( - self.message_event, self.sender_message_queue, - message_center_name + if platform.system() == "Windows": + self.message_center_process = multiprocessing.Process( + target=message_center.run_sender, args=( + self.message_event, self.sender_message_queue, + message_center_name + ) + ) + else: + self.message_center_process = fedml.get_process( + target=message_center.run_sender, args=( + self.message_event, self.sender_message_queue, + message_center_name + ) ) - ) self.message_center_process.start() def stop(self): @@ -296,7 +304,7 @@ def get_listener_message_queue(self): return self.listener_message_queue def setup_listener_message_queue(self): - self.listener_message_queue = Queue() + self.listener_message_queue = multiprocessing.Manager().Queue(-1) def start_listener( self, sender_message_queue=None, listener_message_queue=None, @@ -307,7 +315,7 @@ def start_listener( if listener_message_queue is None: if self.listener_message_queue is None: - self.listener_message_queue = Queue() + self.listener_message_queue = multiprocessing.Manager().Queue(-1) else: self.listener_message_queue = listener_message_queue self.listener_message_event = multiprocessing.Event() @@ -315,13 +323,22 @@ def start_listener( self.listener_agent_config = agent_config message_runner = self.get_message_runner() message_runner.listener_agent_config = agent_config - self.listener_message_center_process = fedml.get_multiprocessing_context().Process( - target=message_runner.run_listener_dispatcher, args=( - self.listener_message_event, self.listener_message_queue, - self.listener_handler_funcs, sender_message_queue, - message_center_name, extra_queues + if platform.system() == "Windows": + self.listener_message_center_process = multiprocessing.Process( + target=message_runner.run_listener_dispatcher, args=( + self.listener_message_event, self.listener_message_queue, + self.listener_handler_funcs, sender_message_queue, + message_center_name, extra_queues + ) + ) + else: + self.listener_message_center_process = fedml.get_process( + target=message_runner.run_listener_dispatcher, args=( + self.listener_message_event, self.listener_message_queue, + self.listener_handler_funcs, sender_message_queue, + message_center_name, extra_queues + ) ) - ) self.listener_message_center_process.start() def check_listener_message_stop_event(self): diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py index 44562c65f0..80de5c5b18 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py @@ -210,9 +210,15 @@ def retrieve_and_unzip_package(self, package_name, package_url): # Open a process to download the package so that we can avoid the request is blocked and check the timeout. from multiprocessing import Process completed_event = multiprocessing.Event() - info_queue = multiprocessing.Queue() - download_process = fedml.get_multiprocessing_context().Process(target=self.download_package_proc, - args=(package_url, local_package_file, completed_event, info_queue)) + info_queue = multiprocessing.Manager().Queue(-1) + if platform.system() == "Windows": + download_process = multiprocessing.Process( + target=self.download_package_proc, + args=(package_url, local_package_file, completed_event, info_queue)) + else: + download_process = fedml.get_process( + target=self.download_package_proc, + args=(package_url, local_package_file, completed_event, info_queue)) download_process.start() allowed_block_download_time = 60 download_finished = False diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index 0897f94c19..7e0cf1f98f 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -1,9 +1,9 @@ import logging +import platform import time from enum import Enum, unique import multiprocessing -from multiprocessing import Process, Queue import queue import fedml @@ -108,7 +108,7 @@ def get_status_runner(self): def start_status_center(self, sender_message_center_queue=None, listener_message_center_queue=None, is_slave_agent=False): - self.status_queue = Queue() + self.status_queue = multiprocessing.Manager().Queue(-1) self.status_event = multiprocessing.Event() self.status_event.clear() self.status_sender_message_center_queue = sender_message_center_queue @@ -116,12 +116,20 @@ def start_status_center(self, sender_message_center_queue=None, self.status_runner = self.get_status_runner() target_func = self.status_runner.run_status_dispatcher if not is_slave_agent else \ self.status_runner.run_status_dispatcher_in_slave - self.status_center_process = fedml.get_multiprocessing_context().Process( - target=target_func, args=( - self.status_event, self.status_queue, self.status_sender_message_center_queue, - self.status_listener_message_center_queue + if platform.system() == "Windows": + self.status_center_process = multiprocessing.Process( + target=target_func, args=( + self.status_event, self.status_queue, self.status_sender_message_center_queue, + self.status_listener_message_center_queue + ) + ) + else: + self.status_center_process = fedml.get_process( + target=target_func, args=( + self.status_event, self.status_queue, self.status_sender_message_center_queue, + self.status_listener_message_center_queue + ) ) - ) self.status_center_process.start() diff --git a/python/fedml/computing/scheduler/slave/base_slave_job_runner.py b/python/fedml/computing/scheduler/slave/base_slave_job_runner.py index a495a17dd0..8876fc7e39 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_job_runner.py +++ b/python/fedml/computing/scheduler/slave/base_slave_job_runner.py @@ -260,9 +260,17 @@ def start_runner_process( client_runner.server_id = request_json.get("server_id", "0") self.run_extend_queue_list = self._generate_extend_queue_list() logging.info("start the runner process.") - self.run_process = fedml.get_multiprocessing_context().Process(target=client_runner.run, args=( - self.run_process_event, self.run_process_completed_event, self.run_extend_queue_list, - sender_message_queue, listener_message_queue, status_center_queue - )) + + if platform.system() == "Windows": + self.run_process = multiprocessing.Process( + target=client_runner.run, args=( + self.run_process_event, self.run_process_completed_event, self.run_extend_queue_list, + sender_message_queue, listener_message_queue, status_center_queue + )) + else: + self.run_process = fedml.get_process(target=client_runner.run, args=( + self.run_process_event, self.run_process_completed_event, self.run_extend_queue_list, + sender_message_queue, listener_message_queue, status_center_queue + )) self.run_process.start() return self.run_process diff --git a/python/fedml/core/mlops/mlops_device_perfs.py b/python/fedml/core/mlops/mlops_device_perfs.py index 13fca2e354..d0f1f3898f 100644 --- a/python/fedml/core/mlops/mlops_device_perfs.py +++ b/python/fedml/core/mlops/mlops_device_perfs.py @@ -1,6 +1,7 @@ import json import logging import os +import platform import time import traceback import uuid @@ -77,54 +78,99 @@ def setup_realtime_stats_process(self, sys_args): self.device_realtime_stats_event.clear() perf_stats.device_realtime_stats_event = self.device_realtime_stats_event - self.device_realtime_stats_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client)) + if platform.system() == "Windows": + self.device_realtime_stats_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client)) + else: + self.device_realtime_stats_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client)) self.device_realtime_stats_process.start() if self.enable_job_total_monitor: - self.job_total_monitor_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client)) + if platform.system() == "Windows": + self.job_total_monitor_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client)) + else: + self.job_total_monitor_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client)) self.job_total_monitor_process.start() else: if self.is_client: - self.monitor_endpoint_master_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER)) + if platform.system() == "Windows": + self.monitor_endpoint_master_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER)) + else: + self.monitor_endpoint_master_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER)) self.monitor_endpoint_master_process.start() - self.monitor_run_slave_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE)) + if platform.system() == "Windows": + self.monitor_run_slave_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE)) + else: + self.monitor_run_slave_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE)) self.monitor_run_slave_process.start() - self.monitor_endpoint_logs_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS)) + if platform.system() == "Windows": + self.monitor_endpoint_logs_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS)) + else: + self.monitor_endpoint_logs_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS)) self.monitor_endpoint_logs_process.start() # Register auto-scaler process - self.monitor_auto_scaler_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER)) + if platform.system() == "Windows": + self.monitor_auto_scaler_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER)) + else: + self.monitor_auto_scaler_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER)) self.monitor_auto_scaler_process.start() # Register replica number report channel - self.monitor_replica_num_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM)) + if platform.system() == "Windows": + self.monitor_replica_num_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM)) + else: + self.monitor_replica_num_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM)) self.monitor_replica_num_process.start() # Register replica performance report channel - self.monitor_replica_perf_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF)) + if platform.system() == "Windows": + self.monitor_replica_perf_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF)) + else: + self.monitor_replica_perf_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF)) self.monitor_replica_perf_process.start() else: - self.monitor_run_master_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_RUN_MASTER)) + if platform.system() == "Windows": + self.monitor_run_master_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_RUN_MASTER)) + else: + self.monitor_run_master_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_RUN_MASTER)) self.monitor_run_master_process.start() def report_device_realtime_stats_entry(self, sys_event, role, is_client=False): diff --git a/python/fedml/core/mlops/mlops_job_perfs.py b/python/fedml/core/mlops/mlops_job_perfs.py index b1f674a5c9..e834ed4a0c 100644 --- a/python/fedml/core/mlops/mlops_job_perfs.py +++ b/python/fedml/core/mlops/mlops_job_perfs.py @@ -1,6 +1,7 @@ import json import logging import os +import platform import time import traceback import uuid @@ -139,9 +140,12 @@ def setup_job_stats_process(self, sys_args): self.job_stats_event.clear() perf_stats.job_stats_event = self.job_stats_event perf_stats.job_process_id_map = self.job_process_id_map - - self.job_stats_process = fedml.get_multiprocessing_context().Process( - target=perf_stats.report_job_stats_entry, args=(self.job_stats_event,)) + if platform.system() == "Windows": + self.job_stats_process = multiprocessing.Process( + target=perf_stats.report_job_stats_entry, args=(self.job_stats_event,)) + else: + self.job_stats_process = fedml.get_process( + target=perf_stats.report_job_stats_entry, args=(self.job_stats_event,)) self.job_stats_process.start() def report_job_stats(self, sys_args): diff --git a/python/fedml/core/mlops/mlops_runtime_log_daemon.py b/python/fedml/core/mlops/mlops_runtime_log_daemon.py index 88d49b7a22..f72d88cfea 100644 --- a/python/fedml/core/mlops/mlops_runtime_log_daemon.py +++ b/python/fedml/core/mlops/mlops_runtime_log_daemon.py @@ -1,6 +1,7 @@ import argparse import logging import os +import platform import shutil import threading import time @@ -431,8 +432,12 @@ def start_log_processor(self, log_run_id, log_device_id, log_source=None, log_fi self.log_process_event_map[event_map_id] = multiprocessing.Event() self.log_process_event_map[event_map_id].clear() log_processor.log_process_event = self.log_process_event_map[event_map_id] - log_child_process = fedml.get_multiprocessing_context().Process( - target=log_processor.log_process, args=(self.log_process_event_map[event_map_id],)) + if platform.system() == "Windows": + log_child_process = multiprocessing.Process( + target=log_processor.log_process, args=(self.log_process_event_map[event_map_id],)) + else: + log_child_process = fedml.get_process( + target=log_processor.log_process, args=(self.log_process_event_map[event_map_id],)) # process = threading.Thread(target=log_processor.log_process) # process.start() if log_child_process is not None: From 0b2349983b5fabe50666d0f845cc2e94433fdf91 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 12 Jun 2024 23:08:06 +0800 Subject: [PATCH 05/23] [CoreEngine] make the status center work in the united agents. --- .../scheduler/comm_utils/sys_utils.py | 21 +++++++++++++ .../scheduler/master/base_master_agent.py | 3 ++ .../model_scheduler/master_job_runner.py | 1 + .../scheduler_base_protocol_manager.py | 2 +- .../scheduler/slave/united_agents.py | 31 +++++++++++-------- 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/python/fedml/computing/scheduler/comm_utils/sys_utils.py b/python/fedml/computing/scheduler/comm_utils/sys_utils.py index aaa37bc4db..065482c23b 100644 --- a/python/fedml/computing/scheduler/comm_utils/sys_utils.py +++ b/python/fedml/computing/scheduler/comm_utils/sys_utils.py @@ -114,6 +114,8 @@ def get_sys_runner_info(): except: pass + enable_simulation_gpu, simulation_gpu_count = get_simulation_gpu_env() + if enable_simulation_gpu: gpu_count = simulation_gpu_count gpu_total_mem = "80G" @@ -128,9 +130,26 @@ def get_sys_runner_info(): gpu_count, gpu_vendor, cpu_count, gpu_device_name +def get_simulation_gpu_env(): + _enable_simulation_gpu = enable_simulation_gpu + _simulation_gpu_count = simulation_gpu_count + + env_enable_simulation_gpu = os.getenv("FEDML_ENABLE_SIMULATION_GPU", None) + if env_enable_simulation_gpu is not None: + _enable_simulation_gpu = True if env_enable_simulation_gpu == "1" or env_enable_simulation_gpu == 1 else False + + env_simulation_gpu_count = os.getenv("FEDML_SIMULATION_GPU_COUNT", None) + if env_simulation_gpu_count is not None: + _simulation_gpu_count = int(env_simulation_gpu_count) + + return _enable_simulation_gpu, _simulation_gpu_count + + # GPU list: [GPU(ID, uuid, load, memoryTotal, memoryUsed, memoryFree, driver, # gpu_name, serial, display_mode, display_active, temperature)] def get_gpu_list(): + enable_simulation_gpu, simulation_gpu_count = get_simulation_gpu_env() + if enable_simulation_gpu: ret_gpu_list = [ {'ID': 0, 'uuid': 'GPU-dab987f0-be09-294a-96d6-f9afeef49877', 'load': 1.0, @@ -184,6 +203,8 @@ def get_gpu_list(): def get_available_gpu_id_list(limit=1) -> List[int]: + enable_simulation_gpu, simulation_gpu_count = get_simulation_gpu_env() + if enable_simulation_gpu: available_gpu_ids = [0, 1, 2, 3, 4, 5, 6, 7] if simulation_gpu_count > 8: diff --git a/python/fedml/computing/scheduler/master/base_master_agent.py b/python/fedml/computing/scheduler/master/base_master_agent.py index b27ed9547a..d6c6420cf3 100755 --- a/python/fedml/computing/scheduler/master/base_master_agent.py +++ b/python/fedml/computing/scheduler/master/base_master_agent.py @@ -123,6 +123,9 @@ def _init_logs(self, agent_args, edge_id): in_args.server_agent_id = edge_id MLOpsRuntimeLog.get_instance(in_args).init_logs() + def get_protocol_manager(self): + return self.protocol_mgr + @abstractmethod def _get_log_file_dir(self): pass diff --git a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py index e504ded561..61cce1b39c 100755 --- a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py +++ b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py @@ -1,6 +1,7 @@ import copy import json import logging +import multiprocessing import os import time import queue diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py index bd843eecc2..f80508a509 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py @@ -288,7 +288,7 @@ def get_get_protocol_communication_manager(self): def get_protocol_sender_message_queue(self): return self.message_center.get_sender_message_queue() - def get_get_protocol_status_center_queue(self): + def get_protocol_status_center_queue(self): return self.get_status_queue() def send_agent_active_msg(self, edge_id): diff --git a/python/fedml/computing/scheduler/slave/united_agents.py b/python/fedml/computing/scheduler/slave/united_agents.py index e365de8860..7135925ec8 100755 --- a/python/fedml/computing/scheduler/slave/united_agents.py +++ b/python/fedml/computing/scheduler/slave/united_agents.py @@ -25,42 +25,47 @@ def login(self, userid, api_key=None, device_id=None, deploy_master_agent = FedMLDeployMasterAgent() # Login with the launch slave role - launch_slave_agent.login( + login_result = launch_slave_agent.login( api_key, api_key=api_key, device_id=device_id, os_name=os_name, role=role ) - # Get the communication manager, sender message queue and status center queue + # Get the communication manager, sender message queue shared_communication_mgr = launch_slave_agent.get_protocol_manager().get_get_protocol_communication_manager() shared_sender_message_queue = launch_slave_agent.get_protocol_manager().get_protocol_sender_message_queue() - shared_status_center_queue = launch_slave_agent.get_protocol_manager().get_get_protocol_status_center_queue() - # Login with the launch master role based on the shared communication manager + # Login with the launch master role based on + # the shared communication manager, sender message center launch_master_agent.login( - api_key, api_key=api_key, device_id=device_id, + api_key, api_key=api_key, device_id=login_result.device_id, os_name=os_name, runner_cmd=runner_cmd, role=FedMLAccountManager.ROLE_GPU_MASTER_SERVER, communication_manager=shared_communication_mgr, - sender_message_queue=shared_sender_message_queue, - status_center_queue=shared_status_center_queue + sender_message_queue=shared_sender_message_queue ) - # Login with the deployment master role based on the shared communication manager + # Get the status center queue + shared_slave_status_center_queue = launch_slave_agent.get_protocol_manager().get_protocol_status_center_queue() + shared_master_status_center_queue = launch_master_agent.get_protocol_manager().get_protocol_status_center_queue() + + # Login with the deployment master role based on + # the shared communication manager, sender message center, status center deploy_master_agent.login( - userid, api_key=api_key, device_id=device_id, + userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM, communication_manager=shared_communication_mgr, sender_message_queue=shared_sender_message_queue, - status_center_queue=shared_status_center_queue + status_center_queue=shared_master_status_center_queue ) - # Login with the deployment slave role based on the shared communication manager + # Login with the deployment slave role based on + # the shared communication manager, sender message center, status center deploy_slave_agent.login( - userid, api_key=api_key, device_id=device_id, + userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM, communication_manager=shared_communication_mgr, sender_message_queue=shared_sender_message_queue, - status_center_queue=shared_status_center_queue + status_center_queue=shared_slave_status_center_queue ) # Start the slave agent to connect to servers and loop forever. From a1af6151947309306a1425b86e54e9e2175ffed6 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 17 Jun 2024 14:47:10 +0800 Subject: [PATCH 06/23] [CoreEngine] refactor to support to pass the communication manager, status center and message center to agents. --- .../scheduler/comm_utils/job_monitor.py | 12 ++- .../scheduler/master/base_master_agent.py | 13 +++ .../master/base_master_job_runner.py | 20 ++--- .../master/base_master_job_runner_manager.py | 84 ++++++++++++++++--- .../master/base_master_protocol_manager.py | 29 +++++-- .../scheduler/master/cloud_server_manager.py | 18 +++- .../master/master_protocol_manager.py | 4 + .../model_scheduler/master_job_runner.py | 2 +- .../scheduler_core/message_center.py | 27 +++++- .../scheduler_base_job_runner.py | 2 +- .../scheduler_base_protocol_manager.py | 9 +- .../scheduler/scheduler_core/status_center.py | 5 +- .../scheduler/slave/base_slave_agent.py | 1 + .../scheduler/slave/client_data_interface.py | 9 ++ .../scheduler/slave/united_agents.py | 11 +-- 15 files changed, 200 insertions(+), 46 deletions(-) diff --git a/python/fedml/computing/scheduler/comm_utils/job_monitor.py b/python/fedml/computing/scheduler/comm_utils/job_monitor.py index a7d5214a02..916883fd0f 100644 --- a/python/fedml/computing/scheduler/comm_utils/job_monitor.py +++ b/python/fedml/computing/scheduler/comm_utils/job_monitor.py @@ -166,7 +166,7 @@ def autoscaler_reconcile_after_interval(self): # Get cached token for authorization of autoscale request cached_token = fedml_model_cache.get_end_point_token(e_id, e_name, model_name) if cached_token is None: - logging.error(f"Failed to get the cached token for endpoint {e_id}.") + # logging.error(f"Failed to get the cached token for endpoint {e_id}.") return req_header = { @@ -228,7 +228,7 @@ def monitor_replicas_number(): cached_token = FedMLModelCache.get_instance().get_end_point_token_with_eid(endpoint_id) if cached_token is None: - logging.error(f"Failed to get the cached token for endpoint {endpoint_id}.") + # logging.error(f"Failed to get the cached token for endpoint {endpoint_id}.") return req_header = { @@ -338,6 +338,10 @@ def monitor_replicas_perf(edge_id, mqtt_mgr=None): def monitor_slave_run_process_status(self): try: count = 0 + try: + client_data_interface.FedMLClientDataInterface.get_instance().create_job_table() + except Exception as e: + pass job_list = client_data_interface.FedMLClientDataInterface.get_instance().get_jobs_from_db() for job in job_list.job_list: count += 1 @@ -447,6 +451,10 @@ def monitor_master_run_process_status(self, server_id, device_info_reporter=None try: ComputeCacheManager.get_instance().set_redis_params() count = 0 + try: + server_data_interface.FedMLServerDataInterface.get_instance().create_job_table() + except Exception as e: + pass job_list = server_data_interface.FedMLServerDataInterface.get_instance().get_jobs_from_db() for job in job_list.job_list: count += 1 diff --git a/python/fedml/computing/scheduler/master/base_master_agent.py b/python/fedml/computing/scheduler/master/base_master_agent.py index d6c6420cf3..39898b5d40 100755 --- a/python/fedml/computing/scheduler/master/base_master_agent.py +++ b/python/fedml/computing/scheduler/master/base_master_agent.py @@ -95,6 +95,7 @@ def _initialize_protocol_manager( self._init_database() # Initialize the master protocol + self.protocol_mgr.set_parent_agent(self) self.protocol_mgr.initialize( communication_manager=communication_manager, sender_message_queue=sender_message_queue, @@ -141,3 +142,15 @@ def _init_database(self): @abstractmethod def _generate_protocol_manager_instance(self, args, agent_config=None): return None + + def start_master_server_instance(self, payload): + self.protocol_mgr.start_master_server_instance(payload) + + def generate_agent_instance(self): + return FedMLBaseMasterAgent() + + def process_job_complete_status(self, run_id, topic, payload): + if topic in self.protocol_mgr.get_subscribed_topics(): + message_handler = self.protocol_mgr.get_listener_handler(topic) + if message_handler is not None: + message_handler(topic, payload) diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner.py b/python/fedml/computing/scheduler/master/base_master_job_runner.py index fe2d426af4..1072e6b045 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner.py @@ -42,13 +42,13 @@ def __init__(self, args, run_id=0, request_json=None, agent_config=None, edge_id is_master_runner=True ) - self.run_edge_id_status_queue = multiprocessing.Manager().Queue(-1) - self.run_metrics_queue = multiprocessing.Manager().Queue(-1) - self.run_events_queue = multiprocessing.Manager().Queue(-1) - self.run_artifacts_queue = multiprocessing.Manager().Queue(-1) - self.run_logs_queue = multiprocessing.Manager().Queue(-1) - self.run_edge_device_info_queue = multiprocessing.Manager().Queue(-1) - self.run_edge_device_info_global_queue = multiprocessing.Manager().Queue(-1) + self.run_edge_id_status_queue = multiprocessing.Queue() + self.run_metrics_queue = multiprocessing.Queue() + self.run_events_queue = multiprocessing.Queue() + self.run_artifacts_queue = multiprocessing.Queue() + self.run_logs_queue = multiprocessing.Queue() + self.run_edge_device_info_queue = multiprocessing.Queue() + self.run_edge_device_info_global_queue = multiprocessing.Queue() self.run_extend_queue_list = None self.async_check_timeout = 0 self.enable_async_cluster = False @@ -453,7 +453,7 @@ def put_run_edge_device_info_to_queue(self, run_id, edge_id, device_info): if int(edge_id) in edge_ids or str(edge_id) in edge_ids: run_id_str = str(run_id) if self.run_edge_device_info_queue is None: - self.run_edge_device_info_queue = multiprocessing.Manager().Queue(-1) + self.run_edge_device_info_queue = multiprocessing.Queue() self.run_edge_device_info_queue.put(device_info) def should_continue_run_job(self, run_id): @@ -581,7 +581,7 @@ def callback_run_logs(self, topic, payload): run_id = str(topic).split('/')[-1] run_id_str = str(run_id) if self.run_logs_queue is None: - self.run_logs_queue = multiprocessing.Manager().Queue(-1) + self.run_logs_queue = multiprocessing.Queue() self.run_logs_queue.put(payload) def callback_run_metrics(self, topic, payload): @@ -589,7 +589,7 @@ def callback_run_metrics(self, topic, payload): run_id = str(topic).split('/')[-1] run_id_str = str(run_id) if self.run_metrics_queue is None: - self.run_metrics_queue = multiprocessing.Manager().Queue(-1) + self.run_metrics_queue = multiprocessing.Queue() self.run_metrics_queue.put(payload) # def send_training_request_to_edges(self, active_edge_info_dict): diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py index 08ef1d640e..dfaf29b5de 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py @@ -1,29 +1,40 @@ import base64 import json import logging +import multiprocessing import os +import platform import time from abc import ABC from multiprocessing import Process + +import fedml from .cloud_server_manager import FedMLCloudServerManager from ..comm_utils.run_process_utils import RunProcessUtils from ..scheduler_core.scheduler_base_job_runner_manager import FedMLSchedulerBaseJobRunnerManager +from ..scheduler_core.account_manager import FedMLAccountManager class FedMLBaseMasterJobRunnerManager(FedMLSchedulerBaseJobRunnerManager, ABC): def __init__(self): FedMLSchedulerBaseJobRunnerManager.__init__(self) + if not hasattr(self, "master_agent_instance_map"): + self.master_agent_instance_map = dict() # Override def start_job_runner( self, run_id, request_json, args=None, edge_id=None, is_server_job=False, sender_message_queue=None, listener_message_queue=None, status_center_queue=None, - should_start_cloud_server=False, use_local_process_as_cloud_server=False, - cuda_visible_gpu_ids_str=None + communication_manager=None, master_agent_instance=None, should_start_cloud_server=False, + use_local_process_as_cloud_server=False, cuda_visible_gpu_ids_str=None ): if should_start_cloud_server: - self._start_cloud_server(args, run_id, request_json, edge_id=edge_id, - use_local_process_as_cloud_server=use_local_process_as_cloud_server) + self._start_cloud_server( + args, run_id, request_json, edge_id=edge_id, + use_local_process_as_cloud_server=use_local_process_as_cloud_server, + sender_message_queue=sender_message_queue, listener_message_queue=listener_message_queue, + status_center_queue=status_center_queue, communication_manager=communication_manager, + master_agent_instance=master_agent_instance) return run_id_str = str(run_id) @@ -51,9 +62,14 @@ def stop_job_runner( args=(run_id, server_id, args.agent_config)) stopping_process.start() + run_id_str = str(run_id) + if self.master_agent_instance_map.get(run_id_str, None) is not None: + self.master_agent_instance_map.pop(run_id_str) + if run_as_cloud_server: time.sleep(1) - RunProcessUtils.kill_process(os.getpid()) + RunProcessUtils.kill_process(self.cloud_run_process_map[run_id_str].pid) + #RunProcessUtils.kill_process(os.getpid()) def complete_job_runner( self, run_id, args=None, server_id=None, request_json=None, @@ -68,13 +84,20 @@ def complete_job_runner( args=(run_id, server_id, args.agent_config)) stopping_process.start() + run_id_str = str(run_id) + if self.master_agent_instance_map.get(run_id_str, None) is not None: + self.master_agent_instance_map.pop(run_id_str) + if run_as_cloud_server: time.sleep(1) RunProcessUtils.kill_process(os.getpid()) def _start_cloud_server( self, args, run_id, request_json, edge_id=None, - use_local_process_as_cloud_server=False + use_local_process_as_cloud_server=False, + sender_message_queue=None, listener_message_queue=None, + status_center_queue=None, communication_manager=None, + master_agent_instance=None ): run_id_str = str(run_id) cloud_server_mgr = FedMLCloudServerManager( @@ -85,19 +108,47 @@ def _start_cloud_server( self.cloud_run_process_map[run_id_str] = Process(target=cloud_server_mgr.start_cloud_server_process_entry) self.cloud_run_process_map[run_id_str].start() else: + cloud_device_id = request_json.get("cloudServerDeviceId", "0") message_bytes = json.dumps(request_json).encode("ascii") base64_bytes = base64.b64encode(message_bytes) - runner_cmd_encoded = base64_bytes.decode("ascii") - cloud_device_id = request_json.get("cloudServerDeviceId", "0") + payload = base64_bytes.decode("ascii") + + logging.info("start the master server: {}".format(payload)) - logging.info("runner_cmd_encoded: {}".format(runner_cmd_encoded)) + if platform.system() == "Windows": + self.run_process = multiprocessing.Process( + target=cloud_server_mgr.start_local_master_server, + args=(args.account_id, args.api_key, args.os_name, args.version, + cloud_device_id, run_id, payload, + communication_manager, sender_message_queue, + status_center_queue, master_agent_instance)) + else: + self.cloud_run_process_map[run_id_str] = fedml.get_process( + target=cloud_server_mgr.start_local_master_server, + args=(args.account_id, args.api_key, args.os_name, args.version, + cloud_device_id, run_id, payload, + communication_manager, sender_message_queue, + status_center_queue, master_agent_instance)) - self.cloud_run_process_map[run_id_str] = Process( - target=cloud_server_mgr.start_local_cloud_server, - args=(args.account_id, args.version, cloud_device_id, runner_cmd_encoded)) self.cloud_run_process_map[run_id_str].start() time.sleep(1) + def start_local_master_server( + self, user, api_key, os_name, version, cloud_device_id, run_id, payload, + communication_manager=None, sender_message_queue=None, status_center_queue=None, + master_agent_instance=None + ): + if master_agent_instance is None: + return + master_agent_instance.login( + user, api_key=api_key, device_id=cloud_device_id, os_name=os_name, + role=FedMLAccountManager.ROLE_CLOUD_SERVER, + communication_manager=None, + sender_message_queue=None, + status_center_queue=None) + self.master_agent_instance_map[str(run_id)] = master_agent_instance + master_agent_instance.start_master_server_instance(payload) + def callback_run_logs(self, run_id, topic, payload): run_id_str = str(run_id) if self.job_runners.get(run_id_str, None) is not None: @@ -107,3 +158,12 @@ def callback_run_metrics(self, run_id, topic, payload): run_id_str = str(run_id) if self.job_runners.get(run_id_str, None) is not None: self.job_runners[run_id_str].callback_run_metrics(topic, payload) + + def callback_proxy_unknown_messages(self, run_id, topic, payload): + run_id_str = str(run_id) + master_agent = self.master_agent_instance_map.get(run_id_str, None) + if master_agent is None: + return + master_agent.process_job_complete_status(run_id, topic, payload) + + diff --git a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py index a6b47855c6..2d00e442a0 100755 --- a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py @@ -2,6 +2,8 @@ import base64 import json import logging +import time + import fedml from ..comm_utils.constants import SchedulerConstants from ....core.mlops.mlops_runtime_log import MLOpsRuntimeLog @@ -212,7 +214,8 @@ def callback_start_train(self, topic=None, payload=None): run_id, request_json, args=self.args, edge_id=self.edge_id, sender_message_queue=self.message_center.get_sender_message_queue(), listener_message_queue=self.get_listener_message_queue(), - status_center_queue=self.get_status_queue() + status_center_queue=self.get_status_queue(), + communication_manager=self.get_listener_communication_manager() ) process = self._get_job_runner_manager().get_runner_process(run_id) @@ -227,16 +230,22 @@ def callback_start_train(self, topic=None, payload=None): run_id, request_json, args=self.args, edge_id=self.edge_id, sender_message_queue=self.message_center.get_sender_message_queue(), listener_message_queue=self.get_listener_message_queue(), - status_center_queue=self.get_status_queue(), should_start_cloud_server=True, + status_center_queue=self.get_status_queue(), + communication_manager=self.get_listener_communication_manager(), + master_agent_instance=self.generate_agent_instance(), + should_start_cloud_server=True, use_local_process_as_cloud_server=self.use_local_process_as_cloud_server ) process = self._get_job_runner_manager().get_runner_process(run_id, is_cloud_server=True) if process is not None: GeneralConstants.save_run_process(run_id, process.pid, is_master=True) + + self.send_status_msg_to_edges(edge_id_list, run_id, request_json.get("server_id")) elif self.run_as_cloud_server: self.server_agent_id = request_json.get("cloud_agent_id", self.edge_id) self.start_request_json = json.dumps(request_json) + server_id = request_json.get("server_id", self.edge_id) run_id = request_json["runId"] run_id_str = str(run_id) @@ -248,11 +257,10 @@ def callback_start_train(self, topic=None, payload=None): run_id, request_json, args=self.args, edge_id=self.edge_id, sender_message_queue=self.message_center.get_sender_message_queue(), listener_message_queue=self.get_listener_message_queue(), - status_center_queue=self.get_status_queue() + status_center_queue=self.get_status_queue(), + communication_manager=self.get_listener_communication_manager() ) - self.send_status_msg_to_edges(edge_id_list, run_id, self.edge_id) - def callback_stop_train(self, topic, payload, use_payload=None): # Print the payload logging.info( @@ -390,6 +398,9 @@ def callback_request_job_status(self, topic, payload): def callback_request_device_status_in_job(self, topic, payload): self.response_device_status_in_job(topic, payload) + def callback_proxy_unknown_messages(self, run_id, topic, payload): + self._get_job_runner_manager().callback_proxy_unknown_messages(run_id, topic, payload) + def process_extra_queues(self, extra_queues): self.rebuild_status_center(extra_queues[0]) @@ -550,7 +561,7 @@ def send_status_check_msg(self, run_id, edge_id, server_id, context=None): def send_status_msg_to_edges(self, edge_id_list, run_id, server_id, context=None): # Send status message to all edges for edge_id in edge_id_list: - self.send_status_check_msg(run_id, edge_id, self.edge_id, context=context) + self.send_status_check_msg(run_id, edge_id, server_id, context=context) def report_exception_status(self, run_id): self.mlops_metrics.report_job_status(run_id, GeneralConstants.MSG_MLOPS_SERVER_STATUS_EXCEPTION) @@ -562,3 +573,9 @@ def get_start_train_topic_with_edge_id(edge_id): @abstractmethod def _generate_protocol_manager_instance(self, args, agent_config=None): return None + + def start_master_server_instance(self, payload): + super().on_agent_communication_connected(None) + + self.receive_message_json(self.topic_start_train, payload) + diff --git a/python/fedml/computing/scheduler/master/cloud_server_manager.py b/python/fedml/computing/scheduler/master/cloud_server_manager.py index aa9c07e84f..9c35f233fd 100755 --- a/python/fedml/computing/scheduler/master/cloud_server_manager.py +++ b/python/fedml/computing/scheduler/master/cloud_server_manager.py @@ -7,6 +7,7 @@ import fedml from fedml.computing.scheduler.comm_utils.sys_utils import get_python_program +from fedml.computing.scheduler.scheduler_core.account_manager import FedMLAccountManager class FedMLCloudServerManager: @@ -32,7 +33,7 @@ def __init__(self, args, run_id=None, edge_id=None, request_json=None, agent_con self.cloud_server_name = None @staticmethod - def start_local_cloud_server(user, version, cloud_device_id, runner_cmd_encoded): + def start_local_cloud_server(user, api_key, os_name, version, cloud_device_id, runner_cmd_encoded): if platform.system() != "Windows": os.setsid() @@ -40,9 +41,22 @@ def start_local_cloud_server(user, version, cloud_device_id, runner_cmd_encoded) pip_source_dir = os.path.dirname(__file__) login_cmd = os.path.join(pip_source_dir, "server_login.py") run_cmd = f"{get_python_program()} -W ignore {login_cmd} -t login -r cloud_server -u {str(user)} " \ - f"-v {version} -id {cloud_device_id} -rc {runner_cmd_encoded}" + f"-k {api_key} -v {version} -id {cloud_device_id} -rc {runner_cmd_encoded}" os.system(run_cmd) + def start_local_master_server( + self, user, api_key, os_name, version, cloud_device_id, run_id, payload, + communication_manager=None, sender_message_queue=None, status_center_queue=None, + master_agent_instance=None + ): + if platform.system() != "Windows": + os.setsid() + + master_agent_instance.login( + user, api_key=api_key, device_id=cloud_device_id, os_name=os_name, + role=FedMLAccountManager.ROLE_CLOUD_SERVER, runner_cmd=payload, + communication_manager=None, sender_message_queue=None, status_center_queue=None) + def start_cloud_server_process_entry(self): try: self.start_cloud_server_process() diff --git a/python/fedml/computing/scheduler/master/master_protocol_manager.py b/python/fedml/computing/scheduler/master/master_protocol_manager.py index eb8cde239f..c941502b9c 100755 --- a/python/fedml/computing/scheduler/master/master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/master_protocol_manager.py @@ -42,3 +42,7 @@ def _process_job_complete_status(self, run_id, server_id, complete_payload): run_id, args=self.args, server_id=server_id, request_json=complete_payload, run_as_cloud_agent=self.run_as_cloud_agent, run_as_cloud_server=self.run_as_cloud_server, use_local_process_as_cloud_server=self.use_local_process_as_cloud_server) + + def generate_agent_instance(self): + from .master_agent import FedMLLaunchMasterAgent + return FedMLLaunchMasterAgent() diff --git a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py index 61cce1b39c..e32e7421f6 100755 --- a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py +++ b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py @@ -50,7 +50,7 @@ def __init__(self, args, run_id=0, request_json=None, agent_config=None, edge_id self.replica_controller = None self.deployed_replica_payload = None self.slave_deployment_results_map = dict() - self.deployment_result_queue = multiprocessing.Manager().Queue(-1) + self.deployment_result_queue = multiprocessing.Queue() self.is_fresh_endpoint = True # Override diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index 2bfa3b514f..9229b2c0da 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -133,7 +133,7 @@ def get_sender_message_queue(self): return self.sender_message_queue def start_sender(self, message_center_name=None): - self.sender_message_queue = multiprocessing.Manager().Queue(-1) + self.sender_message_queue = multiprocessing.Queue() self.message_event = multiprocessing.Event() self.message_event.clear() message_center = FedMLMessageCenter(agent_config=self.sender_agent_config, @@ -258,10 +258,16 @@ def run_sender(self, message_event, message_queue, message_center_name): self.release_sender_mqtt_mgr() + def get_protocol_communication_manager(self): + return None + def setup_listener_mqtt_mgr(self): if self.listener_mqtt_mgr is not None: return + # self.listener_mqtt_mgr = self.get_protocol_communication_manager() + # return + self.listener_mqtt_mgr = MqttManager( self.listener_agent_config["mqtt_config"]["BROKER_HOST"], self.listener_agent_config["mqtt_config"]["BROKER_PORT"], @@ -274,7 +280,11 @@ def setup_listener_mqtt_mgr(self): self.listener_mqtt_mgr.connect() self.listener_mqtt_mgr.loop_start() + def get_listener_communication_manager(self): + return self.listener_mqtt_mgr + def release_listener_mqtt_mgr(self): + #return try: if self.listener_mqtt_mgr is not None: self.listener_mqtt_mgr.loop_stop() @@ -297,6 +307,9 @@ def remove_message_listener(self, topic): self.listener_topics.remove(topic) self.listener_handler_funcs.pop(topic) + def get_listener_handler(self, topic): + return self.listener_handler_funcs.get(topic) + def get_message_runner(self): return None @@ -304,7 +317,7 @@ def get_listener_message_queue(self): return self.listener_message_queue def setup_listener_message_queue(self): - self.listener_message_queue = multiprocessing.Manager().Queue(-1) + self.listener_message_queue = multiprocessing.Queue() def start_listener( self, sender_message_queue=None, listener_message_queue=None, @@ -315,13 +328,14 @@ def start_listener( if listener_message_queue is None: if self.listener_message_queue is None: - self.listener_message_queue = multiprocessing.Manager().Queue(-1) + self.listener_message_queue = multiprocessing.Queue() else: self.listener_message_queue = listener_message_queue self.listener_message_event = multiprocessing.Event() self.listener_message_event.clear() self.listener_agent_config = agent_config - message_runner = self.get_message_runner() + # message_runner = self.get_message_runner() + message_runner = self message_runner.listener_agent_config = agent_config if platform.system() == "Windows": self.listener_message_center_process = multiprocessing.Process( @@ -427,6 +441,11 @@ def run_listener_dispatcher( message_handler_func_name = self.listener_handler_funcs.get(message_entity.topic, None) if message_handler_func_name is not None: methodcaller(message_handler_func_name, message_entity.topic, message_entity.payload)(self) + else: + if hasattr(self, "callback_proxy_unknown_messages") and \ + self.callback_proxy_unknown_messages is not None: + self.callback_proxy_unknown_messages( + message_entity.run_id, message_entity.topic, message_entity.payload) except Exception as e: if message_entity is not None: logging.info( diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py index 80de5c5b18..ffaee555af 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py @@ -210,7 +210,7 @@ def retrieve_and_unzip_package(self, package_name, package_url): # Open a process to download the package so that we can avoid the request is blocked and check the timeout. from multiprocessing import Process completed_event = multiprocessing.Event() - info_queue = multiprocessing.Manager().Queue(-1) + info_queue = multiprocessing.Queue() if platform.system() == "Windows": download_process = multiprocessing.Process( target=self.download_package_proc, diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py index f80508a509..80d67f33cb 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py @@ -45,6 +45,7 @@ def __init__(self, args, agent_config=None, is_master=False): self.mlops_metrics = None self.status_reporter = None self.user_name = args.user_name + self.parent_agent = None fedml._init_multiprocessing() @@ -282,7 +283,7 @@ def get_status_runner(self): return None - def get_get_protocol_communication_manager(self): + def get_protocol_communication_manager(self): return self.communication_mgr def get_protocol_sender_message_queue(self): @@ -291,6 +292,12 @@ def get_protocol_sender_message_queue(self): def get_protocol_status_center_queue(self): return self.get_status_queue() + def get_subscribed_topics(self): + return self.subscribed_topics + def send_agent_active_msg(self, edge_id): active_msg = {"ID": edge_id, "status": GeneralConstants.MSG_MLOPS_SERVER_STATUS_IDLE} self.message_center.send_message_json(self.topic_active, json.dumps(active_msg)) + + def set_parent_agent(self, parent_agent): + self.parent_agent = parent_agent diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index 7e0cf1f98f..2a7a76c2ca 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -108,12 +108,13 @@ def get_status_runner(self): def start_status_center(self, sender_message_center_queue=None, listener_message_center_queue=None, is_slave_agent=False): - self.status_queue = multiprocessing.Manager().Queue(-1) + self.status_queue = multiprocessing.Queue() self.status_event = multiprocessing.Event() self.status_event.clear() self.status_sender_message_center_queue = sender_message_center_queue self.status_listener_message_center_queue = listener_message_center_queue - self.status_runner = self.get_status_runner() + #self.status_runner = self.get_status_runner() + self.status_runner = self target_func = self.status_runner.run_status_dispatcher if not is_slave_agent else \ self.status_runner.run_status_dispatcher_in_slave if platform.system() == "Windows": diff --git a/python/fedml/computing/scheduler/slave/base_slave_agent.py b/python/fedml/computing/scheduler/slave/base_slave_agent.py index a8ac9fa1cb..fed10fa039 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_agent.py +++ b/python/fedml/computing/scheduler/slave/base_slave_agent.py @@ -96,6 +96,7 @@ def _initialize_protocol_manager( self._init_database() # Initialize the master protocol + self.protocol_mgr.set_parent_agent(self) self.protocol_mgr.initialize( communication_manager=communication_manager, sender_message_queue=sender_message_queue, diff --git a/python/fedml/computing/scheduler/slave/client_data_interface.py b/python/fedml/computing/scheduler/slave/client_data_interface.py index 0e9e84381a..74bf7a64a3 100755 --- a/python/fedml/computing/scheduler/slave/client_data_interface.py +++ b/python/fedml/computing/scheduler/slave/client_data_interface.py @@ -343,6 +343,15 @@ def handle_database_compatibility(self): self.close_job_db() + def check_if_table_exist(self, current_db_cursor): + results = current_db_cursor.execute("select * from sqlite_master where type='table' and name='jobs';") + if results is None: + return False + result_len = 0 + for row in results: + result_len += 1 + return False if result_len == 0 else True + def get_agent_status(self, edge_id=0): self.open_job_db() enabled = 1 diff --git a/python/fedml/computing/scheduler/slave/united_agents.py b/python/fedml/computing/scheduler/slave/united_agents.py index 7135925ec8..64ba3c5465 100755 --- a/python/fedml/computing/scheduler/slave/united_agents.py +++ b/python/fedml/computing/scheduler/slave/united_agents.py @@ -31,8 +31,8 @@ def login(self, userid, api_key=None, device_id=None, ) # Get the communication manager, sender message queue - shared_communication_mgr = launch_slave_agent.get_protocol_manager().get_get_protocol_communication_manager() - shared_sender_message_queue = launch_slave_agent.get_protocol_manager().get_protocol_sender_message_queue() + shared_communication_mgr = launch_slave_agent.get_protocol_manager().get_protocol_communication_manager() + shared_slave_sender_message_queue = launch_slave_agent.get_protocol_manager().get_protocol_sender_message_queue() # Login with the launch master role based on # the shared communication manager, sender message center @@ -41,12 +41,13 @@ def login(self, userid, api_key=None, device_id=None, os_name=os_name, runner_cmd=runner_cmd, role=FedMLAccountManager.ROLE_GPU_MASTER_SERVER, communication_manager=shared_communication_mgr, - sender_message_queue=shared_sender_message_queue + sender_message_queue=None ) # Get the status center queue shared_slave_status_center_queue = launch_slave_agent.get_protocol_manager().get_protocol_status_center_queue() shared_master_status_center_queue = launch_master_agent.get_protocol_manager().get_protocol_status_center_queue() + shared_master_sender_message_queue = launch_master_agent.get_protocol_manager().get_protocol_sender_message_queue() # Login with the deployment master role based on # the shared communication manager, sender message center, status center @@ -54,7 +55,7 @@ def login(self, userid, api_key=None, device_id=None, userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM, communication_manager=shared_communication_mgr, - sender_message_queue=shared_sender_message_queue, + sender_message_queue=shared_master_sender_message_queue, status_center_queue=shared_master_status_center_queue ) @@ -64,7 +65,7 @@ def login(self, userid, api_key=None, device_id=None, userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM, communication_manager=shared_communication_mgr, - sender_message_queue=shared_sender_message_queue, + sender_message_queue=shared_slave_sender_message_queue, status_center_queue=shared_slave_status_center_queue ) From 6e8788c3300f40002d5cd06f18f0f247a9d33422 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 17 Jun 2024 14:54:54 +0800 Subject: [PATCH 07/23] [CoreEngine] refactor to support to pass the communication manager, status center and message center to agents. --- .../scheduler/master/base_master_job_runner_manager.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py index dfaf29b5de..b67f0e1e21 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py @@ -69,7 +69,6 @@ def stop_job_runner( if run_as_cloud_server: time.sleep(1) RunProcessUtils.kill_process(self.cloud_run_process_map[run_id_str].pid) - #RunProcessUtils.kill_process(os.getpid()) def complete_job_runner( self, run_id, args=None, server_id=None, request_json=None, @@ -90,7 +89,7 @@ def complete_job_runner( if run_as_cloud_server: time.sleep(1) - RunProcessUtils.kill_process(os.getpid()) + RunProcessUtils.kill_process(self.cloud_run_process_map[run_id_str].pid) def _start_cloud_server( self, args, run_id, request_json, edge_id=None, From 78e310c2fcf94aa828573dc577da434c861b6651 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 17 Jun 2024 21:02:32 +0800 Subject: [PATCH 08/23] [CoreEngine] stop the status center, message center and other processes when the job is completed in the master server. --- python/fedml/api/api_test.py | 6 +-- .../scheduler/comm_utils/run_process_utils.py | 4 +- .../scheduler/master/base_master_agent.py | 17 ++++++-- .../master/base_master_job_runner_manager.py | 25 +++++------ .../master/base_master_protocol_manager.py | 5 +-- .../scheduler/master/cloud_server_manager.py | 6 ++- .../scheduler/master/server_login.py | 1 + .../scheduler_core/message_center.py | 37 +++++++++++----- .../scheduler_base_protocol_manager.py | 43 ++++++++++++++++--- .../scheduler/scheduler_core/status_center.py | 41 ++++++++++++------ .../status_manager_protocols.py | 3 ++ .../scheduler/slave/base_slave_agent.py | 12 ++++-- .../slave/base_slave_protocol_manager.py | 3 -- .../scheduler/slave/united_agents.py | 8 +++- 14 files changed, 149 insertions(+), 62 deletions(-) diff --git a/python/fedml/api/api_test.py b/python/fedml/api/api_test.py index 5a01a76448..1aa5ac3767 100755 --- a/python/fedml/api/api_test.py +++ b/python/fedml/api/api_test.py @@ -4,9 +4,9 @@ import fedml # Login -fedml.set_env_version("test") +fedml.set_env_version("local") fedml.set_local_on_premise_platform_port(18080) -error_code, error_msg = fedml.api.fedml_login(api_key="") +error_code, error_msg = fedml.api.fedml_login(api_key="1316b93c82da40ce90113a2ed12f0b14") if error_code != 0: print("API Key is invalid!") exit(1) @@ -19,7 +19,7 @@ # Launch job launch_result_list = list() -for i in range(0, 10): +for i in range(0, 1): launch_result = fedml.api.launch_job(yaml_file) launch_result_list.append(launch_result) # launch_result = fedml.api.launch_job_on_cluster(yaml_file, "alex-cluster") diff --git a/python/fedml/computing/scheduler/comm_utils/run_process_utils.py b/python/fedml/computing/scheduler/comm_utils/run_process_utils.py index 05cc342e36..6dd575f307 100644 --- a/python/fedml/computing/scheduler/comm_utils/run_process_utils.py +++ b/python/fedml/computing/scheduler/comm_utils/run_process_utils.py @@ -135,13 +135,15 @@ def save_run_process(run_id, process_id, data_dir, info_dir, pass @staticmethod - def kill_process(process_id): + def kill_process(process_id, exclude_current_pid=False): try: process = psutil.Process(process_id) if process is None: return child_processes = process.children(recursive=True) for sub_process in child_processes: + if exclude_current_pid and sub_process.pid == os.getpid(): + continue if platform.system() == 'Windows': os.system("taskkill /PID {} /T /F".format(sub_process.pid)) else: diff --git a/python/fedml/computing/scheduler/master/base_master_agent.py b/python/fedml/computing/scheduler/master/base_master_agent.py index 39898b5d40..4fb3a5e755 100755 --- a/python/fedml/computing/scheduler/master/base_master_agent.py +++ b/python/fedml/computing/scheduler/master/base_master_agent.py @@ -24,7 +24,8 @@ def __init__(self): def login( self, user_id, api_key=None, device_id=None, os_name=None, role=None, runner_cmd=None, - communication_manager=None, sender_message_queue=None, status_center_queue=None + communication_manager=None, sender_message_queue=None, + status_center_queue=None, sender_message_event=None ): # Login account login_result = FedMLAccountManager.get_instance().login( @@ -52,7 +53,8 @@ def login( self._initialize_protocol_manager( communication_manager=communication_manager, sender_message_queue=sender_message_queue, - status_center_queue=status_center_queue) + status_center_queue=status_center_queue, + sender_message_event=sender_message_event) except Exception as e: FedMLAccountManager.write_login_failed_file(is_client=False) self.protocol_mgr.stop() @@ -67,6 +69,9 @@ def logout(): GeneralConstants.cleanup_run_process(None, is_master=True) sys_utils.cleanup_all_fedml_server_api_processes() + def stop(self, kill_process=False): + self.protocol_mgr.stop(kill_process=kill_process) + def _create_protocol_manager(self, role, login_result): if self.protocol_mgr is not None: return @@ -89,7 +94,8 @@ def _create_protocol_manager(self, role, login_result): self.protocol_mgr.use_local_process_as_cloud_server = self.use_local_process_as_cloud_server def _initialize_protocol_manager( - self, communication_manager=None, sender_message_queue=None, status_center_queue=None + self, communication_manager=None, sender_message_queue=None, + status_center_queue=None, sender_message_event=None ): # Init local database self._init_database() @@ -99,7 +105,8 @@ def _initialize_protocol_manager( self.protocol_mgr.initialize( communication_manager=communication_manager, sender_message_queue=sender_message_queue, - status_center_queue=status_center_queue) + status_center_queue=status_center_queue, + sender_message_event=sender_message_event) # Report the IDLE status to MLOps self.mlops_metrics.report_server_training_status( @@ -150,6 +157,8 @@ def generate_agent_instance(self): return FedMLBaseMasterAgent() def process_job_complete_status(self, run_id, topic, payload): + if self.protocol_mgr is None: + return if topic in self.protocol_mgr.get_subscribed_topics(): message_handler = self.protocol_mgr.get_listener_handler(topic) if message_handler is not None: diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py index b67f0e1e21..664fb4671e 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py @@ -57,13 +57,15 @@ def stop_job_runner( super().stop_job_runner(run_id) if run_as_cloud_agent or run_as_cloud_server: - stopping_process = Process( - target=FedMLCloudServerManager.stop_cloud_server, - args=(run_id, server_id, args.agent_config)) - stopping_process.start() + if not use_local_process_as_cloud_server: + stopping_process = Process( + target=FedMLCloudServerManager.stop_cloud_server, + args=(run_id, server_id, args.agent_config)) + stopping_process.start() run_id_str = str(run_id) if self.master_agent_instance_map.get(run_id_str, None) is not None: + self.master_agent_instance_map.get(run_id_str).stop() self.master_agent_instance_map.pop(run_id_str) if run_as_cloud_server: @@ -78,19 +80,17 @@ def complete_job_runner( super().complete_job_runner(run_id) if run_as_cloud_agent or run_as_cloud_server: - stopping_process = Process( - target=FedMLCloudServerManager.stop_cloud_server, - args=(run_id, server_id, args.agent_config)) - stopping_process.start() + if not use_local_process_as_cloud_server: + stopping_process = Process( + target=FedMLCloudServerManager.stop_cloud_server, + args=(run_id, server_id, args.agent_config)) + stopping_process.start() run_id_str = str(run_id) if self.master_agent_instance_map.get(run_id_str, None) is not None: + self.master_agent_instance_map.get(run_id_str).stop(kill_process=True) self.master_agent_instance_map.pop(run_id_str) - if run_as_cloud_server: - time.sleep(1) - RunProcessUtils.kill_process(self.cloud_run_process_map[run_id_str].pid) - def _start_cloud_server( self, args, run_id, request_json, edge_id=None, use_local_process_as_cloud_server=False, @@ -111,6 +111,7 @@ def _start_cloud_server( message_bytes = json.dumps(request_json).encode("ascii") base64_bytes = base64.b64encode(message_bytes) payload = base64_bytes.decode("ascii") + self.master_agent_instance_map[str(run_id)] = master_agent_instance logging.info("start the master server: {}".format(payload)) diff --git a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py index 2d00e442a0..2f8a4c5838 100755 --- a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py @@ -2,7 +2,6 @@ import base64 import json import logging -import time import fedml from ..comm_utils.constants import SchedulerConstants @@ -240,8 +239,6 @@ def callback_start_train(self, topic=None, payload=None): process = self._get_job_runner_manager().get_runner_process(run_id, is_cloud_server=True) if process is not None: GeneralConstants.save_run_process(run_id, process.pid, is_master=True) - - self.send_status_msg_to_edges(edge_id_list, run_id, request_json.get("server_id")) elif self.run_as_cloud_server: self.server_agent_id = request_json.get("cloud_agent_id", self.edge_id) self.start_request_json = json.dumps(request_json) @@ -261,6 +258,8 @@ def callback_start_train(self, topic=None, payload=None): communication_manager=self.get_listener_communication_manager() ) + self.send_status_msg_to_edges(edge_id_list, run_id, server_id) + def callback_stop_train(self, topic, payload, use_payload=None): # Print the payload logging.info( diff --git a/python/fedml/computing/scheduler/master/cloud_server_manager.py b/python/fedml/computing/scheduler/master/cloud_server_manager.py index 9c35f233fd..0aabaf5dbf 100755 --- a/python/fedml/computing/scheduler/master/cloud_server_manager.py +++ b/python/fedml/computing/scheduler/master/cloud_server_manager.py @@ -49,13 +49,17 @@ def start_local_master_server( communication_manager=None, sender_message_queue=None, status_center_queue=None, master_agent_instance=None ): + logging.info(f"Local master server pid: {os.getpid()}") if platform.system() != "Windows": os.setsid() master_agent_instance.login( user, api_key=api_key, device_id=cloud_device_id, os_name=os_name, role=FedMLAccountManager.ROLE_CLOUD_SERVER, runner_cmd=payload, - communication_manager=None, sender_message_queue=None, status_center_queue=None) + communication_manager=None, sender_message_queue=None, + status_center_queue=None) + + master_agent_instance.stop() def start_cloud_server_process_entry(self): try: diff --git a/python/fedml/computing/scheduler/master/server_login.py b/python/fedml/computing/scheduler/master/server_login.py index 8dd0696bc8..be7b73103f 100755 --- a/python/fedml/computing/scheduler/master/server_login.py +++ b/python/fedml/computing/scheduler/master/server_login.py @@ -41,4 +41,5 @@ def logout(): master_agent.login(args.api_key, api_key=args.api_key, device_id=args.device_id, os_name=args.os_name, role=args.role, runner_cmd=args.runner_cmd) else: + master_agent.stop() master_agent.logout() diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index 9229b2c0da..3ceafe976b 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -29,11 +29,12 @@ class FedMLMessageCenter(object): MESSAGE_SENT_SUCCESS_RECORDS_FILE = "message-sent-success-records.log" MESSAGE_RECEIVED_RECORDS_FILE = "message-received-records.log" - def __init__(self, agent_config=None, sender_message_queue=None, listener_message_queue=None): + def __init__(self, agent_config=None, sender_message_queue=None, + listener_message_queue=None, sender_message_event=None): self.sender_agent_config = agent_config self.listener_agent_config = agent_config self.sender_message_queue = sender_message_queue - self.message_event = None + self.message_event = sender_message_event self.message_center_process = None self.sender_mqtt_mgr = None self.sender_mlops_metrics = None @@ -132,6 +133,9 @@ def release_sender_mqtt_mgr(self): def get_sender_message_queue(self): return self.sender_message_queue + def get_sender_message_event(self): + return self.message_event + def start_sender(self, message_center_name=None): self.sender_message_queue = multiprocessing.Queue() self.message_event = multiprocessing.Event() @@ -154,7 +158,7 @@ def start_sender(self, message_center_name=None): ) self.message_center_process.start() - def stop(self): + def stop_message_center(self): if self.message_event is not None: self.message_event.set() @@ -166,6 +170,10 @@ def check_message_stop_event(self): logging.info("Received message center stopping event.") raise MessageCenterStoppedException("Message center stopped (for sender)") + if self.listener_message_event is not None and self.listener_message_event.is_set(): + logging.info("Received message center stopping event.") + raise MessageCenterStoppedException("Message center stopped (for listener)") + def send_message(self, topic, payload, run_id=None): message_entity = FedMLMessageEntity(topic=topic, payload=payload, run_id=run_id) self.sender_message_queue.put(message_entity.get_message_body()) @@ -204,6 +212,9 @@ def retry_sending_undelivered_message(self): self.save_message_record(message_entity.run_id, message_entity.device_id, sent_message_record) def run_sender(self, message_event, message_queue, message_center_name): + if platform.system() != "Windows": + os.setsid() + self.message_event = message_event self.sender_message_queue = message_queue self.message_center_name = message_center_name @@ -321,7 +332,7 @@ def setup_listener_message_queue(self): def start_listener( self, sender_message_queue=None, listener_message_queue=None, - agent_config=None, message_center_name=None, extra_queues=None + sender_message_event=None, agent_config=None, message_center_name=None, extra_queues=None ): if self.listener_message_center_process is not None: return @@ -342,7 +353,7 @@ def start_listener( target=message_runner.run_listener_dispatcher, args=( self.listener_message_event, self.listener_message_queue, self.listener_handler_funcs, sender_message_queue, - message_center_name, extra_queues + sender_message_event, message_center_name, extra_queues ) ) else: @@ -350,7 +361,7 @@ def start_listener( target=message_runner.run_listener_dispatcher, args=( self.listener_message_event, self.listener_message_queue, self.listener_handler_funcs, sender_message_queue, - message_center_name, extra_queues + sender_message_event, message_center_name, extra_queues ) ) self.listener_message_center_process.start() @@ -385,13 +396,19 @@ def unsubscribe_msg(self, topic): self.listener_mqtt_mgr.unsubscribe_msg(topic) def run_listener_dispatcher( - self, message_event, message_queue, listener_funcs, sender_message_queue, + self, listener_message_event, listener_message_queue, + listener_funcs, sender_message_queue, sender_message_event, message_center_name, extra_queues ): - self.listener_message_event = message_event - self.listener_message_queue = message_queue + if platform.system() != "Windows": + os.setsid() + + self.listener_message_event = listener_message_event + self.listener_message_queue = listener_message_queue self.listener_handler_funcs = listener_funcs self.message_center_name = message_center_name + self.sender_message_queue = sender_message_queue + self.message_event = sender_message_event self.setup_listener_mqtt_mgr() @@ -417,7 +434,7 @@ def run_listener_dispatcher( # Get the message from the queue try: - message_body = message_queue.get(block=False, timeout=0.1) + message_body = listener_message_queue.get(block=False, timeout=0.1) except queue.Empty as e: # If queue is empty, then break loop message_body = None if message_body is None: diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py index 80d67f33cb..833fa1edc0 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py @@ -2,11 +2,13 @@ import json import logging import multiprocessing +import os import sys import time import traceback import uuid import fedml +from ..comm_utils.run_process_utils import RunProcessUtils from ....core.mlops.mlops_runtime_log import MLOpsRuntimeLog from ....core.distributed.communication.mqtt.mqtt_manager import MqttManager from ....core.mlops.mlops_metrics import MLOpsMetrics @@ -60,7 +62,8 @@ def add_protocol_handler(self): pass def initialize( - self, communication_manager=None, sender_message_queue=None, status_center_queue=None + self, communication_manager=None, sender_message_queue=None, + status_center_queue=None, sender_message_event=None ): # Generate the message topics self.generate_topics() @@ -86,6 +89,7 @@ def initialize( # Start the message center to process edge related messages. if sender_message_queue is None: self.setup_message_center() + sender_message_event = self.message_center.get_sender_message_event() else: self.rebuild_message_center(sender_message_queue) @@ -94,13 +98,14 @@ def initialize( # Start the status center to process edge related status. if status_center_queue is None: - self.start_status_listener_center() + self.start_status_listener_center(sender_message_event=sender_message_event) else: self.set_status_queue(status_center_queue) self.rebuild_status_center(status_center_queue) # Start the message center for listener self.start_listener(sender_message_queue=self.message_center.get_sender_message_queue(), + sender_message_event=sender_message_event, agent_config=self.agent_config, message_center_name=self.message_center_name, extra_queues=[self.get_status_queue()]) @@ -124,6 +129,8 @@ def start(self): logging.info("Server tracing: {}".format(traceback.format_exc())) finally: + logging.info(f"Protocol manager is about to exit, pid: {os.getpid()}") + FedMLAccountManager.write_login_failed_file(is_client=not self.is_master_agent) self.stop() @@ -134,7 +141,7 @@ def start(self): clean_process_group=False) sys.exit(1) - def stop(self): + def stop(self, kill_process=False): if self.communication_mgr is not None: # noinspection PyBroadException try: @@ -146,7 +153,9 @@ def stop(self): self.communication_mgr.loop_stop() self.communication_mgr.disconnect() - self.release_message_center() + if kill_process: + self.release_message_center() + RunProcessUtils.kill_process(os.getppid(), exclude_current_pid=True) @abstractmethod def _init_extra_items(self): @@ -210,20 +219,37 @@ def rebuild_message_center(self, message_center_queue): def release_message_center(self): try: + self.stop_message_center() + if self.message_center is not None: - self.message_center.stop() + self.message_center.stop_message_center() self.message_center = None except Exception as e: logging.error( - f"Failed to release slave communication manager with Exception {e}. " + f"Failed to release the message center with Exception {e}. " f"Traceback: {traceback.format_exc()}") pass - def start_status_listener_center(self): + def release_status_center(self): + try: + self.stop_status_center() + + if self.status_center is not None: + self.status_center.stop_status_center() + self.status_center = None + + except Exception as e: + logging.error( + f"Failed to release the status center with Exception {e}. " + f"Traceback: {traceback.format_exc()}") + pass + + def start_status_listener_center(self, sender_message_event=None): self.start_status_center( sender_message_center_queue=self.message_center.get_sender_message_queue(), listener_message_center_queue=self.get_listener_message_queue(), + sender_message_event=sender_message_event, is_slave_agent=not self.is_master_agent ) @@ -289,6 +315,9 @@ def get_protocol_communication_manager(self): def get_protocol_sender_message_queue(self): return self.message_center.get_sender_message_queue() + def get_protocol_sender_message_event(self): + return self.message_center.get_sender_message_event() + def get_protocol_status_center_queue(self): return self.get_status_queue() diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index 2a7a76c2ca..b2949af291 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -1,4 +1,5 @@ import logging +import os import platform import time @@ -107,7 +108,9 @@ def get_status_runner(self): return None def start_status_center(self, sender_message_center_queue=None, - listener_message_center_queue=None, is_slave_agent=False): + listener_message_center_queue=None, + sender_message_event=None, + is_slave_agent=False): self.status_queue = multiprocessing.Queue() self.status_event = multiprocessing.Event() self.status_event.clear() @@ -121,20 +124,24 @@ def start_status_center(self, sender_message_center_queue=None, self.status_center_process = multiprocessing.Process( target=target_func, args=( self.status_event, self.status_queue, self.status_sender_message_center_queue, - self.status_listener_message_center_queue + self.status_listener_message_center_queue, sender_message_event ) ) else: self.status_center_process = fedml.get_process( target=target_func, args=( self.status_event, self.status_queue, self.status_sender_message_center_queue, - self.status_listener_message_center_queue + self.status_listener_message_center_queue, sender_message_event ) ) self.status_center_process.start() - def check_message_stop_event(self): + def stop_status_center(self): + if self.status_event is not None: + self.status_event.set() + + def check_status_stop_event(self): if self.status_event is not None and self.status_event.is_set(): logging.info("Received status center stopping event.") raise StatusCenterStoppedException("Status center stopped (for sender)") @@ -170,7 +177,11 @@ def rebuild_status_center(self, status_queue): def run_status_dispatcher(self, status_event, status_queue, sender_message_center_queue, - listener_message_center_queue): + listener_message_center_queue, + sender_message_event): + if platform.system() != "Windows": + os.setsid() + # Save the parameters self.status_event = status_event self.status_queue = status_queue @@ -183,10 +194,11 @@ def run_status_dispatcher(self, status_event, status_queue, self.rebuild_message_center(sender_message_center_queue) message_center = FedMLMessageCenter( sender_message_queue=sender_message_center_queue, - listener_message_queue=listener_message_center_queue + listener_message_queue=listener_message_center_queue, + sender_message_event=sender_message_event ) - if sender_message_center_queue is not None: + if status_queue is not None: self.rebuild_status_center(status_queue) # Init status manager instances @@ -197,7 +209,7 @@ def run_status_dispatcher(self, status_event, status_queue, # Check if we should stop status dispatcher try: - self.check_message_stop_event() + self.check_status_stop_event() except StatusCenterStoppedException as e: break @@ -266,7 +278,11 @@ def run_status_dispatcher(self, status_event, status_queue, def run_status_dispatcher_in_slave(self, status_event, status_queue, sender_message_center_queue, - listener_message_center_queue): + listener_message_center_queue, + sender_message_event): + if platform.system() != "Windows": + os.setsid() + # Save the parameters self.status_event = status_event self.status_queue = status_queue @@ -279,10 +295,11 @@ def run_status_dispatcher_in_slave(self, status_event, status_queue, self.rebuild_message_center(sender_message_center_queue) message_center = FedMLMessageCenter( sender_message_queue=sender_message_center_queue, - listener_message_queue=listener_message_center_queue + listener_message_queue=listener_message_center_queue, + sender_message_event=sender_message_event ) - if sender_message_center_queue is not None: + if status_queue is not None: self.rebuild_status_center(status_queue) # Init status manager instances @@ -294,7 +311,7 @@ def run_status_dispatcher_in_slave(self, status_event, status_queue, # Check if we should stop status dispatcher try: - self.check_message_stop_event() + self.check_status_stop_event() except StatusCenterStoppedException as e: break diff --git a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py index e045458db5..fec19bed70 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py @@ -143,6 +143,9 @@ def process_job_completed_status(self, master_id, status): if self.status_center.is_deployment_status_center and status == ServerConstants.MSG_MLOPS_SERVER_STATUS_FAILED: self.report_deployment_status(self.run_id, GeneralConstants.MSG_MODELOPS_DEPLOYMENT_STATUS_FAILED) + self.message_center.stop_message_center() + self.status_center.stop_status_center() + def process_job_exception_status(self, master_id, status): # Report exception job status self.report_exception_status(status) diff --git a/python/fedml/computing/scheduler/slave/base_slave_agent.py b/python/fedml/computing/scheduler/slave/base_slave_agent.py index fed10fa039..58a79aae88 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_agent.py +++ b/python/fedml/computing/scheduler/slave/base_slave_agent.py @@ -25,7 +25,8 @@ def __init__(self): def login( self, userid, api_key=None, device_id=None, os_name=None, need_to_check_gpu=False, role=None, - communication_manager=None, sender_message_queue=None, status_center_queue=None + communication_manager=None, sender_message_queue=None, + status_center_queue=None, sender_message_event=None ): # Preprocess the login args if need_to_check_gpu: @@ -61,7 +62,8 @@ def login( self._initialize_protocol_manager( communication_manager=communication_manager, sender_message_queue=sender_message_queue, - status_center_queue=status_center_queue) + status_center_queue=status_center_queue, + sender_message_event=sender_message_event) except Exception as e: FedMLAccountManager.write_login_failed_file(is_client=True) self.protocol_mgr.stop() @@ -90,7 +92,8 @@ def _create_protocol_manager(self, login_result): self.protocol_mgr.agent_config = login_result.agent_config def _initialize_protocol_manager( - self, communication_manager=None, sender_message_queue=None, status_center_queue=None + self, communication_manager=None, sender_message_queue=None, + status_center_queue=None, sender_message_event=None ): # Init local database self._init_database() @@ -100,7 +103,8 @@ def _initialize_protocol_manager( self.protocol_mgr.initialize( communication_manager=communication_manager, sender_message_queue=sender_message_queue, - status_center_queue=status_center_queue) + status_center_queue=status_center_queue, + sender_message_event=sender_message_event) # Start the client API process self._start_slave_api() diff --git a/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py b/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py index 447bd05cd9..49aad618c1 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py +++ b/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py @@ -148,12 +148,9 @@ def add_subscribe_topic(self, topic): def stop(self): if self.model_device_server is not None: - self.model_device_server.stop() self.model_device_server = None if self.model_device_client_list is not None: - for model_client in self.model_device_client_list: - model_client.stop() self.model_device_client_list.clear() self.model_device_client_list = None diff --git a/python/fedml/computing/scheduler/slave/united_agents.py b/python/fedml/computing/scheduler/slave/united_agents.py index 64ba3c5465..7aef66290d 100755 --- a/python/fedml/computing/scheduler/slave/united_agents.py +++ b/python/fedml/computing/scheduler/slave/united_agents.py @@ -33,6 +33,7 @@ def login(self, userid, api_key=None, device_id=None, # Get the communication manager, sender message queue shared_communication_mgr = launch_slave_agent.get_protocol_manager().get_protocol_communication_manager() shared_slave_sender_message_queue = launch_slave_agent.get_protocol_manager().get_protocol_sender_message_queue() + shared_slave_sender_message_event = launch_slave_agent.get_protocol_manager().get_protocol_sender_message_event() # Login with the launch master role based on # the shared communication manager, sender message center @@ -48,6 +49,7 @@ def login(self, userid, api_key=None, device_id=None, shared_slave_status_center_queue = launch_slave_agent.get_protocol_manager().get_protocol_status_center_queue() shared_master_status_center_queue = launch_master_agent.get_protocol_manager().get_protocol_status_center_queue() shared_master_sender_message_queue = launch_master_agent.get_protocol_manager().get_protocol_sender_message_queue() + shared_master_sender_message_event = launch_master_agent.get_protocol_manager().get_protocol_sender_message_event() # Login with the deployment master role based on # the shared communication manager, sender message center, status center @@ -56,7 +58,8 @@ def login(self, userid, api_key=None, device_id=None, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM, communication_manager=shared_communication_mgr, sender_message_queue=shared_master_sender_message_queue, - status_center_queue=shared_master_status_center_queue + status_center_queue=shared_master_status_center_queue, + sender_message_event=shared_master_sender_message_event ) # Login with the deployment slave role based on @@ -66,7 +69,8 @@ def login(self, userid, api_key=None, device_id=None, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM, communication_manager=shared_communication_mgr, sender_message_queue=shared_slave_sender_message_queue, - status_center_queue=shared_slave_status_center_queue + status_center_queue=shared_slave_status_center_queue, + sender_message_event=shared_slave_sender_message_event ) # Start the slave agent to connect to servers and loop forever. From 1af78e732658c2f3af7f26670b9fda29c1cb0361 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 18 Jun 2024 11:58:30 +0800 Subject: [PATCH 09/23] [CoreEngine] replace the queue with the managed queue to avoid the multiprocessing lock problem. --- .../master/base_master_job_runner.py | 20 +++++++++---------- .../model_scheduler/master_job_runner.py | 2 +- .../scheduler_core/message_center.py | 6 +++--- .../scheduler_base_job_runner.py | 7 ++++--- .../scheduler/scheduler_core/status_center.py | 2 +- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner.py b/python/fedml/computing/scheduler/master/base_master_job_runner.py index 1072e6b045..9a77c2ba82 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner.py @@ -42,13 +42,13 @@ def __init__(self, args, run_id=0, request_json=None, agent_config=None, edge_id is_master_runner=True ) - self.run_edge_id_status_queue = multiprocessing.Queue() - self.run_metrics_queue = multiprocessing.Queue() - self.run_events_queue = multiprocessing.Queue() - self.run_artifacts_queue = multiprocessing.Queue() - self.run_logs_queue = multiprocessing.Queue() - self.run_edge_device_info_queue = multiprocessing.Queue() - self.run_edge_device_info_global_queue = multiprocessing.Queue() + self.run_edge_id_status_queue = multiprocessing.Manager().Queue() + self.run_metrics_queue = multiprocessing.Manager().Queue() + self.run_events_queue = multiprocessing.Manager().Queue() + self.run_artifacts_queue = multiprocessing.Manager().Queue() + self.run_logs_queue = multiprocessing.Manager().Queue() + self.run_edge_device_info_queue = multiprocessing.Manager().Queue() + self.run_edge_device_info_global_queue = multiprocessing.Manager().Queue() self.run_extend_queue_list = None self.async_check_timeout = 0 self.enable_async_cluster = False @@ -453,7 +453,7 @@ def put_run_edge_device_info_to_queue(self, run_id, edge_id, device_info): if int(edge_id) in edge_ids or str(edge_id) in edge_ids: run_id_str = str(run_id) if self.run_edge_device_info_queue is None: - self.run_edge_device_info_queue = multiprocessing.Queue() + self.run_edge_device_info_queue = multiprocessing.Manager().Queue() self.run_edge_device_info_queue.put(device_info) def should_continue_run_job(self, run_id): @@ -581,7 +581,7 @@ def callback_run_logs(self, topic, payload): run_id = str(topic).split('/')[-1] run_id_str = str(run_id) if self.run_logs_queue is None: - self.run_logs_queue = multiprocessing.Queue() + self.run_logs_queue = multiprocessing.Manager().Queue() self.run_logs_queue.put(payload) def callback_run_metrics(self, topic, payload): @@ -589,7 +589,7 @@ def callback_run_metrics(self, topic, payload): run_id = str(topic).split('/')[-1] run_id_str = str(run_id) if self.run_metrics_queue is None: - self.run_metrics_queue = multiprocessing.Queue() + self.run_metrics_queue = multiprocessing.Manager().Queue() self.run_metrics_queue.put(payload) # def send_training_request_to_edges(self, active_edge_info_dict): diff --git a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py index e32e7421f6..9854dad5f6 100755 --- a/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py +++ b/python/fedml/computing/scheduler/model_scheduler/master_job_runner.py @@ -50,7 +50,7 @@ def __init__(self, args, run_id=0, request_json=None, agent_config=None, edge_id self.replica_controller = None self.deployed_replica_payload = None self.slave_deployment_results_map = dict() - self.deployment_result_queue = multiprocessing.Queue() + self.deployment_result_queue = multiprocessing.Manager().Queue() self.is_fresh_endpoint = True # Override diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index 3ceafe976b..aeac1a3855 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -137,7 +137,7 @@ def get_sender_message_event(self): return self.message_event def start_sender(self, message_center_name=None): - self.sender_message_queue = multiprocessing.Queue() + self.sender_message_queue = multiprocessing.Manager().Queue() self.message_event = multiprocessing.Event() self.message_event.clear() message_center = FedMLMessageCenter(agent_config=self.sender_agent_config, @@ -328,7 +328,7 @@ def get_listener_message_queue(self): return self.listener_message_queue def setup_listener_message_queue(self): - self.listener_message_queue = multiprocessing.Queue() + self.listener_message_queue = multiprocessing.Manager().Queue() def start_listener( self, sender_message_queue=None, listener_message_queue=None, @@ -339,7 +339,7 @@ def start_listener( if listener_message_queue is None: if self.listener_message_queue is None: - self.listener_message_queue = multiprocessing.Queue() + self.listener_message_queue = multiprocessing.Manager().Queue() else: self.listener_message_queue = listener_message_queue self.listener_message_event = multiprocessing.Event() diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py index ffaee555af..30df7f1905 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py @@ -75,6 +75,7 @@ def __init__(self, args, edge_id=0, request_json=None, agent_config=None, run_id self.user_name = None self.general_edge_id = None self.message_center = None + self.status_center = None self.FEDML_DYNAMIC_CONSTRAIN_VARIABLES = { "${FEDSYS.RUN_ID}": "", "${FEDSYS.PRIVATE_LOCAL_DATA}": "", @@ -210,7 +211,7 @@ def retrieve_and_unzip_package(self, package_name, package_url): # Open a process to download the package so that we can avoid the request is blocked and check the timeout. from multiprocessing import Process completed_event = multiprocessing.Event() - info_queue = multiprocessing.Queue() + info_queue = multiprocessing.Manager().Queue() if platform.system() == "Windows": download_process = multiprocessing.Process( target=self.download_package_proc, @@ -648,8 +649,8 @@ def rebuild_message_status_center(self, sender_message_queue, listener_message_q self.mlops_metrics.set_messenger(self.message_center) self.mlops_metrics.run_id = self.run_id - status_center = FedMLStatusCenter.rebuild_status_center_from_queue(status_queue) + self.status_center = FedMLStatusCenter.rebuild_status_center_from_queue(status_queue) if self.status_reporter is None: self.status_reporter = MLOpsMetrics() - self.status_reporter.set_messenger(status_center) + self.status_reporter.set_messenger(self.status_center) self.status_reporter.run_id = self.run_id diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index b2949af291..76ba9857c6 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -111,7 +111,7 @@ def start_status_center(self, sender_message_center_queue=None, listener_message_center_queue=None, sender_message_event=None, is_slave_agent=False): - self.status_queue = multiprocessing.Queue() + self.status_queue = multiprocessing.Manager().Queue() self.status_event = multiprocessing.Event() self.status_event.clear() self.status_sender_message_center_queue = sender_message_center_queue From 1422fa10d649d55e484ad5844ed9006fcd8bb38e Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 19 Jun 2024 15:24:03 +0800 Subject: [PATCH 10/23] [CoreEngine] check the nil pointer and update the numpy version. --- .../status_manager_protocols.py | 21 ++++++++++--------- python/setup.py | 6 +++--- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py index fec19bed70..ac3d8c3cb3 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py @@ -190,16 +190,17 @@ def process_job_status_consensus(self, run_id, master_id, status): status = self.get_entire_job_status() # Set the device status based on the job status - for edge_id_item, edge_status_item in self.edge_status_dict.items(): - if edge_id_item == "server": - continue - - # Calc the device status based on the job status - consensus_device_status = FedMLStatusManager.get_device_consensus_status_in_job( - status, edge_status_item) - if consensus_device_status is not None: - self.message_reporter.report_client_training_status( - edge_id_item, consensus_device_status, run_id=run_id, update_db=False) + if self.edge_status_dict is not None: + for edge_id_item, edge_status_item in self.edge_status_dict.items(): + if edge_id_item == "server": + continue + + # Calc the device status based on the job status + consensus_device_status = FedMLStatusManager.get_device_consensus_status_in_job( + status, edge_status_item) + if consensus_device_status is not None: + self.message_reporter.report_client_training_status( + edge_id_item, consensus_device_status, run_id=run_id, update_db=False) # Save the job status to local storage FedMLServerDataInterface.get_instance().save_job_status(run_id, master_id, status, status) diff --git a/python/setup.py b/python/setup.py index 9651465d32..f00c0b4335 100644 --- a/python/setup.py +++ b/python/setup.py @@ -20,7 +20,7 @@ def finalize_options(self): requirements = [ 'GPUtil', - 'PyYAML', + 'PyYAML==5.3.1', 'aiohttp>=3.8.1', 'attrdict', 'attrs', @@ -40,7 +40,7 @@ def finalize_options(self): 'multiprocess', 'networkx<3.0', 'ntplib', - 'numpy>=1.21', + 'numpy>=1.21,<2.0', 'onnx', 'paho-mqtt<2.0.0', 'pandas', @@ -126,7 +126,7 @@ def finalize_options(self): setup( name="fedml", - version="0.9.0", + version="0.8.31b23", author="FedML Team", author_email="ch@fedml.ai", description="A research and production integrated edge-cloud library for " From 158eb9c1d281e520f364cdec0602b4b9b417836b Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 19 Jun 2024 15:41:32 +0800 Subject: [PATCH 11/23] [CoreEngine] remove the deprecated action runners. --- .../build_wheels_and_releases.yml-backup | 0 .../{ => deprecated}/full_e2e_test.yml-bakcup | 0 .github/workflows/{ => deprecated}/runner.md | 0 ...oke_test_cross_device_mnn_server_linux.yml | 0 ...ke_test_cross_silo_fedavg_attack_linux.yml | 0 ...smoke_test_cross_silo_fedavg_cdp_linux.yml | 0 ...e_test_cross_silo_fedavg_defense_linux.yml | 0 ...smoke_test_cross_silo_fedavg_ldp_linux.yml | 0 .../smoke_test_cross_silo_ho_linux.yml | 0 .../smoke_test_cross_silo_ho_win.yml | 0 ...moke_test_cross_silo_lightsecagg_linux.yml | 0 .../smoke_test_cross_silo_lightsecagg_win.yml | 0 .../smoke_test_flow_linux.yml | 0 .../smoke_test_ml_engines_linux_jax.yml | 0 .../smoke_test_ml_engines_linux_mxnet.yml | 0 .../smoke_test_ml_engines_linux_tf.yml | 0 .../smoke_test_ml_engines_win.yml | 0 .../smoke_test_pip_cli_sp_linux.yml | 0 .../smoke_test_pip_cli_sp_win.yml | 0 .../{ => deprecated}/smoke_test_security.yml | 0 .../smoke_test_simulation_mpi_linux.yml | 0 .../federate/quick_start/octopus/dump.rdb | Bin 0 -> 7248 bytes .../federate/quick_start/octopus/nohup.out | 3032 +++++++++++++++++ 23 files changed, 3032 insertions(+) rename .github/workflows/{ => deprecated}/build_wheels_and_releases.yml-backup (100%) rename .github/workflows/{ => deprecated}/full_e2e_test.yml-bakcup (100%) rename .github/workflows/{ => deprecated}/runner.md (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_device_mnn_server_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_fedavg_attack_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_fedavg_cdp_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_fedavg_defense_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_fedavg_ldp_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_ho_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_ho_win.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_lightsecagg_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_cross_silo_lightsecagg_win.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_flow_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_ml_engines_linux_jax.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_ml_engines_linux_mxnet.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_ml_engines_linux_tf.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_ml_engines_win.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_pip_cli_sp_linux.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_pip_cli_sp_win.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_security.yml (100%) rename .github/workflows/{ => deprecated}/smoke_test_simulation_mpi_linux.yml (100%) create mode 100644 python/examples/federate/quick_start/octopus/dump.rdb create mode 100644 python/examples/federate/quick_start/octopus/nohup.out diff --git a/.github/workflows/build_wheels_and_releases.yml-backup b/.github/workflows/deprecated/build_wheels_and_releases.yml-backup similarity index 100% rename from .github/workflows/build_wheels_and_releases.yml-backup rename to .github/workflows/deprecated/build_wheels_and_releases.yml-backup diff --git a/.github/workflows/full_e2e_test.yml-bakcup b/.github/workflows/deprecated/full_e2e_test.yml-bakcup similarity index 100% rename from .github/workflows/full_e2e_test.yml-bakcup rename to .github/workflows/deprecated/full_e2e_test.yml-bakcup diff --git a/.github/workflows/runner.md b/.github/workflows/deprecated/runner.md similarity index 100% rename from .github/workflows/runner.md rename to .github/workflows/deprecated/runner.md diff --git a/.github/workflows/smoke_test_cross_device_mnn_server_linux.yml b/.github/workflows/deprecated/smoke_test_cross_device_mnn_server_linux.yml similarity index 100% rename from .github/workflows/smoke_test_cross_device_mnn_server_linux.yml rename to .github/workflows/deprecated/smoke_test_cross_device_mnn_server_linux.yml diff --git a/.github/workflows/smoke_test_cross_silo_fedavg_attack_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_attack_linux.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_fedavg_attack_linux.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_fedavg_attack_linux.yml diff --git a/.github/workflows/smoke_test_cross_silo_fedavg_cdp_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_cdp_linux.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_fedavg_cdp_linux.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_fedavg_cdp_linux.yml diff --git a/.github/workflows/smoke_test_cross_silo_fedavg_defense_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_defense_linux.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_fedavg_defense_linux.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_fedavg_defense_linux.yml diff --git a/.github/workflows/smoke_test_cross_silo_fedavg_ldp_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_ldp_linux.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_fedavg_ldp_linux.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_fedavg_ldp_linux.yml diff --git a/.github/workflows/smoke_test_cross_silo_ho_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_ho_linux.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_ho_linux.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_ho_linux.yml diff --git a/.github/workflows/smoke_test_cross_silo_ho_win.yml b/.github/workflows/deprecated/smoke_test_cross_silo_ho_win.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_ho_win.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_ho_win.yml diff --git a/.github/workflows/smoke_test_cross_silo_lightsecagg_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_linux.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_lightsecagg_linux.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_linux.yml diff --git a/.github/workflows/smoke_test_cross_silo_lightsecagg_win.yml b/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_win.yml similarity index 100% rename from .github/workflows/smoke_test_cross_silo_lightsecagg_win.yml rename to .github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_win.yml diff --git a/.github/workflows/smoke_test_flow_linux.yml b/.github/workflows/deprecated/smoke_test_flow_linux.yml similarity index 100% rename from .github/workflows/smoke_test_flow_linux.yml rename to .github/workflows/deprecated/smoke_test_flow_linux.yml diff --git a/.github/workflows/smoke_test_ml_engines_linux_jax.yml b/.github/workflows/deprecated/smoke_test_ml_engines_linux_jax.yml similarity index 100% rename from .github/workflows/smoke_test_ml_engines_linux_jax.yml rename to .github/workflows/deprecated/smoke_test_ml_engines_linux_jax.yml diff --git a/.github/workflows/smoke_test_ml_engines_linux_mxnet.yml b/.github/workflows/deprecated/smoke_test_ml_engines_linux_mxnet.yml similarity index 100% rename from .github/workflows/smoke_test_ml_engines_linux_mxnet.yml rename to .github/workflows/deprecated/smoke_test_ml_engines_linux_mxnet.yml diff --git a/.github/workflows/smoke_test_ml_engines_linux_tf.yml b/.github/workflows/deprecated/smoke_test_ml_engines_linux_tf.yml similarity index 100% rename from .github/workflows/smoke_test_ml_engines_linux_tf.yml rename to .github/workflows/deprecated/smoke_test_ml_engines_linux_tf.yml diff --git a/.github/workflows/smoke_test_ml_engines_win.yml b/.github/workflows/deprecated/smoke_test_ml_engines_win.yml similarity index 100% rename from .github/workflows/smoke_test_ml_engines_win.yml rename to .github/workflows/deprecated/smoke_test_ml_engines_win.yml diff --git a/.github/workflows/smoke_test_pip_cli_sp_linux.yml b/.github/workflows/deprecated/smoke_test_pip_cli_sp_linux.yml similarity index 100% rename from .github/workflows/smoke_test_pip_cli_sp_linux.yml rename to .github/workflows/deprecated/smoke_test_pip_cli_sp_linux.yml diff --git a/.github/workflows/smoke_test_pip_cli_sp_win.yml b/.github/workflows/deprecated/smoke_test_pip_cli_sp_win.yml similarity index 100% rename from .github/workflows/smoke_test_pip_cli_sp_win.yml rename to .github/workflows/deprecated/smoke_test_pip_cli_sp_win.yml diff --git a/.github/workflows/smoke_test_security.yml b/.github/workflows/deprecated/smoke_test_security.yml similarity index 100% rename from .github/workflows/smoke_test_security.yml rename to .github/workflows/deprecated/smoke_test_security.yml diff --git a/.github/workflows/smoke_test_simulation_mpi_linux.yml b/.github/workflows/deprecated/smoke_test_simulation_mpi_linux.yml similarity index 100% rename from .github/workflows/smoke_test_simulation_mpi_linux.yml rename to .github/workflows/deprecated/smoke_test_simulation_mpi_linux.yml diff --git a/python/examples/federate/quick_start/octopus/dump.rdb b/python/examples/federate/quick_start/octopus/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..f31af5cb4fd49f4a377eb444135610e4915c5730 GIT binary patch literal 7248 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 L55F{c_t*agW;0!L literal 0 HcmV?d00001 diff --git a/python/examples/federate/quick_start/octopus/nohup.out b/python/examples/federate/quick_start/octopus/nohup.out new file mode 100644 index 0000000000..2350761958 --- /dev/null +++ b/python/examples/federate/quick_start/octopus/nohup.out @@ -0,0 +1,3032 @@ +58896:C 27 May 2024 16:58:15.551 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo +58896:C 27 May 2024 16:58:15.551 # Redis version=7.0.11, bits=64, commit=00000000, modified=0, pid=58896, just started +58896:C 27 May 2024 16:58:15.551 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf +58896:M 27 May 2024 16:58:15.551 * monotonic clock: POSIX clock_gettime +58896:M 27 May 2024 16:58:15.552 * Running mode=standalone, port=6379. +58896:M 27 May 2024 16:58:15.552 # WARNING: The TCP backlog setting of 511 cannot be enforced because kern.ipc.somaxconn is set to the lower value of 128. +58896:M 27 May 2024 16:58:15.552 # Server initialized +58896:M 27 May 2024 16:58:15.552 * Ready to accept connections +58896:M 27 May 2024 16:58:22.918 * DB saved on disk +58896:M 27 May 2024 17:58:23.012 * 1 changes in 3600 seconds. Saving... +58896:M 27 May 2024 17:58:23.013 * Background saving started by pid 65644 +65644:C 27 May 2024 17:58:23.020 * DB saved on disk +65644:C 27 May 2024 17:58:23.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 27 May 2024 17:58:23.114 * Background saving terminated with success +58896:M 27 May 2024 19:13:18.626 * 1 changes in 3600 seconds. Saving... +58896:M 27 May 2024 19:13:18.736 * Background saving started by pid 72278 +72278:C 27 May 2024 19:13:18.746 * DB saved on disk +72278:C 27 May 2024 19:13:18.746 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 27 May 2024 19:13:18.838 * Background saving terminated with success +58896:M 28 May 2024 14:08:25.606 * 1 changes in 3600 seconds. Saving... +58896:M 28 May 2024 14:08:25.608 * Background saving started by pid 78120 +78120:C 28 May 2024 14:08:25.615 * DB saved on disk +78120:C 28 May 2024 14:08:25.616 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 28 May 2024 14:08:25.709 * Background saving terminated with success +58896:M 28 May 2024 15:19:26.423 * 1 changes in 3600 seconds. Saving... +58896:M 28 May 2024 15:19:26.539 * Background saving started by pid 84225 +84225:C 28 May 2024 15:19:26.545 * DB saved on disk +84225:C 28 May 2024 15:19:26.546 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 28 May 2024 15:19:26.642 * Background saving terminated with success +58896:M 29 May 2024 17:57:07.834 * 1 changes in 3600 seconds. Saving... +58896:M 29 May 2024 17:57:07.835 * Background saving started by pid 4206 +4206:C 29 May 2024 17:57:07.849 * DB saved on disk +4206:C 29 May 2024 17:57:07.850 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 29 May 2024 17:57:07.935 * Background saving terminated with success +58896:M 29 May 2024 18:57:08.006 * 1 changes in 3600 seconds. Saving... +58896:M 29 May 2024 18:57:08.008 * Background saving started by pid 11453 +11453:C 29 May 2024 18:57:08.021 * DB saved on disk +11453:C 29 May 2024 18:57:08.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 29 May 2024 18:57:08.109 * Background saving terminated with success +58896:M 29 May 2024 19:21:58.973 * 100 changes in 300 seconds. Saving... +58896:M 29 May 2024 19:21:58.973 * Background saving started by pid 19535 +19535:C 29 May 2024 19:21:58.981 * DB saved on disk +19535:C 29 May 2024 19:21:58.981 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 29 May 2024 19:21:59.074 * Background saving terminated with success +58896:M 29 May 2024 19:27:40.433 * DB saved on disk +58896:M 29 May 2024 20:39:51.202 * 1 changes in 3600 seconds. Saving... +58896:M 29 May 2024 20:39:51.203 * Background saving started by pid 21314 +21314:C 29 May 2024 20:39:51.314 * DB saved on disk +21314:C 29 May 2024 20:39:51.315 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 29 May 2024 20:39:51.407 * Background saving terminated with success +58896:M 29 May 2024 22:49:24.515 * 1 changes in 3600 seconds. Saving... +58896:M 29 May 2024 22:49:24.516 * Background saving started by pid 25814 +25814:C 29 May 2024 22:49:24.587 * DB saved on disk +25814:C 29 May 2024 22:49:24.587 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 29 May 2024 22:49:24.617 * Background saving terminated with success +58896:M 29 May 2024 23:08:52.971 * 100 changes in 300 seconds. Saving... +58896:M 29 May 2024 23:08:52.972 * Background saving started by pid 28739 +28739:C 29 May 2024 23:08:52.978 * DB saved on disk +28739:C 29 May 2024 23:08:52.978 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 29 May 2024 23:08:53.073 * Background saving terminated with success +58896:M 30 May 2024 00:09:08.434 * 1 changes in 3600 seconds. Saving... +58896:M 30 May 2024 00:09:08.435 * Background saving started by pid 30988 +30988:C 30 May 2024 00:09:08.569 * DB saved on disk +30988:C 30 May 2024 00:09:08.569 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 00:09:08.638 * Background saving terminated with success +58896:M 30 May 2024 12:51:39.719 * 1 changes in 3600 seconds. Saving... +58896:M 30 May 2024 12:51:39.720 * Background saving started by pid 41021 +41021:C 30 May 2024 12:51:39.729 * DB saved on disk +41021:C 30 May 2024 12:51:39.729 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 12:51:39.821 * Background saving terminated with success +58896:M 30 May 2024 12:56:40.011 * 100 changes in 300 seconds. Saving... +58896:M 30 May 2024 12:56:40.017 * Background saving started by pid 41850 +41850:C 30 May 2024 12:56:40.033 * DB saved on disk +41850:C 30 May 2024 12:56:40.034 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 12:56:40.120 * Background saving terminated with success +58896:M 30 May 2024 13:16:33.022 * 100 changes in 300 seconds. Saving... +58896:M 30 May 2024 13:16:33.138 * Background saving started by pid 42823 +42823:C 30 May 2024 13:16:33.145 * DB saved on disk +42823:C 30 May 2024 13:16:33.145 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 13:16:33.240 * Background saving terminated with success +58896:M 30 May 2024 15:25:24.413 * 1 changes in 3600 seconds. Saving... +58896:M 30 May 2024 15:25:24.413 * Background saving started by pid 48206 +48206:C 30 May 2024 15:25:24.425 * DB saved on disk +48206:C 30 May 2024 15:25:24.426 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 15:25:24.513 * Background saving terminated with success +58896:M 30 May 2024 15:30:25.016 * 100 changes in 300 seconds. Saving... +58896:M 30 May 2024 15:30:25.017 * Background saving started by pid 48800 +48800:C 30 May 2024 15:30:25.029 * DB saved on disk +48800:C 30 May 2024 15:30:25.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 15:30:25.119 * Background saving terminated with success +58896:M 30 May 2024 15:35:26.012 * 100 changes in 300 seconds. Saving... +58896:M 30 May 2024 15:35:26.014 * Background saving started by pid 49390 +49390:C 30 May 2024 15:35:26.025 * DB saved on disk +49390:C 30 May 2024 15:35:26.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 15:35:26.115 * Background saving terminated with success +58896:M 30 May 2024 16:42:51.523 * 1 changes in 3600 seconds. Saving... +58896:M 30 May 2024 16:42:51.646 * Background saving started by pid 65592 +65592:C 30 May 2024 16:42:51.655 * DB saved on disk +65592:C 30 May 2024 16:42:51.655 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 16:42:51.747 * Background saving terminated with success +58896:M 30 May 2024 17:15:29.037 * 100 changes in 300 seconds. Saving... +58896:M 30 May 2024 17:15:29.039 * Background saving started by pid 69523 +69523:C 30 May 2024 17:15:29.050 * DB saved on disk +69523:C 30 May 2024 17:15:29.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 17:15:29.142 * Background saving terminated with success +58896:M 30 May 2024 18:15:30.060 * 1 changes in 3600 seconds. Saving... +58896:M 30 May 2024 18:15:30.063 * Background saving started by pid 84706 +84706:C 30 May 2024 18:15:30.075 * DB saved on disk +84706:C 30 May 2024 18:15:30.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 30 May 2024 18:15:30.167 * Background saving terminated with success +58896:M 03 Jun 2024 18:06:53.699 * 1 changes in 3600 seconds. Saving... +58896:M 03 Jun 2024 18:06:53.703 * Background saving started by pid 90870 +90870:C 03 Jun 2024 18:06:53.713 * DB saved on disk +90870:C 03 Jun 2024 18:06:53.714 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 18:06:53.803 * Background saving terminated with success +58896:M 03 Jun 2024 18:11:54.075 * 100 changes in 300 seconds. Saving... +58896:M 03 Jun 2024 18:11:54.078 * Background saving started by pid 91526 +91526:C 03 Jun 2024 18:11:54.087 * DB saved on disk +91526:C 03 Jun 2024 18:11:54.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 18:11:54.180 * Background saving terminated with success +58896:M 03 Jun 2024 18:18:46.019 * 100 changes in 300 seconds. Saving... +58896:M 03 Jun 2024 18:18:46.024 * Background saving started by pid 92286 +92286:C 03 Jun 2024 18:18:46.034 * DB saved on disk +92286:C 03 Jun 2024 18:18:46.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 18:18:46.126 * Background saving terminated with success +58896:M 03 Jun 2024 18:24:50.037 * 100 changes in 300 seconds. Saving... +58896:M 03 Jun 2024 18:24:50.038 * Background saving started by pid 93124 +93124:C 03 Jun 2024 18:24:50.050 * DB saved on disk +93124:C 03 Jun 2024 18:24:50.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 18:24:50.140 * Background saving terminated with success +58896:M 03 Jun 2024 18:29:51.049 * 100 changes in 300 seconds. Saving... +58896:M 03 Jun 2024 18:29:51.051 * Background saving started by pid 93844 +93844:C 03 Jun 2024 18:29:51.063 * DB saved on disk +93844:C 03 Jun 2024 18:29:51.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 18:29:51.153 * Background saving terminated with success +58896:M 03 Jun 2024 18:34:52.071 * 100 changes in 300 seconds. Saving... +58896:M 03 Jun 2024 18:34:52.073 * Background saving started by pid 94768 +94768:C 03 Jun 2024 18:34:52.088 * DB saved on disk +94768:C 03 Jun 2024 18:34:52.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 18:34:52.174 * Background saving terminated with success +58896:M 03 Jun 2024 18:48:44.981 * 100 changes in 300 seconds. Saving... +58896:M 03 Jun 2024 18:48:44.982 * Background saving started by pid 96629 +96629:C 03 Jun 2024 18:48:45.005 * DB saved on disk +96629:C 03 Jun 2024 18:48:45.006 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 18:48:45.083 * Background saving terminated with success +58896:M 03 Jun 2024 23:49:36.949 * 1 changes in 3600 seconds. Saving... +58896:M 03 Jun 2024 23:49:36.968 * Background saving started by pid 97783 +97783:C 03 Jun 2024 23:49:37.370 * DB saved on disk +97783:C 03 Jun 2024 23:49:37.436 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 03 Jun 2024 23:49:37.493 * Background saving terminated with success +58896:M 04 Jun 2024 14:48:17.992 * 1 changes in 3600 seconds. Saving... +58896:M 04 Jun 2024 14:48:18.002 * Background saving started by pid 19353 +19353:C 04 Jun 2024 14:48:18.012 * DB saved on disk +19353:C 04 Jun 2024 14:48:18.012 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 04 Jun 2024 14:48:18.109 * Background saving terminated with success +58896:M 04 Jun 2024 14:53:19.081 * 100 changes in 300 seconds. Saving... +58896:M 04 Jun 2024 14:53:19.082 * Background saving started by pid 19823 +19823:C 04 Jun 2024 14:53:19.087 * DB saved on disk +19823:C 04 Jun 2024 14:53:19.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 04 Jun 2024 14:53:19.184 * Background saving terminated with success +58896:M 04 Jun 2024 15:17:23.645 * 100 changes in 300 seconds. Saving... +58896:M 04 Jun 2024 15:17:23.646 * Background saving started by pid 23721 +23721:C 04 Jun 2024 15:17:23.656 * DB saved on disk +23721:C 04 Jun 2024 15:17:23.656 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 04 Jun 2024 15:17:23.748 * Background saving terminated with success +58896:M 05 Jun 2024 15:06:53.989 * 1 changes in 3600 seconds. Saving... +58896:M 05 Jun 2024 15:06:53.991 * Background saving started by pid 74889 +74889:C 05 Jun 2024 15:06:54.001 * DB saved on disk +74889:C 05 Jun 2024 15:06:54.001 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 15:06:54.091 * Background saving terminated with success +58896:M 05 Jun 2024 15:11:55.053 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 15:11:55.057 * Background saving started by pid 75549 +75549:C 05 Jun 2024 15:11:55.084 * DB saved on disk +75549:C 05 Jun 2024 15:11:55.084 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 15:11:55.158 * Background saving terminated with success +58896:M 05 Jun 2024 15:16:56.075 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 15:16:56.078 * Background saving started by pid 76399 +76399:C 05 Jun 2024 15:16:56.095 * DB saved on disk +76399:C 05 Jun 2024 15:16:56.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 15:16:56.180 * Background saving terminated with success +58896:M 05 Jun 2024 15:51:48.859 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 15:51:48.861 * Background saving started by pid 79566 +79566:C 05 Jun 2024 15:51:48.871 * DB saved on disk +79566:C 05 Jun 2024 15:51:48.871 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 15:51:48.963 * Background saving terminated with success +58896:M 05 Jun 2024 16:17:59.180 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 16:17:59.183 * Background saving started by pid 82108 +82108:C 05 Jun 2024 16:17:59.192 * DB saved on disk +82108:C 05 Jun 2024 16:17:59.193 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 16:17:59.284 * Background saving terminated with success +58896:M 05 Jun 2024 16:35:17.999 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 16:35:18.002 * Background saving started by pid 83723 +83723:C 05 Jun 2024 16:35:18.010 * DB saved on disk +83723:C 05 Jun 2024 16:35:18.011 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 16:35:18.103 * Background saving terminated with success +58896:M 05 Jun 2024 16:43:22.260 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 16:43:22.261 * Background saving started by pid 84583 +84583:C 05 Jun 2024 16:43:22.275 * DB saved on disk +84583:C 05 Jun 2024 16:43:22.278 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 16:43:22.362 * Background saving terminated with success +58896:M 05 Jun 2024 16:48:23.046 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 16:48:23.047 * Background saving started by pid 85131 +85131:C 05 Jun 2024 16:48:23.065 * DB saved on disk +85131:C 05 Jun 2024 16:48:23.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 16:48:23.148 * Background saving terminated with success +58896:M 05 Jun 2024 17:24:20.810 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 17:24:20.813 * Background saving started by pid 90105 +90105:C 05 Jun 2024 17:24:20.823 * DB saved on disk +90105:C 05 Jun 2024 17:24:20.826 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 17:24:20.914 * Background saving terminated with success +58896:M 05 Jun 2024 17:38:07.895 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 17:38:07.898 * Background saving started by pid 91506 +91506:C 05 Jun 2024 17:38:07.907 * DB saved on disk +91506:C 05 Jun 2024 17:38:07.907 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 17:38:07.998 * Background saving terminated with success +58896:M 05 Jun 2024 17:43:08.028 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 17:43:08.031 * Background saving started by pid 92110 +92110:C 05 Jun 2024 17:43:08.047 * DB saved on disk +92110:C 05 Jun 2024 17:43:08.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 17:43:08.133 * Background saving terminated with success +58896:M 05 Jun 2024 17:48:09.040 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 17:48:09.042 * Background saving started by pid 92684 +92684:C 05 Jun 2024 17:48:09.056 * DB saved on disk +92684:C 05 Jun 2024 17:48:09.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 17:48:09.144 * Background saving terminated with success +58896:M 05 Jun 2024 17:53:10.043 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 17:53:10.045 * Background saving started by pid 93293 +93293:C 05 Jun 2024 17:53:10.054 * DB saved on disk +93293:C 05 Jun 2024 17:53:10.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 17:53:10.146 * Background saving terminated with success +58896:M 05 Jun 2024 17:58:11.081 * 100 changes in 300 seconds. Saving... +58896:M 05 Jun 2024 17:58:11.083 * Background saving started by pid 93757 +93757:C 05 Jun 2024 17:58:11.096 * DB saved on disk +93757:C 05 Jun 2024 17:58:11.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 05 Jun 2024 17:58:11.186 * Background saving terminated with success +58896:M 07 Jun 2024 16:39:41.351 * 1 changes in 3600 seconds. Saving... +58896:M 07 Jun 2024 16:39:41.353 * Background saving started by pid 27460 +27460:C 07 Jun 2024 16:39:41.369 * DB saved on disk +27460:C 07 Jun 2024 16:39:41.370 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 16:39:41.454 * Background saving terminated with success +58896:M 07 Jun 2024 16:44:42.066 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 16:44:42.071 * Background saving started by pid 28358 +28358:C 07 Jun 2024 16:44:42.082 * DB saved on disk +28358:C 07 Jun 2024 16:44:42.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 16:44:42.173 * Background saving terminated with success +58896:M 07 Jun 2024 17:16:01.732 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 17:16:01.734 * Background saving started by pid 33049 +33049:C 07 Jun 2024 17:16:01.746 * DB saved on disk +33049:C 07 Jun 2024 17:16:01.746 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 17:16:01.835 * Background saving terminated with success +58896:M 07 Jun 2024 17:21:02.052 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 17:21:02.059 * Background saving started by pid 33638 +33638:C 07 Jun 2024 17:21:02.070 * DB saved on disk +33638:C 07 Jun 2024 17:21:02.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 17:21:02.161 * Background saving terminated with success +58896:M 07 Jun 2024 17:33:38.484 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 17:33:38.486 * Background saving started by pid 35103 +35103:C 07 Jun 2024 17:33:38.495 * DB saved on disk +35103:C 07 Jun 2024 17:33:38.495 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 17:33:38.587 * Background saving terminated with success +58896:M 07 Jun 2024 17:38:39.030 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 17:38:39.031 * Background saving started by pid 35753 +35753:C 07 Jun 2024 17:38:39.044 * DB saved on disk +35753:C 07 Jun 2024 17:38:39.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 17:38:39.132 * Background saving terminated with success +58896:M 07 Jun 2024 17:43:40.049 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 17:43:40.051 * Background saving started by pid 36373 +36373:C 07 Jun 2024 17:43:40.062 * DB saved on disk +36373:C 07 Jun 2024 17:43:40.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 17:43:40.152 * Background saving terminated with success +58896:M 07 Jun 2024 17:49:19.866 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 17:49:19.867 * Background saving started by pid 36987 +36987:C 07 Jun 2024 17:49:19.874 * DB saved on disk +36987:C 07 Jun 2024 17:49:19.875 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 17:49:19.967 * Background saving terminated with success +58896:M 07 Jun 2024 17:54:20.070 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 17:54:20.074 * Background saving started by pid 37622 +37622:C 07 Jun 2024 17:54:20.087 * DB saved on disk +37622:C 07 Jun 2024 17:54:20.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 17:54:20.178 * Background saving terminated with success +58896:M 07 Jun 2024 18:00:52.446 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 18:00:52.448 * Background saving started by pid 38338 +38338:C 07 Jun 2024 18:00:52.458 * DB saved on disk +38338:C 07 Jun 2024 18:00:52.460 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 18:00:52.548 * Background saving terminated with success +58896:M 07 Jun 2024 18:05:53.016 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 18:05:53.018 * Background saving started by pid 39003 +39003:C 07 Jun 2024 18:05:53.032 * DB saved on disk +39003:C 07 Jun 2024 18:05:53.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 18:05:53.119 * Background saving terminated with success +58896:M 07 Jun 2024 18:10:54.046 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 18:10:54.047 * Background saving started by pid 39675 +39675:C 07 Jun 2024 18:10:54.071 * DB saved on disk +39675:C 07 Jun 2024 18:10:54.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 18:10:54.149 * Background saving terminated with success +58896:M 07 Jun 2024 18:22:32.800 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 18:22:32.801 * Background saving started by pid 40966 +40966:C 07 Jun 2024 18:22:32.812 * DB saved on disk +40966:C 07 Jun 2024 18:22:32.813 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 18:22:32.904 * Background saving terminated with success +58896:M 07 Jun 2024 18:27:33.013 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 18:27:33.013 * Background saving started by pid 41713 +41713:C 07 Jun 2024 18:27:33.026 * DB saved on disk +41713:C 07 Jun 2024 18:27:33.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 18:27:33.115 * Background saving terminated with success +58896:M 07 Jun 2024 18:32:34.020 * 100 changes in 300 seconds. Saving... +58896:M 07 Jun 2024 18:32:34.022 * Background saving started by pid 42366 +42366:C 07 Jun 2024 18:32:34.039 * DB saved on disk +42366:C 07 Jun 2024 18:32:34.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 07 Jun 2024 18:32:34.124 * Background saving terminated with success +58896:M 09 Jun 2024 01:21:17.009 * 1 changes in 3600 seconds. Saving... +58896:M 09 Jun 2024 01:21:17.010 * Background saving started by pid 51967 +51967:C 09 Jun 2024 01:21:17.025 * DB saved on disk +51967:C 09 Jun 2024 01:21:17.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:21:17.111 * Background saving terminated with success +58896:M 09 Jun 2024 01:26:18.067 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 01:26:18.068 * Background saving started by pid 52613 +52613:C 09 Jun 2024 01:26:18.076 * DB saved on disk +52613:C 09 Jun 2024 01:26:18.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:26:18.169 * Background saving terminated with success +58896:M 09 Jun 2024 01:31:19.072 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 01:31:19.074 * Background saving started by pid 53131 +53131:C 09 Jun 2024 01:31:19.092 * DB saved on disk +53131:C 09 Jun 2024 01:31:19.094 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:31:19.176 * Background saving terminated with success +58896:M 09 Jun 2024 01:36:20.080 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 01:36:20.083 * Background saving started by pid 53704 +53704:C 09 Jun 2024 01:36:20.094 * DB saved on disk +53704:C 09 Jun 2024 01:36:20.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:36:20.185 * Background saving terminated with success +58896:M 09 Jun 2024 01:41:21.074 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 01:41:21.076 * Background saving started by pid 54385 +54385:C 09 Jun 2024 01:41:21.090 * DB saved on disk +54385:C 09 Jun 2024 01:41:21.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:41:21.179 * Background saving terminated with success +58896:M 09 Jun 2024 01:46:22.080 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 01:46:22.083 * Background saving started by pid 54916 +54916:C 09 Jun 2024 01:46:22.102 * DB saved on disk +54916:C 09 Jun 2024 01:46:22.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:46:22.184 * Background saving terminated with success +58896:M 09 Jun 2024 01:51:23.049 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 01:51:23.052 * Background saving started by pid 55511 +55511:C 09 Jun 2024 01:51:23.064 * DB saved on disk +55511:C 09 Jun 2024 01:51:23.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:51:23.152 * Background saving terminated with success +58896:M 09 Jun 2024 01:59:40.782 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 01:59:40.783 * Background saving started by pid 56315 +56315:C 09 Jun 2024 01:59:40.795 * DB saved on disk +56315:C 09 Jun 2024 01:59:40.795 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 01:59:40.883 * Background saving terminated with success +58896:M 09 Jun 2024 02:04:41.092 * 100 changes in 300 seconds. Saving... +58896:M 09 Jun 2024 02:04:41.096 * Background saving started by pid 56862 +56862:C 09 Jun 2024 02:04:41.111 * DB saved on disk +56862:C 09 Jun 2024 02:04:41.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 09 Jun 2024 02:04:41.198 * Background saving terminated with success +58896:M 11 Jun 2024 13:19:27.398 * 1 changes in 3600 seconds. Saving... +58896:M 11 Jun 2024 13:19:27.402 * Background saving started by pid 99129 +99129:C 11 Jun 2024 13:19:27.435 * DB saved on disk +99129:C 11 Jun 2024 13:19:27.437 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:19:27.503 * Background saving terminated with success +58896:M 11 Jun 2024 13:24:28.020 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 13:24:28.021 * Background saving started by pid 222 +222:C 11 Jun 2024 13:24:28.037 * DB saved on disk +222:C 11 Jun 2024 13:24:28.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:24:28.127 * Background saving terminated with success +58896:M 11 Jun 2024 13:29:29.094 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 13:29:29.096 * Background saving started by pid 1314 +1314:C 11 Jun 2024 13:29:29.108 * DB saved on disk +1314:C 11 Jun 2024 13:29:29.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:29:29.197 * Background saving terminated with success +58896:M 11 Jun 2024 13:34:30.038 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 13:34:30.042 * Background saving started by pid 1927 +1927:C 11 Jun 2024 13:34:30.054 * DB saved on disk +1927:C 11 Jun 2024 13:34:30.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:34:30.144 * Background saving terminated with success +58896:M 11 Jun 2024 13:39:31.059 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 13:39:31.063 * Background saving started by pid 2516 +2516:C 11 Jun 2024 13:39:31.100 * DB saved on disk +2516:C 11 Jun 2024 13:39:31.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:39:31.164 * Background saving terminated with success +58896:M 11 Jun 2024 13:44:32.023 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 13:44:32.024 * Background saving started by pid 3067 +3067:C 11 Jun 2024 13:44:32.033 * DB saved on disk +3067:C 11 Jun 2024 13:44:32.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:44:32.125 * Background saving terminated with success +58896:M 11 Jun 2024 13:51:40.611 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 13:51:40.614 * Background saving started by pid 3795 +3795:C 11 Jun 2024 13:51:40.627 * DB saved on disk +3795:C 11 Jun 2024 13:51:40.628 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:51:40.715 * Background saving terminated with success +58896:M 11 Jun 2024 13:56:41.066 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 13:56:41.069 * Background saving started by pid 4441 +4441:C 11 Jun 2024 13:56:41.091 * DB saved on disk +4441:C 11 Jun 2024 13:56:41.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 13:56:41.170 * Background saving terminated with success +58896:M 11 Jun 2024 14:01:42.031 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:01:42.035 * Background saving started by pid 5198 +5198:C 11 Jun 2024 14:01:42.058 * DB saved on disk +5198:C 11 Jun 2024 14:01:42.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:01:42.137 * Background saving terminated with success +58896:M 11 Jun 2024 14:08:57.215 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:08:57.217 * Background saving started by pid 5893 +5893:C 11 Jun 2024 14:08:57.230 * DB saved on disk +5893:C 11 Jun 2024 14:08:57.232 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:08:57.319 * Background saving terminated with success +58896:M 11 Jun 2024 14:13:58.030 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:13:58.034 * Background saving started by pid 6544 +6544:C 11 Jun 2024 14:13:58.061 * DB saved on disk +6544:C 11 Jun 2024 14:13:58.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:13:58.142 * Background saving terminated with success +58896:M 11 Jun 2024 14:18:59.057 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:18:59.060 * Background saving started by pid 7250 +7250:C 11 Jun 2024 14:18:59.074 * DB saved on disk +7250:C 11 Jun 2024 14:18:59.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:18:59.164 * Background saving terminated with success +58896:M 11 Jun 2024 14:24:00.000 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:24:00.003 * Background saving started by pid 7777 +7777:C 11 Jun 2024 14:24:00.017 * DB saved on disk +7777:C 11 Jun 2024 14:24:00.018 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:24:00.105 * Background saving terminated with success +58896:M 11 Jun 2024 14:29:01.003 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:29:01.005 * Background saving started by pid 9446 +9446:C 11 Jun 2024 14:29:01.022 * DB saved on disk +9446:C 11 Jun 2024 14:29:01.023 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:29:01.106 * Background saving terminated with success +58896:M 11 Jun 2024 14:38:46.573 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:38:46.575 * Background saving started by pid 16553 +16553:C 11 Jun 2024 14:38:46.587 * DB saved on disk +16553:C 11 Jun 2024 14:38:46.587 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:38:46.677 * Background saving terminated with success +58896:M 11 Jun 2024 14:43:47.042 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:43:47.046 * Background saving started by pid 18767 +18767:C 11 Jun 2024 14:43:47.064 * DB saved on disk +18767:C 11 Jun 2024 14:43:47.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:43:47.149 * Background saving terminated with success +58896:M 11 Jun 2024 14:48:48.071 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 14:48:48.072 * Background saving started by pid 19508 +19508:C 11 Jun 2024 14:48:48.105 * DB saved on disk +19508:C 11 Jun 2024 14:48:48.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 14:48:48.173 * Background saving terminated with success +58896:M 11 Jun 2024 15:55:55.546 * 1 changes in 3600 seconds. Saving... +58896:M 11 Jun 2024 15:55:55.665 * Background saving started by pid 20200 +20200:C 11 Jun 2024 15:55:55.673 * DB saved on disk +20200:C 11 Jun 2024 15:55:55.674 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 15:55:55.766 * Background saving terminated with success +58896:M 11 Jun 2024 16:55:56.028 * 1 changes in 3600 seconds. Saving... +58896:M 11 Jun 2024 16:55:56.029 * Background saving started by pid 26736 +26736:C 11 Jun 2024 16:55:56.039 * DB saved on disk +26736:C 11 Jun 2024 16:55:56.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 16:55:56.130 * Background saving terminated with success +58896:M 11 Jun 2024 17:00:57.094 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:00:57.096 * Background saving started by pid 27696 +27696:C 11 Jun 2024 17:00:57.110 * DB saved on disk +27696:C 11 Jun 2024 17:00:57.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:00:57.197 * Background saving terminated with success +58896:M 11 Jun 2024 17:05:58.022 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:05:58.028 * Background saving started by pid 28649 +28649:C 11 Jun 2024 17:05:58.040 * DB saved on disk +28649:C 11 Jun 2024 17:05:58.042 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:05:58.130 * Background saving terminated with success +58896:M 11 Jun 2024 17:10:59.011 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:10:59.013 * Background saving started by pid 29517 +29517:C 11 Jun 2024 17:10:59.028 * DB saved on disk +29517:C 11 Jun 2024 17:10:59.029 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:10:59.114 * Background saving terminated with success +58896:M 11 Jun 2024 17:16:00.031 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:16:00.033 * Background saving started by pid 30399 +30399:C 11 Jun 2024 17:16:00.044 * DB saved on disk +30399:C 11 Jun 2024 17:16:00.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:16:00.134 * Background saving terminated with success +58896:M 11 Jun 2024 17:21:01.099 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:21:01.102 * Background saving started by pid 34058 +34058:C 11 Jun 2024 17:21:01.136 * DB saved on disk +34058:C 11 Jun 2024 17:21:01.136 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:21:01.204 * Background saving terminated with success +58896:M 11 Jun 2024 17:26:02.077 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:26:02.078 * Background saving started by pid 35339 +35339:C 11 Jun 2024 17:26:02.092 * DB saved on disk +35339:C 11 Jun 2024 17:26:02.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:26:02.179 * Background saving terminated with success +58896:M 11 Jun 2024 17:31:03.024 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:31:03.027 * Background saving started by pid 36164 +36164:C 11 Jun 2024 17:31:03.044 * DB saved on disk +36164:C 11 Jun 2024 17:31:03.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:31:03.129 * Background saving terminated with success +58896:M 11 Jun 2024 17:36:04.080 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:36:04.083 * Background saving started by pid 37017 +37017:C 11 Jun 2024 17:36:04.100 * DB saved on disk +37017:C 11 Jun 2024 17:36:04.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:36:04.184 * Background saving terminated with success +58896:M 11 Jun 2024 17:41:05.070 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:41:05.071 * Background saving started by pid 37887 +37887:C 11 Jun 2024 17:41:05.096 * DB saved on disk +37887:C 11 Jun 2024 17:41:05.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:41:05.173 * Background saving terminated with success +58896:M 11 Jun 2024 17:46:06.098 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:46:06.099 * Background saving started by pid 38777 +38777:C 11 Jun 2024 17:46:06.110 * DB saved on disk +38777:C 11 Jun 2024 17:46:06.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:46:06.200 * Background saving terminated with success +58896:M 11 Jun 2024 17:51:07.052 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:51:07.054 * Background saving started by pid 39630 +39630:C 11 Jun 2024 17:51:07.065 * DB saved on disk +39630:C 11 Jun 2024 17:51:07.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:51:07.156 * Background saving terminated with success +58896:M 11 Jun 2024 17:56:08.017 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 17:56:08.020 * Background saving started by pid 40590 +40590:C 11 Jun 2024 17:56:08.031 * DB saved on disk +40590:C 11 Jun 2024 17:56:08.032 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 17:56:08.122 * Background saving terminated with success +58896:M 11 Jun 2024 18:01:09.041 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:01:09.044 * Background saving started by pid 41552 +41552:C 11 Jun 2024 18:01:09.054 * DB saved on disk +41552:C 11 Jun 2024 18:01:09.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:01:09.145 * Background saving terminated with success +58896:M 11 Jun 2024 18:06:10.031 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:06:10.034 * Background saving started by pid 42635 +42635:C 11 Jun 2024 18:06:10.047 * DB saved on disk +42635:C 11 Jun 2024 18:06:10.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:06:10.136 * Background saving terminated with success +58896:M 11 Jun 2024 18:11:11.043 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:11:11.046 * Background saving started by pid 43579 +43579:C 11 Jun 2024 18:11:11.061 * DB saved on disk +43579:C 11 Jun 2024 18:11:11.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:11:11.147 * Background saving terminated with success +58896:M 11 Jun 2024 18:16:12.053 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:16:12.056 * Background saving started by pid 44500 +44500:C 11 Jun 2024 18:16:12.068 * DB saved on disk +44500:C 11 Jun 2024 18:16:12.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:16:12.157 * Background saving terminated with success +58896:M 11 Jun 2024 18:21:13.023 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:21:13.027 * Background saving started by pid 45459 +45459:C 11 Jun 2024 18:21:13.054 * DB saved on disk +45459:C 11 Jun 2024 18:21:13.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:21:13.128 * Background saving terminated with success +58896:M 11 Jun 2024 18:26:14.079 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:26:14.080 * Background saving started by pid 46446 +46446:C 11 Jun 2024 18:26:14.095 * DB saved on disk +46446:C 11 Jun 2024 18:26:14.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:26:14.181 * Background saving terminated with success +58896:M 11 Jun 2024 18:31:15.020 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:31:15.023 * Background saving started by pid 47369 +47369:C 11 Jun 2024 18:31:15.033 * DB saved on disk +47369:C 11 Jun 2024 18:31:15.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:31:15.125 * Background saving terminated with success +58896:M 11 Jun 2024 18:44:26.665 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:44:26.668 * Background saving started by pid 47820 +47820:C 11 Jun 2024 18:44:26.794 * DB saved on disk +47820:C 11 Jun 2024 18:44:26.795 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:44:26.870 * Background saving terminated with success +58896:M 11 Jun 2024 18:51:12.584 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 18:51:12.586 * Background saving started by pid 47950 +47950:C 11 Jun 2024 18:51:12.599 * DB saved on disk +47950:C 11 Jun 2024 18:51:12.600 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 18:51:12.689 * Background saving terminated with success +58896:M 11 Jun 2024 19:02:27.776 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:02:27.778 * Background saving started by pid 48131 +48131:C 11 Jun 2024 19:02:27.802 * DB saved on disk +48131:C 11 Jun 2024 19:02:27.804 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:02:27.881 * Background saving terminated with success +58896:M 11 Jun 2024 19:07:28.043 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:07:28.045 * Background saving started by pid 48889 +48889:C 11 Jun 2024 19:07:28.056 * DB saved on disk +48889:C 11 Jun 2024 19:07:28.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:07:28.147 * Background saving terminated with success +58896:M 11 Jun 2024 19:12:29.059 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:12:29.061 * Background saving started by pid 49675 +49675:C 11 Jun 2024 19:12:29.074 * DB saved on disk +49675:C 11 Jun 2024 19:12:29.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:12:29.165 * Background saving terminated with success +58896:M 11 Jun 2024 19:17:30.038 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:17:30.039 * Background saving started by pid 50454 +50454:C 11 Jun 2024 19:17:30.048 * DB saved on disk +50454:C 11 Jun 2024 19:17:30.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:17:30.141 * Background saving terminated with success +58896:M 11 Jun 2024 19:22:31.015 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:22:31.019 * Background saving started by pid 51066 +51066:C 11 Jun 2024 19:22:31.034 * DB saved on disk +51066:C 11 Jun 2024 19:22:31.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:22:31.121 * Background saving terminated with success +58896:M 11 Jun 2024 19:27:32.083 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:27:32.086 * Background saving started by pid 51963 +51963:C 11 Jun 2024 19:27:32.100 * DB saved on disk +51963:C 11 Jun 2024 19:27:32.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:27:32.187 * Background saving terminated with success +58896:M 11 Jun 2024 19:32:33.008 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:32:33.010 * Background saving started by pid 52753 +52753:C 11 Jun 2024 19:32:33.021 * DB saved on disk +52753:C 11 Jun 2024 19:32:33.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:32:33.111 * Background saving terminated with success +58896:M 11 Jun 2024 19:37:34.032 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:37:34.034 * Background saving started by pid 54020 +54020:C 11 Jun 2024 19:37:34.047 * DB saved on disk +54020:C 11 Jun 2024 19:37:34.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:37:34.135 * Background saving terminated with success +58896:M 11 Jun 2024 19:42:35.021 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:42:35.025 * Background saving started by pid 55025 +55025:C 11 Jun 2024 19:42:35.055 * DB saved on disk +55025:C 11 Jun 2024 19:42:35.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:42:35.126 * Background saving terminated with success +58896:M 11 Jun 2024 19:47:36.075 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:47:36.077 * Background saving started by pid 55926 +55926:C 11 Jun 2024 19:47:36.091 * DB saved on disk +55926:C 11 Jun 2024 19:47:36.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:47:36.178 * Background saving terminated with success +58896:M 11 Jun 2024 19:52:37.054 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:52:37.061 * Background saving started by pid 56735 +56735:C 11 Jun 2024 19:52:37.078 * DB saved on disk +56735:C 11 Jun 2024 19:52:37.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:52:37.163 * Background saving terminated with success +58896:M 11 Jun 2024 19:57:38.075 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 19:57:38.077 * Background saving started by pid 57603 +57603:C 11 Jun 2024 19:57:38.092 * DB saved on disk +57603:C 11 Jun 2024 19:57:38.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 19:57:38.178 * Background saving terminated with success +58896:M 11 Jun 2024 20:02:39.013 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:02:39.015 * Background saving started by pid 58545 +58545:C 11 Jun 2024 20:02:39.028 * DB saved on disk +58545:C 11 Jun 2024 20:02:39.029 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:02:39.116 * Background saving terminated with success +58896:M 11 Jun 2024 20:07:40.055 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:07:40.057 * Background saving started by pid 59368 +59368:C 11 Jun 2024 20:07:40.077 * DB saved on disk +59368:C 11 Jun 2024 20:07:40.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:07:40.159 * Background saving terminated with success +58896:M 11 Jun 2024 20:12:41.003 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:12:41.005 * Background saving started by pid 60133 +60133:C 11 Jun 2024 20:12:41.021 * DB saved on disk +60133:C 11 Jun 2024 20:12:41.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:12:41.107 * Background saving terminated with success +58896:M 11 Jun 2024 20:17:42.079 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:17:42.081 * Background saving started by pid 60949 +60949:C 11 Jun 2024 20:17:42.091 * DB saved on disk +60949:C 11 Jun 2024 20:17:42.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:17:42.181 * Background saving terminated with success +58896:M 11 Jun 2024 20:22:43.066 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:22:43.067 * Background saving started by pid 61718 +61718:C 11 Jun 2024 20:22:43.077 * DB saved on disk +61718:C 11 Jun 2024 20:22:43.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:22:43.167 * Background saving terminated with success +58896:M 11 Jun 2024 20:27:44.036 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:27:44.037 * Background saving started by pid 62501 +62501:C 11 Jun 2024 20:27:44.047 * DB saved on disk +62501:C 11 Jun 2024 20:27:44.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:27:44.138 * Background saving terminated with success +58896:M 11 Jun 2024 20:32:45.098 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:32:45.099 * Background saving started by pid 63324 +63324:C 11 Jun 2024 20:32:45.112 * DB saved on disk +63324:C 11 Jun 2024 20:32:45.113 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:32:45.199 * Background saving terminated with success +58896:M 11 Jun 2024 20:37:46.011 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:37:46.014 * Background saving started by pid 64283 +64283:C 11 Jun 2024 20:37:46.023 * DB saved on disk +64283:C 11 Jun 2024 20:37:46.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:37:46.115 * Background saving terminated with success +58896:M 11 Jun 2024 20:42:47.025 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:42:47.028 * Background saving started by pid 65146 +65146:C 11 Jun 2024 20:42:47.036 * DB saved on disk +65146:C 11 Jun 2024 20:42:47.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:42:47.129 * Background saving terminated with success +58896:M 11 Jun 2024 20:47:48.097 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:47:48.099 * Background saving started by pid 65963 +65963:C 11 Jun 2024 20:47:48.114 * DB saved on disk +65963:C 11 Jun 2024 20:47:48.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:47:48.200 * Background saving terminated with success +58896:M 11 Jun 2024 20:52:49.080 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:52:49.081 * Background saving started by pid 66721 +66721:C 11 Jun 2024 20:52:49.089 * DB saved on disk +66721:C 11 Jun 2024 20:52:49.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:52:49.182 * Background saving terminated with success +58896:M 11 Jun 2024 20:57:50.072 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 20:57:50.074 * Background saving started by pid 67533 +67533:C 11 Jun 2024 20:57:50.086 * DB saved on disk +67533:C 11 Jun 2024 20:57:50.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 20:57:50.175 * Background saving terminated with success +58896:M 11 Jun 2024 21:02:51.093 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:02:51.096 * Background saving started by pid 68492 +68492:C 11 Jun 2024 21:02:51.104 * DB saved on disk +68492:C 11 Jun 2024 21:02:51.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:02:51.197 * Background saving terminated with success +58896:M 11 Jun 2024 21:07:52.069 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:07:52.071 * Background saving started by pid 69301 +69301:C 11 Jun 2024 21:07:52.080 * DB saved on disk +69301:C 11 Jun 2024 21:07:52.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:07:52.172 * Background saving terminated with success +58896:M 11 Jun 2024 21:12:53.015 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:12:53.016 * Background saving started by pid 70023 +70023:C 11 Jun 2024 21:12:53.026 * DB saved on disk +70023:C 11 Jun 2024 21:12:53.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:12:53.117 * Background saving terminated with success +58896:M 11 Jun 2024 21:17:54.036 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:17:54.039 * Background saving started by pid 70808 +70808:C 11 Jun 2024 21:17:54.049 * DB saved on disk +70808:C 11 Jun 2024 21:17:54.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:17:54.139 * Background saving terminated with success +58896:M 11 Jun 2024 21:22:55.017 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:22:55.020 * Background saving started by pid 71619 +71619:C 11 Jun 2024 21:22:55.034 * DB saved on disk +71619:C 11 Jun 2024 21:22:55.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:22:55.122 * Background saving terminated with success +58896:M 11 Jun 2024 21:27:56.099 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:27:56.101 * Background saving started by pid 72347 +72347:C 11 Jun 2024 21:27:56.110 * DB saved on disk +72347:C 11 Jun 2024 21:27:56.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:27:56.204 * Background saving terminated with success +58896:M 11 Jun 2024 21:32:57.085 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:32:57.087 * Background saving started by pid 73084 +73084:C 11 Jun 2024 21:32:57.097 * DB saved on disk +73084:C 11 Jun 2024 21:32:57.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:32:57.190 * Background saving terminated with success +58896:M 11 Jun 2024 21:37:58.093 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:37:58.096 * Background saving started by pid 73831 +73831:C 11 Jun 2024 21:37:58.111 * DB saved on disk +73831:C 11 Jun 2024 21:37:58.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:37:58.198 * Background saving terminated with success +58896:M 11 Jun 2024 21:42:59.011 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:42:59.013 * Background saving started by pid 74560 +74560:C 11 Jun 2024 21:42:59.029 * DB saved on disk +74560:C 11 Jun 2024 21:42:59.032 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:42:59.114 * Background saving terminated with success +58896:M 11 Jun 2024 21:48:00.014 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:48:00.016 * Background saving started by pid 75300 +75300:C 11 Jun 2024 21:48:00.033 * DB saved on disk +75300:C 11 Jun 2024 21:48:00.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:48:00.118 * Background saving terminated with success +58896:M 11 Jun 2024 21:53:01.092 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:53:01.094 * Background saving started by pid 76026 +76026:C 11 Jun 2024 21:53:01.107 * DB saved on disk +76026:C 11 Jun 2024 21:53:01.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:53:01.197 * Background saving terminated with success +58896:M 11 Jun 2024 21:58:02.084 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 21:58:02.087 * Background saving started by pid 76774 +76774:C 11 Jun 2024 21:58:02.099 * DB saved on disk +76774:C 11 Jun 2024 21:58:02.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 21:58:02.188 * Background saving terminated with success +58896:M 11 Jun 2024 22:03:03.053 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:03:03.057 * Background saving started by pid 77506 +77506:C 11 Jun 2024 22:03:03.079 * DB saved on disk +77506:C 11 Jun 2024 22:03:03.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:03:03.158 * Background saving terminated with success +58896:M 11 Jun 2024 22:08:04.061 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:08:04.065 * Background saving started by pid 78241 +78241:C 11 Jun 2024 22:08:04.080 * DB saved on disk +78241:C 11 Jun 2024 22:08:04.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:08:04.168 * Background saving terminated with success +58896:M 11 Jun 2024 22:13:05.038 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:13:05.038 * Background saving started by pid 78971 +78971:C 11 Jun 2024 22:13:05.049 * DB saved on disk +78971:C 11 Jun 2024 22:13:05.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:13:05.141 * Background saving terminated with success +58896:M 11 Jun 2024 22:18:06.009 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:18:06.012 * Background saving started by pid 79712 +79712:C 11 Jun 2024 22:18:06.031 * DB saved on disk +79712:C 11 Jun 2024 22:18:06.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:18:06.115 * Background saving terminated with success +58896:M 11 Jun 2024 22:23:07.017 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:23:07.018 * Background saving started by pid 80463 +80463:C 11 Jun 2024 22:23:07.030 * DB saved on disk +80463:C 11 Jun 2024 22:23:07.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:23:07.121 * Background saving terminated with success +58896:M 11 Jun 2024 22:28:08.091 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:28:08.095 * Background saving started by pid 81195 +81195:C 11 Jun 2024 22:28:08.126 * DB saved on disk +81195:C 11 Jun 2024 22:28:08.127 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:28:08.197 * Background saving terminated with success +58896:M 11 Jun 2024 22:33:09.069 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:33:09.073 * Background saving started by pid 81924 +81924:C 11 Jun 2024 22:33:09.090 * DB saved on disk +81924:C 11 Jun 2024 22:33:09.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:33:09.176 * Background saving terminated with success +58896:M 11 Jun 2024 22:38:10.051 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:38:10.056 * Background saving started by pid 82688 +82688:C 11 Jun 2024 22:38:10.073 * DB saved on disk +82688:C 11 Jun 2024 22:38:10.074 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:38:10.158 * Background saving terminated with success +58896:M 11 Jun 2024 22:43:11.058 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:43:11.062 * Background saving started by pid 83419 +83419:C 11 Jun 2024 22:43:11.085 * DB saved on disk +83419:C 11 Jun 2024 22:43:11.086 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:43:11.165 * Background saving terminated with success +58896:M 11 Jun 2024 22:48:12.050 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:48:12.055 * Background saving started by pid 84242 +84242:C 11 Jun 2024 22:48:12.071 * DB saved on disk +84242:C 11 Jun 2024 22:48:12.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:48:12.156 * Background saving terminated with success +58896:M 11 Jun 2024 22:53:13.061 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:53:13.064 * Background saving started by pid 84972 +84972:C 11 Jun 2024 22:53:13.080 * DB saved on disk +84972:C 11 Jun 2024 22:53:13.082 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:53:13.167 * Background saving terminated with success +58896:M 11 Jun 2024 22:58:14.056 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 22:58:14.059 * Background saving started by pid 85710 +85710:C 11 Jun 2024 22:58:14.075 * DB saved on disk +85710:C 11 Jun 2024 22:58:14.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 22:58:14.161 * Background saving terminated with success +58896:M 11 Jun 2024 23:03:15.013 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:03:15.014 * Background saving started by pid 86445 +86445:C 11 Jun 2024 23:03:15.027 * DB saved on disk +86445:C 11 Jun 2024 23:03:15.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:03:15.116 * Background saving terminated with success +58896:M 11 Jun 2024 23:08:16.036 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:08:16.038 * Background saving started by pid 87172 +87172:C 11 Jun 2024 23:08:16.052 * DB saved on disk +87172:C 11 Jun 2024 23:08:16.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:08:16.138 * Background saving terminated with success +58896:M 11 Jun 2024 23:13:17.001 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:13:17.006 * Background saving started by pid 87901 +87901:C 11 Jun 2024 23:13:17.020 * DB saved on disk +87901:C 11 Jun 2024 23:13:17.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:13:17.109 * Background saving terminated with success +58896:M 11 Jun 2024 23:18:18.101 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:18:18.103 * Background saving started by pid 88646 +88646:C 11 Jun 2024 23:18:18.115 * DB saved on disk +88646:C 11 Jun 2024 23:18:18.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:18:18.205 * Background saving terminated with success +58896:M 11 Jun 2024 23:23:19.087 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:23:19.090 * Background saving started by pid 89375 +89375:C 11 Jun 2024 23:23:19.101 * DB saved on disk +89375:C 11 Jun 2024 23:23:19.103 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:23:19.192 * Background saving terminated with success +58896:M 11 Jun 2024 23:28:20.011 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:28:20.013 * Background saving started by pid 90105 +90105:C 11 Jun 2024 23:28:20.027 * DB saved on disk +90105:C 11 Jun 2024 23:28:20.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:28:20.115 * Background saving terminated with success +58896:M 11 Jun 2024 23:33:21.067 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:33:21.069 * Background saving started by pid 90839 +90839:C 11 Jun 2024 23:33:21.079 * DB saved on disk +90839:C 11 Jun 2024 23:33:21.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:33:21.170 * Background saving terminated with success +58896:M 11 Jun 2024 23:38:22.003 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:38:22.008 * Background saving started by pid 91662 +91662:C 11 Jun 2024 23:38:22.019 * DB saved on disk +91662:C 11 Jun 2024 23:38:22.019 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:38:22.111 * Background saving terminated with success +58896:M 11 Jun 2024 23:43:23.059 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:43:23.063 * Background saving started by pid 92434 +92434:C 11 Jun 2024 23:43:23.075 * DB saved on disk +92434:C 11 Jun 2024 23:43:23.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:43:23.165 * Background saving terminated with success +58896:M 11 Jun 2024 23:48:24.037 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:48:24.038 * Background saving started by pid 93164 +93164:C 11 Jun 2024 23:48:24.049 * DB saved on disk +93164:C 11 Jun 2024 23:48:24.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:48:24.142 * Background saving terminated with success +58896:M 11 Jun 2024 23:53:25.018 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:53:25.021 * Background saving started by pid 93965 +93965:C 11 Jun 2024 23:53:25.035 * DB saved on disk +93965:C 11 Jun 2024 23:53:25.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:53:25.123 * Background saving terminated with success +58896:M 11 Jun 2024 23:58:26.009 * 100 changes in 300 seconds. Saving... +58896:M 11 Jun 2024 23:58:26.011 * Background saving started by pid 94758 +94758:C 11 Jun 2024 23:58:26.025 * DB saved on disk +94758:C 11 Jun 2024 23:58:26.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 11 Jun 2024 23:58:26.112 * Background saving terminated with success +58896:M 12 Jun 2024 00:03:27.039 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:03:27.041 * Background saving started by pid 95491 +95491:C 12 Jun 2024 00:03:27.055 * DB saved on disk +95491:C 12 Jun 2024 00:03:27.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:03:27.142 * Background saving terminated with success +58896:M 12 Jun 2024 00:08:28.034 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:08:28.035 * Background saving started by pid 96284 +96284:C 12 Jun 2024 00:08:28.051 * DB saved on disk +96284:C 12 Jun 2024 00:08:28.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:08:28.136 * Background saving terminated with success +58896:M 12 Jun 2024 00:13:29.015 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:13:29.019 * Background saving started by pid 97696 +97696:C 12 Jun 2024 00:13:29.029 * DB saved on disk +97696:C 12 Jun 2024 00:13:29.030 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:13:29.120 * Background saving terminated with success +58896:M 12 Jun 2024 00:18:30.052 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:18:30.055 * Background saving started by pid 98669 +98669:C 12 Jun 2024 00:18:30.072 * DB saved on disk +98669:C 12 Jun 2024 00:18:30.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:18:30.157 * Background saving terminated with success +58896:M 12 Jun 2024 00:23:31.067 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:23:31.069 * Background saving started by pid 99666 +99666:C 12 Jun 2024 00:23:31.085 * DB saved on disk +99666:C 12 Jun 2024 00:23:31.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:23:31.169 * Background saving terminated with success +58896:M 12 Jun 2024 00:28:32.087 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:28:32.093 * Background saving started by pid 831 +831:C 12 Jun 2024 00:28:32.110 * DB saved on disk +831:C 12 Jun 2024 00:28:32.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:28:32.194 * Background saving terminated with success +58896:M 12 Jun 2024 00:33:33.077 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:33:33.079 * Background saving started by pid 1642 +1642:C 12 Jun 2024 00:33:33.099 * DB saved on disk +1642:C 12 Jun 2024 00:33:33.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:33:33.181 * Background saving terminated with success +58896:M 12 Jun 2024 00:38:34.030 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:38:34.032 * Background saving started by pid 2590 +2590:C 12 Jun 2024 00:38:34.045 * DB saved on disk +2590:C 12 Jun 2024 00:38:34.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:38:34.134 * Background saving terminated with success +58896:M 12 Jun 2024 00:43:35.021 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:43:35.024 * Background saving started by pid 3742 +3742:C 12 Jun 2024 00:43:35.037 * DB saved on disk +3742:C 12 Jun 2024 00:43:35.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:43:35.125 * Background saving terminated with success +58896:M 12 Jun 2024 00:48:36.015 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:48:36.018 * Background saving started by pid 4666 +4666:C 12 Jun 2024 00:48:36.030 * DB saved on disk +4666:C 12 Jun 2024 00:48:36.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:48:36.119 * Background saving terminated with success +58896:M 12 Jun 2024 00:53:37.025 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:53:37.027 * Background saving started by pid 5691 +5691:C 12 Jun 2024 00:53:37.042 * DB saved on disk +5691:C 12 Jun 2024 00:53:37.042 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:53:37.129 * Background saving terminated with success +58896:M 12 Jun 2024 00:58:38.050 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 00:58:38.054 * Background saving started by pid 6620 +6620:C 12 Jun 2024 00:58:38.065 * DB saved on disk +6620:C 12 Jun 2024 00:58:38.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 00:58:38.155 * Background saving terminated with success +58896:M 12 Jun 2024 01:03:39.073 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:03:39.075 * Background saving started by pid 7624 +7624:C 12 Jun 2024 01:03:39.101 * DB saved on disk +7624:C 12 Jun 2024 01:03:39.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:03:39.176 * Background saving terminated with success +58896:M 12 Jun 2024 01:08:40.009 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:08:40.012 * Background saving started by pid 8631 +8631:C 12 Jun 2024 01:08:40.025 * DB saved on disk +8631:C 12 Jun 2024 01:08:40.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:08:40.113 * Background saving terminated with success +58896:M 12 Jun 2024 01:20:43.620 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:20:43.625 * Background saving started by pid 10740 +10740:C 12 Jun 2024 01:20:43.650 * DB saved on disk +10740:C 12 Jun 2024 01:20:43.650 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:20:43.727 * Background saving terminated with success +58896:M 12 Jun 2024 01:25:44.086 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:25:44.089 * Background saving started by pid 11660 +11660:C 12 Jun 2024 01:25:44.101 * DB saved on disk +11660:C 12 Jun 2024 01:25:44.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:25:44.190 * Background saving terminated with success +58896:M 12 Jun 2024 01:30:45.057 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:30:45.059 * Background saving started by pid 12738 +12738:C 12 Jun 2024 01:30:45.066 * DB saved on disk +12738:C 12 Jun 2024 01:30:45.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:30:45.159 * Background saving terminated with success +58896:M 12 Jun 2024 01:35:46.087 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:35:46.088 * Background saving started by pid 13711 +13711:C 12 Jun 2024 01:35:46.099 * DB saved on disk +13711:C 12 Jun 2024 01:35:46.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:35:46.189 * Background saving terminated with success +58896:M 12 Jun 2024 01:40:47.061 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:40:47.062 * Background saving started by pid 14674 +14674:C 12 Jun 2024 01:40:47.069 * DB saved on disk +14674:C 12 Jun 2024 01:40:47.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:40:47.162 * Background saving terminated with success +58896:M 12 Jun 2024 01:45:48.078 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:45:48.082 * Background saving started by pid 18780 +18780:C 12 Jun 2024 01:45:48.103 * DB saved on disk +18780:C 12 Jun 2024 01:45:48.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:45:48.184 * Background saving terminated with success +58896:M 12 Jun 2024 01:50:49.025 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:50:49.026 * Background saving started by pid 19686 +19686:C 12 Jun 2024 01:50:49.038 * DB saved on disk +19686:C 12 Jun 2024 01:50:49.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:50:49.127 * Background saving terminated with success +58896:M 12 Jun 2024 01:56:34.702 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 01:56:34.702 * Background saving started by pid 20738 +20738:C 12 Jun 2024 01:56:34.741 * DB saved on disk +20738:C 12 Jun 2024 01:56:34.744 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 01:56:34.803 * Background saving terminated with success +58896:M 12 Jun 2024 02:01:35.007 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:01:35.008 * Background saving started by pid 21912 +21912:C 12 Jun 2024 02:01:35.017 * DB saved on disk +21912:C 12 Jun 2024 02:01:35.018 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:01:35.108 * Background saving terminated with success +58896:M 12 Jun 2024 02:06:36.095 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:06:36.097 * Background saving started by pid 23306 +23306:C 12 Jun 2024 02:06:36.103 * DB saved on disk +23306:C 12 Jun 2024 02:06:36.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:06:36.197 * Background saving terminated with success +58896:M 12 Jun 2024 02:11:37.037 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:11:37.038 * Background saving started by pid 24623 +24623:C 12 Jun 2024 02:11:37.049 * DB saved on disk +24623:C 12 Jun 2024 02:11:37.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:11:37.138 * Background saving terminated with success +58896:M 12 Jun 2024 02:16:38.032 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:16:38.035 * Background saving started by pid 28935 +28935:C 12 Jun 2024 02:16:38.056 * DB saved on disk +28935:C 12 Jun 2024 02:16:38.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:16:38.136 * Background saving terminated with success +58896:M 12 Jun 2024 02:21:39.065 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:21:39.068 * Background saving started by pid 30316 +30316:C 12 Jun 2024 02:21:39.089 * DB saved on disk +30316:C 12 Jun 2024 02:21:39.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:21:39.169 * Background saving terminated with success +58896:M 12 Jun 2024 02:26:40.088 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:26:40.092 * Background saving started by pid 31108 +31108:C 12 Jun 2024 02:26:40.115 * DB saved on disk +31108:C 12 Jun 2024 02:26:40.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:26:40.192 * Background saving terminated with success +58896:M 12 Jun 2024 02:31:41.089 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:31:41.090 * Background saving started by pid 32709 +32709:C 12 Jun 2024 02:31:41.115 * DB saved on disk +32709:C 12 Jun 2024 02:31:41.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:31:41.191 * Background saving terminated with success +58896:M 12 Jun 2024 02:34:11.210 * DB saved on disk +58896:M 12 Jun 2024 02:39:12.090 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:39:12.090 * Background saving started by pid 34729 +34729:C 12 Jun 2024 02:39:12.098 * DB saved on disk +34729:C 12 Jun 2024 02:39:12.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:39:12.191 * Background saving terminated with success +58896:M 12 Jun 2024 02:44:13.030 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:44:13.031 * Background saving started by pid 36552 +36552:C 12 Jun 2024 02:44:13.039 * DB saved on disk +36552:C 12 Jun 2024 02:44:13.040 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:44:13.132 * Background saving terminated with success +58896:M 12 Jun 2024 02:49:14.003 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:49:14.007 * Background saving started by pid 40406 +40406:C 12 Jun 2024 02:49:14.016 * DB saved on disk +40406:C 12 Jun 2024 02:49:14.017 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:49:14.108 * Background saving terminated with success +58896:M 12 Jun 2024 02:54:15.052 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:54:15.053 * Background saving started by pid 41373 +41373:C 12 Jun 2024 02:54:15.068 * DB saved on disk +41373:C 12 Jun 2024 02:54:15.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:54:15.155 * Background saving terminated with success +58896:M 12 Jun 2024 02:59:16.098 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 02:59:16.100 * Background saving started by pid 42324 +42324:C 12 Jun 2024 02:59:16.108 * DB saved on disk +42324:C 12 Jun 2024 02:59:16.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 02:59:16.201 * Background saving terminated with success +58896:M 12 Jun 2024 03:04:17.012 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:04:17.015 * Background saving started by pid 43225 +43225:C 12 Jun 2024 03:04:17.025 * DB saved on disk +43225:C 12 Jun 2024 03:04:17.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:04:17.116 * Background saving terminated with success +58896:M 12 Jun 2024 03:04:34.446 * DB saved on disk +58896:M 12 Jun 2024 03:09:35.045 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:09:35.048 * Background saving started by pid 44410 +44410:C 12 Jun 2024 03:09:35.055 * DB saved on disk +44410:C 12 Jun 2024 03:09:35.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:09:35.148 * Background saving terminated with success +58896:M 12 Jun 2024 03:14:36.016 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:14:36.019 * Background saving started by pid 46540 +46540:C 12 Jun 2024 03:14:36.031 * DB saved on disk +46540:C 12 Jun 2024 03:14:36.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:14:36.119 * Background saving terminated with success +58896:M 12 Jun 2024 03:19:37.037 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:19:37.041 * Background saving started by pid 47386 +47386:C 12 Jun 2024 03:19:37.055 * DB saved on disk +47386:C 12 Jun 2024 03:19:37.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:19:37.143 * Background saving terminated with success +58896:M 12 Jun 2024 03:24:38.035 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:24:38.042 * Background saving started by pid 48201 +48201:C 12 Jun 2024 03:24:38.063 * DB saved on disk +48201:C 12 Jun 2024 03:24:38.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:24:38.147 * Background saving terminated with success +58896:M 12 Jun 2024 03:29:39.031 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:29:39.035 * Background saving started by pid 49082 +49082:C 12 Jun 2024 03:29:39.051 * DB saved on disk +49082:C 12 Jun 2024 03:29:39.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:29:39.136 * Background saving terminated with success +58896:M 12 Jun 2024 03:34:40.043 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:34:40.046 * Background saving started by pid 53122 +53122:C 12 Jun 2024 03:34:40.058 * DB saved on disk +53122:C 12 Jun 2024 03:34:40.059 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:34:40.147 * Background saving terminated with success +58896:M 12 Jun 2024 03:39:41.032 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:39:41.035 * Background saving started by pid 54267 +54267:C 12 Jun 2024 03:39:41.056 * DB saved on disk +54267:C 12 Jun 2024 03:39:41.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:39:41.137 * Background saving terminated with success +58896:M 12 Jun 2024 03:44:42.005 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:44:42.006 * Background saving started by pid 55054 +55054:C 12 Jun 2024 03:44:42.022 * DB saved on disk +55054:C 12 Jun 2024 03:44:42.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:44:42.107 * Background saving terminated with success +58896:M 12 Jun 2024 03:49:43.092 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:49:43.094 * Background saving started by pid 55938 +55938:C 12 Jun 2024 03:49:43.104 * DB saved on disk +55938:C 12 Jun 2024 03:49:43.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:49:43.195 * Background saving terminated with success +58896:M 12 Jun 2024 03:54:44.085 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:54:44.087 * Background saving started by pid 56777 +56777:C 12 Jun 2024 03:54:44.105 * DB saved on disk +56777:C 12 Jun 2024 03:54:44.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:54:44.189 * Background saving terminated with success +58896:M 12 Jun 2024 03:59:45.049 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 03:59:45.050 * Background saving started by pid 57643 +57643:C 12 Jun 2024 03:59:45.059 * DB saved on disk +57643:C 12 Jun 2024 03:59:45.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 03:59:45.151 * Background saving terminated with success +58896:M 12 Jun 2024 04:04:46.023 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:04:46.027 * Background saving started by pid 58638 +58638:C 12 Jun 2024 04:04:46.049 * DB saved on disk +58638:C 12 Jun 2024 04:04:46.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:04:46.129 * Background saving terminated with success +58896:M 12 Jun 2024 04:09:47.069 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:09:47.071 * Background saving started by pid 59417 +59417:C 12 Jun 2024 04:09:47.089 * DB saved on disk +59417:C 12 Jun 2024 04:09:47.090 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:09:47.173 * Background saving terminated with success +58896:M 12 Jun 2024 04:14:48.091 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:14:48.092 * Background saving started by pid 60190 +60190:C 12 Jun 2024 04:14:48.100 * DB saved on disk +60190:C 12 Jun 2024 04:14:48.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:14:48.193 * Background saving terminated with success +58896:M 12 Jun 2024 04:19:49.050 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:19:49.052 * Background saving started by pid 61120 +61120:C 12 Jun 2024 04:19:49.060 * DB saved on disk +61120:C 12 Jun 2024 04:19:49.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:19:49.153 * Background saving terminated with success +58896:M 12 Jun 2024 04:24:50.028 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:24:50.032 * Background saving started by pid 61993 +61993:C 12 Jun 2024 04:24:50.051 * DB saved on disk +61993:C 12 Jun 2024 04:24:50.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:24:50.134 * Background saving terminated with success +58896:M 12 Jun 2024 04:29:51.054 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:29:51.058 * Background saving started by pid 62790 +62790:C 12 Jun 2024 04:29:51.077 * DB saved on disk +62790:C 12 Jun 2024 04:29:51.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:29:51.159 * Background saving terminated with success +58896:M 12 Jun 2024 04:34:52.067 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:34:52.069 * Background saving started by pid 63597 +63597:C 12 Jun 2024 04:34:52.077 * DB saved on disk +63597:C 12 Jun 2024 04:34:52.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:34:52.170 * Background saving terminated with success +58896:M 12 Jun 2024 04:39:53.088 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:39:53.089 * Background saving started by pid 64519 +64519:C 12 Jun 2024 04:39:53.098 * DB saved on disk +64519:C 12 Jun 2024 04:39:53.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:39:53.190 * Background saving terminated with success +58896:M 12 Jun 2024 04:44:54.089 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:44:54.091 * Background saving started by pid 65472 +65472:C 12 Jun 2024 04:44:54.099 * DB saved on disk +65472:C 12 Jun 2024 04:44:54.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:44:54.193 * Background saving terminated with success +58896:M 12 Jun 2024 04:49:55.090 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:49:55.091 * Background saving started by pid 66430 +66430:C 12 Jun 2024 04:49:55.102 * DB saved on disk +66430:C 12 Jun 2024 04:49:55.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:49:55.192 * Background saving terminated with success +58896:M 12 Jun 2024 04:54:56.019 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:54:56.022 * Background saving started by pid 67514 +67514:C 12 Jun 2024 04:54:56.034 * DB saved on disk +67514:C 12 Jun 2024 04:54:56.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:54:56.124 * Background saving terminated with success +58896:M 12 Jun 2024 04:59:57.000 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 04:59:57.001 * Background saving started by pid 68698 +68698:C 12 Jun 2024 04:59:57.010 * DB saved on disk +68698:C 12 Jun 2024 04:59:57.012 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 04:59:57.102 * Background saving terminated with success +58896:M 12 Jun 2024 05:04:58.100 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:04:58.102 * Background saving started by pid 74173 +74173:C 12 Jun 2024 05:04:58.117 * DB saved on disk +74173:C 12 Jun 2024 05:04:58.117 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:04:58.204 * Background saving terminated with success +58896:M 12 Jun 2024 05:09:59.003 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:09:59.005 * Background saving started by pid 77013 +77013:C 12 Jun 2024 05:09:59.012 * DB saved on disk +77013:C 12 Jun 2024 05:09:59.013 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:09:59.106 * Background saving terminated with success +58896:M 12 Jun 2024 05:15:00.056 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:15:00.058 * Background saving started by pid 77983 +77983:C 12 Jun 2024 05:15:00.070 * DB saved on disk +77983:C 12 Jun 2024 05:15:00.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:15:00.159 * Background saving terminated with success +58896:M 12 Jun 2024 05:20:01.096 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:20:01.103 * Background saving started by pid 79011 +79011:C 12 Jun 2024 05:20:01.122 * DB saved on disk +79011:C 12 Jun 2024 05:20:01.132 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:20:01.204 * Background saving terminated with success +58896:M 12 Jun 2024 05:25:02.097 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:25:02.099 * Background saving started by pid 80216 +80216:C 12 Jun 2024 05:25:02.113 * DB saved on disk +80216:C 12 Jun 2024 05:25:02.113 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:25:02.200 * Background saving terminated with success +58896:M 12 Jun 2024 05:30:03.063 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:30:03.068 * Background saving started by pid 81376 +81376:C 12 Jun 2024 05:30:03.083 * DB saved on disk +81376:C 12 Jun 2024 05:30:03.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:30:03.169 * Background saving terminated with success +58896:M 12 Jun 2024 05:35:04.075 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:35:04.078 * Background saving started by pid 82164 +82164:C 12 Jun 2024 05:35:04.088 * DB saved on disk +82164:C 12 Jun 2024 05:35:04.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:35:04.179 * Background saving terminated with success +58896:M 12 Jun 2024 05:40:05.085 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:40:05.087 * Background saving started by pid 83362 +83362:C 12 Jun 2024 05:40:05.113 * DB saved on disk +83362:C 12 Jun 2024 05:40:05.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:40:05.189 * Background saving terminated with success +58896:M 12 Jun 2024 05:45:06.011 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:45:06.012 * Background saving started by pid 84525 +84525:C 12 Jun 2024 05:45:06.021 * DB saved on disk +84525:C 12 Jun 2024 05:45:06.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:45:06.114 * Background saving terminated with success +58896:M 12 Jun 2024 05:50:07.081 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 05:50:07.082 * Background saving started by pid 85679 +85679:C 12 Jun 2024 05:50:07.095 * DB saved on disk +85679:C 12 Jun 2024 05:50:07.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 05:50:07.184 * Background saving terminated with success +58896:M 12 Jun 2024 06:09:17.678 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 06:09:17.799 * Background saving started by pid 86522 +86522:C 12 Jun 2024 06:09:17.807 * DB saved on disk +86522:C 12 Jun 2024 06:09:17.807 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 06:09:17.913 * Background saving terminated with success +58896:M 12 Jun 2024 07:23:10.681 * 1 changes in 3600 seconds. Saving... +58896:M 12 Jun 2024 07:23:10.685 * Background saving started by pid 86688 +86688:C 12 Jun 2024 07:23:10.799 * DB saved on disk +86688:C 12 Jun 2024 07:23:10.800 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 07:23:10.887 * Background saving terminated with success +58896:M 12 Jun 2024 08:28:27.701 * 1 changes in 3600 seconds. Saving... +58896:M 12 Jun 2024 08:28:27.709 * Background saving started by pid 86783 +86783:C 12 Jun 2024 08:28:27.805 * DB saved on disk +86783:C 12 Jun 2024 08:28:27.806 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 08:28:27.810 * Background saving terminated with success +58896:M 12 Jun 2024 08:37:48.107 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 08:37:48.109 * Background saving started by pid 86998 +86998:C 12 Jun 2024 08:37:48.124 * DB saved on disk +86998:C 12 Jun 2024 08:37:48.125 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 08:37:48.210 * Background saving terminated with success +58896:M 12 Jun 2024 08:45:00.378 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 08:45:00.441 * Background saving started by pid 88055 +88055:C 12 Jun 2024 08:45:00.998 * DB saved on disk +88055:C 12 Jun 2024 08:45:01.006 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 08:45:01.057 * Background saving terminated with success +58896:M 12 Jun 2024 09:03:18.658 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 09:03:18.662 * Background saving started by pid 88847 +88847:C 12 Jun 2024 09:03:18.782 * DB saved on disk +88847:C 12 Jun 2024 09:03:18.783 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 09:03:18.865 * Background saving terminated with success +58896:M 12 Jun 2024 09:20:51.679 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 09:20:51.682 * Background saving started by pid 89079 +89079:C 12 Jun 2024 09:20:51.805 * DB saved on disk +89079:C 12 Jun 2024 09:20:51.806 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 09:20:51.885 * Background saving terminated with success +58896:M 12 Jun 2024 09:36:57.986 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 09:36:57.986 * Background saving started by pid 89273 +89273:C 12 Jun 2024 09:36:57.994 * DB saved on disk +89273:C 12 Jun 2024 09:36:57.994 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 09:36:58.089 * Background saving terminated with success +58896:M 12 Jun 2024 09:52:59.001 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 09:52:59.002 * Background saving started by pid 89459 +89459:C 12 Jun 2024 09:52:59.013 * DB saved on disk +89459:C 12 Jun 2024 09:52:59.014 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 09:52:59.103 * Background saving terminated with success +58896:M 12 Jun 2024 10:09:08.619 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 10:09:08.624 * Background saving started by pid 89697 +89697:C 12 Jun 2024 10:09:08.738 * DB saved on disk +89697:C 12 Jun 2024 10:09:08.739 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 10:09:08.831 * Background saving terminated with success +58896:M 12 Jun 2024 10:27:48.637 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 10:27:48.640 * Background saving started by pid 90312 +90312:C 12 Jun 2024 10:27:48.754 * DB saved on disk +90312:C 12 Jun 2024 10:27:48.754 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 10:27:48.843 * Background saving terminated with success +58896:M 12 Jun 2024 10:45:08.649 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 10:45:08.765 * Background saving started by pid 90689 +90689:C 12 Jun 2024 10:45:08.781 * DB saved on disk +90689:C 12 Jun 2024 10:45:08.781 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 10:45:08.872 * Background saving terminated with success +58896:M 12 Jun 2024 11:04:19.611 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 11:04:19.731 * Background saving started by pid 91384 +91384:C 12 Jun 2024 11:04:19.738 * DB saved on disk +91384:C 12 Jun 2024 11:04:19.739 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 11:04:19.837 * Background saving terminated with success +58896:M 12 Jun 2024 11:13:15.115 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 11:13:15.119 * Background saving started by pid 91575 +91575:C 12 Jun 2024 11:13:15.137 * DB saved on disk +91575:C 12 Jun 2024 11:13:15.138 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 11:13:15.222 * Background saving terminated with success +58896:M 12 Jun 2024 12:18:47.632 * 1 changes in 3600 seconds. Saving... +58896:M 12 Jun 2024 12:18:47.635 * Background saving started by pid 91694 +91694:C 12 Jun 2024 12:18:47.756 * DB saved on disk +91694:C 12 Jun 2024 12:18:47.757 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 12:18:47.839 * Background saving terminated with success +58896:M 12 Jun 2024 12:39:26.809 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 12:39:26.811 * Background saving started by pid 92013 +92013:C 12 Jun 2024 12:39:26.824 * DB saved on disk +92013:C 12 Jun 2024 12:39:26.825 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 12:39:26.912 * Background saving terminated with success +58896:M 12 Jun 2024 12:44:27.044 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 12:44:27.045 * Background saving started by pid 93150 +93150:C 12 Jun 2024 12:44:27.052 * DB saved on disk +93150:C 12 Jun 2024 12:44:27.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 12:44:27.146 * Background saving terminated with success +58896:M 12 Jun 2024 12:49:28.034 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 12:49:28.036 * Background saving started by pid 94288 +94288:C 12 Jun 2024 12:49:28.048 * DB saved on disk +94288:C 12 Jun 2024 12:49:28.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 12:49:28.137 * Background saving terminated with success +58896:M 12 Jun 2024 12:54:29.012 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 12:54:29.015 * Background saving started by pid 95469 +95469:C 12 Jun 2024 12:54:29.028 * DB saved on disk +95469:C 12 Jun 2024 12:54:29.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 12:54:29.116 * Background saving terminated with success +58896:M 12 Jun 2024 12:59:30.022 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 12:59:30.023 * Background saving started by pid 96610 +96610:C 12 Jun 2024 12:59:30.041 * DB saved on disk +96610:C 12 Jun 2024 12:59:30.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 12:59:30.124 * Background saving terminated with success +58896:M 12 Jun 2024 13:04:31.035 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:04:31.036 * Background saving started by pid 97725 +97725:C 12 Jun 2024 13:04:31.047 * DB saved on disk +97725:C 12 Jun 2024 13:04:31.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:04:31.138 * Background saving terminated with success +58896:M 12 Jun 2024 13:09:32.020 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:09:32.022 * Background saving started by pid 98866 +98866:C 12 Jun 2024 13:09:32.038 * DB saved on disk +98866:C 12 Jun 2024 13:09:32.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:09:32.123 * Background saving terminated with success +58896:M 12 Jun 2024 13:14:33.004 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:14:33.005 * Background saving started by pid 103 +103:C 12 Jun 2024 13:14:33.013 * DB saved on disk +103:C 12 Jun 2024 13:14:33.014 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:14:33.106 * Background saving terminated with success +58896:M 12 Jun 2024 13:19:34.047 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:19:34.048 * Background saving started by pid 1450 +1450:C 12 Jun 2024 13:19:34.058 * DB saved on disk +1450:C 12 Jun 2024 13:19:34.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:19:34.149 * Background saving terminated with success +58896:M 12 Jun 2024 13:24:35.060 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:24:35.063 * Background saving started by pid 2598 +2598:C 12 Jun 2024 13:24:35.072 * DB saved on disk +2598:C 12 Jun 2024 13:24:35.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:24:35.165 * Background saving terminated with success +58896:M 12 Jun 2024 13:29:36.006 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:29:36.009 * Background saving started by pid 3725 +3725:C 12 Jun 2024 13:29:36.019 * DB saved on disk +3725:C 12 Jun 2024 13:29:36.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:29:36.110 * Background saving terminated with success +58896:M 12 Jun 2024 13:34:37.016 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:34:37.017 * Background saving started by pid 4859 +4859:C 12 Jun 2024 13:34:37.036 * DB saved on disk +4859:C 12 Jun 2024 13:34:37.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:34:37.118 * Background saving terminated with success +58896:M 12 Jun 2024 13:52:39.660 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 13:52:39.663 * Background saving started by pid 5136 +5136:C 12 Jun 2024 13:52:39.783 * DB saved on disk +5136:C 12 Jun 2024 13:52:39.783 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 13:52:39.867 * Background saving terminated with success +58896:M 12 Jun 2024 14:18:00.088 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:18:00.089 * Background saving started by pid 5336 +5336:C 12 Jun 2024 14:18:00.100 * DB saved on disk +5336:C 12 Jun 2024 14:18:00.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:18:00.192 * Background saving terminated with success +58896:M 12 Jun 2024 14:23:39.578 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:23:39.579 * Background saving started by pid 5595 +5595:C 12 Jun 2024 14:23:39.589 * DB saved on disk +5595:C 12 Jun 2024 14:23:39.590 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:23:39.686 * Background saving terminated with success +58896:M 12 Jun 2024 14:28:40.051 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:28:40.063 * Background saving started by pid 6818 +6818:C 12 Jun 2024 14:28:40.079 * DB saved on disk +6818:C 12 Jun 2024 14:28:40.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:28:40.165 * Background saving terminated with success +58896:M 12 Jun 2024 14:33:41.100 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:33:41.101 * Background saving started by pid 7974 +7974:C 12 Jun 2024 14:33:41.111 * DB saved on disk +7974:C 12 Jun 2024 14:33:41.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:33:41.202 * Background saving terminated with success +58896:M 12 Jun 2024 14:39:15.833 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:39:15.834 * Background saving started by pid 9245 +9245:C 12 Jun 2024 14:39:15.843 * DB saved on disk +9245:C 12 Jun 2024 14:39:15.843 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:39:15.936 * Background saving terminated with success +58896:M 12 Jun 2024 14:44:16.080 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:44:16.083 * Background saving started by pid 10377 +10377:C 12 Jun 2024 14:44:16.090 * DB saved on disk +10377:C 12 Jun 2024 14:44:16.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:44:16.184 * Background saving terminated with success +58896:M 12 Jun 2024 14:49:17.004 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:49:17.006 * Background saving started by pid 11532 +11532:C 12 Jun 2024 14:49:17.020 * DB saved on disk +11532:C 12 Jun 2024 14:49:17.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:49:17.107 * Background saving terminated with success +58896:M 12 Jun 2024 14:54:18.054 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:54:18.055 * Background saving started by pid 12728 +12728:C 12 Jun 2024 14:54:18.071 * DB saved on disk +12728:C 12 Jun 2024 14:54:18.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:54:18.156 * Background saving terminated with success +58896:M 12 Jun 2024 14:59:19.060 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 14:59:19.063 * Background saving started by pid 13955 +13955:C 12 Jun 2024 14:59:19.095 * DB saved on disk +13955:C 12 Jun 2024 14:59:19.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 14:59:19.164 * Background saving terminated with success +58896:M 12 Jun 2024 15:04:50.041 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:04:50.046 * Background saving started by pid 14209 +14209:C 12 Jun 2024 15:04:50.161 * DB saved on disk +14209:C 12 Jun 2024 15:04:50.162 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:04:50.249 * Background saving terminated with success +58896:M 12 Jun 2024 15:16:01.278 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:16:01.280 * Background saving started by pid 14412 +14412:C 12 Jun 2024 15:16:01.296 * DB saved on disk +14412:C 12 Jun 2024 15:16:01.297 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:16:01.382 * Background saving terminated with success +58896:M 12 Jun 2024 15:21:42.305 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:21:42.308 * Background saving started by pid 15693 +15693:C 12 Jun 2024 15:21:42.425 * DB saved on disk +15693:C 12 Jun 2024 15:21:42.426 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:21:42.512 * Background saving terminated with success +58896:M 12 Jun 2024 15:26:43.091 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:26:43.093 * Background saving started by pid 15892 +15892:C 12 Jun 2024 15:26:43.108 * DB saved on disk +15892:C 12 Jun 2024 15:26:43.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:26:43.208 * Background saving terminated with success +58896:M 12 Jun 2024 15:32:08.470 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:32:08.473 * Background saving started by pid 16107 +16107:C 12 Jun 2024 15:32:08.586 * DB saved on disk +16107:C 12 Jun 2024 15:32:08.587 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:32:08.675 * Background saving terminated with success +58896:M 12 Jun 2024 15:37:51.306 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:37:51.311 * Background saving started by pid 16417 +16417:C 12 Jun 2024 15:37:51.431 * DB saved on disk +16417:C 12 Jun 2024 15:37:51.432 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:37:51.515 * Background saving terminated with success +58896:M 12 Jun 2024 15:43:24.501 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:43:24.505 * Background saving started by pid 16735 +16735:C 12 Jun 2024 15:43:24.619 * DB saved on disk +16735:C 12 Jun 2024 15:43:24.620 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:43:24.709 * Background saving terminated with success +58896:M 12 Jun 2024 15:49:17.280 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:49:17.282 * Background saving started by pid 17067 +17067:C 12 Jun 2024 15:49:17.403 * DB saved on disk +17067:C 12 Jun 2024 15:49:17.403 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:49:17.486 * Background saving terminated with success +58896:M 12 Jun 2024 15:58:31.612 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 15:58:31.612 * Background saving started by pid 17349 +17349:C 12 Jun 2024 15:58:31.624 * DB saved on disk +17349:C 12 Jun 2024 15:58:31.625 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 15:58:31.713 * Background saving terminated with success +58896:M 12 Jun 2024 16:07:32.858 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 16:07:32.859 * Background saving started by pid 17568 +17568:C 12 Jun 2024 16:07:32.873 * DB saved on disk +17568:C 12 Jun 2024 16:07:32.874 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 16:07:32.961 * Background saving terminated with success +58896:M 12 Jun 2024 16:26:11.532 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 16:26:11.537 * Background saving started by pid 17835 +17835:C 12 Jun 2024 16:26:11.655 * DB saved on disk +17835:C 12 Jun 2024 16:26:11.655 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 16:26:11.739 * Background saving terminated with success +58896:M 12 Jun 2024 16:50:57.768 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 16:50:57.771 * Background saving started by pid 18014 +18014:C 12 Jun 2024 16:50:57.787 * DB saved on disk +18014:C 12 Jun 2024 16:50:57.789 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 16:50:57.873 * Background saving terminated with success +58896:M 12 Jun 2024 17:50:58.003 * 1 changes in 3600 seconds. Saving... +58896:M 12 Jun 2024 17:50:58.005 * Background saving started by pid 18164 +18164:C 12 Jun 2024 17:50:58.024 * DB saved on disk +18164:C 12 Jun 2024 17:50:58.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 17:50:58.107 * Background saving terminated with success +58896:M 12 Jun 2024 18:04:59.651 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:04:59.655 * Background saving started by pid 18427 +18427:C 12 Jun 2024 18:04:59.667 * DB saved on disk +18427:C 12 Jun 2024 18:04:59.667 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:04:59.756 * Background saving terminated with success +58896:M 12 Jun 2024 18:10:00.077 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:10:00.079 * Background saving started by pid 19644 +19644:C 12 Jun 2024 18:10:00.091 * DB saved on disk +19644:C 12 Jun 2024 18:10:00.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:10:00.180 * Background saving terminated with success +58896:M 12 Jun 2024 18:15:01.093 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:15:01.095 * Background saving started by pid 20794 +20794:C 12 Jun 2024 18:15:01.115 * DB saved on disk +20794:C 12 Jun 2024 18:15:01.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:15:01.197 * Background saving terminated with success +58896:M 12 Jun 2024 18:20:02.078 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:20:02.079 * Background saving started by pid 21958 +21958:C 12 Jun 2024 18:20:02.088 * DB saved on disk +21958:C 12 Jun 2024 18:20:02.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:20:02.181 * Background saving terminated with success +58896:M 12 Jun 2024 18:25:03.029 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:25:03.030 * Background saving started by pid 23368 +23368:C 12 Jun 2024 18:25:03.037 * DB saved on disk +23368:C 12 Jun 2024 18:25:03.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:25:03.131 * Background saving terminated with success +58896:M 12 Jun 2024 18:30:04.044 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:30:04.046 * Background saving started by pid 24145 +24145:C 12 Jun 2024 18:30:04.054 * DB saved on disk +24145:C 12 Jun 2024 18:30:04.054 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:30:04.147 * Background saving terminated with success +58896:M 12 Jun 2024 18:35:05.081 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:35:05.085 * Background saving started by pid 24948 +24948:C 12 Jun 2024 18:35:05.096 * DB saved on disk +24948:C 12 Jun 2024 18:35:05.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:35:05.188 * Background saving terminated with success +58896:M 12 Jun 2024 18:40:06.059 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:40:06.060 * Background saving started by pid 26487 +26487:C 12 Jun 2024 18:40:06.072 * DB saved on disk +26487:C 12 Jun 2024 18:40:06.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:40:06.160 * Background saving terminated with success +58896:M 12 Jun 2024 18:45:07.016 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:45:07.019 * Background saving started by pid 27478 +27478:C 12 Jun 2024 18:45:07.030 * DB saved on disk +27478:C 12 Jun 2024 18:45:07.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:45:07.120 * Background saving terminated with success +58896:M 12 Jun 2024 18:50:08.096 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:50:08.100 * Background saving started by pid 28255 +28255:C 12 Jun 2024 18:50:08.118 * DB saved on disk +28255:C 12 Jun 2024 18:50:08.120 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:50:08.202 * Background saving terminated with success +58896:M 12 Jun 2024 18:55:09.066 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 18:55:09.067 * Background saving started by pid 29026 +29026:C 12 Jun 2024 18:55:09.077 * DB saved on disk +29026:C 12 Jun 2024 18:55:09.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 18:55:09.169 * Background saving terminated with success +58896:M 12 Jun 2024 19:00:10.054 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:00:10.060 * Background saving started by pid 29846 +29846:C 12 Jun 2024 19:00:10.077 * DB saved on disk +29846:C 12 Jun 2024 19:00:10.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:00:10.162 * Background saving terminated with success +58896:M 12 Jun 2024 19:05:11.091 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:05:11.093 * Background saving started by pid 30656 +30656:C 12 Jun 2024 19:05:11.106 * DB saved on disk +30656:C 12 Jun 2024 19:05:11.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:05:11.195 * Background saving terminated with success +58896:M 12 Jun 2024 19:10:12.069 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:10:12.070 * Background saving started by pid 31436 +31436:C 12 Jun 2024 19:10:12.082 * DB saved on disk +31436:C 12 Jun 2024 19:10:12.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:10:12.172 * Background saving terminated with success +58896:M 12 Jun 2024 19:15:13.031 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:15:13.032 * Background saving started by pid 32456 +32456:C 12 Jun 2024 19:15:13.045 * DB saved on disk +32456:C 12 Jun 2024 19:15:13.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:15:13.133 * Background saving terminated with success +58896:M 12 Jun 2024 19:20:14.035 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:20:14.036 * Background saving started by pid 33746 +33746:C 12 Jun 2024 19:20:14.045 * DB saved on disk +33746:C 12 Jun 2024 19:20:14.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:20:14.137 * Background saving terminated with success +58896:M 12 Jun 2024 19:25:15.038 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:25:15.041 * Background saving started by pid 34925 +34925:C 12 Jun 2024 19:25:15.057 * DB saved on disk +34925:C 12 Jun 2024 19:25:15.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:25:15.142 * Background saving terminated with success +58896:M 12 Jun 2024 19:30:16.003 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:30:16.008 * Background saving started by pid 36180 +36180:C 12 Jun 2024 19:30:16.026 * DB saved on disk +36180:C 12 Jun 2024 19:30:16.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:30:16.110 * Background saving terminated with success +58896:M 12 Jun 2024 19:30:50.487 * DB saved on disk +58896:M 12 Jun 2024 19:35:51.066 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:35:51.070 * Background saving started by pid 37695 +37695:C 12 Jun 2024 19:35:51.097 * DB saved on disk +37695:C 12 Jun 2024 19:35:51.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:35:51.171 * Background saving terminated with success +58896:M 12 Jun 2024 19:40:52.077 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:40:52.078 * Background saving started by pid 38605 +38605:C 12 Jun 2024 19:40:52.091 * DB saved on disk +38605:C 12 Jun 2024 19:40:52.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:40:52.180 * Background saving terminated with success +58896:M 12 Jun 2024 19:45:53.092 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:45:53.093 * Background saving started by pid 39738 +39738:C 12 Jun 2024 19:45:53.101 * DB saved on disk +39738:C 12 Jun 2024 19:45:53.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:45:53.194 * Background saving terminated with success +58896:M 12 Jun 2024 19:50:54.028 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:50:54.031 * Background saving started by pid 40670 +40670:C 12 Jun 2024 19:50:54.042 * DB saved on disk +40670:C 12 Jun 2024 19:50:54.043 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:50:54.133 * Background saving terminated with success +58896:M 12 Jun 2024 19:55:55.096 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 19:55:55.099 * Background saving started by pid 43457 +43457:C 12 Jun 2024 19:55:55.107 * DB saved on disk +43457:C 12 Jun 2024 19:55:55.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 19:55:55.199 * Background saving terminated with success +58896:M 12 Jun 2024 20:00:56.029 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:00:56.031 * Background saving started by pid 44453 +44453:C 12 Jun 2024 20:00:56.037 * DB saved on disk +44453:C 12 Jun 2024 20:00:56.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:00:56.133 * Background saving terminated with success +58896:M 12 Jun 2024 20:05:57.013 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:05:57.016 * Background saving started by pid 45420 +45420:C 12 Jun 2024 20:05:57.025 * DB saved on disk +45420:C 12 Jun 2024 20:05:57.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:05:57.117 * Background saving terminated with success +58896:M 12 Jun 2024 20:10:58.035 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:10:58.037 * Background saving started by pid 46445 +46445:C 12 Jun 2024 20:10:58.045 * DB saved on disk +46445:C 12 Jun 2024 20:10:58.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:10:58.138 * Background saving terminated with success +58896:M 12 Jun 2024 20:15:59.030 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:15:59.032 * Background saving started by pid 47438 +47438:C 12 Jun 2024 20:15:59.041 * DB saved on disk +47438:C 12 Jun 2024 20:15:59.042 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:15:59.133 * Background saving terminated with success +58896:M 12 Jun 2024 20:21:00.034 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:21:00.036 * Background saving started by pid 48364 +48364:C 12 Jun 2024 20:21:00.043 * DB saved on disk +48364:C 12 Jun 2024 20:21:00.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:21:00.137 * Background saving terminated with success +58896:M 12 Jun 2024 20:26:01.085 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:26:01.086 * Background saving started by pid 49394 +49394:C 12 Jun 2024 20:26:01.094 * DB saved on disk +49394:C 12 Jun 2024 20:26:01.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:26:01.188 * Background saving terminated with success +58896:M 12 Jun 2024 20:31:02.083 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:31:02.088 * Background saving started by pid 50479 +50479:C 12 Jun 2024 20:31:02.109 * DB saved on disk +50479:C 12 Jun 2024 20:31:02.110 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:31:02.190 * Background saving terminated with success +58896:M 12 Jun 2024 20:36:03.042 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:36:03.043 * Background saving started by pid 51442 +51442:C 12 Jun 2024 20:36:03.065 * DB saved on disk +51442:C 12 Jun 2024 20:36:03.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:36:03.144 * Background saving terminated with success +58896:M 12 Jun 2024 20:41:04.076 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:41:04.078 * Background saving started by pid 52399 +52399:C 12 Jun 2024 20:41:04.090 * DB saved on disk +52399:C 12 Jun 2024 20:41:04.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:41:04.179 * Background saving terminated with success +58896:M 12 Jun 2024 20:46:05.056 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:46:05.058 * Background saving started by pid 53397 +53397:C 12 Jun 2024 20:46:05.067 * DB saved on disk +53397:C 12 Jun 2024 20:46:05.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:46:05.159 * Background saving terminated with success +58896:M 12 Jun 2024 20:51:06.070 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:51:06.071 * Background saving started by pid 54382 +54382:C 12 Jun 2024 20:51:06.078 * DB saved on disk +54382:C 12 Jun 2024 20:51:06.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:51:06.172 * Background saving terminated with success +58896:M 12 Jun 2024 20:56:07.099 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 20:56:07.102 * Background saving started by pid 57248 +57248:C 12 Jun 2024 20:56:07.111 * DB saved on disk +57248:C 12 Jun 2024 20:56:07.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 20:56:07.204 * Background saving terminated with success +58896:M 12 Jun 2024 21:01:08.063 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 21:01:08.066 * Background saving started by pid 58219 +58219:C 12 Jun 2024 21:01:08.075 * DB saved on disk +58219:C 12 Jun 2024 21:01:08.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 21:01:08.168 * Background saving terminated with success +58896:M 12 Jun 2024 21:06:09.082 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 21:06:09.082 * Background saving started by pid 58998 +58998:C 12 Jun 2024 21:06:09.092 * DB saved on disk +58998:C 12 Jun 2024 21:06:09.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 21:06:09.184 * Background saving terminated with success +58896:M 12 Jun 2024 22:22:09.136 * 1 changes in 3600 seconds. Saving... +58896:M 12 Jun 2024 22:22:09.196 * Background saving started by pid 59686 +59686:C 12 Jun 2024 22:22:09.431 * DB saved on disk +59686:C 12 Jun 2024 22:22:09.536 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:22:09.634 * Background saving terminated with success +58896:M 12 Jun 2024 22:27:10.079 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 22:27:10.083 * Background saving started by pid 60609 +60609:C 12 Jun 2024 22:27:10.097 * DB saved on disk +60609:C 12 Jun 2024 22:27:10.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:27:10.184 * Background saving terminated with success +58896:M 12 Jun 2024 22:32:11.032 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 22:32:11.036 * Background saving started by pid 61470 +61470:C 12 Jun 2024 22:32:11.054 * DB saved on disk +61470:C 12 Jun 2024 22:32:11.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:32:11.138 * Background saving terminated with success +58896:M 12 Jun 2024 22:37:12.056 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 22:37:12.057 * Background saving started by pid 62229 +62229:C 12 Jun 2024 22:37:12.071 * DB saved on disk +62229:C 12 Jun 2024 22:37:12.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:37:12.159 * Background saving terminated with success +58896:M 12 Jun 2024 22:42:13.023 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 22:42:13.025 * Background saving started by pid 63085 +63085:C 12 Jun 2024 22:42:13.036 * DB saved on disk +63085:C 12 Jun 2024 22:42:13.036 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:42:13.126 * Background saving terminated with success +58896:M 12 Jun 2024 22:47:14.042 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 22:47:14.043 * Background saving started by pid 63867 +63867:C 12 Jun 2024 22:47:14.052 * DB saved on disk +63867:C 12 Jun 2024 22:47:14.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:47:14.145 * Background saving terminated with success +58896:M 12 Jun 2024 22:52:15.071 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 22:52:15.075 * Background saving started by pid 64674 +64674:C 12 Jun 2024 22:52:15.106 * DB saved on disk +64674:C 12 Jun 2024 22:52:15.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:52:15.177 * Background saving terminated with success +58896:M 12 Jun 2024 22:57:16.052 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 22:57:16.053 * Background saving started by pid 65510 +65510:C 12 Jun 2024 22:57:16.071 * DB saved on disk +65510:C 12 Jun 2024 22:57:16.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 22:57:16.155 * Background saving terminated with success +58896:M 12 Jun 2024 23:02:17.039 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:02:17.043 * Background saving started by pid 66374 +66374:C 12 Jun 2024 23:02:17.059 * DB saved on disk +66374:C 12 Jun 2024 23:02:17.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:02:17.145 * Background saving terminated with success +58896:M 12 Jun 2024 23:07:18.063 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:07:18.065 * Background saving started by pid 69899 +69899:C 12 Jun 2024 23:07:18.097 * DB saved on disk +69899:C 12 Jun 2024 23:07:18.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:07:18.166 * Background saving terminated with success +58896:M 12 Jun 2024 23:12:19.010 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:12:19.013 * Background saving started by pid 72751 +72751:C 12 Jun 2024 23:12:19.025 * DB saved on disk +72751:C 12 Jun 2024 23:12:19.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:12:19.114 * Background saving terminated with success +58896:M 12 Jun 2024 23:17:20.093 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:17:20.097 * Background saving started by pid 73511 +73511:C 12 Jun 2024 23:17:20.117 * DB saved on disk +73511:C 12 Jun 2024 23:17:20.118 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:17:20.199 * Background saving terminated with success +58896:M 12 Jun 2024 23:22:21.096 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:22:21.098 * Background saving started by pid 74274 +74274:C 12 Jun 2024 23:22:21.108 * DB saved on disk +74274:C 12 Jun 2024 23:22:21.115 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:22:21.199 * Background saving terminated with success +58896:M 12 Jun 2024 23:27:22.041 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:27:22.044 * Background saving started by pid 75086 +75086:C 12 Jun 2024 23:27:22.055 * DB saved on disk +75086:C 12 Jun 2024 23:27:22.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:27:22.145 * Background saving terminated with success +58896:M 12 Jun 2024 23:32:23.057 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:32:23.059 * Background saving started by pid 75910 +75910:C 12 Jun 2024 23:32:23.070 * DB saved on disk +75910:C 12 Jun 2024 23:32:23.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:32:23.161 * Background saving terminated with success +58896:M 12 Jun 2024 23:37:24.000 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:37:24.002 * Background saving started by pid 76753 +76753:C 12 Jun 2024 23:37:24.021 * DB saved on disk +76753:C 12 Jun 2024 23:37:24.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:37:24.102 * Background saving terminated with success +58896:M 12 Jun 2024 23:42:25.039 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:42:25.041 * Background saving started by pid 77566 +77566:C 12 Jun 2024 23:42:25.051 * DB saved on disk +77566:C 12 Jun 2024 23:42:25.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:42:25.142 * Background saving terminated with success +58896:M 12 Jun 2024 23:47:26.048 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:47:26.051 * Background saving started by pid 78392 +78392:C 12 Jun 2024 23:47:26.058 * DB saved on disk +78392:C 12 Jun 2024 23:47:26.059 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:47:26.152 * Background saving terminated with success +58896:M 12 Jun 2024 23:52:27.035 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:52:27.036 * Background saving started by pid 79236 +79236:C 12 Jun 2024 23:52:27.047 * DB saved on disk +79236:C 12 Jun 2024 23:52:27.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:52:27.137 * Background saving terminated with success +58896:M 12 Jun 2024 23:57:28.011 * 100 changes in 300 seconds. Saving... +58896:M 12 Jun 2024 23:57:28.017 * Background saving started by pid 80013 +80013:C 12 Jun 2024 23:57:28.026 * DB saved on disk +80013:C 12 Jun 2024 23:57:28.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 12 Jun 2024 23:57:28.118 * Background saving terminated with success +58896:M 13 Jun 2024 00:02:29.041 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:02:29.043 * Background saving started by pid 80854 +80854:C 13 Jun 2024 00:02:29.061 * DB saved on disk +80854:C 13 Jun 2024 00:02:29.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:02:29.145 * Background saving terminated with success +58896:M 13 Jun 2024 00:07:30.083 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:07:30.088 * Background saving started by pid 81692 +81692:C 13 Jun 2024 00:07:30.100 * DB saved on disk +81692:C 13 Jun 2024 00:07:30.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:07:30.190 * Background saving terminated with success +58896:M 13 Jun 2024 00:12:31.037 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:12:31.038 * Background saving started by pid 82630 +82630:C 13 Jun 2024 00:12:31.048 * DB saved on disk +82630:C 13 Jun 2024 00:12:31.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:12:31.139 * Background saving terminated with success +58896:M 13 Jun 2024 00:18:24.490 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:18:24.492 * Background saving started by pid 83628 +83628:C 13 Jun 2024 00:18:24.500 * DB saved on disk +83628:C 13 Jun 2024 00:18:24.501 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:18:24.594 * Background saving terminated with success +58896:M 13 Jun 2024 00:23:25.099 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:23:25.101 * Background saving started by pid 84426 +84426:C 13 Jun 2024 00:23:25.116 * DB saved on disk +84426:C 13 Jun 2024 00:23:25.119 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:23:25.203 * Background saving terminated with success +58896:M 13 Jun 2024 00:28:26.000 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:28:26.003 * Background saving started by pid 85490 +85490:C 13 Jun 2024 00:28:26.011 * DB saved on disk +85490:C 13 Jun 2024 00:28:26.012 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:28:26.104 * Background saving terminated with success +58896:M 13 Jun 2024 00:39:55.401 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:39:55.402 * Background saving started by pid 87583 +87583:C 13 Jun 2024 00:39:55.410 * DB saved on disk +87583:C 13 Jun 2024 00:39:55.410 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:39:55.504 * Background saving terminated with success +58896:M 13 Jun 2024 00:44:56.013 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:44:56.017 * Background saving started by pid 88517 +88517:C 13 Jun 2024 00:44:56.027 * DB saved on disk +88517:C 13 Jun 2024 00:44:56.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:44:56.118 * Background saving terminated with success +58896:M 13 Jun 2024 00:49:57.055 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:49:57.058 * Background saving started by pid 89534 +89534:C 13 Jun 2024 00:49:57.066 * DB saved on disk +89534:C 13 Jun 2024 00:49:57.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:49:57.159 * Background saving terminated with success +58896:M 13 Jun 2024 00:54:58.054 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:54:58.056 * Background saving started by pid 92884 +92884:C 13 Jun 2024 00:54:58.076 * DB saved on disk +92884:C 13 Jun 2024 00:54:58.079 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:54:58.156 * Background saving terminated with success +58896:M 13 Jun 2024 00:59:59.094 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 00:59:59.096 * Background saving started by pid 97454 +97454:C 13 Jun 2024 00:59:59.105 * DB saved on disk +97454:C 13 Jun 2024 00:59:59.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 00:59:59.197 * Background saving terminated with success +58896:M 13 Jun 2024 01:05:00.065 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 01:05:00.067 * Background saving started by pid 208 +208:C 13 Jun 2024 01:05:00.075 * DB saved on disk +208:C 13 Jun 2024 01:05:00.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 01:05:00.168 * Background saving terminated with success +58896:M 13 Jun 2024 01:10:01.004 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 01:10:01.007 * Background saving started by pid 1501 +1501:C 13 Jun 2024 01:10:01.016 * DB saved on disk +1501:C 13 Jun 2024 01:10:01.017 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 01:10:01.108 * Background saving terminated with success +58896:M 13 Jun 2024 01:15:02.069 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 01:15:02.073 * Background saving started by pid 8174 +8174:C 13 Jun 2024 01:15:02.087 * DB saved on disk +8174:C 13 Jun 2024 01:15:02.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 01:15:02.176 * Background saving terminated with success +58896:M 13 Jun 2024 01:20:03.007 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 01:20:03.009 * Background saving started by pid 12151 +12151:C 13 Jun 2024 01:20:03.021 * DB saved on disk +12151:C 13 Jun 2024 01:20:03.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 01:20:03.111 * Background saving terminated with success +58896:M 13 Jun 2024 01:25:04.011 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 01:25:04.014 * Background saving started by pid 14019 +14019:C 13 Jun 2024 01:25:04.027 * DB saved on disk +14019:C 13 Jun 2024 01:25:04.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 01:25:04.115 * Background saving terminated with success +58896:M 13 Jun 2024 01:30:05.029 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 01:30:05.032 * Background saving started by pid 15236 +15236:C 13 Jun 2024 01:30:05.048 * DB saved on disk +15236:C 13 Jun 2024 01:30:05.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 01:30:05.134 * Background saving terminated with success +58896:M 13 Jun 2024 01:46:26.863 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 01:46:26.987 * Background saving started by pid 16271 +16271:C 13 Jun 2024 01:46:26.997 * DB saved on disk +16271:C 13 Jun 2024 01:46:26.997 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 01:46:27.096 * Background saving terminated with success +58896:M 13 Jun 2024 02:53:37.566 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 02:53:37.687 * Background saving started by pid 16361 +16361:C 13 Jun 2024 02:53:37.704 * DB saved on disk +16361:C 13 Jun 2024 02:53:37.704 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 02:53:37.795 * Background saving terminated with success +58896:M 13 Jun 2024 04:00:22.582 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 04:00:22.694 * Background saving started by pid 16480 +16480:C 13 Jun 2024 04:00:22.703 * DB saved on disk +16480:C 13 Jun 2024 04:00:22.704 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 04:00:22.807 * Background saving terminated with success +58896:M 13 Jun 2024 05:06:58.599 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 05:06:58.605 * Background saving started by pid 16586 +16586:C 13 Jun 2024 05:06:58.718 * DB saved on disk +16586:C 13 Jun 2024 05:06:58.718 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 05:06:58.809 * Background saving terminated with success +58896:M 13 Jun 2024 06:11:18.604 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 06:11:18.613 * Background saving started by pid 16651 +16651:C 13 Jun 2024 06:11:18.714 * DB saved on disk +16651:C 13 Jun 2024 06:11:18.746 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 06:11:18.815 * Background saving terminated with success +58896:M 13 Jun 2024 07:14:47.525 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 07:14:47.528 * Background saving started by pid 17811 +17811:C 13 Jun 2024 07:14:47.679 * DB saved on disk +17811:C 13 Jun 2024 07:14:47.680 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 07:14:47.730 * Background saving terminated with success +58896:M 13 Jun 2024 08:23:04.569 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 08:23:04.574 * Background saving started by pid 17919 +17919:C 13 Jun 2024 08:23:04.680 * DB saved on disk +17919:C 13 Jun 2024 08:23:04.680 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 08:23:04.775 * Background saving terminated with success +58896:M 13 Jun 2024 09:29:23.578 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 09:29:23.582 * Background saving started by pid 18003 +18003:C 13 Jun 2024 09:29:23.701 * DB saved on disk +18003:C 13 Jun 2024 09:29:23.701 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 09:29:23.787 * Background saving terminated with success +58896:M 13 Jun 2024 09:50:20.002 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 09:50:20.002 * Background saving started by pid 18192 +18192:C 13 Jun 2024 09:50:20.013 * DB saved on disk +18192:C 13 Jun 2024 09:50:20.016 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 09:50:20.103 * Background saving terminated with success +58896:M 13 Jun 2024 10:26:10.581 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 10:26:10.583 * Background saving started by pid 18369 +18369:C 13 Jun 2024 10:26:10.602 * DB saved on disk +18369:C 13 Jun 2024 10:26:10.602 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 10:26:10.684 * Background saving terminated with success +58896:M 13 Jun 2024 10:55:26.571 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 10:55:26.574 * Background saving started by pid 18571 +18571:C 13 Jun 2024 10:55:26.591 * DB saved on disk +18571:C 13 Jun 2024 10:55:26.591 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 10:55:26.676 * Background saving terminated with success +58896:M 13 Jun 2024 11:29:14.641 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 11:29:14.644 * Background saving started by pid 18818 +18818:C 13 Jun 2024 11:29:14.664 * DB saved on disk +18818:C 13 Jun 2024 11:29:14.665 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 11:29:14.746 * Background saving terminated with success +58896:M 13 Jun 2024 11:34:15.063 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 11:34:15.065 * Background saving started by pid 20038 +20038:C 13 Jun 2024 11:34:15.082 * DB saved on disk +20038:C 13 Jun 2024 11:34:15.084 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 11:34:15.167 * Background saving terminated with success +58896:M 13 Jun 2024 11:39:16.050 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 11:39:16.052 * Background saving started by pid 21202 +21202:C 13 Jun 2024 11:39:16.063 * DB saved on disk +21202:C 13 Jun 2024 11:39:16.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 11:39:16.153 * Background saving terminated with success +58896:M 13 Jun 2024 11:44:17.031 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 11:44:17.033 * Background saving started by pid 22048 +22048:C 13 Jun 2024 11:44:17.047 * DB saved on disk +22048:C 13 Jun 2024 11:44:17.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 11:44:17.135 * Background saving terminated with success +58896:M 13 Jun 2024 11:49:18.051 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 11:49:18.056 * Background saving started by pid 22821 +22821:C 13 Jun 2024 11:49:18.073 * DB saved on disk +22821:C 13 Jun 2024 11:49:18.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 11:49:18.159 * Background saving terminated with success +58896:M 13 Jun 2024 11:54:19.040 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 11:54:19.043 * Background saving started by pid 23590 +23590:C 13 Jun 2024 11:54:19.061 * DB saved on disk +23590:C 13 Jun 2024 11:54:19.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 11:54:19.145 * Background saving terminated with success +58896:M 13 Jun 2024 11:59:20.034 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 11:59:20.038 * Background saving started by pid 24369 +24369:C 13 Jun 2024 11:59:20.055 * DB saved on disk +24369:C 13 Jun 2024 11:59:20.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 11:59:20.141 * Background saving terminated with success +58896:M 13 Jun 2024 12:04:21.013 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 12:04:21.015 * Background saving started by pid 25145 +25145:C 13 Jun 2024 12:04:21.033 * DB saved on disk +25145:C 13 Jun 2024 12:04:21.034 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 12:04:21.117 * Background saving terminated with success +58896:M 13 Jun 2024 12:09:22.032 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 12:09:22.035 * Background saving started by pid 25919 +25919:C 13 Jun 2024 12:09:22.049 * DB saved on disk +25919:C 13 Jun 2024 12:09:22.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 12:09:22.138 * Background saving terminated with success +58896:M 13 Jun 2024 12:14:23.054 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 12:14:23.058 * Background saving started by pid 26708 +26708:C 13 Jun 2024 12:14:23.070 * DB saved on disk +26708:C 13 Jun 2024 12:14:23.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 12:14:23.160 * Background saving terminated with success +58896:M 13 Jun 2024 12:22:08.623 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 12:22:08.625 * Background saving started by pid 26869 +26869:C 13 Jun 2024 12:22:08.638 * DB saved on disk +26869:C 13 Jun 2024 12:22:08.640 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 12:22:08.727 * Background saving terminated with success +58896:M 13 Jun 2024 13:22:56.523 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 13:22:56.527 * Background saving started by pid 26934 +26934:C 13 Jun 2024 13:22:56.637 * DB saved on disk +26934:C 13 Jun 2024 13:22:56.638 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 13:22:56.730 * Background saving terminated with success +58896:M 13 Jun 2024 13:54:40.777 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 13:54:40.779 * Background saving started by pid 27164 +27164:C 13 Jun 2024 13:54:40.788 * DB saved on disk +27164:C 13 Jun 2024 13:54:40.789 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 13:54:40.881 * Background saving terminated with success +58896:M 13 Jun 2024 13:59:41.086 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 13:59:41.091 * Background saving started by pid 28401 +28401:C 13 Jun 2024 13:59:41.125 * DB saved on disk +28401:C 13 Jun 2024 13:59:41.125 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 13:59:41.193 * Background saving terminated with success +58896:M 13 Jun 2024 14:04:42.086 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:04:42.089 * Background saving started by pid 29364 +29364:C 13 Jun 2024 14:04:42.106 * DB saved on disk +29364:C 13 Jun 2024 14:04:42.108 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:04:42.191 * Background saving terminated with success +58896:M 13 Jun 2024 14:09:43.039 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:09:43.040 * Background saving started by pid 30343 +30343:C 13 Jun 2024 14:09:43.050 * DB saved on disk +30343:C 13 Jun 2024 14:09:43.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:09:43.141 * Background saving terminated with success +58896:M 13 Jun 2024 14:14:44.095 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:14:44.098 * Background saving started by pid 31113 +31113:C 13 Jun 2024 14:14:44.106 * DB saved on disk +31113:C 13 Jun 2024 14:14:44.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:14:44.199 * Background saving terminated with success +58896:M 13 Jun 2024 14:19:45.073 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:19:45.077 * Background saving started by pid 31876 +31876:C 13 Jun 2024 14:19:45.105 * DB saved on disk +31876:C 13 Jun 2024 14:19:45.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:19:45.181 * Background saving terminated with success +58896:M 13 Jun 2024 14:24:46.099 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:24:46.103 * Background saving started by pid 32589 +32589:C 13 Jun 2024 14:24:46.117 * DB saved on disk +32589:C 13 Jun 2024 14:24:46.119 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:24:46.204 * Background saving terminated with success +58896:M 13 Jun 2024 14:29:47.029 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:29:47.035 * Background saving started by pid 33317 +33317:C 13 Jun 2024 14:29:47.050 * DB saved on disk +33317:C 13 Jun 2024 14:29:47.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:29:47.137 * Background saving terminated with success +58896:M 13 Jun 2024 14:34:48.042 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:34:48.044 * Background saving started by pid 34025 +34025:C 13 Jun 2024 14:34:48.057 * DB saved on disk +34025:C 13 Jun 2024 14:34:48.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:34:48.147 * Background saving terminated with success +58896:M 13 Jun 2024 14:39:49.001 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:39:49.002 * Background saving started by pid 34740 +34740:C 13 Jun 2024 14:39:49.011 * DB saved on disk +34740:C 13 Jun 2024 14:39:49.011 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:39:49.104 * Background saving terminated with success +58896:M 13 Jun 2024 14:44:50.083 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:44:50.086 * Background saving started by pid 35603 +35603:C 13 Jun 2024 14:44:50.098 * DB saved on disk +35603:C 13 Jun 2024 14:44:50.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:44:50.188 * Background saving terminated with success +58896:M 13 Jun 2024 14:49:51.042 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:49:51.045 * Background saving started by pid 36239 +36239:C 13 Jun 2024 14:49:51.057 * DB saved on disk +36239:C 13 Jun 2024 14:49:51.059 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:49:51.146 * Background saving terminated with success +58896:M 13 Jun 2024 14:54:52.029 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:54:52.032 * Background saving started by pid 36857 +36857:C 13 Jun 2024 14:54:52.066 * DB saved on disk +36857:C 13 Jun 2024 14:54:52.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:54:52.134 * Background saving terminated with success +58896:M 13 Jun 2024 14:59:53.033 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 14:59:53.036 * Background saving started by pid 37538 +37538:C 13 Jun 2024 14:59:53.051 * DB saved on disk +37538:C 13 Jun 2024 14:59:53.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 14:59:53.138 * Background saving terminated with success +58896:M 13 Jun 2024 15:04:54.044 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:04:54.046 * Background saving started by pid 38152 +38152:C 13 Jun 2024 15:04:54.067 * DB saved on disk +38152:C 13 Jun 2024 15:04:54.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:04:54.148 * Background saving terminated with success +58896:M 13 Jun 2024 15:09:55.087 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:09:55.092 * Background saving started by pid 38789 +38789:C 13 Jun 2024 15:09:55.104 * DB saved on disk +38789:C 13 Jun 2024 15:09:55.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:09:55.196 * Background saving terminated with success +58896:M 13 Jun 2024 15:14:56.035 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:14:56.037 * Background saving started by pid 39411 +39411:C 13 Jun 2024 15:14:56.050 * DB saved on disk +39411:C 13 Jun 2024 15:14:56.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:14:56.138 * Background saving terminated with success +58896:M 13 Jun 2024 15:19:57.033 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:19:57.034 * Background saving started by pid 40025 +40025:C 13 Jun 2024 15:19:57.043 * DB saved on disk +40025:C 13 Jun 2024 15:19:57.044 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:19:57.135 * Background saving terminated with success +58896:M 13 Jun 2024 15:24:58.059 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:24:58.061 * Background saving started by pid 40708 +40708:C 13 Jun 2024 15:24:58.082 * DB saved on disk +40708:C 13 Jun 2024 15:24:58.082 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:24:58.162 * Background saving terminated with success +58896:M 13 Jun 2024 15:29:59.058 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:29:59.061 * Background saving started by pid 41970 +41970:C 13 Jun 2024 15:29:59.074 * DB saved on disk +41970:C 13 Jun 2024 15:29:59.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:29:59.162 * Background saving terminated with success +58896:M 13 Jun 2024 15:35:00.020 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:35:00.023 * Background saving started by pid 46158 +46158:C 13 Jun 2024 15:35:00.046 * DB saved on disk +46158:C 13 Jun 2024 15:35:00.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:35:00.124 * Background saving terminated with success +58896:M 13 Jun 2024 15:40:01.046 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:40:01.049 * Background saving started by pid 52688 +52688:C 13 Jun 2024 15:40:01.069 * DB saved on disk +52688:C 13 Jun 2024 15:40:01.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:40:01.150 * Background saving terminated with success +58896:M 13 Jun 2024 15:45:53.815 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:45:53.818 * Background saving started by pid 53374 +53374:C 13 Jun 2024 15:45:53.840 * DB saved on disk +53374:C 13 Jun 2024 15:45:53.840 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:45:53.919 * Background saving terminated with success +58896:M 13 Jun 2024 15:50:54.050 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:50:54.052 * Background saving started by pid 54742 +54742:C 13 Jun 2024 15:50:54.072 * DB saved on disk +54742:C 13 Jun 2024 15:50:54.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:50:54.153 * Background saving terminated with success +58896:M 13 Jun 2024 15:55:55.100 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 15:55:55.103 * Background saving started by pid 55431 +55431:C 13 Jun 2024 15:55:55.114 * DB saved on disk +55431:C 13 Jun 2024 15:55:55.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 15:55:55.204 * Background saving terminated with success +58896:M 13 Jun 2024 16:00:56.039 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:00:56.042 * Background saving started by pid 56109 +56109:C 13 Jun 2024 16:00:56.051 * DB saved on disk +56109:C 13 Jun 2024 16:00:56.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:00:56.144 * Background saving terminated with success +58896:M 13 Jun 2024 16:05:57.027 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:05:57.029 * Background saving started by pid 56794 +56794:C 13 Jun 2024 16:05:57.044 * DB saved on disk +56794:C 13 Jun 2024 16:05:57.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:05:57.130 * Background saving terminated with success +58896:M 13 Jun 2024 16:10:58.007 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:10:58.010 * Background saving started by pid 57424 +57424:C 13 Jun 2024 16:10:58.022 * DB saved on disk +57424:C 13 Jun 2024 16:10:58.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:10:58.111 * Background saving terminated with success +58896:M 13 Jun 2024 16:15:59.064 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:15:59.067 * Background saving started by pid 58114 +58114:C 13 Jun 2024 16:15:59.076 * DB saved on disk +58114:C 13 Jun 2024 16:15:59.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:15:59.168 * Background saving terminated with success +58896:M 13 Jun 2024 16:21:00.080 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:21:00.081 * Background saving started by pid 58865 +58865:C 13 Jun 2024 16:21:00.090 * DB saved on disk +58865:C 13 Jun 2024 16:21:00.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:21:00.182 * Background saving terminated with success +58896:M 13 Jun 2024 16:26:01.042 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:26:01.045 * Background saving started by pid 59640 +59640:C 13 Jun 2024 16:26:01.059 * DB saved on disk +59640:C 13 Jun 2024 16:26:01.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:26:01.145 * Background saving terminated with success +58896:M 13 Jun 2024 16:31:02.024 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:31:02.026 * Background saving started by pid 60306 +60306:C 13 Jun 2024 16:31:02.037 * DB saved on disk +60306:C 13 Jun 2024 16:31:02.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:31:02.127 * Background saving terminated with success +58896:M 13 Jun 2024 16:36:03.023 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:36:03.027 * Background saving started by pid 60889 +60889:C 13 Jun 2024 16:36:03.056 * DB saved on disk +60889:C 13 Jun 2024 16:36:03.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:36:03.128 * Background saving terminated with success +58896:M 13 Jun 2024 16:41:04.062 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:41:04.065 * Background saving started by pid 61499 +61499:C 13 Jun 2024 16:41:04.084 * DB saved on disk +61499:C 13 Jun 2024 16:41:04.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:41:04.167 * Background saving terminated with success +58896:M 13 Jun 2024 16:46:05.062 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:46:05.064 * Background saving started by pid 62153 +62153:C 13 Jun 2024 16:46:05.078 * DB saved on disk +62153:C 13 Jun 2024 16:46:05.079 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:46:05.165 * Background saving terminated with success +58896:M 13 Jun 2024 16:51:06.057 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:51:06.058 * Background saving started by pid 62839 +62839:C 13 Jun 2024 16:51:06.067 * DB saved on disk +62839:C 13 Jun 2024 16:51:06.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:51:06.159 * Background saving terminated with success +58896:M 13 Jun 2024 16:56:07.041 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 16:56:07.044 * Background saving started by pid 63527 +63527:C 13 Jun 2024 16:56:07.063 * DB saved on disk +63527:C 13 Jun 2024 16:56:07.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 16:56:07.144 * Background saving terminated with success +58896:M 13 Jun 2024 17:01:08.073 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:01:08.074 * Background saving started by pid 64189 +64189:C 13 Jun 2024 17:01:08.088 * DB saved on disk +64189:C 13 Jun 2024 17:01:08.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:01:08.175 * Background saving terminated with success +58896:M 13 Jun 2024 17:06:09.002 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:06:09.003 * Background saving started by pid 64802 +64802:C 13 Jun 2024 17:06:09.018 * DB saved on disk +64802:C 13 Jun 2024 17:06:09.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:06:09.104 * Background saving terminated with success +58896:M 13 Jun 2024 17:11:10.042 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:11:10.046 * Background saving started by pid 65468 +65468:C 13 Jun 2024 17:11:10.069 * DB saved on disk +65468:C 13 Jun 2024 17:11:10.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:11:10.148 * Background saving terminated with success +58896:M 13 Jun 2024 17:16:11.098 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:16:11.099 * Background saving started by pid 66110 +66110:C 13 Jun 2024 17:16:11.108 * DB saved on disk +66110:C 13 Jun 2024 17:16:11.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:16:11.201 * Background saving terminated with success +58896:M 13 Jun 2024 17:21:12.003 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:21:12.006 * Background saving started by pid 66847 +66847:C 13 Jun 2024 17:21:12.018 * DB saved on disk +66847:C 13 Jun 2024 17:21:12.019 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:21:12.111 * Background saving terminated with success +58896:M 13 Jun 2024 17:26:13.038 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:26:13.041 * Background saving started by pid 67587 +67587:C 13 Jun 2024 17:26:13.051 * DB saved on disk +67587:C 13 Jun 2024 17:26:13.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:26:13.142 * Background saving terminated with success +58896:M 13 Jun 2024 17:31:14.027 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:31:14.028 * Background saving started by pid 68487 +68487:C 13 Jun 2024 17:31:14.036 * DB saved on disk +68487:C 13 Jun 2024 17:31:14.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:31:14.130 * Background saving terminated with success +58896:M 13 Jun 2024 17:36:15.062 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:36:15.064 * Background saving started by pid 69205 +69205:C 13 Jun 2024 17:36:15.071 * DB saved on disk +69205:C 13 Jun 2024 17:36:15.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:36:15.174 * Background saving terminated with success +58896:M 13 Jun 2024 17:41:16.100 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:41:16.101 * Background saving started by pid 70157 +70157:C 13 Jun 2024 17:41:16.117 * DB saved on disk +70157:C 13 Jun 2024 17:41:16.118 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:41:16.203 * Background saving terminated with success +58896:M 13 Jun 2024 17:46:17.062 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:46:17.064 * Background saving started by pid 70947 +70947:C 13 Jun 2024 17:46:17.078 * DB saved on disk +70947:C 13 Jun 2024 17:46:17.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:46:17.165 * Background saving terminated with success +58896:M 13 Jun 2024 17:51:18.076 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:51:18.077 * Background saving started by pid 71675 +71675:C 13 Jun 2024 17:51:18.086 * DB saved on disk +71675:C 13 Jun 2024 17:51:18.090 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:51:18.179 * Background saving terminated with success +58896:M 13 Jun 2024 17:56:19.041 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 17:56:19.042 * Background saving started by pid 72514 +72514:C 13 Jun 2024 17:56:19.052 * DB saved on disk +72514:C 13 Jun 2024 17:56:19.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 17:56:19.144 * Background saving terminated with success +58896:M 13 Jun 2024 18:01:20.068 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:01:20.069 * Background saving started by pid 73367 +73367:C 13 Jun 2024 18:01:20.084 * DB saved on disk +73367:C 13 Jun 2024 18:01:20.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:01:20.171 * Background saving terminated with success +58896:M 13 Jun 2024 18:06:21.045 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:06:21.048 * Background saving started by pid 74221 +74221:C 13 Jun 2024 18:06:21.057 * DB saved on disk +74221:C 13 Jun 2024 18:06:21.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:06:21.148 * Background saving terminated with success +58896:M 13 Jun 2024 18:11:22.084 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:11:22.088 * Background saving started by pid 75044 +75044:C 13 Jun 2024 18:11:22.111 * DB saved on disk +75044:C 13 Jun 2024 18:11:22.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:11:22.189 * Background saving terminated with success +58896:M 13 Jun 2024 18:16:23.041 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:16:23.042 * Background saving started by pid 76027 +76027:C 13 Jun 2024 18:16:23.057 * DB saved on disk +76027:C 13 Jun 2024 18:16:23.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:16:23.143 * Background saving terminated with success +58896:M 13 Jun 2024 18:21:24.069 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:21:24.073 * Background saving started by pid 77094 +77094:C 13 Jun 2024 18:21:24.084 * DB saved on disk +77094:C 13 Jun 2024 18:21:24.086 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:21:24.175 * Background saving terminated with success +58896:M 13 Jun 2024 18:26:25.068 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:26:25.073 * Background saving started by pid 78140 +78140:C 13 Jun 2024 18:26:25.088 * DB saved on disk +78140:C 13 Jun 2024 18:26:25.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:26:25.174 * Background saving terminated with success +58896:M 13 Jun 2024 18:31:26.038 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:31:26.041 * Background saving started by pid 79121 +79121:C 13 Jun 2024 18:31:26.053 * DB saved on disk +79121:C 13 Jun 2024 18:31:26.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:31:26.142 * Background saving terminated with success +58896:M 13 Jun 2024 18:36:27.010 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:36:27.013 * Background saving started by pid 80053 +80053:C 13 Jun 2024 18:36:27.025 * DB saved on disk +80053:C 13 Jun 2024 18:36:27.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:36:27.115 * Background saving terminated with success +58896:M 13 Jun 2024 18:41:28.100 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:41:28.101 * Background saving started by pid 81033 +81033:C 13 Jun 2024 18:41:28.110 * DB saved on disk +81033:C 13 Jun 2024 18:41:28.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:41:28.203 * Background saving terminated with success +58896:M 13 Jun 2024 18:46:29.056 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:46:29.058 * Background saving started by pid 82024 +82024:C 13 Jun 2024 18:46:29.068 * DB saved on disk +82024:C 13 Jun 2024 18:46:29.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:46:29.159 * Background saving terminated with success +58896:M 13 Jun 2024 18:51:30.025 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:51:30.026 * Background saving started by pid 83031 +83031:C 13 Jun 2024 18:51:30.040 * DB saved on disk +83031:C 13 Jun 2024 18:51:30.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:51:30.128 * Background saving terminated with success +58896:M 13 Jun 2024 18:56:31.028 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 18:56:31.032 * Background saving started by pid 84257 +84257:C 13 Jun 2024 18:56:31.061 * DB saved on disk +84257:C 13 Jun 2024 18:56:31.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 18:56:31.133 * Background saving terminated with success +58896:M 13 Jun 2024 19:01:32.042 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:01:32.045 * Background saving started by pid 85971 +85971:C 13 Jun 2024 19:01:32.057 * DB saved on disk +85971:C 13 Jun 2024 19:01:32.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:01:32.146 * Background saving terminated with success +58896:M 13 Jun 2024 19:06:33.000 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:06:33.004 * Background saving started by pid 87445 +87445:C 13 Jun 2024 19:06:33.015 * DB saved on disk +87445:C 13 Jun 2024 19:06:33.016 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:06:33.106 * Background saving terminated with success +58896:M 13 Jun 2024 19:24:03.583 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:24:03.704 * Background saving started by pid 88482 +88482:C 13 Jun 2024 19:24:03.712 * DB saved on disk +88482:C 13 Jun 2024 19:24:03.715 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:24:03.820 * Background saving terminated with success +58896:M 13 Jun 2024 19:29:04.018 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:29:04.020 * Background saving started by pid 89605 +89605:C 13 Jun 2024 19:29:04.035 * DB saved on disk +89605:C 13 Jun 2024 19:29:04.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:29:04.122 * Background saving terminated with success +58896:M 13 Jun 2024 19:34:05.068 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:34:05.071 * Background saving started by pid 90623 +90623:C 13 Jun 2024 19:34:05.084 * DB saved on disk +90623:C 13 Jun 2024 19:34:05.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:34:05.172 * Background saving terminated with success +58896:M 13 Jun 2024 19:39:06.039 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:39:06.040 * Background saving started by pid 91649 +91649:C 13 Jun 2024 19:39:06.050 * DB saved on disk +91649:C 13 Jun 2024 19:39:06.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:39:06.141 * Background saving terminated with success +58896:M 13 Jun 2024 19:44:07.052 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:44:07.053 * Background saving started by pid 92499 +92499:C 13 Jun 2024 19:44:07.066 * DB saved on disk +92499:C 13 Jun 2024 19:44:07.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:44:07.154 * Background saving terminated with success +58896:M 13 Jun 2024 19:49:08.026 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 19:49:08.029 * Background saving started by pid 93255 +93255:C 13 Jun 2024 19:49:08.047 * DB saved on disk +93255:C 13 Jun 2024 19:49:08.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 19:49:08.130 * Background saving terminated with success +58896:M 13 Jun 2024 20:09:23.789 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 20:09:23.790 * Background saving started by pid 93455 +93455:C 13 Jun 2024 20:09:23.800 * DB saved on disk +93455:C 13 Jun 2024 20:09:23.802 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 20:09:23.891 * Background saving terminated with success +58896:M 13 Jun 2024 21:00:24.763 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 21:00:24.764 * Background saving started by pid 93545 +93545:C 13 Jun 2024 21:00:24.776 * DB saved on disk +93545:C 13 Jun 2024 21:00:24.777 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 21:00:24.867 * Background saving terminated with success +58896:M 13 Jun 2024 21:09:07.599 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 21:09:07.601 * Background saving started by pid 93647 +93647:C 13 Jun 2024 21:09:07.614 * DB saved on disk +93647:C 13 Jun 2024 21:09:07.616 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 21:09:07.702 * Background saving terminated with success +58896:M 13 Jun 2024 22:15:01.689 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 22:15:01.693 * Background saving started by pid 93707 +93707:C 13 Jun 2024 22:15:01.819 * DB saved on disk +93707:C 13 Jun 2024 22:15:01.820 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 22:15:01.896 * Background saving terminated with success +58896:M 13 Jun 2024 22:28:49.316 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 22:28:49.319 * Background saving started by pid 93877 +93877:C 13 Jun 2024 22:28:49.333 * DB saved on disk +93877:C 13 Jun 2024 22:28:49.334 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 22:28:49.421 * Background saving terminated with success +58896:M 13 Jun 2024 23:38:03.790 * 1 changes in 3600 seconds. Saving... +58896:M 13 Jun 2024 23:38:03.794 * Background saving started by pid 94043 +94043:C 13 Jun 2024 23:38:03.905 * DB saved on disk +94043:C 13 Jun 2024 23:38:03.908 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 23:38:03.997 * Background saving terminated with success +58896:M 13 Jun 2024 23:43:04.085 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 23:43:04.087 * Background saving started by pid 94614 +94614:C 13 Jun 2024 23:43:04.094 * DB saved on disk +94614:C 13 Jun 2024 23:43:04.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 23:43:04.189 * Background saving terminated with success +58896:M 13 Jun 2024 23:48:05.057 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 23:48:05.063 * Background saving started by pid 95362 +95362:C 13 Jun 2024 23:48:05.086 * DB saved on disk +95362:C 13 Jun 2024 23:48:05.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 23:48:05.165 * Background saving terminated with success +58896:M 13 Jun 2024 23:53:06.041 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 23:53:06.042 * Background saving started by pid 96187 +96187:C 13 Jun 2024 23:53:06.060 * DB saved on disk +96187:C 13 Jun 2024 23:53:06.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 23:53:06.143 * Background saving terminated with success +58896:M 13 Jun 2024 23:58:07.014 * 100 changes in 300 seconds. Saving... +58896:M 13 Jun 2024 23:58:07.017 * Background saving started by pid 97027 +97027:C 13 Jun 2024 23:58:07.030 * DB saved on disk +97027:C 13 Jun 2024 23:58:07.030 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 13 Jun 2024 23:58:07.118 * Background saving terminated with success +58896:M 14 Jun 2024 00:03:08.062 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:03:08.067 * Background saving started by pid 98055 +98055:C 14 Jun 2024 00:03:08.076 * DB saved on disk +98055:C 14 Jun 2024 00:03:08.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:03:08.169 * Background saving terminated with success +58896:M 14 Jun 2024 00:08:09.046 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:08:09.048 * Background saving started by pid 906 +906:C 14 Jun 2024 00:08:09.066 * DB saved on disk +906:C 14 Jun 2024 00:08:09.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:08:09.149 * Background saving terminated with success +58896:M 14 Jun 2024 00:13:10.017 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:13:10.021 * Background saving started by pid 2698 +2698:C 14 Jun 2024 00:13:10.034 * DB saved on disk +2698:C 14 Jun 2024 00:13:10.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:13:10.122 * Background saving terminated with success +58896:M 14 Jun 2024 00:18:11.011 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:18:11.013 * Background saving started by pid 3689 +3689:C 14 Jun 2024 00:18:11.022 * DB saved on disk +3689:C 14 Jun 2024 00:18:11.023 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:18:11.114 * Background saving terminated with success +58896:M 14 Jun 2024 00:23:12.093 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:23:12.094 * Background saving started by pid 4450 +4450:C 14 Jun 2024 00:23:12.105 * DB saved on disk +4450:C 14 Jun 2024 00:23:12.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:23:12.196 * Background saving terminated with success +58896:M 14 Jun 2024 00:28:13.053 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:28:13.055 * Background saving started by pid 5238 +5238:C 14 Jun 2024 00:28:13.065 * DB saved on disk +5238:C 14 Jun 2024 00:28:13.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:28:13.156 * Background saving terminated with success +58896:M 14 Jun 2024 00:33:14.055 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:33:14.057 * Background saving started by pid 6001 +6001:C 14 Jun 2024 00:33:14.066 * DB saved on disk +6001:C 14 Jun 2024 00:33:14.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:33:14.158 * Background saving terminated with success +58896:M 14 Jun 2024 00:38:15.023 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:38:15.025 * Background saving started by pid 6720 +6720:C 14 Jun 2024 00:38:15.034 * DB saved on disk +6720:C 14 Jun 2024 00:38:15.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:38:15.126 * Background saving terminated with success +58896:M 14 Jun 2024 00:43:16.074 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:43:16.077 * Background saving started by pid 7544 +7544:C 14 Jun 2024 00:43:16.090 * DB saved on disk +7544:C 14 Jun 2024 00:43:16.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:43:16.179 * Background saving terminated with success +58896:M 14 Jun 2024 00:48:17.008 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:48:17.009 * Background saving started by pid 8362 +8362:C 14 Jun 2024 00:48:17.018 * DB saved on disk +8362:C 14 Jun 2024 00:48:17.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:48:17.110 * Background saving terminated with success +58896:M 14 Jun 2024 00:53:18.083 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:53:18.086 * Background saving started by pid 9627 +9627:C 14 Jun 2024 00:53:18.094 * DB saved on disk +9627:C 14 Jun 2024 00:53:18.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:53:18.187 * Background saving terminated with success +58896:M 14 Jun 2024 00:58:19.056 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 00:58:19.058 * Background saving started by pid 10541 +10541:C 14 Jun 2024 00:58:19.068 * DB saved on disk +10541:C 14 Jun 2024 00:58:19.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 00:58:19.160 * Background saving terminated with success +58896:M 14 Jun 2024 01:03:20.085 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:03:20.088 * Background saving started by pid 11472 +11472:C 14 Jun 2024 01:03:20.099 * DB saved on disk +11472:C 14 Jun 2024 01:03:20.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:03:20.189 * Background saving terminated with success +58896:M 14 Jun 2024 01:08:21.081 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:08:21.083 * Background saving started by pid 12462 +12462:C 14 Jun 2024 01:08:21.094 * DB saved on disk +12462:C 14 Jun 2024 01:08:21.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:08:21.184 * Background saving terminated with success +58896:M 14 Jun 2024 01:13:22.058 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:13:22.059 * Background saving started by pid 13399 +13399:C 14 Jun 2024 01:13:22.069 * DB saved on disk +13399:C 14 Jun 2024 01:13:22.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:13:22.161 * Background saving terminated with success +58896:M 14 Jun 2024 01:18:23.041 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:18:23.042 * Background saving started by pid 14393 +14393:C 14 Jun 2024 01:18:23.054 * DB saved on disk +14393:C 14 Jun 2024 01:18:23.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:18:23.142 * Background saving terminated with success +58896:M 14 Jun 2024 01:23:24.029 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:23:24.031 * Background saving started by pid 15307 +15307:C 14 Jun 2024 01:23:24.047 * DB saved on disk +15307:C 14 Jun 2024 01:23:24.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:23:24.132 * Background saving terminated with success +58896:M 14 Jun 2024 01:28:25.054 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:28:25.057 * Background saving started by pid 16245 +16245:C 14 Jun 2024 01:28:25.067 * DB saved on disk +16245:C 14 Jun 2024 01:28:25.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:28:25.158 * Background saving terminated with success +58896:M 14 Jun 2024 01:33:26.047 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:33:26.051 * Background saving started by pid 17193 +17193:C 14 Jun 2024 01:33:26.081 * DB saved on disk +17193:C 14 Jun 2024 01:33:26.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:33:26.153 * Background saving terminated with success +58896:M 14 Jun 2024 01:38:27.082 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:38:27.084 * Background saving started by pid 18123 +18123:C 14 Jun 2024 01:38:27.100 * DB saved on disk +18123:C 14 Jun 2024 01:38:27.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:38:27.185 * Background saving terminated with success +58896:M 14 Jun 2024 01:43:28.063 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:43:28.065 * Background saving started by pid 20679 +20679:C 14 Jun 2024 01:43:28.076 * DB saved on disk +20679:C 14 Jun 2024 01:43:28.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:43:28.172 * Background saving terminated with success +58896:M 14 Jun 2024 01:48:29.019 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:48:29.024 * Background saving started by pid 21789 +21789:C 14 Jun 2024 01:48:29.033 * DB saved on disk +21789:C 14 Jun 2024 01:48:29.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:48:29.125 * Background saving terminated with success +58896:M 14 Jun 2024 01:53:30.004 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:53:30.005 * Background saving started by pid 22821 +22821:C 14 Jun 2024 01:53:30.021 * DB saved on disk +22821:C 14 Jun 2024 01:53:30.023 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:53:30.108 * Background saving terminated with success +58896:M 14 Jun 2024 01:58:31.072 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 01:58:31.072 * Background saving started by pid 23761 +23761:C 14 Jun 2024 01:58:31.081 * DB saved on disk +23761:C 14 Jun 2024 01:58:31.082 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 01:58:31.175 * Background saving terminated with success +58896:M 14 Jun 2024 02:03:32.084 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:03:32.087 * Background saving started by pid 24691 +24691:C 14 Jun 2024 02:03:32.112 * DB saved on disk +24691:C 14 Jun 2024 02:03:32.115 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:03:32.188 * Background saving terminated with success +58896:M 14 Jun 2024 02:08:33.012 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:08:33.013 * Background saving started by pid 25657 +25657:C 14 Jun 2024 02:08:33.023 * DB saved on disk +25657:C 14 Jun 2024 02:08:33.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:08:33.116 * Background saving terminated with success +58896:M 14 Jun 2024 02:13:34.062 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:13:34.065 * Background saving started by pid 26619 +26619:C 14 Jun 2024 02:13:34.082 * DB saved on disk +26619:C 14 Jun 2024 02:13:34.084 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:13:34.168 * Background saving terminated with success +58896:M 14 Jun 2024 02:18:35.092 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:18:35.095 * Background saving started by pid 27572 +27572:C 14 Jun 2024 02:18:35.110 * DB saved on disk +27572:C 14 Jun 2024 02:18:35.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:18:35.197 * Background saving terminated with success +58896:M 14 Jun 2024 02:23:36.006 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:23:36.010 * Background saving started by pid 28517 +28517:C 14 Jun 2024 02:23:36.030 * DB saved on disk +28517:C 14 Jun 2024 02:23:36.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:23:36.111 * Background saving terminated with success +58896:M 14 Jun 2024 02:28:37.011 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:28:37.014 * Background saving started by pid 29471 +29471:C 14 Jun 2024 02:28:37.025 * DB saved on disk +29471:C 14 Jun 2024 02:28:37.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:28:37.115 * Background saving terminated with success +58896:M 14 Jun 2024 02:33:38.046 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:33:38.050 * Background saving started by pid 30459 +30459:C 14 Jun 2024 02:33:38.067 * DB saved on disk +30459:C 14 Jun 2024 02:33:38.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:33:38.154 * Background saving terminated with success +58896:M 14 Jun 2024 02:38:39.080 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:38:39.086 * Background saving started by pid 31408 +31408:C 14 Jun 2024 02:38:39.107 * DB saved on disk +31408:C 14 Jun 2024 02:38:39.108 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:38:39.188 * Background saving terminated with success +58896:M 14 Jun 2024 02:43:40.090 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:43:40.093 * Background saving started by pid 32516 +32516:C 14 Jun 2024 02:43:40.103 * DB saved on disk +32516:C 14 Jun 2024 02:43:40.103 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:43:40.195 * Background saving terminated with success +58896:M 14 Jun 2024 02:48:41.094 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:48:41.098 * Background saving started by pid 33530 +33530:C 14 Jun 2024 02:48:41.110 * DB saved on disk +33530:C 14 Jun 2024 02:48:41.113 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:48:41.200 * Background saving terminated with success +58896:M 14 Jun 2024 02:53:42.065 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 02:53:42.068 * Background saving started by pid 34481 +34481:C 14 Jun 2024 02:53:42.097 * DB saved on disk +34481:C 14 Jun 2024 02:53:42.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 02:53:42.170 * Background saving terminated with success +58896:M 14 Jun 2024 03:02:19.016 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 03:02:19.020 * Background saving started by pid 35216 +35216:C 14 Jun 2024 03:02:19.144 * DB saved on disk +35216:C 14 Jun 2024 03:02:19.144 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 03:02:19.223 * Background saving terminated with success +58896:M 14 Jun 2024 04:09:00.287 * 1 changes in 3600 seconds. Saving... +58896:M 14 Jun 2024 04:09:00.391 * Background saving started by pid 35351 +35351:C 14 Jun 2024 04:09:00.406 * DB saved on disk +35351:C 14 Jun 2024 04:09:00.406 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 04:09:00.491 * Background saving terminated with success +58896:M 14 Jun 2024 05:13:19.442 * 1 changes in 3600 seconds. Saving... +58896:M 14 Jun 2024 05:13:19.559 * Background saving started by pid 35460 +35460:C 14 Jun 2024 05:13:19.566 * DB saved on disk +35460:C 14 Jun 2024 05:13:19.567 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 05:13:19.680 * Background saving terminated with success +58896:M 14 Jun 2024 05:45:38.251 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 05:45:38.253 * Background saving started by pid 35614 +35614:C 14 Jun 2024 05:45:38.263 * DB saved on disk +35614:C 14 Jun 2024 05:45:38.264 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 05:45:38.354 * Background saving terminated with success +58896:M 14 Jun 2024 06:06:43.153 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 06:06:43.156 * Background saving started by pid 35774 +35774:C 14 Jun 2024 06:06:43.171 * DB saved on disk +35774:C 14 Jun 2024 06:06:43.172 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 06:06:43.259 * Background saving terminated with success +58896:M 14 Jun 2024 06:44:23.413 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 06:44:23.415 * Background saving started by pid 35935 +35935:C 14 Jun 2024 06:44:23.428 * DB saved on disk +35935:C 14 Jun 2024 06:44:23.428 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 06:44:23.516 * Background saving terminated with success +58896:M 14 Jun 2024 07:48:29.341 * 1 changes in 3600 seconds. Saving... +58896:M 14 Jun 2024 07:48:29.456 * Background saving started by pid 35997 +35997:C 14 Jun 2024 07:48:29.466 * DB saved on disk +35997:C 14 Jun 2024 07:48:29.467 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 07:48:29.558 * Background saving terminated with success +58896:M 14 Jun 2024 08:56:33.414 * 1 changes in 3600 seconds. Saving... +58896:M 14 Jun 2024 08:56:33.530 * Background saving started by pid 36114 +36114:C 14 Jun 2024 08:56:33.539 * DB saved on disk +36114:C 14 Jun 2024 08:56:33.539 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 08:56:33.632 * Background saving terminated with success +58896:M 14 Jun 2024 09:59:37.399 * 1 changes in 3600 seconds. Saving... +58896:M 14 Jun 2024 09:59:37.511 * Background saving started by pid 36190 +36190:C 14 Jun 2024 09:59:37.519 * DB saved on disk +36190:C 14 Jun 2024 09:59:37.520 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 09:59:37.613 * Background saving terminated with success +58896:M 14 Jun 2024 10:07:14.898 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 10:07:14.901 * Background saving started by pid 36472 +36472:C 14 Jun 2024 10:07:14.910 * DB saved on disk +36472:C 14 Jun 2024 10:07:14.912 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 10:07:15.001 * Background saving terminated with success +58896:M 14 Jun 2024 10:12:16.014 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 10:12:16.016 * Background saving started by pid 37638 +37638:C 14 Jun 2024 10:12:16.026 * DB saved on disk +37638:C 14 Jun 2024 10:12:16.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 10:12:16.118 * Background saving terminated with success +58896:M 14 Jun 2024 10:17:17.028 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 10:17:17.033 * Background saving started by pid 38618 +38618:C 14 Jun 2024 10:17:17.051 * DB saved on disk +38618:C 14 Jun 2024 10:17:17.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 10:17:17.134 * Background saving terminated with success +58896:M 14 Jun 2024 10:22:18.071 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 10:22:18.073 * Background saving started by pid 39601 +39601:C 14 Jun 2024 10:22:18.085 * DB saved on disk +39601:C 14 Jun 2024 10:22:18.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 10:22:18.175 * Background saving terminated with success +58896:M 14 Jun 2024 10:28:04.538 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 10:28:04.541 * Background saving started by pid 40107 +40107:C 14 Jun 2024 10:28:04.659 * DB saved on disk +40107:C 14 Jun 2024 10:28:04.659 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 10:28:04.743 * Background saving terminated with success +58896:M 14 Jun 2024 11:30:27.751 * 1 changes in 3600 seconds. Saving... +58896:M 14 Jun 2024 11:30:27.759 * Background saving started by pid 40350 +40350:C 14 Jun 2024 11:30:27.857 * DB saved on disk +40350:C 14 Jun 2024 11:30:27.859 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 11:30:27.860 * Background saving terminated with success +58896:M 14 Jun 2024 12:16:13.786 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 12:16:13.787 * Background saving started by pid 40834 +40834:C 14 Jun 2024 12:16:13.796 * DB saved on disk +40834:C 14 Jun 2024 12:16:13.797 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 12:16:13.888 * Background saving terminated with success +58896:M 14 Jun 2024 12:21:14.062 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 12:21:14.063 * Background saving started by pid 42185 +42185:C 14 Jun 2024 12:21:14.071 * DB saved on disk +42185:C 14 Jun 2024 12:21:14.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 12:21:14.165 * Background saving terminated with success +58896:M 14 Jun 2024 12:58:11.704 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 12:58:11.706 * Background saving started by pid 50751 +50751:C 14 Jun 2024 12:58:11.762 * DB saved on disk +50751:C 14 Jun 2024 12:58:11.763 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 12:58:11.809 * Background saving terminated with success +58896:M 14 Jun 2024 14:00:57.749 * 1 changes in 3600 seconds. Saving... +58896:M 14 Jun 2024 14:00:57.755 * Background saving started by pid 52756 +52756:C 14 Jun 2024 14:00:57.876 * DB saved on disk +52756:C 14 Jun 2024 14:00:57.879 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:00:57.967 * Background saving terminated with success +58896:M 14 Jun 2024 14:15:30.354 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:15:30.357 * Background saving started by pid 55569 +55569:C 14 Jun 2024 14:15:30.369 * DB saved on disk +55569:C 14 Jun 2024 14:15:30.369 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:15:30.459 * Background saving terminated with success +58896:M 14 Jun 2024 14:20:31.034 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:20:31.036 * Background saving started by pid 56310 +56310:C 14 Jun 2024 14:20:31.046 * DB saved on disk +56310:C 14 Jun 2024 14:20:31.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:20:31.137 * Background saving terminated with success +58896:M 14 Jun 2024 14:25:32.056 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:25:32.057 * Background saving started by pid 57022 +57022:C 14 Jun 2024 14:25:32.069 * DB saved on disk +57022:C 14 Jun 2024 14:25:32.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:25:32.159 * Background saving terminated with success +58896:M 14 Jun 2024 14:30:33.093 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:30:33.095 * Background saving started by pid 57937 +57937:C 14 Jun 2024 14:30:33.106 * DB saved on disk +57937:C 14 Jun 2024 14:30:33.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:30:33.196 * Background saving terminated with success +58896:M 14 Jun 2024 14:35:34.000 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:35:34.002 * Background saving started by pid 58663 +58663:C 14 Jun 2024 14:35:34.013 * DB saved on disk +58663:C 14 Jun 2024 14:35:34.013 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:35:34.104 * Background saving terminated with success +58896:M 14 Jun 2024 14:40:35.079 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:40:35.079 * Background saving started by pid 59354 +59354:C 14 Jun 2024 14:40:35.092 * DB saved on disk +59354:C 14 Jun 2024 14:40:35.094 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:40:35.181 * Background saving terminated with success +58896:M 14 Jun 2024 14:45:36.026 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:45:36.030 * Background saving started by pid 60066 +60066:C 14 Jun 2024 14:45:36.047 * DB saved on disk +60066:C 14 Jun 2024 14:45:36.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:45:36.133 * Background saving terminated with success +58896:M 14 Jun 2024 14:50:37.021 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:50:37.025 * Background saving started by pid 60762 +60762:C 14 Jun 2024 14:50:37.046 * DB saved on disk +60762:C 14 Jun 2024 14:50:37.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:50:37.127 * Background saving terminated with success +58896:M 14 Jun 2024 14:55:38.054 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 14:55:38.055 * Background saving started by pid 61516 +61516:C 14 Jun 2024 14:55:38.066 * DB saved on disk +61516:C 14 Jun 2024 14:55:38.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 14:55:38.157 * Background saving terminated with success +58896:M 14 Jun 2024 15:00:39.013 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:00:39.016 * Background saving started by pid 63393 +63393:C 14 Jun 2024 15:00:39.026 * DB saved on disk +63393:C 14 Jun 2024 15:00:39.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:00:39.117 * Background saving terminated with success +58896:M 14 Jun 2024 15:05:40.086 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:05:40.089 * Background saving started by pid 64106 +64106:C 14 Jun 2024 15:05:40.109 * DB saved on disk +64106:C 14 Jun 2024 15:05:40.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:05:40.189 * Background saving terminated with success +58896:M 14 Jun 2024 15:10:41.056 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:10:41.058 * Background saving started by pid 64797 +64797:C 14 Jun 2024 15:10:41.073 * DB saved on disk +64797:C 14 Jun 2024 15:10:41.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:10:41.161 * Background saving terminated with success +58896:M 14 Jun 2024 15:15:42.057 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:15:42.059 * Background saving started by pid 65518 +65518:C 14 Jun 2024 15:15:42.074 * DB saved on disk +65518:C 14 Jun 2024 15:15:42.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:15:42.162 * Background saving terminated with success +58896:M 14 Jun 2024 15:20:43.021 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:20:43.023 * Background saving started by pid 66505 +66505:C 14 Jun 2024 15:20:43.037 * DB saved on disk +66505:C 14 Jun 2024 15:20:43.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:20:43.124 * Background saving terminated with success +58896:M 14 Jun 2024 15:25:44.025 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:25:44.029 * Background saving started by pid 67388 +67388:C 14 Jun 2024 15:25:44.040 * DB saved on disk +67388:C 14 Jun 2024 15:25:44.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:25:44.131 * Background saving terminated with success +58896:M 14 Jun 2024 15:30:45.027 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:30:45.029 * Background saving started by pid 68256 +68256:C 14 Jun 2024 15:30:45.053 * DB saved on disk +68256:C 14 Jun 2024 15:30:45.054 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:30:45.130 * Background saving terminated with success +58896:M 14 Jun 2024 15:35:46.077 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:35:46.078 * Background saving started by pid 69268 +69268:C 14 Jun 2024 15:35:46.088 * DB saved on disk +69268:C 14 Jun 2024 15:35:46.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:35:46.179 * Background saving terminated with success +58896:M 14 Jun 2024 15:40:47.084 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:40:47.088 * Background saving started by pid 70026 +70026:C 14 Jun 2024 15:40:47.108 * DB saved on disk +70026:C 14 Jun 2024 15:40:47.110 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:40:47.190 * Background saving terminated with success +58896:M 14 Jun 2024 15:45:48.012 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:45:48.019 * Background saving started by pid 71012 +71012:C 14 Jun 2024 15:45:48.028 * DB saved on disk +71012:C 14 Jun 2024 15:45:48.029 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:45:48.120 * Background saving terminated with success +58896:M 14 Jun 2024 15:50:49.082 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:50:49.085 * Background saving started by pid 71940 +71940:C 14 Jun 2024 15:50:49.097 * DB saved on disk +71940:C 14 Jun 2024 15:50:49.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:50:49.186 * Background saving terminated with success +58896:M 14 Jun 2024 15:55:50.015 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 15:55:50.017 * Background saving started by pid 72898 +72898:C 14 Jun 2024 15:55:50.030 * DB saved on disk +72898:C 14 Jun 2024 15:55:50.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 15:55:50.118 * Background saving terminated with success +58896:M 14 Jun 2024 16:00:51.081 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:00:51.085 * Background saving started by pid 73649 +73649:C 14 Jun 2024 16:00:51.098 * DB saved on disk +73649:C 14 Jun 2024 16:00:51.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:00:51.186 * Background saving terminated with success +58896:M 14 Jun 2024 16:05:52.071 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:05:52.072 * Background saving started by pid 74480 +74480:C 14 Jun 2024 16:05:52.082 * DB saved on disk +74480:C 14 Jun 2024 16:05:52.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:05:52.174 * Background saving terminated with success +58896:M 14 Jun 2024 16:10:53.035 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:10:53.038 * Background saving started by pid 75372 +75372:C 14 Jun 2024 16:10:53.054 * DB saved on disk +75372:C 14 Jun 2024 16:10:53.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:10:53.139 * Background saving terminated with success +58896:M 14 Jun 2024 16:15:54.086 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:15:54.089 * Background saving started by pid 76156 +76156:C 14 Jun 2024 16:15:54.114 * DB saved on disk +76156:C 14 Jun 2024 16:15:54.115 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:15:54.190 * Background saving terminated with success +58896:M 14 Jun 2024 16:20:55.033 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:20:55.035 * Background saving started by pid 76928 +76928:C 14 Jun 2024 16:20:55.053 * DB saved on disk +76928:C 14 Jun 2024 16:20:55.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:20:55.137 * Background saving terminated with success +58896:M 14 Jun 2024 16:25:56.061 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:25:56.062 * Background saving started by pid 77910 +77910:C 14 Jun 2024 16:25:56.073 * DB saved on disk +77910:C 14 Jun 2024 16:25:56.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:25:56.164 * Background saving terminated with success +58896:M 14 Jun 2024 16:30:57.004 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:30:57.006 * Background saving started by pid 78693 +78693:C 14 Jun 2024 16:30:57.017 * DB saved on disk +78693:C 14 Jun 2024 16:30:57.019 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:30:57.108 * Background saving terminated with success +58896:M 14 Jun 2024 16:35:58.062 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:35:58.064 * Background saving started by pid 79546 +79546:C 14 Jun 2024 16:35:58.076 * DB saved on disk +79546:C 14 Jun 2024 16:35:58.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:35:58.165 * Background saving terminated with success +58896:M 14 Jun 2024 16:40:59.088 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:40:59.089 * Background saving started by pid 80305 +80305:C 14 Jun 2024 16:40:59.101 * DB saved on disk +80305:C 14 Jun 2024 16:40:59.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:40:59.190 * Background saving terminated with success +58896:M 14 Jun 2024 16:46:00.058 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:46:00.059 * Background saving started by pid 81213 +81213:C 14 Jun 2024 16:46:00.070 * DB saved on disk +81213:C 14 Jun 2024 16:46:00.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:46:00.160 * Background saving terminated with success +58896:M 14 Jun 2024 16:51:01.096 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:51:01.097 * Background saving started by pid 82247 +82247:C 14 Jun 2024 16:51:01.106 * DB saved on disk +82247:C 14 Jun 2024 16:51:01.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:51:01.199 * Background saving terminated with success +58896:M 14 Jun 2024 16:56:02.068 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 16:56:02.072 * Background saving started by pid 83296 +83296:C 14 Jun 2024 16:56:02.085 * DB saved on disk +83296:C 14 Jun 2024 16:56:02.086 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 16:56:02.173 * Background saving terminated with success +58896:M 14 Jun 2024 17:01:03.003 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:01:03.004 * Background saving started by pid 84035 +84035:C 14 Jun 2024 17:01:03.014 * DB saved on disk +84035:C 14 Jun 2024 17:01:03.015 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:01:03.105 * Background saving terminated with success +58896:M 14 Jun 2024 17:06:04.035 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:06:04.037 * Background saving started by pid 84625 +84625:C 14 Jun 2024 17:06:04.049 * DB saved on disk +84625:C 14 Jun 2024 17:06:04.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:06:04.138 * Background saving terminated with success +58896:M 14 Jun 2024 17:11:05.017 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:11:05.020 * Background saving started by pid 85292 +85292:C 14 Jun 2024 17:11:05.034 * DB saved on disk +85292:C 14 Jun 2024 17:11:05.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:11:05.121 * Background saving terminated with success +58896:M 14 Jun 2024 17:16:06.081 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:16:06.083 * Background saving started by pid 85873 +85873:C 14 Jun 2024 17:16:06.091 * DB saved on disk +85873:C 14 Jun 2024 17:16:06.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:16:06.184 * Background saving terminated with success +58896:M 14 Jun 2024 17:21:07.000 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:21:07.001 * Background saving started by pid 86432 +86432:C 14 Jun 2024 17:21:07.014 * DB saved on disk +86432:C 14 Jun 2024 17:21:07.014 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:21:07.102 * Background saving terminated with success +58896:M 14 Jun 2024 17:26:08.044 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:26:08.047 * Background saving started by pid 87015 +87015:C 14 Jun 2024 17:26:08.076 * DB saved on disk +87015:C 14 Jun 2024 17:26:08.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:26:08.149 * Background saving terminated with success +58896:M 14 Jun 2024 17:31:09.060 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:31:09.061 * Background saving started by pid 87646 +87646:C 14 Jun 2024 17:31:09.069 * DB saved on disk +87646:C 14 Jun 2024 17:31:09.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:31:09.163 * Background saving terminated with success +58896:M 14 Jun 2024 17:36:10.011 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:36:10.013 * Background saving started by pid 88231 +88231:C 14 Jun 2024 17:36:10.024 * DB saved on disk +88231:C 14 Jun 2024 17:36:10.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:36:10.114 * Background saving terminated with success +58896:M 14 Jun 2024 17:41:11.048 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:41:11.055 * Background saving started by pid 88988 +88988:C 14 Jun 2024 17:41:11.063 * DB saved on disk +88988:C 14 Jun 2024 17:41:11.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:41:11.156 * Background saving terminated with success +58896:M 14 Jun 2024 17:46:12.064 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:46:12.065 * Background saving started by pid 89661 +89661:C 14 Jun 2024 17:46:12.078 * DB saved on disk +89661:C 14 Jun 2024 17:46:12.079 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:46:12.166 * Background saving terminated with success +58896:M 14 Jun 2024 17:51:13.041 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:51:13.043 * Background saving started by pid 90249 +90249:C 14 Jun 2024 17:51:13.055 * DB saved on disk +90249:C 14 Jun 2024 17:51:13.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:51:13.144 * Background saving terminated with success +58896:M 14 Jun 2024 17:56:14.019 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 17:56:14.022 * Background saving started by pid 91032 +91032:C 14 Jun 2024 17:56:14.035 * DB saved on disk +91032:C 14 Jun 2024 17:56:14.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 17:56:14.123 * Background saving terminated with success +58896:M 14 Jun 2024 18:01:15.037 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:01:15.039 * Background saving started by pid 91806 +91806:C 14 Jun 2024 18:01:15.055 * DB saved on disk +91806:C 14 Jun 2024 18:01:15.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:01:15.141 * Background saving terminated with success +58896:M 14 Jun 2024 18:06:16.057 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:06:16.060 * Background saving started by pid 92444 +92444:C 14 Jun 2024 18:06:16.073 * DB saved on disk +92444:C 14 Jun 2024 18:06:16.074 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:06:16.160 * Background saving terminated with success +58896:M 14 Jun 2024 18:11:17.059 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:11:17.063 * Background saving started by pid 93096 +93096:C 14 Jun 2024 18:11:17.080 * DB saved on disk +93096:C 14 Jun 2024 18:11:17.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:11:17.164 * Background saving terminated with success +58896:M 14 Jun 2024 18:16:18.080 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:16:18.083 * Background saving started by pid 93766 +93766:C 14 Jun 2024 18:16:18.094 * DB saved on disk +93766:C 14 Jun 2024 18:16:18.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:16:18.184 * Background saving terminated with success +58896:M 14 Jun 2024 18:21:19.098 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:21:19.102 * Background saving started by pid 94418 +94418:C 14 Jun 2024 18:21:19.118 * DB saved on disk +94418:C 14 Jun 2024 18:21:19.121 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:21:19.204 * Background saving terminated with success +58896:M 14 Jun 2024 18:26:20.090 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:26:20.092 * Background saving started by pid 95153 +95153:C 14 Jun 2024 18:26:20.103 * DB saved on disk +95153:C 14 Jun 2024 18:26:20.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:26:20.193 * Background saving terminated with success +58896:M 14 Jun 2024 18:31:21.035 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:31:21.038 * Background saving started by pid 95904 +95904:C 14 Jun 2024 18:31:21.049 * DB saved on disk +95904:C 14 Jun 2024 18:31:21.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:31:21.139 * Background saving terminated with success +58896:M 14 Jun 2024 18:36:22.029 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:36:22.030 * Background saving started by pid 96493 +96493:C 14 Jun 2024 18:36:22.044 * DB saved on disk +96493:C 14 Jun 2024 18:36:22.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:36:22.132 * Background saving terminated with success +58896:M 14 Jun 2024 18:53:06.805 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:53:06.810 * Background saving started by pid 96635 +96635:C 14 Jun 2024 18:53:06.933 * DB saved on disk +96635:C 14 Jun 2024 18:53:06.938 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:53:07.012 * Background saving terminated with success +58896:M 14 Jun 2024 18:58:08.026 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 18:58:08.027 * Background saving started by pid 97243 +97243:C 14 Jun 2024 18:58:08.038 * DB saved on disk +97243:C 14 Jun 2024 18:58:08.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 18:58:08.128 * Background saving terminated with success +58896:M 14 Jun 2024 19:03:09.096 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:03:09.097 * Background saving started by pid 97816 +97816:C 14 Jun 2024 19:03:09.115 * DB saved on disk +97816:C 14 Jun 2024 19:03:09.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:03:09.198 * Background saving terminated with success +58896:M 14 Jun 2024 19:08:10.026 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:08:10.027 * Background saving started by pid 98403 +98403:C 14 Jun 2024 19:08:10.036 * DB saved on disk +98403:C 14 Jun 2024 19:08:10.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:08:10.128 * Background saving terminated with success +58896:M 14 Jun 2024 19:13:11.015 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:13:11.017 * Background saving started by pid 99088 +99088:C 14 Jun 2024 19:13:11.026 * DB saved on disk +99088:C 14 Jun 2024 19:13:11.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:13:11.117 * Background saving terminated with success +58896:M 14 Jun 2024 19:18:12.060 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:18:12.062 * Background saving started by pid 99654 +99654:C 14 Jun 2024 19:18:12.070 * DB saved on disk +99654:C 14 Jun 2024 19:18:12.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:18:12.163 * Background saving terminated with success +58896:M 14 Jun 2024 19:23:13.095 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:23:13.099 * Background saving started by pid 651 +651:C 14 Jun 2024 19:23:13.126 * DB saved on disk +651:C 14 Jun 2024 19:23:13.126 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:23:13.200 * Background saving terminated with success +58896:M 14 Jun 2024 19:28:14.064 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:28:14.066 * Background saving started by pid 1362 +1362:C 14 Jun 2024 19:28:14.074 * DB saved on disk +1362:C 14 Jun 2024 19:28:14.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:28:14.168 * Background saving terminated with success +58896:M 14 Jun 2024 19:33:15.065 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:33:15.067 * Background saving started by pid 1965 +1965:C 14 Jun 2024 19:33:15.095 * DB saved on disk +1965:C 14 Jun 2024 19:33:15.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:33:15.168 * Background saving terminated with success +58896:M 14 Jun 2024 19:38:16.019 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:38:16.020 * Background saving started by pid 2640 +2640:C 14 Jun 2024 19:38:16.036 * DB saved on disk +2640:C 14 Jun 2024 19:38:16.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:38:16.121 * Background saving terminated with success +58896:M 14 Jun 2024 19:43:17.065 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:43:17.067 * Background saving started by pid 3209 +3209:C 14 Jun 2024 19:43:17.082 * DB saved on disk +3209:C 14 Jun 2024 19:43:17.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:43:17.168 * Background saving terminated with success +58896:M 14 Jun 2024 19:48:18.083 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:48:18.084 * Background saving started by pid 3807 +3807:C 14 Jun 2024 19:48:18.092 * DB saved on disk +3807:C 14 Jun 2024 19:48:18.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:48:18.185 * Background saving terminated with success +58896:M 14 Jun 2024 19:53:19.091 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:53:19.093 * Background saving started by pid 4495 +4495:C 14 Jun 2024 19:53:19.105 * DB saved on disk +4495:C 14 Jun 2024 19:53:19.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:53:19.194 * Background saving terminated with success +58896:M 14 Jun 2024 19:53:36.373 * DB saved on disk +58896:M 14 Jun 2024 19:58:37.006 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 19:58:37.008 * Background saving started by pid 5355 +5355:C 14 Jun 2024 19:58:37.023 * DB saved on disk +5355:C 14 Jun 2024 19:58:37.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 19:58:37.110 * Background saving terminated with success +58896:M 14 Jun 2024 20:03:38.062 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:03:38.068 * Background saving started by pid 5941 +5941:C 14 Jun 2024 20:03:38.079 * DB saved on disk +5941:C 14 Jun 2024 20:03:38.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:03:38.169 * Background saving terminated with success +58896:M 14 Jun 2024 20:08:39.052 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:08:39.054 * Background saving started by pid 6579 +6579:C 14 Jun 2024 20:08:39.063 * DB saved on disk +6579:C 14 Jun 2024 20:08:39.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:08:39.155 * Background saving terminated with success +58896:M 14 Jun 2024 20:13:40.010 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:13:40.014 * Background saving started by pid 7271 +7271:C 14 Jun 2024 20:13:40.054 * DB saved on disk +7271:C 14 Jun 2024 20:13:40.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:13:40.117 * Background saving terminated with success +58896:M 14 Jun 2024 20:15:25.868 * DB saved on disk +58896:M 14 Jun 2024 20:20:26.073 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:20:26.075 * Background saving started by pid 8477 +8477:C 14 Jun 2024 20:20:26.083 * DB saved on disk +8477:C 14 Jun 2024 20:20:26.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:20:26.176 * Background saving terminated with success +58896:M 14 Jun 2024 20:25:27.045 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:25:27.048 * Background saving started by pid 9337 +9337:C 14 Jun 2024 20:25:27.059 * DB saved on disk +9337:C 14 Jun 2024 20:25:27.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:25:27.149 * Background saving terminated with success +58896:M 14 Jun 2024 20:30:28.053 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:30:28.054 * Background saving started by pid 10207 +10207:C 14 Jun 2024 20:30:28.063 * DB saved on disk +10207:C 14 Jun 2024 20:30:28.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:30:28.155 * Background saving terminated with success +58896:M 14 Jun 2024 20:33:51.791 * DB saved on disk +58896:M 14 Jun 2024 20:36:02.959 * DB saved on disk +58896:M 14 Jun 2024 20:41:03.035 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:41:03.039 * Background saving started by pid 12285 +12285:C 14 Jun 2024 20:41:03.048 * DB saved on disk +12285:C 14 Jun 2024 20:41:03.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:41:03.139 * Background saving terminated with success +58896:M 14 Jun 2024 20:46:04.007 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:46:04.009 * Background saving started by pid 13266 +13266:C 14 Jun 2024 20:46:04.016 * DB saved on disk +13266:C 14 Jun 2024 20:46:04.018 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:46:04.110 * Background saving terminated with success +58896:M 14 Jun 2024 20:51:05.080 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:51:05.082 * Background saving started by pid 14114 +14114:C 14 Jun 2024 20:51:05.090 * DB saved on disk +14114:C 14 Jun 2024 20:51:05.090 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:51:05.183 * Background saving terminated with success +58896:M 14 Jun 2024 20:56:06.040 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 20:56:06.042 * Background saving started by pid 15071 +15071:C 14 Jun 2024 20:56:06.050 * DB saved on disk +15071:C 14 Jun 2024 20:56:06.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 20:56:06.143 * Background saving terminated with success +58896:M 14 Jun 2024 21:01:07.036 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:01:07.038 * Background saving started by pid 16066 +16066:C 14 Jun 2024 21:01:07.046 * DB saved on disk +16066:C 14 Jun 2024 21:01:07.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:01:07.140 * Background saving terminated with success +58896:M 14 Jun 2024 21:06:08.027 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:06:08.029 * Background saving started by pid 17073 +17073:C 14 Jun 2024 21:06:08.048 * DB saved on disk +17073:C 14 Jun 2024 21:06:08.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:06:08.129 * Background saving terminated with success +58896:M 14 Jun 2024 21:11:09.048 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:11:09.052 * Background saving started by pid 18014 +18014:C 14 Jun 2024 21:11:09.063 * DB saved on disk +18014:C 14 Jun 2024 21:11:09.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:11:09.153 * Background saving terminated with success +58896:M 14 Jun 2024 21:16:10.061 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:16:10.062 * Background saving started by pid 18941 +18941:C 14 Jun 2024 21:16:10.072 * DB saved on disk +18941:C 14 Jun 2024 21:16:10.074 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:16:10.162 * Background saving terminated with success +58896:M 14 Jun 2024 21:21:11.025 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:21:11.031 * Background saving started by pid 19797 +19797:C 14 Jun 2024 21:21:11.065 * DB saved on disk +19797:C 14 Jun 2024 21:21:11.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:21:11.131 * Background saving terminated with success +58896:M 14 Jun 2024 21:26:12.051 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:26:12.054 * Background saving started by pid 20708 +20708:C 14 Jun 2024 21:26:12.065 * DB saved on disk +20708:C 14 Jun 2024 21:26:12.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:26:12.154 * Background saving terminated with success +58896:M 14 Jun 2024 21:31:13.042 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:31:13.045 * Background saving started by pid 21604 +21604:C 14 Jun 2024 21:31:13.060 * DB saved on disk +21604:C 14 Jun 2024 21:31:13.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:31:13.146 * Background saving terminated with success +58896:M 14 Jun 2024 21:36:14.095 * 100 changes in 300 seconds. Saving... +58896:M 14 Jun 2024 21:36:14.097 * Background saving started by pid 22441 +22441:C 14 Jun 2024 21:36:14.107 * DB saved on disk +22441:C 14 Jun 2024 21:36:14.108 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB +58896:M 14 Jun 2024 21:36:14.198 * Background saving terminated with success +58896:signal-handler (1718372303) Received SIGTERM scheduling shutdown... +58896:M 14 Jun 2024 21:38:23.499 # User requested shutdown... +58896:M 14 Jun 2024 21:38:23.499 * Saving the final RDB snapshot before exiting. +58896:M 14 Jun 2024 21:38:23.509 * DB saved on disk +58896:M 14 Jun 2024 21:38:23.510 # Redis is now ready to exit, bye bye... From c485282b3a46efe0e5a59e74dcdbda7c5cca267e Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 19 Jun 2024 15:49:19 +0800 Subject: [PATCH 12/23] [CoreEngine] remove the unused files. --- .../federate/quick_start/octopus/dump.rdb | Bin 7248 -> 0 bytes .../federate/quick_start/octopus/nohup.out | 3032 ----------------- 2 files changed, 3032 deletions(-) delete mode 100644 python/examples/federate/quick_start/octopus/dump.rdb delete mode 100644 python/examples/federate/quick_start/octopus/nohup.out diff --git a/python/examples/federate/quick_start/octopus/dump.rdb b/python/examples/federate/quick_start/octopus/dump.rdb deleted file mode 100644 index f31af5cb4fd49f4a377eb444135610e4915c5730..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7248 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 L55F{c_t*agW;0!L diff --git a/python/examples/federate/quick_start/octopus/nohup.out b/python/examples/federate/quick_start/octopus/nohup.out deleted file mode 100644 index 2350761958..0000000000 --- a/python/examples/federate/quick_start/octopus/nohup.out +++ /dev/null @@ -1,3032 +0,0 @@ -58896:C 27 May 2024 16:58:15.551 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo -58896:C 27 May 2024 16:58:15.551 # Redis version=7.0.11, bits=64, commit=00000000, modified=0, pid=58896, just started -58896:C 27 May 2024 16:58:15.551 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf -58896:M 27 May 2024 16:58:15.551 * monotonic clock: POSIX clock_gettime -58896:M 27 May 2024 16:58:15.552 * Running mode=standalone, port=6379. -58896:M 27 May 2024 16:58:15.552 # WARNING: The TCP backlog setting of 511 cannot be enforced because kern.ipc.somaxconn is set to the lower value of 128. -58896:M 27 May 2024 16:58:15.552 # Server initialized -58896:M 27 May 2024 16:58:15.552 * Ready to accept connections -58896:M 27 May 2024 16:58:22.918 * DB saved on disk -58896:M 27 May 2024 17:58:23.012 * 1 changes in 3600 seconds. Saving... -58896:M 27 May 2024 17:58:23.013 * Background saving started by pid 65644 -65644:C 27 May 2024 17:58:23.020 * DB saved on disk -65644:C 27 May 2024 17:58:23.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 27 May 2024 17:58:23.114 * Background saving terminated with success -58896:M 27 May 2024 19:13:18.626 * 1 changes in 3600 seconds. Saving... -58896:M 27 May 2024 19:13:18.736 * Background saving started by pid 72278 -72278:C 27 May 2024 19:13:18.746 * DB saved on disk -72278:C 27 May 2024 19:13:18.746 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 27 May 2024 19:13:18.838 * Background saving terminated with success -58896:M 28 May 2024 14:08:25.606 * 1 changes in 3600 seconds. Saving... -58896:M 28 May 2024 14:08:25.608 * Background saving started by pid 78120 -78120:C 28 May 2024 14:08:25.615 * DB saved on disk -78120:C 28 May 2024 14:08:25.616 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 28 May 2024 14:08:25.709 * Background saving terminated with success -58896:M 28 May 2024 15:19:26.423 * 1 changes in 3600 seconds. Saving... -58896:M 28 May 2024 15:19:26.539 * Background saving started by pid 84225 -84225:C 28 May 2024 15:19:26.545 * DB saved on disk -84225:C 28 May 2024 15:19:26.546 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 28 May 2024 15:19:26.642 * Background saving terminated with success -58896:M 29 May 2024 17:57:07.834 * 1 changes in 3600 seconds. Saving... -58896:M 29 May 2024 17:57:07.835 * Background saving started by pid 4206 -4206:C 29 May 2024 17:57:07.849 * DB saved on disk -4206:C 29 May 2024 17:57:07.850 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 29 May 2024 17:57:07.935 * Background saving terminated with success -58896:M 29 May 2024 18:57:08.006 * 1 changes in 3600 seconds. Saving... -58896:M 29 May 2024 18:57:08.008 * Background saving started by pid 11453 -11453:C 29 May 2024 18:57:08.021 * DB saved on disk -11453:C 29 May 2024 18:57:08.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 29 May 2024 18:57:08.109 * Background saving terminated with success -58896:M 29 May 2024 19:21:58.973 * 100 changes in 300 seconds. Saving... -58896:M 29 May 2024 19:21:58.973 * Background saving started by pid 19535 -19535:C 29 May 2024 19:21:58.981 * DB saved on disk -19535:C 29 May 2024 19:21:58.981 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 29 May 2024 19:21:59.074 * Background saving terminated with success -58896:M 29 May 2024 19:27:40.433 * DB saved on disk -58896:M 29 May 2024 20:39:51.202 * 1 changes in 3600 seconds. Saving... -58896:M 29 May 2024 20:39:51.203 * Background saving started by pid 21314 -21314:C 29 May 2024 20:39:51.314 * DB saved on disk -21314:C 29 May 2024 20:39:51.315 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 29 May 2024 20:39:51.407 * Background saving terminated with success -58896:M 29 May 2024 22:49:24.515 * 1 changes in 3600 seconds. Saving... -58896:M 29 May 2024 22:49:24.516 * Background saving started by pid 25814 -25814:C 29 May 2024 22:49:24.587 * DB saved on disk -25814:C 29 May 2024 22:49:24.587 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 29 May 2024 22:49:24.617 * Background saving terminated with success -58896:M 29 May 2024 23:08:52.971 * 100 changes in 300 seconds. Saving... -58896:M 29 May 2024 23:08:52.972 * Background saving started by pid 28739 -28739:C 29 May 2024 23:08:52.978 * DB saved on disk -28739:C 29 May 2024 23:08:52.978 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 29 May 2024 23:08:53.073 * Background saving terminated with success -58896:M 30 May 2024 00:09:08.434 * 1 changes in 3600 seconds. Saving... -58896:M 30 May 2024 00:09:08.435 * Background saving started by pid 30988 -30988:C 30 May 2024 00:09:08.569 * DB saved on disk -30988:C 30 May 2024 00:09:08.569 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 00:09:08.638 * Background saving terminated with success -58896:M 30 May 2024 12:51:39.719 * 1 changes in 3600 seconds. Saving... -58896:M 30 May 2024 12:51:39.720 * Background saving started by pid 41021 -41021:C 30 May 2024 12:51:39.729 * DB saved on disk -41021:C 30 May 2024 12:51:39.729 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 12:51:39.821 * Background saving terminated with success -58896:M 30 May 2024 12:56:40.011 * 100 changes in 300 seconds. Saving... -58896:M 30 May 2024 12:56:40.017 * Background saving started by pid 41850 -41850:C 30 May 2024 12:56:40.033 * DB saved on disk -41850:C 30 May 2024 12:56:40.034 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 12:56:40.120 * Background saving terminated with success -58896:M 30 May 2024 13:16:33.022 * 100 changes in 300 seconds. Saving... -58896:M 30 May 2024 13:16:33.138 * Background saving started by pid 42823 -42823:C 30 May 2024 13:16:33.145 * DB saved on disk -42823:C 30 May 2024 13:16:33.145 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 13:16:33.240 * Background saving terminated with success -58896:M 30 May 2024 15:25:24.413 * 1 changes in 3600 seconds. Saving... -58896:M 30 May 2024 15:25:24.413 * Background saving started by pid 48206 -48206:C 30 May 2024 15:25:24.425 * DB saved on disk -48206:C 30 May 2024 15:25:24.426 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 15:25:24.513 * Background saving terminated with success -58896:M 30 May 2024 15:30:25.016 * 100 changes in 300 seconds. Saving... -58896:M 30 May 2024 15:30:25.017 * Background saving started by pid 48800 -48800:C 30 May 2024 15:30:25.029 * DB saved on disk -48800:C 30 May 2024 15:30:25.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 15:30:25.119 * Background saving terminated with success -58896:M 30 May 2024 15:35:26.012 * 100 changes in 300 seconds. Saving... -58896:M 30 May 2024 15:35:26.014 * Background saving started by pid 49390 -49390:C 30 May 2024 15:35:26.025 * DB saved on disk -49390:C 30 May 2024 15:35:26.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 15:35:26.115 * Background saving terminated with success -58896:M 30 May 2024 16:42:51.523 * 1 changes in 3600 seconds. Saving... -58896:M 30 May 2024 16:42:51.646 * Background saving started by pid 65592 -65592:C 30 May 2024 16:42:51.655 * DB saved on disk -65592:C 30 May 2024 16:42:51.655 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 16:42:51.747 * Background saving terminated with success -58896:M 30 May 2024 17:15:29.037 * 100 changes in 300 seconds. Saving... -58896:M 30 May 2024 17:15:29.039 * Background saving started by pid 69523 -69523:C 30 May 2024 17:15:29.050 * DB saved on disk -69523:C 30 May 2024 17:15:29.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 17:15:29.142 * Background saving terminated with success -58896:M 30 May 2024 18:15:30.060 * 1 changes in 3600 seconds. Saving... -58896:M 30 May 2024 18:15:30.063 * Background saving started by pid 84706 -84706:C 30 May 2024 18:15:30.075 * DB saved on disk -84706:C 30 May 2024 18:15:30.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 30 May 2024 18:15:30.167 * Background saving terminated with success -58896:M 03 Jun 2024 18:06:53.699 * 1 changes in 3600 seconds. Saving... -58896:M 03 Jun 2024 18:06:53.703 * Background saving started by pid 90870 -90870:C 03 Jun 2024 18:06:53.713 * DB saved on disk -90870:C 03 Jun 2024 18:06:53.714 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 18:06:53.803 * Background saving terminated with success -58896:M 03 Jun 2024 18:11:54.075 * 100 changes in 300 seconds. Saving... -58896:M 03 Jun 2024 18:11:54.078 * Background saving started by pid 91526 -91526:C 03 Jun 2024 18:11:54.087 * DB saved on disk -91526:C 03 Jun 2024 18:11:54.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 18:11:54.180 * Background saving terminated with success -58896:M 03 Jun 2024 18:18:46.019 * 100 changes in 300 seconds. Saving... -58896:M 03 Jun 2024 18:18:46.024 * Background saving started by pid 92286 -92286:C 03 Jun 2024 18:18:46.034 * DB saved on disk -92286:C 03 Jun 2024 18:18:46.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 18:18:46.126 * Background saving terminated with success -58896:M 03 Jun 2024 18:24:50.037 * 100 changes in 300 seconds. Saving... -58896:M 03 Jun 2024 18:24:50.038 * Background saving started by pid 93124 -93124:C 03 Jun 2024 18:24:50.050 * DB saved on disk -93124:C 03 Jun 2024 18:24:50.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 18:24:50.140 * Background saving terminated with success -58896:M 03 Jun 2024 18:29:51.049 * 100 changes in 300 seconds. Saving... -58896:M 03 Jun 2024 18:29:51.051 * Background saving started by pid 93844 -93844:C 03 Jun 2024 18:29:51.063 * DB saved on disk -93844:C 03 Jun 2024 18:29:51.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 18:29:51.153 * Background saving terminated with success -58896:M 03 Jun 2024 18:34:52.071 * 100 changes in 300 seconds. Saving... -58896:M 03 Jun 2024 18:34:52.073 * Background saving started by pid 94768 -94768:C 03 Jun 2024 18:34:52.088 * DB saved on disk -94768:C 03 Jun 2024 18:34:52.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 18:34:52.174 * Background saving terminated with success -58896:M 03 Jun 2024 18:48:44.981 * 100 changes in 300 seconds. Saving... -58896:M 03 Jun 2024 18:48:44.982 * Background saving started by pid 96629 -96629:C 03 Jun 2024 18:48:45.005 * DB saved on disk -96629:C 03 Jun 2024 18:48:45.006 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 18:48:45.083 * Background saving terminated with success -58896:M 03 Jun 2024 23:49:36.949 * 1 changes in 3600 seconds. Saving... -58896:M 03 Jun 2024 23:49:36.968 * Background saving started by pid 97783 -97783:C 03 Jun 2024 23:49:37.370 * DB saved on disk -97783:C 03 Jun 2024 23:49:37.436 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 03 Jun 2024 23:49:37.493 * Background saving terminated with success -58896:M 04 Jun 2024 14:48:17.992 * 1 changes in 3600 seconds. Saving... -58896:M 04 Jun 2024 14:48:18.002 * Background saving started by pid 19353 -19353:C 04 Jun 2024 14:48:18.012 * DB saved on disk -19353:C 04 Jun 2024 14:48:18.012 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 04 Jun 2024 14:48:18.109 * Background saving terminated with success -58896:M 04 Jun 2024 14:53:19.081 * 100 changes in 300 seconds. Saving... -58896:M 04 Jun 2024 14:53:19.082 * Background saving started by pid 19823 -19823:C 04 Jun 2024 14:53:19.087 * DB saved on disk -19823:C 04 Jun 2024 14:53:19.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 04 Jun 2024 14:53:19.184 * Background saving terminated with success -58896:M 04 Jun 2024 15:17:23.645 * 100 changes in 300 seconds. Saving... -58896:M 04 Jun 2024 15:17:23.646 * Background saving started by pid 23721 -23721:C 04 Jun 2024 15:17:23.656 * DB saved on disk -23721:C 04 Jun 2024 15:17:23.656 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 04 Jun 2024 15:17:23.748 * Background saving terminated with success -58896:M 05 Jun 2024 15:06:53.989 * 1 changes in 3600 seconds. Saving... -58896:M 05 Jun 2024 15:06:53.991 * Background saving started by pid 74889 -74889:C 05 Jun 2024 15:06:54.001 * DB saved on disk -74889:C 05 Jun 2024 15:06:54.001 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 15:06:54.091 * Background saving terminated with success -58896:M 05 Jun 2024 15:11:55.053 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 15:11:55.057 * Background saving started by pid 75549 -75549:C 05 Jun 2024 15:11:55.084 * DB saved on disk -75549:C 05 Jun 2024 15:11:55.084 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 15:11:55.158 * Background saving terminated with success -58896:M 05 Jun 2024 15:16:56.075 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 15:16:56.078 * Background saving started by pid 76399 -76399:C 05 Jun 2024 15:16:56.095 * DB saved on disk -76399:C 05 Jun 2024 15:16:56.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 15:16:56.180 * Background saving terminated with success -58896:M 05 Jun 2024 15:51:48.859 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 15:51:48.861 * Background saving started by pid 79566 -79566:C 05 Jun 2024 15:51:48.871 * DB saved on disk -79566:C 05 Jun 2024 15:51:48.871 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 15:51:48.963 * Background saving terminated with success -58896:M 05 Jun 2024 16:17:59.180 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 16:17:59.183 * Background saving started by pid 82108 -82108:C 05 Jun 2024 16:17:59.192 * DB saved on disk -82108:C 05 Jun 2024 16:17:59.193 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 16:17:59.284 * Background saving terminated with success -58896:M 05 Jun 2024 16:35:17.999 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 16:35:18.002 * Background saving started by pid 83723 -83723:C 05 Jun 2024 16:35:18.010 * DB saved on disk -83723:C 05 Jun 2024 16:35:18.011 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 16:35:18.103 * Background saving terminated with success -58896:M 05 Jun 2024 16:43:22.260 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 16:43:22.261 * Background saving started by pid 84583 -84583:C 05 Jun 2024 16:43:22.275 * DB saved on disk -84583:C 05 Jun 2024 16:43:22.278 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 16:43:22.362 * Background saving terminated with success -58896:M 05 Jun 2024 16:48:23.046 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 16:48:23.047 * Background saving started by pid 85131 -85131:C 05 Jun 2024 16:48:23.065 * DB saved on disk -85131:C 05 Jun 2024 16:48:23.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 16:48:23.148 * Background saving terminated with success -58896:M 05 Jun 2024 17:24:20.810 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 17:24:20.813 * Background saving started by pid 90105 -90105:C 05 Jun 2024 17:24:20.823 * DB saved on disk -90105:C 05 Jun 2024 17:24:20.826 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 17:24:20.914 * Background saving terminated with success -58896:M 05 Jun 2024 17:38:07.895 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 17:38:07.898 * Background saving started by pid 91506 -91506:C 05 Jun 2024 17:38:07.907 * DB saved on disk -91506:C 05 Jun 2024 17:38:07.907 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 17:38:07.998 * Background saving terminated with success -58896:M 05 Jun 2024 17:43:08.028 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 17:43:08.031 * Background saving started by pid 92110 -92110:C 05 Jun 2024 17:43:08.047 * DB saved on disk -92110:C 05 Jun 2024 17:43:08.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 17:43:08.133 * Background saving terminated with success -58896:M 05 Jun 2024 17:48:09.040 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 17:48:09.042 * Background saving started by pid 92684 -92684:C 05 Jun 2024 17:48:09.056 * DB saved on disk -92684:C 05 Jun 2024 17:48:09.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 17:48:09.144 * Background saving terminated with success -58896:M 05 Jun 2024 17:53:10.043 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 17:53:10.045 * Background saving started by pid 93293 -93293:C 05 Jun 2024 17:53:10.054 * DB saved on disk -93293:C 05 Jun 2024 17:53:10.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 17:53:10.146 * Background saving terminated with success -58896:M 05 Jun 2024 17:58:11.081 * 100 changes in 300 seconds. Saving... -58896:M 05 Jun 2024 17:58:11.083 * Background saving started by pid 93757 -93757:C 05 Jun 2024 17:58:11.096 * DB saved on disk -93757:C 05 Jun 2024 17:58:11.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 05 Jun 2024 17:58:11.186 * Background saving terminated with success -58896:M 07 Jun 2024 16:39:41.351 * 1 changes in 3600 seconds. Saving... -58896:M 07 Jun 2024 16:39:41.353 * Background saving started by pid 27460 -27460:C 07 Jun 2024 16:39:41.369 * DB saved on disk -27460:C 07 Jun 2024 16:39:41.370 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 16:39:41.454 * Background saving terminated with success -58896:M 07 Jun 2024 16:44:42.066 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 16:44:42.071 * Background saving started by pid 28358 -28358:C 07 Jun 2024 16:44:42.082 * DB saved on disk -28358:C 07 Jun 2024 16:44:42.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 16:44:42.173 * Background saving terminated with success -58896:M 07 Jun 2024 17:16:01.732 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 17:16:01.734 * Background saving started by pid 33049 -33049:C 07 Jun 2024 17:16:01.746 * DB saved on disk -33049:C 07 Jun 2024 17:16:01.746 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 17:16:01.835 * Background saving terminated with success -58896:M 07 Jun 2024 17:21:02.052 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 17:21:02.059 * Background saving started by pid 33638 -33638:C 07 Jun 2024 17:21:02.070 * DB saved on disk -33638:C 07 Jun 2024 17:21:02.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 17:21:02.161 * Background saving terminated with success -58896:M 07 Jun 2024 17:33:38.484 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 17:33:38.486 * Background saving started by pid 35103 -35103:C 07 Jun 2024 17:33:38.495 * DB saved on disk -35103:C 07 Jun 2024 17:33:38.495 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 17:33:38.587 * Background saving terminated with success -58896:M 07 Jun 2024 17:38:39.030 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 17:38:39.031 * Background saving started by pid 35753 -35753:C 07 Jun 2024 17:38:39.044 * DB saved on disk -35753:C 07 Jun 2024 17:38:39.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 17:38:39.132 * Background saving terminated with success -58896:M 07 Jun 2024 17:43:40.049 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 17:43:40.051 * Background saving started by pid 36373 -36373:C 07 Jun 2024 17:43:40.062 * DB saved on disk -36373:C 07 Jun 2024 17:43:40.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 17:43:40.152 * Background saving terminated with success -58896:M 07 Jun 2024 17:49:19.866 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 17:49:19.867 * Background saving started by pid 36987 -36987:C 07 Jun 2024 17:49:19.874 * DB saved on disk -36987:C 07 Jun 2024 17:49:19.875 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 17:49:19.967 * Background saving terminated with success -58896:M 07 Jun 2024 17:54:20.070 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 17:54:20.074 * Background saving started by pid 37622 -37622:C 07 Jun 2024 17:54:20.087 * DB saved on disk -37622:C 07 Jun 2024 17:54:20.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 17:54:20.178 * Background saving terminated with success -58896:M 07 Jun 2024 18:00:52.446 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 18:00:52.448 * Background saving started by pid 38338 -38338:C 07 Jun 2024 18:00:52.458 * DB saved on disk -38338:C 07 Jun 2024 18:00:52.460 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 18:00:52.548 * Background saving terminated with success -58896:M 07 Jun 2024 18:05:53.016 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 18:05:53.018 * Background saving started by pid 39003 -39003:C 07 Jun 2024 18:05:53.032 * DB saved on disk -39003:C 07 Jun 2024 18:05:53.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 18:05:53.119 * Background saving terminated with success -58896:M 07 Jun 2024 18:10:54.046 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 18:10:54.047 * Background saving started by pid 39675 -39675:C 07 Jun 2024 18:10:54.071 * DB saved on disk -39675:C 07 Jun 2024 18:10:54.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 18:10:54.149 * Background saving terminated with success -58896:M 07 Jun 2024 18:22:32.800 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 18:22:32.801 * Background saving started by pid 40966 -40966:C 07 Jun 2024 18:22:32.812 * DB saved on disk -40966:C 07 Jun 2024 18:22:32.813 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 18:22:32.904 * Background saving terminated with success -58896:M 07 Jun 2024 18:27:33.013 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 18:27:33.013 * Background saving started by pid 41713 -41713:C 07 Jun 2024 18:27:33.026 * DB saved on disk -41713:C 07 Jun 2024 18:27:33.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 18:27:33.115 * Background saving terminated with success -58896:M 07 Jun 2024 18:32:34.020 * 100 changes in 300 seconds. Saving... -58896:M 07 Jun 2024 18:32:34.022 * Background saving started by pid 42366 -42366:C 07 Jun 2024 18:32:34.039 * DB saved on disk -42366:C 07 Jun 2024 18:32:34.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 07 Jun 2024 18:32:34.124 * Background saving terminated with success -58896:M 09 Jun 2024 01:21:17.009 * 1 changes in 3600 seconds. Saving... -58896:M 09 Jun 2024 01:21:17.010 * Background saving started by pid 51967 -51967:C 09 Jun 2024 01:21:17.025 * DB saved on disk -51967:C 09 Jun 2024 01:21:17.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:21:17.111 * Background saving terminated with success -58896:M 09 Jun 2024 01:26:18.067 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 01:26:18.068 * Background saving started by pid 52613 -52613:C 09 Jun 2024 01:26:18.076 * DB saved on disk -52613:C 09 Jun 2024 01:26:18.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:26:18.169 * Background saving terminated with success -58896:M 09 Jun 2024 01:31:19.072 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 01:31:19.074 * Background saving started by pid 53131 -53131:C 09 Jun 2024 01:31:19.092 * DB saved on disk -53131:C 09 Jun 2024 01:31:19.094 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:31:19.176 * Background saving terminated with success -58896:M 09 Jun 2024 01:36:20.080 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 01:36:20.083 * Background saving started by pid 53704 -53704:C 09 Jun 2024 01:36:20.094 * DB saved on disk -53704:C 09 Jun 2024 01:36:20.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:36:20.185 * Background saving terminated with success -58896:M 09 Jun 2024 01:41:21.074 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 01:41:21.076 * Background saving started by pid 54385 -54385:C 09 Jun 2024 01:41:21.090 * DB saved on disk -54385:C 09 Jun 2024 01:41:21.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:41:21.179 * Background saving terminated with success -58896:M 09 Jun 2024 01:46:22.080 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 01:46:22.083 * Background saving started by pid 54916 -54916:C 09 Jun 2024 01:46:22.102 * DB saved on disk -54916:C 09 Jun 2024 01:46:22.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:46:22.184 * Background saving terminated with success -58896:M 09 Jun 2024 01:51:23.049 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 01:51:23.052 * Background saving started by pid 55511 -55511:C 09 Jun 2024 01:51:23.064 * DB saved on disk -55511:C 09 Jun 2024 01:51:23.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:51:23.152 * Background saving terminated with success -58896:M 09 Jun 2024 01:59:40.782 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 01:59:40.783 * Background saving started by pid 56315 -56315:C 09 Jun 2024 01:59:40.795 * DB saved on disk -56315:C 09 Jun 2024 01:59:40.795 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 01:59:40.883 * Background saving terminated with success -58896:M 09 Jun 2024 02:04:41.092 * 100 changes in 300 seconds. Saving... -58896:M 09 Jun 2024 02:04:41.096 * Background saving started by pid 56862 -56862:C 09 Jun 2024 02:04:41.111 * DB saved on disk -56862:C 09 Jun 2024 02:04:41.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 09 Jun 2024 02:04:41.198 * Background saving terminated with success -58896:M 11 Jun 2024 13:19:27.398 * 1 changes in 3600 seconds. Saving... -58896:M 11 Jun 2024 13:19:27.402 * Background saving started by pid 99129 -99129:C 11 Jun 2024 13:19:27.435 * DB saved on disk -99129:C 11 Jun 2024 13:19:27.437 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:19:27.503 * Background saving terminated with success -58896:M 11 Jun 2024 13:24:28.020 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 13:24:28.021 * Background saving started by pid 222 -222:C 11 Jun 2024 13:24:28.037 * DB saved on disk -222:C 11 Jun 2024 13:24:28.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:24:28.127 * Background saving terminated with success -58896:M 11 Jun 2024 13:29:29.094 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 13:29:29.096 * Background saving started by pid 1314 -1314:C 11 Jun 2024 13:29:29.108 * DB saved on disk -1314:C 11 Jun 2024 13:29:29.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:29:29.197 * Background saving terminated with success -58896:M 11 Jun 2024 13:34:30.038 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 13:34:30.042 * Background saving started by pid 1927 -1927:C 11 Jun 2024 13:34:30.054 * DB saved on disk -1927:C 11 Jun 2024 13:34:30.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:34:30.144 * Background saving terminated with success -58896:M 11 Jun 2024 13:39:31.059 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 13:39:31.063 * Background saving started by pid 2516 -2516:C 11 Jun 2024 13:39:31.100 * DB saved on disk -2516:C 11 Jun 2024 13:39:31.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:39:31.164 * Background saving terminated with success -58896:M 11 Jun 2024 13:44:32.023 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 13:44:32.024 * Background saving started by pid 3067 -3067:C 11 Jun 2024 13:44:32.033 * DB saved on disk -3067:C 11 Jun 2024 13:44:32.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:44:32.125 * Background saving terminated with success -58896:M 11 Jun 2024 13:51:40.611 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 13:51:40.614 * Background saving started by pid 3795 -3795:C 11 Jun 2024 13:51:40.627 * DB saved on disk -3795:C 11 Jun 2024 13:51:40.628 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:51:40.715 * Background saving terminated with success -58896:M 11 Jun 2024 13:56:41.066 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 13:56:41.069 * Background saving started by pid 4441 -4441:C 11 Jun 2024 13:56:41.091 * DB saved on disk -4441:C 11 Jun 2024 13:56:41.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 13:56:41.170 * Background saving terminated with success -58896:M 11 Jun 2024 14:01:42.031 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:01:42.035 * Background saving started by pid 5198 -5198:C 11 Jun 2024 14:01:42.058 * DB saved on disk -5198:C 11 Jun 2024 14:01:42.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:01:42.137 * Background saving terminated with success -58896:M 11 Jun 2024 14:08:57.215 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:08:57.217 * Background saving started by pid 5893 -5893:C 11 Jun 2024 14:08:57.230 * DB saved on disk -5893:C 11 Jun 2024 14:08:57.232 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:08:57.319 * Background saving terminated with success -58896:M 11 Jun 2024 14:13:58.030 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:13:58.034 * Background saving started by pid 6544 -6544:C 11 Jun 2024 14:13:58.061 * DB saved on disk -6544:C 11 Jun 2024 14:13:58.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:13:58.142 * Background saving terminated with success -58896:M 11 Jun 2024 14:18:59.057 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:18:59.060 * Background saving started by pid 7250 -7250:C 11 Jun 2024 14:18:59.074 * DB saved on disk -7250:C 11 Jun 2024 14:18:59.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:18:59.164 * Background saving terminated with success -58896:M 11 Jun 2024 14:24:00.000 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:24:00.003 * Background saving started by pid 7777 -7777:C 11 Jun 2024 14:24:00.017 * DB saved on disk -7777:C 11 Jun 2024 14:24:00.018 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:24:00.105 * Background saving terminated with success -58896:M 11 Jun 2024 14:29:01.003 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:29:01.005 * Background saving started by pid 9446 -9446:C 11 Jun 2024 14:29:01.022 * DB saved on disk -9446:C 11 Jun 2024 14:29:01.023 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:29:01.106 * Background saving terminated with success -58896:M 11 Jun 2024 14:38:46.573 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:38:46.575 * Background saving started by pid 16553 -16553:C 11 Jun 2024 14:38:46.587 * DB saved on disk -16553:C 11 Jun 2024 14:38:46.587 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:38:46.677 * Background saving terminated with success -58896:M 11 Jun 2024 14:43:47.042 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:43:47.046 * Background saving started by pid 18767 -18767:C 11 Jun 2024 14:43:47.064 * DB saved on disk -18767:C 11 Jun 2024 14:43:47.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:43:47.149 * Background saving terminated with success -58896:M 11 Jun 2024 14:48:48.071 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 14:48:48.072 * Background saving started by pid 19508 -19508:C 11 Jun 2024 14:48:48.105 * DB saved on disk -19508:C 11 Jun 2024 14:48:48.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 14:48:48.173 * Background saving terminated with success -58896:M 11 Jun 2024 15:55:55.546 * 1 changes in 3600 seconds. Saving... -58896:M 11 Jun 2024 15:55:55.665 * Background saving started by pid 20200 -20200:C 11 Jun 2024 15:55:55.673 * DB saved on disk -20200:C 11 Jun 2024 15:55:55.674 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 15:55:55.766 * Background saving terminated with success -58896:M 11 Jun 2024 16:55:56.028 * 1 changes in 3600 seconds. Saving... -58896:M 11 Jun 2024 16:55:56.029 * Background saving started by pid 26736 -26736:C 11 Jun 2024 16:55:56.039 * DB saved on disk -26736:C 11 Jun 2024 16:55:56.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 16:55:56.130 * Background saving terminated with success -58896:M 11 Jun 2024 17:00:57.094 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:00:57.096 * Background saving started by pid 27696 -27696:C 11 Jun 2024 17:00:57.110 * DB saved on disk -27696:C 11 Jun 2024 17:00:57.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:00:57.197 * Background saving terminated with success -58896:M 11 Jun 2024 17:05:58.022 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:05:58.028 * Background saving started by pid 28649 -28649:C 11 Jun 2024 17:05:58.040 * DB saved on disk -28649:C 11 Jun 2024 17:05:58.042 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:05:58.130 * Background saving terminated with success -58896:M 11 Jun 2024 17:10:59.011 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:10:59.013 * Background saving started by pid 29517 -29517:C 11 Jun 2024 17:10:59.028 * DB saved on disk -29517:C 11 Jun 2024 17:10:59.029 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:10:59.114 * Background saving terminated with success -58896:M 11 Jun 2024 17:16:00.031 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:16:00.033 * Background saving started by pid 30399 -30399:C 11 Jun 2024 17:16:00.044 * DB saved on disk -30399:C 11 Jun 2024 17:16:00.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:16:00.134 * Background saving terminated with success -58896:M 11 Jun 2024 17:21:01.099 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:21:01.102 * Background saving started by pid 34058 -34058:C 11 Jun 2024 17:21:01.136 * DB saved on disk -34058:C 11 Jun 2024 17:21:01.136 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:21:01.204 * Background saving terminated with success -58896:M 11 Jun 2024 17:26:02.077 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:26:02.078 * Background saving started by pid 35339 -35339:C 11 Jun 2024 17:26:02.092 * DB saved on disk -35339:C 11 Jun 2024 17:26:02.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:26:02.179 * Background saving terminated with success -58896:M 11 Jun 2024 17:31:03.024 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:31:03.027 * Background saving started by pid 36164 -36164:C 11 Jun 2024 17:31:03.044 * DB saved on disk -36164:C 11 Jun 2024 17:31:03.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:31:03.129 * Background saving terminated with success -58896:M 11 Jun 2024 17:36:04.080 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:36:04.083 * Background saving started by pid 37017 -37017:C 11 Jun 2024 17:36:04.100 * DB saved on disk -37017:C 11 Jun 2024 17:36:04.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:36:04.184 * Background saving terminated with success -58896:M 11 Jun 2024 17:41:05.070 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:41:05.071 * Background saving started by pid 37887 -37887:C 11 Jun 2024 17:41:05.096 * DB saved on disk -37887:C 11 Jun 2024 17:41:05.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:41:05.173 * Background saving terminated with success -58896:M 11 Jun 2024 17:46:06.098 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:46:06.099 * Background saving started by pid 38777 -38777:C 11 Jun 2024 17:46:06.110 * DB saved on disk -38777:C 11 Jun 2024 17:46:06.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:46:06.200 * Background saving terminated with success -58896:M 11 Jun 2024 17:51:07.052 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:51:07.054 * Background saving started by pid 39630 -39630:C 11 Jun 2024 17:51:07.065 * DB saved on disk -39630:C 11 Jun 2024 17:51:07.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:51:07.156 * Background saving terminated with success -58896:M 11 Jun 2024 17:56:08.017 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 17:56:08.020 * Background saving started by pid 40590 -40590:C 11 Jun 2024 17:56:08.031 * DB saved on disk -40590:C 11 Jun 2024 17:56:08.032 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 17:56:08.122 * Background saving terminated with success -58896:M 11 Jun 2024 18:01:09.041 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:01:09.044 * Background saving started by pid 41552 -41552:C 11 Jun 2024 18:01:09.054 * DB saved on disk -41552:C 11 Jun 2024 18:01:09.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:01:09.145 * Background saving terminated with success -58896:M 11 Jun 2024 18:06:10.031 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:06:10.034 * Background saving started by pid 42635 -42635:C 11 Jun 2024 18:06:10.047 * DB saved on disk -42635:C 11 Jun 2024 18:06:10.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:06:10.136 * Background saving terminated with success -58896:M 11 Jun 2024 18:11:11.043 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:11:11.046 * Background saving started by pid 43579 -43579:C 11 Jun 2024 18:11:11.061 * DB saved on disk -43579:C 11 Jun 2024 18:11:11.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:11:11.147 * Background saving terminated with success -58896:M 11 Jun 2024 18:16:12.053 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:16:12.056 * Background saving started by pid 44500 -44500:C 11 Jun 2024 18:16:12.068 * DB saved on disk -44500:C 11 Jun 2024 18:16:12.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:16:12.157 * Background saving terminated with success -58896:M 11 Jun 2024 18:21:13.023 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:21:13.027 * Background saving started by pid 45459 -45459:C 11 Jun 2024 18:21:13.054 * DB saved on disk -45459:C 11 Jun 2024 18:21:13.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:21:13.128 * Background saving terminated with success -58896:M 11 Jun 2024 18:26:14.079 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:26:14.080 * Background saving started by pid 46446 -46446:C 11 Jun 2024 18:26:14.095 * DB saved on disk -46446:C 11 Jun 2024 18:26:14.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:26:14.181 * Background saving terminated with success -58896:M 11 Jun 2024 18:31:15.020 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:31:15.023 * Background saving started by pid 47369 -47369:C 11 Jun 2024 18:31:15.033 * DB saved on disk -47369:C 11 Jun 2024 18:31:15.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:31:15.125 * Background saving terminated with success -58896:M 11 Jun 2024 18:44:26.665 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:44:26.668 * Background saving started by pid 47820 -47820:C 11 Jun 2024 18:44:26.794 * DB saved on disk -47820:C 11 Jun 2024 18:44:26.795 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:44:26.870 * Background saving terminated with success -58896:M 11 Jun 2024 18:51:12.584 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 18:51:12.586 * Background saving started by pid 47950 -47950:C 11 Jun 2024 18:51:12.599 * DB saved on disk -47950:C 11 Jun 2024 18:51:12.600 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 18:51:12.689 * Background saving terminated with success -58896:M 11 Jun 2024 19:02:27.776 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:02:27.778 * Background saving started by pid 48131 -48131:C 11 Jun 2024 19:02:27.802 * DB saved on disk -48131:C 11 Jun 2024 19:02:27.804 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:02:27.881 * Background saving terminated with success -58896:M 11 Jun 2024 19:07:28.043 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:07:28.045 * Background saving started by pid 48889 -48889:C 11 Jun 2024 19:07:28.056 * DB saved on disk -48889:C 11 Jun 2024 19:07:28.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:07:28.147 * Background saving terminated with success -58896:M 11 Jun 2024 19:12:29.059 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:12:29.061 * Background saving started by pid 49675 -49675:C 11 Jun 2024 19:12:29.074 * DB saved on disk -49675:C 11 Jun 2024 19:12:29.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:12:29.165 * Background saving terminated with success -58896:M 11 Jun 2024 19:17:30.038 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:17:30.039 * Background saving started by pid 50454 -50454:C 11 Jun 2024 19:17:30.048 * DB saved on disk -50454:C 11 Jun 2024 19:17:30.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:17:30.141 * Background saving terminated with success -58896:M 11 Jun 2024 19:22:31.015 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:22:31.019 * Background saving started by pid 51066 -51066:C 11 Jun 2024 19:22:31.034 * DB saved on disk -51066:C 11 Jun 2024 19:22:31.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:22:31.121 * Background saving terminated with success -58896:M 11 Jun 2024 19:27:32.083 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:27:32.086 * Background saving started by pid 51963 -51963:C 11 Jun 2024 19:27:32.100 * DB saved on disk -51963:C 11 Jun 2024 19:27:32.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:27:32.187 * Background saving terminated with success -58896:M 11 Jun 2024 19:32:33.008 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:32:33.010 * Background saving started by pid 52753 -52753:C 11 Jun 2024 19:32:33.021 * DB saved on disk -52753:C 11 Jun 2024 19:32:33.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:32:33.111 * Background saving terminated with success -58896:M 11 Jun 2024 19:37:34.032 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:37:34.034 * Background saving started by pid 54020 -54020:C 11 Jun 2024 19:37:34.047 * DB saved on disk -54020:C 11 Jun 2024 19:37:34.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:37:34.135 * Background saving terminated with success -58896:M 11 Jun 2024 19:42:35.021 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:42:35.025 * Background saving started by pid 55025 -55025:C 11 Jun 2024 19:42:35.055 * DB saved on disk -55025:C 11 Jun 2024 19:42:35.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:42:35.126 * Background saving terminated with success -58896:M 11 Jun 2024 19:47:36.075 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:47:36.077 * Background saving started by pid 55926 -55926:C 11 Jun 2024 19:47:36.091 * DB saved on disk -55926:C 11 Jun 2024 19:47:36.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:47:36.178 * Background saving terminated with success -58896:M 11 Jun 2024 19:52:37.054 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:52:37.061 * Background saving started by pid 56735 -56735:C 11 Jun 2024 19:52:37.078 * DB saved on disk -56735:C 11 Jun 2024 19:52:37.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:52:37.163 * Background saving terminated with success -58896:M 11 Jun 2024 19:57:38.075 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 19:57:38.077 * Background saving started by pid 57603 -57603:C 11 Jun 2024 19:57:38.092 * DB saved on disk -57603:C 11 Jun 2024 19:57:38.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 19:57:38.178 * Background saving terminated with success -58896:M 11 Jun 2024 20:02:39.013 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:02:39.015 * Background saving started by pid 58545 -58545:C 11 Jun 2024 20:02:39.028 * DB saved on disk -58545:C 11 Jun 2024 20:02:39.029 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:02:39.116 * Background saving terminated with success -58896:M 11 Jun 2024 20:07:40.055 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:07:40.057 * Background saving started by pid 59368 -59368:C 11 Jun 2024 20:07:40.077 * DB saved on disk -59368:C 11 Jun 2024 20:07:40.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:07:40.159 * Background saving terminated with success -58896:M 11 Jun 2024 20:12:41.003 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:12:41.005 * Background saving started by pid 60133 -60133:C 11 Jun 2024 20:12:41.021 * DB saved on disk -60133:C 11 Jun 2024 20:12:41.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:12:41.107 * Background saving terminated with success -58896:M 11 Jun 2024 20:17:42.079 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:17:42.081 * Background saving started by pid 60949 -60949:C 11 Jun 2024 20:17:42.091 * DB saved on disk -60949:C 11 Jun 2024 20:17:42.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:17:42.181 * Background saving terminated with success -58896:M 11 Jun 2024 20:22:43.066 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:22:43.067 * Background saving started by pid 61718 -61718:C 11 Jun 2024 20:22:43.077 * DB saved on disk -61718:C 11 Jun 2024 20:22:43.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:22:43.167 * Background saving terminated with success -58896:M 11 Jun 2024 20:27:44.036 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:27:44.037 * Background saving started by pid 62501 -62501:C 11 Jun 2024 20:27:44.047 * DB saved on disk -62501:C 11 Jun 2024 20:27:44.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:27:44.138 * Background saving terminated with success -58896:M 11 Jun 2024 20:32:45.098 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:32:45.099 * Background saving started by pid 63324 -63324:C 11 Jun 2024 20:32:45.112 * DB saved on disk -63324:C 11 Jun 2024 20:32:45.113 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:32:45.199 * Background saving terminated with success -58896:M 11 Jun 2024 20:37:46.011 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:37:46.014 * Background saving started by pid 64283 -64283:C 11 Jun 2024 20:37:46.023 * DB saved on disk -64283:C 11 Jun 2024 20:37:46.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:37:46.115 * Background saving terminated with success -58896:M 11 Jun 2024 20:42:47.025 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:42:47.028 * Background saving started by pid 65146 -65146:C 11 Jun 2024 20:42:47.036 * DB saved on disk -65146:C 11 Jun 2024 20:42:47.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:42:47.129 * Background saving terminated with success -58896:M 11 Jun 2024 20:47:48.097 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:47:48.099 * Background saving started by pid 65963 -65963:C 11 Jun 2024 20:47:48.114 * DB saved on disk -65963:C 11 Jun 2024 20:47:48.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:47:48.200 * Background saving terminated with success -58896:M 11 Jun 2024 20:52:49.080 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:52:49.081 * Background saving started by pid 66721 -66721:C 11 Jun 2024 20:52:49.089 * DB saved on disk -66721:C 11 Jun 2024 20:52:49.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:52:49.182 * Background saving terminated with success -58896:M 11 Jun 2024 20:57:50.072 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 20:57:50.074 * Background saving started by pid 67533 -67533:C 11 Jun 2024 20:57:50.086 * DB saved on disk -67533:C 11 Jun 2024 20:57:50.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 20:57:50.175 * Background saving terminated with success -58896:M 11 Jun 2024 21:02:51.093 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:02:51.096 * Background saving started by pid 68492 -68492:C 11 Jun 2024 21:02:51.104 * DB saved on disk -68492:C 11 Jun 2024 21:02:51.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:02:51.197 * Background saving terminated with success -58896:M 11 Jun 2024 21:07:52.069 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:07:52.071 * Background saving started by pid 69301 -69301:C 11 Jun 2024 21:07:52.080 * DB saved on disk -69301:C 11 Jun 2024 21:07:52.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:07:52.172 * Background saving terminated with success -58896:M 11 Jun 2024 21:12:53.015 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:12:53.016 * Background saving started by pid 70023 -70023:C 11 Jun 2024 21:12:53.026 * DB saved on disk -70023:C 11 Jun 2024 21:12:53.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:12:53.117 * Background saving terminated with success -58896:M 11 Jun 2024 21:17:54.036 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:17:54.039 * Background saving started by pid 70808 -70808:C 11 Jun 2024 21:17:54.049 * DB saved on disk -70808:C 11 Jun 2024 21:17:54.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:17:54.139 * Background saving terminated with success -58896:M 11 Jun 2024 21:22:55.017 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:22:55.020 * Background saving started by pid 71619 -71619:C 11 Jun 2024 21:22:55.034 * DB saved on disk -71619:C 11 Jun 2024 21:22:55.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:22:55.122 * Background saving terminated with success -58896:M 11 Jun 2024 21:27:56.099 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:27:56.101 * Background saving started by pid 72347 -72347:C 11 Jun 2024 21:27:56.110 * DB saved on disk -72347:C 11 Jun 2024 21:27:56.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:27:56.204 * Background saving terminated with success -58896:M 11 Jun 2024 21:32:57.085 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:32:57.087 * Background saving started by pid 73084 -73084:C 11 Jun 2024 21:32:57.097 * DB saved on disk -73084:C 11 Jun 2024 21:32:57.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:32:57.190 * Background saving terminated with success -58896:M 11 Jun 2024 21:37:58.093 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:37:58.096 * Background saving started by pid 73831 -73831:C 11 Jun 2024 21:37:58.111 * DB saved on disk -73831:C 11 Jun 2024 21:37:58.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:37:58.198 * Background saving terminated with success -58896:M 11 Jun 2024 21:42:59.011 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:42:59.013 * Background saving started by pid 74560 -74560:C 11 Jun 2024 21:42:59.029 * DB saved on disk -74560:C 11 Jun 2024 21:42:59.032 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:42:59.114 * Background saving terminated with success -58896:M 11 Jun 2024 21:48:00.014 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:48:00.016 * Background saving started by pid 75300 -75300:C 11 Jun 2024 21:48:00.033 * DB saved on disk -75300:C 11 Jun 2024 21:48:00.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:48:00.118 * Background saving terminated with success -58896:M 11 Jun 2024 21:53:01.092 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:53:01.094 * Background saving started by pid 76026 -76026:C 11 Jun 2024 21:53:01.107 * DB saved on disk -76026:C 11 Jun 2024 21:53:01.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:53:01.197 * Background saving terminated with success -58896:M 11 Jun 2024 21:58:02.084 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 21:58:02.087 * Background saving started by pid 76774 -76774:C 11 Jun 2024 21:58:02.099 * DB saved on disk -76774:C 11 Jun 2024 21:58:02.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 21:58:02.188 * Background saving terminated with success -58896:M 11 Jun 2024 22:03:03.053 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:03:03.057 * Background saving started by pid 77506 -77506:C 11 Jun 2024 22:03:03.079 * DB saved on disk -77506:C 11 Jun 2024 22:03:03.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:03:03.158 * Background saving terminated with success -58896:M 11 Jun 2024 22:08:04.061 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:08:04.065 * Background saving started by pid 78241 -78241:C 11 Jun 2024 22:08:04.080 * DB saved on disk -78241:C 11 Jun 2024 22:08:04.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:08:04.168 * Background saving terminated with success -58896:M 11 Jun 2024 22:13:05.038 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:13:05.038 * Background saving started by pid 78971 -78971:C 11 Jun 2024 22:13:05.049 * DB saved on disk -78971:C 11 Jun 2024 22:13:05.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:13:05.141 * Background saving terminated with success -58896:M 11 Jun 2024 22:18:06.009 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:18:06.012 * Background saving started by pid 79712 -79712:C 11 Jun 2024 22:18:06.031 * DB saved on disk -79712:C 11 Jun 2024 22:18:06.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:18:06.115 * Background saving terminated with success -58896:M 11 Jun 2024 22:23:07.017 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:23:07.018 * Background saving started by pid 80463 -80463:C 11 Jun 2024 22:23:07.030 * DB saved on disk -80463:C 11 Jun 2024 22:23:07.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:23:07.121 * Background saving terminated with success -58896:M 11 Jun 2024 22:28:08.091 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:28:08.095 * Background saving started by pid 81195 -81195:C 11 Jun 2024 22:28:08.126 * DB saved on disk -81195:C 11 Jun 2024 22:28:08.127 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:28:08.197 * Background saving terminated with success -58896:M 11 Jun 2024 22:33:09.069 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:33:09.073 * Background saving started by pid 81924 -81924:C 11 Jun 2024 22:33:09.090 * DB saved on disk -81924:C 11 Jun 2024 22:33:09.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:33:09.176 * Background saving terminated with success -58896:M 11 Jun 2024 22:38:10.051 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:38:10.056 * Background saving started by pid 82688 -82688:C 11 Jun 2024 22:38:10.073 * DB saved on disk -82688:C 11 Jun 2024 22:38:10.074 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:38:10.158 * Background saving terminated with success -58896:M 11 Jun 2024 22:43:11.058 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:43:11.062 * Background saving started by pid 83419 -83419:C 11 Jun 2024 22:43:11.085 * DB saved on disk -83419:C 11 Jun 2024 22:43:11.086 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:43:11.165 * Background saving terminated with success -58896:M 11 Jun 2024 22:48:12.050 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:48:12.055 * Background saving started by pid 84242 -84242:C 11 Jun 2024 22:48:12.071 * DB saved on disk -84242:C 11 Jun 2024 22:48:12.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:48:12.156 * Background saving terminated with success -58896:M 11 Jun 2024 22:53:13.061 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:53:13.064 * Background saving started by pid 84972 -84972:C 11 Jun 2024 22:53:13.080 * DB saved on disk -84972:C 11 Jun 2024 22:53:13.082 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:53:13.167 * Background saving terminated with success -58896:M 11 Jun 2024 22:58:14.056 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 22:58:14.059 * Background saving started by pid 85710 -85710:C 11 Jun 2024 22:58:14.075 * DB saved on disk -85710:C 11 Jun 2024 22:58:14.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 22:58:14.161 * Background saving terminated with success -58896:M 11 Jun 2024 23:03:15.013 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:03:15.014 * Background saving started by pid 86445 -86445:C 11 Jun 2024 23:03:15.027 * DB saved on disk -86445:C 11 Jun 2024 23:03:15.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:03:15.116 * Background saving terminated with success -58896:M 11 Jun 2024 23:08:16.036 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:08:16.038 * Background saving started by pid 87172 -87172:C 11 Jun 2024 23:08:16.052 * DB saved on disk -87172:C 11 Jun 2024 23:08:16.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:08:16.138 * Background saving terminated with success -58896:M 11 Jun 2024 23:13:17.001 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:13:17.006 * Background saving started by pid 87901 -87901:C 11 Jun 2024 23:13:17.020 * DB saved on disk -87901:C 11 Jun 2024 23:13:17.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:13:17.109 * Background saving terminated with success -58896:M 11 Jun 2024 23:18:18.101 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:18:18.103 * Background saving started by pid 88646 -88646:C 11 Jun 2024 23:18:18.115 * DB saved on disk -88646:C 11 Jun 2024 23:18:18.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:18:18.205 * Background saving terminated with success -58896:M 11 Jun 2024 23:23:19.087 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:23:19.090 * Background saving started by pid 89375 -89375:C 11 Jun 2024 23:23:19.101 * DB saved on disk -89375:C 11 Jun 2024 23:23:19.103 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:23:19.192 * Background saving terminated with success -58896:M 11 Jun 2024 23:28:20.011 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:28:20.013 * Background saving started by pid 90105 -90105:C 11 Jun 2024 23:28:20.027 * DB saved on disk -90105:C 11 Jun 2024 23:28:20.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:28:20.115 * Background saving terminated with success -58896:M 11 Jun 2024 23:33:21.067 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:33:21.069 * Background saving started by pid 90839 -90839:C 11 Jun 2024 23:33:21.079 * DB saved on disk -90839:C 11 Jun 2024 23:33:21.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:33:21.170 * Background saving terminated with success -58896:M 11 Jun 2024 23:38:22.003 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:38:22.008 * Background saving started by pid 91662 -91662:C 11 Jun 2024 23:38:22.019 * DB saved on disk -91662:C 11 Jun 2024 23:38:22.019 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:38:22.111 * Background saving terminated with success -58896:M 11 Jun 2024 23:43:23.059 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:43:23.063 * Background saving started by pid 92434 -92434:C 11 Jun 2024 23:43:23.075 * DB saved on disk -92434:C 11 Jun 2024 23:43:23.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:43:23.165 * Background saving terminated with success -58896:M 11 Jun 2024 23:48:24.037 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:48:24.038 * Background saving started by pid 93164 -93164:C 11 Jun 2024 23:48:24.049 * DB saved on disk -93164:C 11 Jun 2024 23:48:24.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:48:24.142 * Background saving terminated with success -58896:M 11 Jun 2024 23:53:25.018 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:53:25.021 * Background saving started by pid 93965 -93965:C 11 Jun 2024 23:53:25.035 * DB saved on disk -93965:C 11 Jun 2024 23:53:25.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:53:25.123 * Background saving terminated with success -58896:M 11 Jun 2024 23:58:26.009 * 100 changes in 300 seconds. Saving... -58896:M 11 Jun 2024 23:58:26.011 * Background saving started by pid 94758 -94758:C 11 Jun 2024 23:58:26.025 * DB saved on disk -94758:C 11 Jun 2024 23:58:26.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 11 Jun 2024 23:58:26.112 * Background saving terminated with success -58896:M 12 Jun 2024 00:03:27.039 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:03:27.041 * Background saving started by pid 95491 -95491:C 12 Jun 2024 00:03:27.055 * DB saved on disk -95491:C 12 Jun 2024 00:03:27.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:03:27.142 * Background saving terminated with success -58896:M 12 Jun 2024 00:08:28.034 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:08:28.035 * Background saving started by pid 96284 -96284:C 12 Jun 2024 00:08:28.051 * DB saved on disk -96284:C 12 Jun 2024 00:08:28.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:08:28.136 * Background saving terminated with success -58896:M 12 Jun 2024 00:13:29.015 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:13:29.019 * Background saving started by pid 97696 -97696:C 12 Jun 2024 00:13:29.029 * DB saved on disk -97696:C 12 Jun 2024 00:13:29.030 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:13:29.120 * Background saving terminated with success -58896:M 12 Jun 2024 00:18:30.052 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:18:30.055 * Background saving started by pid 98669 -98669:C 12 Jun 2024 00:18:30.072 * DB saved on disk -98669:C 12 Jun 2024 00:18:30.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:18:30.157 * Background saving terminated with success -58896:M 12 Jun 2024 00:23:31.067 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:23:31.069 * Background saving started by pid 99666 -99666:C 12 Jun 2024 00:23:31.085 * DB saved on disk -99666:C 12 Jun 2024 00:23:31.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:23:31.169 * Background saving terminated with success -58896:M 12 Jun 2024 00:28:32.087 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:28:32.093 * Background saving started by pid 831 -831:C 12 Jun 2024 00:28:32.110 * DB saved on disk -831:C 12 Jun 2024 00:28:32.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:28:32.194 * Background saving terminated with success -58896:M 12 Jun 2024 00:33:33.077 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:33:33.079 * Background saving started by pid 1642 -1642:C 12 Jun 2024 00:33:33.099 * DB saved on disk -1642:C 12 Jun 2024 00:33:33.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:33:33.181 * Background saving terminated with success -58896:M 12 Jun 2024 00:38:34.030 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:38:34.032 * Background saving started by pid 2590 -2590:C 12 Jun 2024 00:38:34.045 * DB saved on disk -2590:C 12 Jun 2024 00:38:34.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:38:34.134 * Background saving terminated with success -58896:M 12 Jun 2024 00:43:35.021 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:43:35.024 * Background saving started by pid 3742 -3742:C 12 Jun 2024 00:43:35.037 * DB saved on disk -3742:C 12 Jun 2024 00:43:35.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:43:35.125 * Background saving terminated with success -58896:M 12 Jun 2024 00:48:36.015 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:48:36.018 * Background saving started by pid 4666 -4666:C 12 Jun 2024 00:48:36.030 * DB saved on disk -4666:C 12 Jun 2024 00:48:36.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:48:36.119 * Background saving terminated with success -58896:M 12 Jun 2024 00:53:37.025 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:53:37.027 * Background saving started by pid 5691 -5691:C 12 Jun 2024 00:53:37.042 * DB saved on disk -5691:C 12 Jun 2024 00:53:37.042 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:53:37.129 * Background saving terminated with success -58896:M 12 Jun 2024 00:58:38.050 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 00:58:38.054 * Background saving started by pid 6620 -6620:C 12 Jun 2024 00:58:38.065 * DB saved on disk -6620:C 12 Jun 2024 00:58:38.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 00:58:38.155 * Background saving terminated with success -58896:M 12 Jun 2024 01:03:39.073 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:03:39.075 * Background saving started by pid 7624 -7624:C 12 Jun 2024 01:03:39.101 * DB saved on disk -7624:C 12 Jun 2024 01:03:39.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:03:39.176 * Background saving terminated with success -58896:M 12 Jun 2024 01:08:40.009 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:08:40.012 * Background saving started by pid 8631 -8631:C 12 Jun 2024 01:08:40.025 * DB saved on disk -8631:C 12 Jun 2024 01:08:40.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:08:40.113 * Background saving terminated with success -58896:M 12 Jun 2024 01:20:43.620 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:20:43.625 * Background saving started by pid 10740 -10740:C 12 Jun 2024 01:20:43.650 * DB saved on disk -10740:C 12 Jun 2024 01:20:43.650 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:20:43.727 * Background saving terminated with success -58896:M 12 Jun 2024 01:25:44.086 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:25:44.089 * Background saving started by pid 11660 -11660:C 12 Jun 2024 01:25:44.101 * DB saved on disk -11660:C 12 Jun 2024 01:25:44.102 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:25:44.190 * Background saving terminated with success -58896:M 12 Jun 2024 01:30:45.057 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:30:45.059 * Background saving started by pid 12738 -12738:C 12 Jun 2024 01:30:45.066 * DB saved on disk -12738:C 12 Jun 2024 01:30:45.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:30:45.159 * Background saving terminated with success -58896:M 12 Jun 2024 01:35:46.087 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:35:46.088 * Background saving started by pid 13711 -13711:C 12 Jun 2024 01:35:46.099 * DB saved on disk -13711:C 12 Jun 2024 01:35:46.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:35:46.189 * Background saving terminated with success -58896:M 12 Jun 2024 01:40:47.061 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:40:47.062 * Background saving started by pid 14674 -14674:C 12 Jun 2024 01:40:47.069 * DB saved on disk -14674:C 12 Jun 2024 01:40:47.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:40:47.162 * Background saving terminated with success -58896:M 12 Jun 2024 01:45:48.078 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:45:48.082 * Background saving started by pid 18780 -18780:C 12 Jun 2024 01:45:48.103 * DB saved on disk -18780:C 12 Jun 2024 01:45:48.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:45:48.184 * Background saving terminated with success -58896:M 12 Jun 2024 01:50:49.025 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:50:49.026 * Background saving started by pid 19686 -19686:C 12 Jun 2024 01:50:49.038 * DB saved on disk -19686:C 12 Jun 2024 01:50:49.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:50:49.127 * Background saving terminated with success -58896:M 12 Jun 2024 01:56:34.702 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 01:56:34.702 * Background saving started by pid 20738 -20738:C 12 Jun 2024 01:56:34.741 * DB saved on disk -20738:C 12 Jun 2024 01:56:34.744 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 01:56:34.803 * Background saving terminated with success -58896:M 12 Jun 2024 02:01:35.007 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:01:35.008 * Background saving started by pid 21912 -21912:C 12 Jun 2024 02:01:35.017 * DB saved on disk -21912:C 12 Jun 2024 02:01:35.018 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:01:35.108 * Background saving terminated with success -58896:M 12 Jun 2024 02:06:36.095 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:06:36.097 * Background saving started by pid 23306 -23306:C 12 Jun 2024 02:06:36.103 * DB saved on disk -23306:C 12 Jun 2024 02:06:36.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:06:36.197 * Background saving terminated with success -58896:M 12 Jun 2024 02:11:37.037 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:11:37.038 * Background saving started by pid 24623 -24623:C 12 Jun 2024 02:11:37.049 * DB saved on disk -24623:C 12 Jun 2024 02:11:37.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:11:37.138 * Background saving terminated with success -58896:M 12 Jun 2024 02:16:38.032 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:16:38.035 * Background saving started by pid 28935 -28935:C 12 Jun 2024 02:16:38.056 * DB saved on disk -28935:C 12 Jun 2024 02:16:38.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:16:38.136 * Background saving terminated with success -58896:M 12 Jun 2024 02:21:39.065 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:21:39.068 * Background saving started by pid 30316 -30316:C 12 Jun 2024 02:21:39.089 * DB saved on disk -30316:C 12 Jun 2024 02:21:39.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:21:39.169 * Background saving terminated with success -58896:M 12 Jun 2024 02:26:40.088 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:26:40.092 * Background saving started by pid 31108 -31108:C 12 Jun 2024 02:26:40.115 * DB saved on disk -31108:C 12 Jun 2024 02:26:40.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:26:40.192 * Background saving terminated with success -58896:M 12 Jun 2024 02:31:41.089 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:31:41.090 * Background saving started by pid 32709 -32709:C 12 Jun 2024 02:31:41.115 * DB saved on disk -32709:C 12 Jun 2024 02:31:41.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:31:41.191 * Background saving terminated with success -58896:M 12 Jun 2024 02:34:11.210 * DB saved on disk -58896:M 12 Jun 2024 02:39:12.090 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:39:12.090 * Background saving started by pid 34729 -34729:C 12 Jun 2024 02:39:12.098 * DB saved on disk -34729:C 12 Jun 2024 02:39:12.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:39:12.191 * Background saving terminated with success -58896:M 12 Jun 2024 02:44:13.030 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:44:13.031 * Background saving started by pid 36552 -36552:C 12 Jun 2024 02:44:13.039 * DB saved on disk -36552:C 12 Jun 2024 02:44:13.040 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:44:13.132 * Background saving terminated with success -58896:M 12 Jun 2024 02:49:14.003 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:49:14.007 * Background saving started by pid 40406 -40406:C 12 Jun 2024 02:49:14.016 * DB saved on disk -40406:C 12 Jun 2024 02:49:14.017 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:49:14.108 * Background saving terminated with success -58896:M 12 Jun 2024 02:54:15.052 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:54:15.053 * Background saving started by pid 41373 -41373:C 12 Jun 2024 02:54:15.068 * DB saved on disk -41373:C 12 Jun 2024 02:54:15.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:54:15.155 * Background saving terminated with success -58896:M 12 Jun 2024 02:59:16.098 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 02:59:16.100 * Background saving started by pid 42324 -42324:C 12 Jun 2024 02:59:16.108 * DB saved on disk -42324:C 12 Jun 2024 02:59:16.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 02:59:16.201 * Background saving terminated with success -58896:M 12 Jun 2024 03:04:17.012 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:04:17.015 * Background saving started by pid 43225 -43225:C 12 Jun 2024 03:04:17.025 * DB saved on disk -43225:C 12 Jun 2024 03:04:17.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:04:17.116 * Background saving terminated with success -58896:M 12 Jun 2024 03:04:34.446 * DB saved on disk -58896:M 12 Jun 2024 03:09:35.045 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:09:35.048 * Background saving started by pid 44410 -44410:C 12 Jun 2024 03:09:35.055 * DB saved on disk -44410:C 12 Jun 2024 03:09:35.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:09:35.148 * Background saving terminated with success -58896:M 12 Jun 2024 03:14:36.016 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:14:36.019 * Background saving started by pid 46540 -46540:C 12 Jun 2024 03:14:36.031 * DB saved on disk -46540:C 12 Jun 2024 03:14:36.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:14:36.119 * Background saving terminated with success -58896:M 12 Jun 2024 03:19:37.037 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:19:37.041 * Background saving started by pid 47386 -47386:C 12 Jun 2024 03:19:37.055 * DB saved on disk -47386:C 12 Jun 2024 03:19:37.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:19:37.143 * Background saving terminated with success -58896:M 12 Jun 2024 03:24:38.035 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:24:38.042 * Background saving started by pid 48201 -48201:C 12 Jun 2024 03:24:38.063 * DB saved on disk -48201:C 12 Jun 2024 03:24:38.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:24:38.147 * Background saving terminated with success -58896:M 12 Jun 2024 03:29:39.031 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:29:39.035 * Background saving started by pid 49082 -49082:C 12 Jun 2024 03:29:39.051 * DB saved on disk -49082:C 12 Jun 2024 03:29:39.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:29:39.136 * Background saving terminated with success -58896:M 12 Jun 2024 03:34:40.043 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:34:40.046 * Background saving started by pid 53122 -53122:C 12 Jun 2024 03:34:40.058 * DB saved on disk -53122:C 12 Jun 2024 03:34:40.059 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:34:40.147 * Background saving terminated with success -58896:M 12 Jun 2024 03:39:41.032 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:39:41.035 * Background saving started by pid 54267 -54267:C 12 Jun 2024 03:39:41.056 * DB saved on disk -54267:C 12 Jun 2024 03:39:41.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:39:41.137 * Background saving terminated with success -58896:M 12 Jun 2024 03:44:42.005 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:44:42.006 * Background saving started by pid 55054 -55054:C 12 Jun 2024 03:44:42.022 * DB saved on disk -55054:C 12 Jun 2024 03:44:42.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:44:42.107 * Background saving terminated with success -58896:M 12 Jun 2024 03:49:43.092 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:49:43.094 * Background saving started by pid 55938 -55938:C 12 Jun 2024 03:49:43.104 * DB saved on disk -55938:C 12 Jun 2024 03:49:43.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:49:43.195 * Background saving terminated with success -58896:M 12 Jun 2024 03:54:44.085 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:54:44.087 * Background saving started by pid 56777 -56777:C 12 Jun 2024 03:54:44.105 * DB saved on disk -56777:C 12 Jun 2024 03:54:44.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:54:44.189 * Background saving terminated with success -58896:M 12 Jun 2024 03:59:45.049 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 03:59:45.050 * Background saving started by pid 57643 -57643:C 12 Jun 2024 03:59:45.059 * DB saved on disk -57643:C 12 Jun 2024 03:59:45.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 03:59:45.151 * Background saving terminated with success -58896:M 12 Jun 2024 04:04:46.023 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:04:46.027 * Background saving started by pid 58638 -58638:C 12 Jun 2024 04:04:46.049 * DB saved on disk -58638:C 12 Jun 2024 04:04:46.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:04:46.129 * Background saving terminated with success -58896:M 12 Jun 2024 04:09:47.069 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:09:47.071 * Background saving started by pid 59417 -59417:C 12 Jun 2024 04:09:47.089 * DB saved on disk -59417:C 12 Jun 2024 04:09:47.090 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:09:47.173 * Background saving terminated with success -58896:M 12 Jun 2024 04:14:48.091 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:14:48.092 * Background saving started by pid 60190 -60190:C 12 Jun 2024 04:14:48.100 * DB saved on disk -60190:C 12 Jun 2024 04:14:48.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:14:48.193 * Background saving terminated with success -58896:M 12 Jun 2024 04:19:49.050 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:19:49.052 * Background saving started by pid 61120 -61120:C 12 Jun 2024 04:19:49.060 * DB saved on disk -61120:C 12 Jun 2024 04:19:49.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:19:49.153 * Background saving terminated with success -58896:M 12 Jun 2024 04:24:50.028 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:24:50.032 * Background saving started by pid 61993 -61993:C 12 Jun 2024 04:24:50.051 * DB saved on disk -61993:C 12 Jun 2024 04:24:50.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:24:50.134 * Background saving terminated with success -58896:M 12 Jun 2024 04:29:51.054 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:29:51.058 * Background saving started by pid 62790 -62790:C 12 Jun 2024 04:29:51.077 * DB saved on disk -62790:C 12 Jun 2024 04:29:51.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:29:51.159 * Background saving terminated with success -58896:M 12 Jun 2024 04:34:52.067 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:34:52.069 * Background saving started by pid 63597 -63597:C 12 Jun 2024 04:34:52.077 * DB saved on disk -63597:C 12 Jun 2024 04:34:52.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:34:52.170 * Background saving terminated with success -58896:M 12 Jun 2024 04:39:53.088 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:39:53.089 * Background saving started by pid 64519 -64519:C 12 Jun 2024 04:39:53.098 * DB saved on disk -64519:C 12 Jun 2024 04:39:53.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:39:53.190 * Background saving terminated with success -58896:M 12 Jun 2024 04:44:54.089 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:44:54.091 * Background saving started by pid 65472 -65472:C 12 Jun 2024 04:44:54.099 * DB saved on disk -65472:C 12 Jun 2024 04:44:54.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:44:54.193 * Background saving terminated with success -58896:M 12 Jun 2024 04:49:55.090 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:49:55.091 * Background saving started by pid 66430 -66430:C 12 Jun 2024 04:49:55.102 * DB saved on disk -66430:C 12 Jun 2024 04:49:55.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:49:55.192 * Background saving terminated with success -58896:M 12 Jun 2024 04:54:56.019 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:54:56.022 * Background saving started by pid 67514 -67514:C 12 Jun 2024 04:54:56.034 * DB saved on disk -67514:C 12 Jun 2024 04:54:56.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:54:56.124 * Background saving terminated with success -58896:M 12 Jun 2024 04:59:57.000 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 04:59:57.001 * Background saving started by pid 68698 -68698:C 12 Jun 2024 04:59:57.010 * DB saved on disk -68698:C 12 Jun 2024 04:59:57.012 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 04:59:57.102 * Background saving terminated with success -58896:M 12 Jun 2024 05:04:58.100 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:04:58.102 * Background saving started by pid 74173 -74173:C 12 Jun 2024 05:04:58.117 * DB saved on disk -74173:C 12 Jun 2024 05:04:58.117 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:04:58.204 * Background saving terminated with success -58896:M 12 Jun 2024 05:09:59.003 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:09:59.005 * Background saving started by pid 77013 -77013:C 12 Jun 2024 05:09:59.012 * DB saved on disk -77013:C 12 Jun 2024 05:09:59.013 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:09:59.106 * Background saving terminated with success -58896:M 12 Jun 2024 05:15:00.056 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:15:00.058 * Background saving started by pid 77983 -77983:C 12 Jun 2024 05:15:00.070 * DB saved on disk -77983:C 12 Jun 2024 05:15:00.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:15:00.159 * Background saving terminated with success -58896:M 12 Jun 2024 05:20:01.096 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:20:01.103 * Background saving started by pid 79011 -79011:C 12 Jun 2024 05:20:01.122 * DB saved on disk -79011:C 12 Jun 2024 05:20:01.132 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:20:01.204 * Background saving terminated with success -58896:M 12 Jun 2024 05:25:02.097 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:25:02.099 * Background saving started by pid 80216 -80216:C 12 Jun 2024 05:25:02.113 * DB saved on disk -80216:C 12 Jun 2024 05:25:02.113 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:25:02.200 * Background saving terminated with success -58896:M 12 Jun 2024 05:30:03.063 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:30:03.068 * Background saving started by pid 81376 -81376:C 12 Jun 2024 05:30:03.083 * DB saved on disk -81376:C 12 Jun 2024 05:30:03.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:30:03.169 * Background saving terminated with success -58896:M 12 Jun 2024 05:35:04.075 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:35:04.078 * Background saving started by pid 82164 -82164:C 12 Jun 2024 05:35:04.088 * DB saved on disk -82164:C 12 Jun 2024 05:35:04.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:35:04.179 * Background saving terminated with success -58896:M 12 Jun 2024 05:40:05.085 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:40:05.087 * Background saving started by pid 83362 -83362:C 12 Jun 2024 05:40:05.113 * DB saved on disk -83362:C 12 Jun 2024 05:40:05.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:40:05.189 * Background saving terminated with success -58896:M 12 Jun 2024 05:45:06.011 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:45:06.012 * Background saving started by pid 84525 -84525:C 12 Jun 2024 05:45:06.021 * DB saved on disk -84525:C 12 Jun 2024 05:45:06.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:45:06.114 * Background saving terminated with success -58896:M 12 Jun 2024 05:50:07.081 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 05:50:07.082 * Background saving started by pid 85679 -85679:C 12 Jun 2024 05:50:07.095 * DB saved on disk -85679:C 12 Jun 2024 05:50:07.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 05:50:07.184 * Background saving terminated with success -58896:M 12 Jun 2024 06:09:17.678 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 06:09:17.799 * Background saving started by pid 86522 -86522:C 12 Jun 2024 06:09:17.807 * DB saved on disk -86522:C 12 Jun 2024 06:09:17.807 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 06:09:17.913 * Background saving terminated with success -58896:M 12 Jun 2024 07:23:10.681 * 1 changes in 3600 seconds. Saving... -58896:M 12 Jun 2024 07:23:10.685 * Background saving started by pid 86688 -86688:C 12 Jun 2024 07:23:10.799 * DB saved on disk -86688:C 12 Jun 2024 07:23:10.800 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 07:23:10.887 * Background saving terminated with success -58896:M 12 Jun 2024 08:28:27.701 * 1 changes in 3600 seconds. Saving... -58896:M 12 Jun 2024 08:28:27.709 * Background saving started by pid 86783 -86783:C 12 Jun 2024 08:28:27.805 * DB saved on disk -86783:C 12 Jun 2024 08:28:27.806 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 08:28:27.810 * Background saving terminated with success -58896:M 12 Jun 2024 08:37:48.107 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 08:37:48.109 * Background saving started by pid 86998 -86998:C 12 Jun 2024 08:37:48.124 * DB saved on disk -86998:C 12 Jun 2024 08:37:48.125 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 08:37:48.210 * Background saving terminated with success -58896:M 12 Jun 2024 08:45:00.378 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 08:45:00.441 * Background saving started by pid 88055 -88055:C 12 Jun 2024 08:45:00.998 * DB saved on disk -88055:C 12 Jun 2024 08:45:01.006 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 08:45:01.057 * Background saving terminated with success -58896:M 12 Jun 2024 09:03:18.658 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 09:03:18.662 * Background saving started by pid 88847 -88847:C 12 Jun 2024 09:03:18.782 * DB saved on disk -88847:C 12 Jun 2024 09:03:18.783 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 09:03:18.865 * Background saving terminated with success -58896:M 12 Jun 2024 09:20:51.679 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 09:20:51.682 * Background saving started by pid 89079 -89079:C 12 Jun 2024 09:20:51.805 * DB saved on disk -89079:C 12 Jun 2024 09:20:51.806 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 09:20:51.885 * Background saving terminated with success -58896:M 12 Jun 2024 09:36:57.986 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 09:36:57.986 * Background saving started by pid 89273 -89273:C 12 Jun 2024 09:36:57.994 * DB saved on disk -89273:C 12 Jun 2024 09:36:57.994 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 09:36:58.089 * Background saving terminated with success -58896:M 12 Jun 2024 09:52:59.001 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 09:52:59.002 * Background saving started by pid 89459 -89459:C 12 Jun 2024 09:52:59.013 * DB saved on disk -89459:C 12 Jun 2024 09:52:59.014 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 09:52:59.103 * Background saving terminated with success -58896:M 12 Jun 2024 10:09:08.619 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 10:09:08.624 * Background saving started by pid 89697 -89697:C 12 Jun 2024 10:09:08.738 * DB saved on disk -89697:C 12 Jun 2024 10:09:08.739 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 10:09:08.831 * Background saving terminated with success -58896:M 12 Jun 2024 10:27:48.637 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 10:27:48.640 * Background saving started by pid 90312 -90312:C 12 Jun 2024 10:27:48.754 * DB saved on disk -90312:C 12 Jun 2024 10:27:48.754 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 10:27:48.843 * Background saving terminated with success -58896:M 12 Jun 2024 10:45:08.649 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 10:45:08.765 * Background saving started by pid 90689 -90689:C 12 Jun 2024 10:45:08.781 * DB saved on disk -90689:C 12 Jun 2024 10:45:08.781 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 10:45:08.872 * Background saving terminated with success -58896:M 12 Jun 2024 11:04:19.611 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 11:04:19.731 * Background saving started by pid 91384 -91384:C 12 Jun 2024 11:04:19.738 * DB saved on disk -91384:C 12 Jun 2024 11:04:19.739 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 11:04:19.837 * Background saving terminated with success -58896:M 12 Jun 2024 11:13:15.115 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 11:13:15.119 * Background saving started by pid 91575 -91575:C 12 Jun 2024 11:13:15.137 * DB saved on disk -91575:C 12 Jun 2024 11:13:15.138 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 11:13:15.222 * Background saving terminated with success -58896:M 12 Jun 2024 12:18:47.632 * 1 changes in 3600 seconds. Saving... -58896:M 12 Jun 2024 12:18:47.635 * Background saving started by pid 91694 -91694:C 12 Jun 2024 12:18:47.756 * DB saved on disk -91694:C 12 Jun 2024 12:18:47.757 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 12:18:47.839 * Background saving terminated with success -58896:M 12 Jun 2024 12:39:26.809 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 12:39:26.811 * Background saving started by pid 92013 -92013:C 12 Jun 2024 12:39:26.824 * DB saved on disk -92013:C 12 Jun 2024 12:39:26.825 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 12:39:26.912 * Background saving terminated with success -58896:M 12 Jun 2024 12:44:27.044 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 12:44:27.045 * Background saving started by pid 93150 -93150:C 12 Jun 2024 12:44:27.052 * DB saved on disk -93150:C 12 Jun 2024 12:44:27.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 12:44:27.146 * Background saving terminated with success -58896:M 12 Jun 2024 12:49:28.034 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 12:49:28.036 * Background saving started by pid 94288 -94288:C 12 Jun 2024 12:49:28.048 * DB saved on disk -94288:C 12 Jun 2024 12:49:28.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 12:49:28.137 * Background saving terminated with success -58896:M 12 Jun 2024 12:54:29.012 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 12:54:29.015 * Background saving started by pid 95469 -95469:C 12 Jun 2024 12:54:29.028 * DB saved on disk -95469:C 12 Jun 2024 12:54:29.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 12:54:29.116 * Background saving terminated with success -58896:M 12 Jun 2024 12:59:30.022 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 12:59:30.023 * Background saving started by pid 96610 -96610:C 12 Jun 2024 12:59:30.041 * DB saved on disk -96610:C 12 Jun 2024 12:59:30.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 12:59:30.124 * Background saving terminated with success -58896:M 12 Jun 2024 13:04:31.035 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:04:31.036 * Background saving started by pid 97725 -97725:C 12 Jun 2024 13:04:31.047 * DB saved on disk -97725:C 12 Jun 2024 13:04:31.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:04:31.138 * Background saving terminated with success -58896:M 12 Jun 2024 13:09:32.020 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:09:32.022 * Background saving started by pid 98866 -98866:C 12 Jun 2024 13:09:32.038 * DB saved on disk -98866:C 12 Jun 2024 13:09:32.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:09:32.123 * Background saving terminated with success -58896:M 12 Jun 2024 13:14:33.004 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:14:33.005 * Background saving started by pid 103 -103:C 12 Jun 2024 13:14:33.013 * DB saved on disk -103:C 12 Jun 2024 13:14:33.014 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:14:33.106 * Background saving terminated with success -58896:M 12 Jun 2024 13:19:34.047 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:19:34.048 * Background saving started by pid 1450 -1450:C 12 Jun 2024 13:19:34.058 * DB saved on disk -1450:C 12 Jun 2024 13:19:34.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:19:34.149 * Background saving terminated with success -58896:M 12 Jun 2024 13:24:35.060 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:24:35.063 * Background saving started by pid 2598 -2598:C 12 Jun 2024 13:24:35.072 * DB saved on disk -2598:C 12 Jun 2024 13:24:35.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:24:35.165 * Background saving terminated with success -58896:M 12 Jun 2024 13:29:36.006 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:29:36.009 * Background saving started by pid 3725 -3725:C 12 Jun 2024 13:29:36.019 * DB saved on disk -3725:C 12 Jun 2024 13:29:36.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:29:36.110 * Background saving terminated with success -58896:M 12 Jun 2024 13:34:37.016 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:34:37.017 * Background saving started by pid 4859 -4859:C 12 Jun 2024 13:34:37.036 * DB saved on disk -4859:C 12 Jun 2024 13:34:37.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:34:37.118 * Background saving terminated with success -58896:M 12 Jun 2024 13:52:39.660 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 13:52:39.663 * Background saving started by pid 5136 -5136:C 12 Jun 2024 13:52:39.783 * DB saved on disk -5136:C 12 Jun 2024 13:52:39.783 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 13:52:39.867 * Background saving terminated with success -58896:M 12 Jun 2024 14:18:00.088 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:18:00.089 * Background saving started by pid 5336 -5336:C 12 Jun 2024 14:18:00.100 * DB saved on disk -5336:C 12 Jun 2024 14:18:00.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:18:00.192 * Background saving terminated with success -58896:M 12 Jun 2024 14:23:39.578 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:23:39.579 * Background saving started by pid 5595 -5595:C 12 Jun 2024 14:23:39.589 * DB saved on disk -5595:C 12 Jun 2024 14:23:39.590 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:23:39.686 * Background saving terminated with success -58896:M 12 Jun 2024 14:28:40.051 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:28:40.063 * Background saving started by pid 6818 -6818:C 12 Jun 2024 14:28:40.079 * DB saved on disk -6818:C 12 Jun 2024 14:28:40.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:28:40.165 * Background saving terminated with success -58896:M 12 Jun 2024 14:33:41.100 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:33:41.101 * Background saving started by pid 7974 -7974:C 12 Jun 2024 14:33:41.111 * DB saved on disk -7974:C 12 Jun 2024 14:33:41.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:33:41.202 * Background saving terminated with success -58896:M 12 Jun 2024 14:39:15.833 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:39:15.834 * Background saving started by pid 9245 -9245:C 12 Jun 2024 14:39:15.843 * DB saved on disk -9245:C 12 Jun 2024 14:39:15.843 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:39:15.936 * Background saving terminated with success -58896:M 12 Jun 2024 14:44:16.080 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:44:16.083 * Background saving started by pid 10377 -10377:C 12 Jun 2024 14:44:16.090 * DB saved on disk -10377:C 12 Jun 2024 14:44:16.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:44:16.184 * Background saving terminated with success -58896:M 12 Jun 2024 14:49:17.004 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:49:17.006 * Background saving started by pid 11532 -11532:C 12 Jun 2024 14:49:17.020 * DB saved on disk -11532:C 12 Jun 2024 14:49:17.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:49:17.107 * Background saving terminated with success -58896:M 12 Jun 2024 14:54:18.054 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:54:18.055 * Background saving started by pid 12728 -12728:C 12 Jun 2024 14:54:18.071 * DB saved on disk -12728:C 12 Jun 2024 14:54:18.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:54:18.156 * Background saving terminated with success -58896:M 12 Jun 2024 14:59:19.060 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 14:59:19.063 * Background saving started by pid 13955 -13955:C 12 Jun 2024 14:59:19.095 * DB saved on disk -13955:C 12 Jun 2024 14:59:19.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 14:59:19.164 * Background saving terminated with success -58896:M 12 Jun 2024 15:04:50.041 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:04:50.046 * Background saving started by pid 14209 -14209:C 12 Jun 2024 15:04:50.161 * DB saved on disk -14209:C 12 Jun 2024 15:04:50.162 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:04:50.249 * Background saving terminated with success -58896:M 12 Jun 2024 15:16:01.278 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:16:01.280 * Background saving started by pid 14412 -14412:C 12 Jun 2024 15:16:01.296 * DB saved on disk -14412:C 12 Jun 2024 15:16:01.297 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:16:01.382 * Background saving terminated with success -58896:M 12 Jun 2024 15:21:42.305 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:21:42.308 * Background saving started by pid 15693 -15693:C 12 Jun 2024 15:21:42.425 * DB saved on disk -15693:C 12 Jun 2024 15:21:42.426 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:21:42.512 * Background saving terminated with success -58896:M 12 Jun 2024 15:26:43.091 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:26:43.093 * Background saving started by pid 15892 -15892:C 12 Jun 2024 15:26:43.108 * DB saved on disk -15892:C 12 Jun 2024 15:26:43.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:26:43.208 * Background saving terminated with success -58896:M 12 Jun 2024 15:32:08.470 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:32:08.473 * Background saving started by pid 16107 -16107:C 12 Jun 2024 15:32:08.586 * DB saved on disk -16107:C 12 Jun 2024 15:32:08.587 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:32:08.675 * Background saving terminated with success -58896:M 12 Jun 2024 15:37:51.306 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:37:51.311 * Background saving started by pid 16417 -16417:C 12 Jun 2024 15:37:51.431 * DB saved on disk -16417:C 12 Jun 2024 15:37:51.432 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:37:51.515 * Background saving terminated with success -58896:M 12 Jun 2024 15:43:24.501 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:43:24.505 * Background saving started by pid 16735 -16735:C 12 Jun 2024 15:43:24.619 * DB saved on disk -16735:C 12 Jun 2024 15:43:24.620 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:43:24.709 * Background saving terminated with success -58896:M 12 Jun 2024 15:49:17.280 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:49:17.282 * Background saving started by pid 17067 -17067:C 12 Jun 2024 15:49:17.403 * DB saved on disk -17067:C 12 Jun 2024 15:49:17.403 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:49:17.486 * Background saving terminated with success -58896:M 12 Jun 2024 15:58:31.612 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 15:58:31.612 * Background saving started by pid 17349 -17349:C 12 Jun 2024 15:58:31.624 * DB saved on disk -17349:C 12 Jun 2024 15:58:31.625 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 15:58:31.713 * Background saving terminated with success -58896:M 12 Jun 2024 16:07:32.858 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 16:07:32.859 * Background saving started by pid 17568 -17568:C 12 Jun 2024 16:07:32.873 * DB saved on disk -17568:C 12 Jun 2024 16:07:32.874 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 16:07:32.961 * Background saving terminated with success -58896:M 12 Jun 2024 16:26:11.532 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 16:26:11.537 * Background saving started by pid 17835 -17835:C 12 Jun 2024 16:26:11.655 * DB saved on disk -17835:C 12 Jun 2024 16:26:11.655 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 16:26:11.739 * Background saving terminated with success -58896:M 12 Jun 2024 16:50:57.768 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 16:50:57.771 * Background saving started by pid 18014 -18014:C 12 Jun 2024 16:50:57.787 * DB saved on disk -18014:C 12 Jun 2024 16:50:57.789 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 16:50:57.873 * Background saving terminated with success -58896:M 12 Jun 2024 17:50:58.003 * 1 changes in 3600 seconds. Saving... -58896:M 12 Jun 2024 17:50:58.005 * Background saving started by pid 18164 -18164:C 12 Jun 2024 17:50:58.024 * DB saved on disk -18164:C 12 Jun 2024 17:50:58.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 17:50:58.107 * Background saving terminated with success -58896:M 12 Jun 2024 18:04:59.651 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:04:59.655 * Background saving started by pid 18427 -18427:C 12 Jun 2024 18:04:59.667 * DB saved on disk -18427:C 12 Jun 2024 18:04:59.667 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:04:59.756 * Background saving terminated with success -58896:M 12 Jun 2024 18:10:00.077 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:10:00.079 * Background saving started by pid 19644 -19644:C 12 Jun 2024 18:10:00.091 * DB saved on disk -19644:C 12 Jun 2024 18:10:00.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:10:00.180 * Background saving terminated with success -58896:M 12 Jun 2024 18:15:01.093 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:15:01.095 * Background saving started by pid 20794 -20794:C 12 Jun 2024 18:15:01.115 * DB saved on disk -20794:C 12 Jun 2024 18:15:01.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:15:01.197 * Background saving terminated with success -58896:M 12 Jun 2024 18:20:02.078 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:20:02.079 * Background saving started by pid 21958 -21958:C 12 Jun 2024 18:20:02.088 * DB saved on disk -21958:C 12 Jun 2024 18:20:02.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:20:02.181 * Background saving terminated with success -58896:M 12 Jun 2024 18:25:03.029 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:25:03.030 * Background saving started by pid 23368 -23368:C 12 Jun 2024 18:25:03.037 * DB saved on disk -23368:C 12 Jun 2024 18:25:03.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:25:03.131 * Background saving terminated with success -58896:M 12 Jun 2024 18:30:04.044 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:30:04.046 * Background saving started by pid 24145 -24145:C 12 Jun 2024 18:30:04.054 * DB saved on disk -24145:C 12 Jun 2024 18:30:04.054 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:30:04.147 * Background saving terminated with success -58896:M 12 Jun 2024 18:35:05.081 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:35:05.085 * Background saving started by pid 24948 -24948:C 12 Jun 2024 18:35:05.096 * DB saved on disk -24948:C 12 Jun 2024 18:35:05.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:35:05.188 * Background saving terminated with success -58896:M 12 Jun 2024 18:40:06.059 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:40:06.060 * Background saving started by pid 26487 -26487:C 12 Jun 2024 18:40:06.072 * DB saved on disk -26487:C 12 Jun 2024 18:40:06.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:40:06.160 * Background saving terminated with success -58896:M 12 Jun 2024 18:45:07.016 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:45:07.019 * Background saving started by pid 27478 -27478:C 12 Jun 2024 18:45:07.030 * DB saved on disk -27478:C 12 Jun 2024 18:45:07.033 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:45:07.120 * Background saving terminated with success -58896:M 12 Jun 2024 18:50:08.096 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:50:08.100 * Background saving started by pid 28255 -28255:C 12 Jun 2024 18:50:08.118 * DB saved on disk -28255:C 12 Jun 2024 18:50:08.120 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:50:08.202 * Background saving terminated with success -58896:M 12 Jun 2024 18:55:09.066 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 18:55:09.067 * Background saving started by pid 29026 -29026:C 12 Jun 2024 18:55:09.077 * DB saved on disk -29026:C 12 Jun 2024 18:55:09.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 18:55:09.169 * Background saving terminated with success -58896:M 12 Jun 2024 19:00:10.054 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:00:10.060 * Background saving started by pid 29846 -29846:C 12 Jun 2024 19:00:10.077 * DB saved on disk -29846:C 12 Jun 2024 19:00:10.078 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:00:10.162 * Background saving terminated with success -58896:M 12 Jun 2024 19:05:11.091 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:05:11.093 * Background saving started by pid 30656 -30656:C 12 Jun 2024 19:05:11.106 * DB saved on disk -30656:C 12 Jun 2024 19:05:11.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:05:11.195 * Background saving terminated with success -58896:M 12 Jun 2024 19:10:12.069 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:10:12.070 * Background saving started by pid 31436 -31436:C 12 Jun 2024 19:10:12.082 * DB saved on disk -31436:C 12 Jun 2024 19:10:12.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:10:12.172 * Background saving terminated with success -58896:M 12 Jun 2024 19:15:13.031 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:15:13.032 * Background saving started by pid 32456 -32456:C 12 Jun 2024 19:15:13.045 * DB saved on disk -32456:C 12 Jun 2024 19:15:13.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:15:13.133 * Background saving terminated with success -58896:M 12 Jun 2024 19:20:14.035 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:20:14.036 * Background saving started by pid 33746 -33746:C 12 Jun 2024 19:20:14.045 * DB saved on disk -33746:C 12 Jun 2024 19:20:14.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:20:14.137 * Background saving terminated with success -58896:M 12 Jun 2024 19:25:15.038 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:25:15.041 * Background saving started by pid 34925 -34925:C 12 Jun 2024 19:25:15.057 * DB saved on disk -34925:C 12 Jun 2024 19:25:15.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:25:15.142 * Background saving terminated with success -58896:M 12 Jun 2024 19:30:16.003 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:30:16.008 * Background saving started by pid 36180 -36180:C 12 Jun 2024 19:30:16.026 * DB saved on disk -36180:C 12 Jun 2024 19:30:16.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:30:16.110 * Background saving terminated with success -58896:M 12 Jun 2024 19:30:50.487 * DB saved on disk -58896:M 12 Jun 2024 19:35:51.066 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:35:51.070 * Background saving started by pid 37695 -37695:C 12 Jun 2024 19:35:51.097 * DB saved on disk -37695:C 12 Jun 2024 19:35:51.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:35:51.171 * Background saving terminated with success -58896:M 12 Jun 2024 19:40:52.077 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:40:52.078 * Background saving started by pid 38605 -38605:C 12 Jun 2024 19:40:52.091 * DB saved on disk -38605:C 12 Jun 2024 19:40:52.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:40:52.180 * Background saving terminated with success -58896:M 12 Jun 2024 19:45:53.092 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:45:53.093 * Background saving started by pid 39738 -39738:C 12 Jun 2024 19:45:53.101 * DB saved on disk -39738:C 12 Jun 2024 19:45:53.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:45:53.194 * Background saving terminated with success -58896:M 12 Jun 2024 19:50:54.028 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:50:54.031 * Background saving started by pid 40670 -40670:C 12 Jun 2024 19:50:54.042 * DB saved on disk -40670:C 12 Jun 2024 19:50:54.043 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:50:54.133 * Background saving terminated with success -58896:M 12 Jun 2024 19:55:55.096 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 19:55:55.099 * Background saving started by pid 43457 -43457:C 12 Jun 2024 19:55:55.107 * DB saved on disk -43457:C 12 Jun 2024 19:55:55.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 19:55:55.199 * Background saving terminated with success -58896:M 12 Jun 2024 20:00:56.029 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:00:56.031 * Background saving started by pid 44453 -44453:C 12 Jun 2024 20:00:56.037 * DB saved on disk -44453:C 12 Jun 2024 20:00:56.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:00:56.133 * Background saving terminated with success -58896:M 12 Jun 2024 20:05:57.013 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:05:57.016 * Background saving started by pid 45420 -45420:C 12 Jun 2024 20:05:57.025 * DB saved on disk -45420:C 12 Jun 2024 20:05:57.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:05:57.117 * Background saving terminated with success -58896:M 12 Jun 2024 20:10:58.035 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:10:58.037 * Background saving started by pid 46445 -46445:C 12 Jun 2024 20:10:58.045 * DB saved on disk -46445:C 12 Jun 2024 20:10:58.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:10:58.138 * Background saving terminated with success -58896:M 12 Jun 2024 20:15:59.030 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:15:59.032 * Background saving started by pid 47438 -47438:C 12 Jun 2024 20:15:59.041 * DB saved on disk -47438:C 12 Jun 2024 20:15:59.042 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:15:59.133 * Background saving terminated with success -58896:M 12 Jun 2024 20:21:00.034 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:21:00.036 * Background saving started by pid 48364 -48364:C 12 Jun 2024 20:21:00.043 * DB saved on disk -48364:C 12 Jun 2024 20:21:00.046 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:21:00.137 * Background saving terminated with success -58896:M 12 Jun 2024 20:26:01.085 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:26:01.086 * Background saving started by pid 49394 -49394:C 12 Jun 2024 20:26:01.094 * DB saved on disk -49394:C 12 Jun 2024 20:26:01.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:26:01.188 * Background saving terminated with success -58896:M 12 Jun 2024 20:31:02.083 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:31:02.088 * Background saving started by pid 50479 -50479:C 12 Jun 2024 20:31:02.109 * DB saved on disk -50479:C 12 Jun 2024 20:31:02.110 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:31:02.190 * Background saving terminated with success -58896:M 12 Jun 2024 20:36:03.042 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:36:03.043 * Background saving started by pid 51442 -51442:C 12 Jun 2024 20:36:03.065 * DB saved on disk -51442:C 12 Jun 2024 20:36:03.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:36:03.144 * Background saving terminated with success -58896:M 12 Jun 2024 20:41:04.076 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:41:04.078 * Background saving started by pid 52399 -52399:C 12 Jun 2024 20:41:04.090 * DB saved on disk -52399:C 12 Jun 2024 20:41:04.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:41:04.179 * Background saving terminated with success -58896:M 12 Jun 2024 20:46:05.056 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:46:05.058 * Background saving started by pid 53397 -53397:C 12 Jun 2024 20:46:05.067 * DB saved on disk -53397:C 12 Jun 2024 20:46:05.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:46:05.159 * Background saving terminated with success -58896:M 12 Jun 2024 20:51:06.070 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:51:06.071 * Background saving started by pid 54382 -54382:C 12 Jun 2024 20:51:06.078 * DB saved on disk -54382:C 12 Jun 2024 20:51:06.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:51:06.172 * Background saving terminated with success -58896:M 12 Jun 2024 20:56:07.099 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 20:56:07.102 * Background saving started by pid 57248 -57248:C 12 Jun 2024 20:56:07.111 * DB saved on disk -57248:C 12 Jun 2024 20:56:07.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 20:56:07.204 * Background saving terminated with success -58896:M 12 Jun 2024 21:01:08.063 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 21:01:08.066 * Background saving started by pid 58219 -58219:C 12 Jun 2024 21:01:08.075 * DB saved on disk -58219:C 12 Jun 2024 21:01:08.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 21:01:08.168 * Background saving terminated with success -58896:M 12 Jun 2024 21:06:09.082 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 21:06:09.082 * Background saving started by pid 58998 -58998:C 12 Jun 2024 21:06:09.092 * DB saved on disk -58998:C 12 Jun 2024 21:06:09.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 21:06:09.184 * Background saving terminated with success -58896:M 12 Jun 2024 22:22:09.136 * 1 changes in 3600 seconds. Saving... -58896:M 12 Jun 2024 22:22:09.196 * Background saving started by pid 59686 -59686:C 12 Jun 2024 22:22:09.431 * DB saved on disk -59686:C 12 Jun 2024 22:22:09.536 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:22:09.634 * Background saving terminated with success -58896:M 12 Jun 2024 22:27:10.079 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 22:27:10.083 * Background saving started by pid 60609 -60609:C 12 Jun 2024 22:27:10.097 * DB saved on disk -60609:C 12 Jun 2024 22:27:10.099 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:27:10.184 * Background saving terminated with success -58896:M 12 Jun 2024 22:32:11.032 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 22:32:11.036 * Background saving started by pid 61470 -61470:C 12 Jun 2024 22:32:11.054 * DB saved on disk -61470:C 12 Jun 2024 22:32:11.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:32:11.138 * Background saving terminated with success -58896:M 12 Jun 2024 22:37:12.056 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 22:37:12.057 * Background saving started by pid 62229 -62229:C 12 Jun 2024 22:37:12.071 * DB saved on disk -62229:C 12 Jun 2024 22:37:12.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:37:12.159 * Background saving terminated with success -58896:M 12 Jun 2024 22:42:13.023 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 22:42:13.025 * Background saving started by pid 63085 -63085:C 12 Jun 2024 22:42:13.036 * DB saved on disk -63085:C 12 Jun 2024 22:42:13.036 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:42:13.126 * Background saving terminated with success -58896:M 12 Jun 2024 22:47:14.042 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 22:47:14.043 * Background saving started by pid 63867 -63867:C 12 Jun 2024 22:47:14.052 * DB saved on disk -63867:C 12 Jun 2024 22:47:14.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:47:14.145 * Background saving terminated with success -58896:M 12 Jun 2024 22:52:15.071 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 22:52:15.075 * Background saving started by pid 64674 -64674:C 12 Jun 2024 22:52:15.106 * DB saved on disk -64674:C 12 Jun 2024 22:52:15.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:52:15.177 * Background saving terminated with success -58896:M 12 Jun 2024 22:57:16.052 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 22:57:16.053 * Background saving started by pid 65510 -65510:C 12 Jun 2024 22:57:16.071 * DB saved on disk -65510:C 12 Jun 2024 22:57:16.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 22:57:16.155 * Background saving terminated with success -58896:M 12 Jun 2024 23:02:17.039 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:02:17.043 * Background saving started by pid 66374 -66374:C 12 Jun 2024 23:02:17.059 * DB saved on disk -66374:C 12 Jun 2024 23:02:17.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:02:17.145 * Background saving terminated with success -58896:M 12 Jun 2024 23:07:18.063 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:07:18.065 * Background saving started by pid 69899 -69899:C 12 Jun 2024 23:07:18.097 * DB saved on disk -69899:C 12 Jun 2024 23:07:18.097 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:07:18.166 * Background saving terminated with success -58896:M 12 Jun 2024 23:12:19.010 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:12:19.013 * Background saving started by pid 72751 -72751:C 12 Jun 2024 23:12:19.025 * DB saved on disk -72751:C 12 Jun 2024 23:12:19.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:12:19.114 * Background saving terminated with success -58896:M 12 Jun 2024 23:17:20.093 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:17:20.097 * Background saving started by pid 73511 -73511:C 12 Jun 2024 23:17:20.117 * DB saved on disk -73511:C 12 Jun 2024 23:17:20.118 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:17:20.199 * Background saving terminated with success -58896:M 12 Jun 2024 23:22:21.096 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:22:21.098 * Background saving started by pid 74274 -74274:C 12 Jun 2024 23:22:21.108 * DB saved on disk -74274:C 12 Jun 2024 23:22:21.115 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:22:21.199 * Background saving terminated with success -58896:M 12 Jun 2024 23:27:22.041 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:27:22.044 * Background saving started by pid 75086 -75086:C 12 Jun 2024 23:27:22.055 * DB saved on disk -75086:C 12 Jun 2024 23:27:22.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:27:22.145 * Background saving terminated with success -58896:M 12 Jun 2024 23:32:23.057 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:32:23.059 * Background saving started by pid 75910 -75910:C 12 Jun 2024 23:32:23.070 * DB saved on disk -75910:C 12 Jun 2024 23:32:23.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:32:23.161 * Background saving terminated with success -58896:M 12 Jun 2024 23:37:24.000 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:37:24.002 * Background saving started by pid 76753 -76753:C 12 Jun 2024 23:37:24.021 * DB saved on disk -76753:C 12 Jun 2024 23:37:24.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:37:24.102 * Background saving terminated with success -58896:M 12 Jun 2024 23:42:25.039 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:42:25.041 * Background saving started by pid 77566 -77566:C 12 Jun 2024 23:42:25.051 * DB saved on disk -77566:C 12 Jun 2024 23:42:25.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:42:25.142 * Background saving terminated with success -58896:M 12 Jun 2024 23:47:26.048 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:47:26.051 * Background saving started by pid 78392 -78392:C 12 Jun 2024 23:47:26.058 * DB saved on disk -78392:C 12 Jun 2024 23:47:26.059 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:47:26.152 * Background saving terminated with success -58896:M 12 Jun 2024 23:52:27.035 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:52:27.036 * Background saving started by pid 79236 -79236:C 12 Jun 2024 23:52:27.047 * DB saved on disk -79236:C 12 Jun 2024 23:52:27.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:52:27.137 * Background saving terminated with success -58896:M 12 Jun 2024 23:57:28.011 * 100 changes in 300 seconds. Saving... -58896:M 12 Jun 2024 23:57:28.017 * Background saving started by pid 80013 -80013:C 12 Jun 2024 23:57:28.026 * DB saved on disk -80013:C 12 Jun 2024 23:57:28.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 12 Jun 2024 23:57:28.118 * Background saving terminated with success -58896:M 13 Jun 2024 00:02:29.041 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:02:29.043 * Background saving started by pid 80854 -80854:C 13 Jun 2024 00:02:29.061 * DB saved on disk -80854:C 13 Jun 2024 00:02:29.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:02:29.145 * Background saving terminated with success -58896:M 13 Jun 2024 00:07:30.083 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:07:30.088 * Background saving started by pid 81692 -81692:C 13 Jun 2024 00:07:30.100 * DB saved on disk -81692:C 13 Jun 2024 00:07:30.100 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:07:30.190 * Background saving terminated with success -58896:M 13 Jun 2024 00:12:31.037 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:12:31.038 * Background saving started by pid 82630 -82630:C 13 Jun 2024 00:12:31.048 * DB saved on disk -82630:C 13 Jun 2024 00:12:31.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:12:31.139 * Background saving terminated with success -58896:M 13 Jun 2024 00:18:24.490 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:18:24.492 * Background saving started by pid 83628 -83628:C 13 Jun 2024 00:18:24.500 * DB saved on disk -83628:C 13 Jun 2024 00:18:24.501 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:18:24.594 * Background saving terminated with success -58896:M 13 Jun 2024 00:23:25.099 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:23:25.101 * Background saving started by pid 84426 -84426:C 13 Jun 2024 00:23:25.116 * DB saved on disk -84426:C 13 Jun 2024 00:23:25.119 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:23:25.203 * Background saving terminated with success -58896:M 13 Jun 2024 00:28:26.000 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:28:26.003 * Background saving started by pid 85490 -85490:C 13 Jun 2024 00:28:26.011 * DB saved on disk -85490:C 13 Jun 2024 00:28:26.012 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:28:26.104 * Background saving terminated with success -58896:M 13 Jun 2024 00:39:55.401 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:39:55.402 * Background saving started by pid 87583 -87583:C 13 Jun 2024 00:39:55.410 * DB saved on disk -87583:C 13 Jun 2024 00:39:55.410 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:39:55.504 * Background saving terminated with success -58896:M 13 Jun 2024 00:44:56.013 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:44:56.017 * Background saving started by pid 88517 -88517:C 13 Jun 2024 00:44:56.027 * DB saved on disk -88517:C 13 Jun 2024 00:44:56.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:44:56.118 * Background saving terminated with success -58896:M 13 Jun 2024 00:49:57.055 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:49:57.058 * Background saving started by pid 89534 -89534:C 13 Jun 2024 00:49:57.066 * DB saved on disk -89534:C 13 Jun 2024 00:49:57.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:49:57.159 * Background saving terminated with success -58896:M 13 Jun 2024 00:54:58.054 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:54:58.056 * Background saving started by pid 92884 -92884:C 13 Jun 2024 00:54:58.076 * DB saved on disk -92884:C 13 Jun 2024 00:54:58.079 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:54:58.156 * Background saving terminated with success -58896:M 13 Jun 2024 00:59:59.094 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 00:59:59.096 * Background saving started by pid 97454 -97454:C 13 Jun 2024 00:59:59.105 * DB saved on disk -97454:C 13 Jun 2024 00:59:59.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 00:59:59.197 * Background saving terminated with success -58896:M 13 Jun 2024 01:05:00.065 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 01:05:00.067 * Background saving started by pid 208 -208:C 13 Jun 2024 01:05:00.075 * DB saved on disk -208:C 13 Jun 2024 01:05:00.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 01:05:00.168 * Background saving terminated with success -58896:M 13 Jun 2024 01:10:01.004 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 01:10:01.007 * Background saving started by pid 1501 -1501:C 13 Jun 2024 01:10:01.016 * DB saved on disk -1501:C 13 Jun 2024 01:10:01.017 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 01:10:01.108 * Background saving terminated with success -58896:M 13 Jun 2024 01:15:02.069 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 01:15:02.073 * Background saving started by pid 8174 -8174:C 13 Jun 2024 01:15:02.087 * DB saved on disk -8174:C 13 Jun 2024 01:15:02.088 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 01:15:02.176 * Background saving terminated with success -58896:M 13 Jun 2024 01:20:03.007 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 01:20:03.009 * Background saving started by pid 12151 -12151:C 13 Jun 2024 01:20:03.021 * DB saved on disk -12151:C 13 Jun 2024 01:20:03.022 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 01:20:03.111 * Background saving terminated with success -58896:M 13 Jun 2024 01:25:04.011 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 01:25:04.014 * Background saving started by pid 14019 -14019:C 13 Jun 2024 01:25:04.027 * DB saved on disk -14019:C 13 Jun 2024 01:25:04.028 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 01:25:04.115 * Background saving terminated with success -58896:M 13 Jun 2024 01:30:05.029 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 01:30:05.032 * Background saving started by pid 15236 -15236:C 13 Jun 2024 01:30:05.048 * DB saved on disk -15236:C 13 Jun 2024 01:30:05.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 01:30:05.134 * Background saving terminated with success -58896:M 13 Jun 2024 01:46:26.863 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 01:46:26.987 * Background saving started by pid 16271 -16271:C 13 Jun 2024 01:46:26.997 * DB saved on disk -16271:C 13 Jun 2024 01:46:26.997 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 01:46:27.096 * Background saving terminated with success -58896:M 13 Jun 2024 02:53:37.566 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 02:53:37.687 * Background saving started by pid 16361 -16361:C 13 Jun 2024 02:53:37.704 * DB saved on disk -16361:C 13 Jun 2024 02:53:37.704 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 02:53:37.795 * Background saving terminated with success -58896:M 13 Jun 2024 04:00:22.582 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 04:00:22.694 * Background saving started by pid 16480 -16480:C 13 Jun 2024 04:00:22.703 * DB saved on disk -16480:C 13 Jun 2024 04:00:22.704 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 04:00:22.807 * Background saving terminated with success -58896:M 13 Jun 2024 05:06:58.599 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 05:06:58.605 * Background saving started by pid 16586 -16586:C 13 Jun 2024 05:06:58.718 * DB saved on disk -16586:C 13 Jun 2024 05:06:58.718 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 05:06:58.809 * Background saving terminated with success -58896:M 13 Jun 2024 06:11:18.604 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 06:11:18.613 * Background saving started by pid 16651 -16651:C 13 Jun 2024 06:11:18.714 * DB saved on disk -16651:C 13 Jun 2024 06:11:18.746 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 06:11:18.815 * Background saving terminated with success -58896:M 13 Jun 2024 07:14:47.525 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 07:14:47.528 * Background saving started by pid 17811 -17811:C 13 Jun 2024 07:14:47.679 * DB saved on disk -17811:C 13 Jun 2024 07:14:47.680 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 07:14:47.730 * Background saving terminated with success -58896:M 13 Jun 2024 08:23:04.569 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 08:23:04.574 * Background saving started by pid 17919 -17919:C 13 Jun 2024 08:23:04.680 * DB saved on disk -17919:C 13 Jun 2024 08:23:04.680 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 08:23:04.775 * Background saving terminated with success -58896:M 13 Jun 2024 09:29:23.578 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 09:29:23.582 * Background saving started by pid 18003 -18003:C 13 Jun 2024 09:29:23.701 * DB saved on disk -18003:C 13 Jun 2024 09:29:23.701 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 09:29:23.787 * Background saving terminated with success -58896:M 13 Jun 2024 09:50:20.002 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 09:50:20.002 * Background saving started by pid 18192 -18192:C 13 Jun 2024 09:50:20.013 * DB saved on disk -18192:C 13 Jun 2024 09:50:20.016 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 09:50:20.103 * Background saving terminated with success -58896:M 13 Jun 2024 10:26:10.581 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 10:26:10.583 * Background saving started by pid 18369 -18369:C 13 Jun 2024 10:26:10.602 * DB saved on disk -18369:C 13 Jun 2024 10:26:10.602 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 10:26:10.684 * Background saving terminated with success -58896:M 13 Jun 2024 10:55:26.571 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 10:55:26.574 * Background saving started by pid 18571 -18571:C 13 Jun 2024 10:55:26.591 * DB saved on disk -18571:C 13 Jun 2024 10:55:26.591 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 10:55:26.676 * Background saving terminated with success -58896:M 13 Jun 2024 11:29:14.641 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 11:29:14.644 * Background saving started by pid 18818 -18818:C 13 Jun 2024 11:29:14.664 * DB saved on disk -18818:C 13 Jun 2024 11:29:14.665 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 11:29:14.746 * Background saving terminated with success -58896:M 13 Jun 2024 11:34:15.063 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 11:34:15.065 * Background saving started by pid 20038 -20038:C 13 Jun 2024 11:34:15.082 * DB saved on disk -20038:C 13 Jun 2024 11:34:15.084 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 11:34:15.167 * Background saving terminated with success -58896:M 13 Jun 2024 11:39:16.050 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 11:39:16.052 * Background saving started by pid 21202 -21202:C 13 Jun 2024 11:39:16.063 * DB saved on disk -21202:C 13 Jun 2024 11:39:16.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 11:39:16.153 * Background saving terminated with success -58896:M 13 Jun 2024 11:44:17.031 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 11:44:17.033 * Background saving started by pid 22048 -22048:C 13 Jun 2024 11:44:17.047 * DB saved on disk -22048:C 13 Jun 2024 11:44:17.049 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 11:44:17.135 * Background saving terminated with success -58896:M 13 Jun 2024 11:49:18.051 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 11:49:18.056 * Background saving started by pid 22821 -22821:C 13 Jun 2024 11:49:18.073 * DB saved on disk -22821:C 13 Jun 2024 11:49:18.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 11:49:18.159 * Background saving terminated with success -58896:M 13 Jun 2024 11:54:19.040 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 11:54:19.043 * Background saving started by pid 23590 -23590:C 13 Jun 2024 11:54:19.061 * DB saved on disk -23590:C 13 Jun 2024 11:54:19.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 11:54:19.145 * Background saving terminated with success -58896:M 13 Jun 2024 11:59:20.034 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 11:59:20.038 * Background saving started by pid 24369 -24369:C 13 Jun 2024 11:59:20.055 * DB saved on disk -24369:C 13 Jun 2024 11:59:20.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 11:59:20.141 * Background saving terminated with success -58896:M 13 Jun 2024 12:04:21.013 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 12:04:21.015 * Background saving started by pid 25145 -25145:C 13 Jun 2024 12:04:21.033 * DB saved on disk -25145:C 13 Jun 2024 12:04:21.034 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 12:04:21.117 * Background saving terminated with success -58896:M 13 Jun 2024 12:09:22.032 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 12:09:22.035 * Background saving started by pid 25919 -25919:C 13 Jun 2024 12:09:22.049 * DB saved on disk -25919:C 13 Jun 2024 12:09:22.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 12:09:22.138 * Background saving terminated with success -58896:M 13 Jun 2024 12:14:23.054 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 12:14:23.058 * Background saving started by pid 26708 -26708:C 13 Jun 2024 12:14:23.070 * DB saved on disk -26708:C 13 Jun 2024 12:14:23.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 12:14:23.160 * Background saving terminated with success -58896:M 13 Jun 2024 12:22:08.623 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 12:22:08.625 * Background saving started by pid 26869 -26869:C 13 Jun 2024 12:22:08.638 * DB saved on disk -26869:C 13 Jun 2024 12:22:08.640 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 12:22:08.727 * Background saving terminated with success -58896:M 13 Jun 2024 13:22:56.523 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 13:22:56.527 * Background saving started by pid 26934 -26934:C 13 Jun 2024 13:22:56.637 * DB saved on disk -26934:C 13 Jun 2024 13:22:56.638 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 13:22:56.730 * Background saving terminated with success -58896:M 13 Jun 2024 13:54:40.777 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 13:54:40.779 * Background saving started by pid 27164 -27164:C 13 Jun 2024 13:54:40.788 * DB saved on disk -27164:C 13 Jun 2024 13:54:40.789 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 13:54:40.881 * Background saving terminated with success -58896:M 13 Jun 2024 13:59:41.086 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 13:59:41.091 * Background saving started by pid 28401 -28401:C 13 Jun 2024 13:59:41.125 * DB saved on disk -28401:C 13 Jun 2024 13:59:41.125 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 13:59:41.193 * Background saving terminated with success -58896:M 13 Jun 2024 14:04:42.086 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:04:42.089 * Background saving started by pid 29364 -29364:C 13 Jun 2024 14:04:42.106 * DB saved on disk -29364:C 13 Jun 2024 14:04:42.108 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:04:42.191 * Background saving terminated with success -58896:M 13 Jun 2024 14:09:43.039 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:09:43.040 * Background saving started by pid 30343 -30343:C 13 Jun 2024 14:09:43.050 * DB saved on disk -30343:C 13 Jun 2024 14:09:43.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:09:43.141 * Background saving terminated with success -58896:M 13 Jun 2024 14:14:44.095 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:14:44.098 * Background saving started by pid 31113 -31113:C 13 Jun 2024 14:14:44.106 * DB saved on disk -31113:C 13 Jun 2024 14:14:44.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:14:44.199 * Background saving terminated with success -58896:M 13 Jun 2024 14:19:45.073 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:19:45.077 * Background saving started by pid 31876 -31876:C 13 Jun 2024 14:19:45.105 * DB saved on disk -31876:C 13 Jun 2024 14:19:45.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:19:45.181 * Background saving terminated with success -58896:M 13 Jun 2024 14:24:46.099 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:24:46.103 * Background saving started by pid 32589 -32589:C 13 Jun 2024 14:24:46.117 * DB saved on disk -32589:C 13 Jun 2024 14:24:46.119 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:24:46.204 * Background saving terminated with success -58896:M 13 Jun 2024 14:29:47.029 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:29:47.035 * Background saving started by pid 33317 -33317:C 13 Jun 2024 14:29:47.050 * DB saved on disk -33317:C 13 Jun 2024 14:29:47.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:29:47.137 * Background saving terminated with success -58896:M 13 Jun 2024 14:34:48.042 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:34:48.044 * Background saving started by pid 34025 -34025:C 13 Jun 2024 14:34:48.057 * DB saved on disk -34025:C 13 Jun 2024 14:34:48.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:34:48.147 * Background saving terminated with success -58896:M 13 Jun 2024 14:39:49.001 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:39:49.002 * Background saving started by pid 34740 -34740:C 13 Jun 2024 14:39:49.011 * DB saved on disk -34740:C 13 Jun 2024 14:39:49.011 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:39:49.104 * Background saving terminated with success -58896:M 13 Jun 2024 14:44:50.083 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:44:50.086 * Background saving started by pid 35603 -35603:C 13 Jun 2024 14:44:50.098 * DB saved on disk -35603:C 13 Jun 2024 14:44:50.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:44:50.188 * Background saving terminated with success -58896:M 13 Jun 2024 14:49:51.042 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:49:51.045 * Background saving started by pid 36239 -36239:C 13 Jun 2024 14:49:51.057 * DB saved on disk -36239:C 13 Jun 2024 14:49:51.059 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:49:51.146 * Background saving terminated with success -58896:M 13 Jun 2024 14:54:52.029 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:54:52.032 * Background saving started by pid 36857 -36857:C 13 Jun 2024 14:54:52.066 * DB saved on disk -36857:C 13 Jun 2024 14:54:52.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:54:52.134 * Background saving terminated with success -58896:M 13 Jun 2024 14:59:53.033 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 14:59:53.036 * Background saving started by pid 37538 -37538:C 13 Jun 2024 14:59:53.051 * DB saved on disk -37538:C 13 Jun 2024 14:59:53.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 14:59:53.138 * Background saving terminated with success -58896:M 13 Jun 2024 15:04:54.044 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:04:54.046 * Background saving started by pid 38152 -38152:C 13 Jun 2024 15:04:54.067 * DB saved on disk -38152:C 13 Jun 2024 15:04:54.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:04:54.148 * Background saving terminated with success -58896:M 13 Jun 2024 15:09:55.087 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:09:55.092 * Background saving started by pid 38789 -38789:C 13 Jun 2024 15:09:55.104 * DB saved on disk -38789:C 13 Jun 2024 15:09:55.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:09:55.196 * Background saving terminated with success -58896:M 13 Jun 2024 15:14:56.035 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:14:56.037 * Background saving started by pid 39411 -39411:C 13 Jun 2024 15:14:56.050 * DB saved on disk -39411:C 13 Jun 2024 15:14:56.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:14:56.138 * Background saving terminated with success -58896:M 13 Jun 2024 15:19:57.033 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:19:57.034 * Background saving started by pid 40025 -40025:C 13 Jun 2024 15:19:57.043 * DB saved on disk -40025:C 13 Jun 2024 15:19:57.044 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:19:57.135 * Background saving terminated with success -58896:M 13 Jun 2024 15:24:58.059 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:24:58.061 * Background saving started by pid 40708 -40708:C 13 Jun 2024 15:24:58.082 * DB saved on disk -40708:C 13 Jun 2024 15:24:58.082 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:24:58.162 * Background saving terminated with success -58896:M 13 Jun 2024 15:29:59.058 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:29:59.061 * Background saving started by pid 41970 -41970:C 13 Jun 2024 15:29:59.074 * DB saved on disk -41970:C 13 Jun 2024 15:29:59.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:29:59.162 * Background saving terminated with success -58896:M 13 Jun 2024 15:35:00.020 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:35:00.023 * Background saving started by pid 46158 -46158:C 13 Jun 2024 15:35:00.046 * DB saved on disk -46158:C 13 Jun 2024 15:35:00.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:35:00.124 * Background saving terminated with success -58896:M 13 Jun 2024 15:40:01.046 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:40:01.049 * Background saving started by pid 52688 -52688:C 13 Jun 2024 15:40:01.069 * DB saved on disk -52688:C 13 Jun 2024 15:40:01.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:40:01.150 * Background saving terminated with success -58896:M 13 Jun 2024 15:45:53.815 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:45:53.818 * Background saving started by pid 53374 -53374:C 13 Jun 2024 15:45:53.840 * DB saved on disk -53374:C 13 Jun 2024 15:45:53.840 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:45:53.919 * Background saving terminated with success -58896:M 13 Jun 2024 15:50:54.050 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:50:54.052 * Background saving started by pid 54742 -54742:C 13 Jun 2024 15:50:54.072 * DB saved on disk -54742:C 13 Jun 2024 15:50:54.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:50:54.153 * Background saving terminated with success -58896:M 13 Jun 2024 15:55:55.100 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 15:55:55.103 * Background saving started by pid 55431 -55431:C 13 Jun 2024 15:55:55.114 * DB saved on disk -55431:C 13 Jun 2024 15:55:55.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 15:55:55.204 * Background saving terminated with success -58896:M 13 Jun 2024 16:00:56.039 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:00:56.042 * Background saving started by pid 56109 -56109:C 13 Jun 2024 16:00:56.051 * DB saved on disk -56109:C 13 Jun 2024 16:00:56.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:00:56.144 * Background saving terminated with success -58896:M 13 Jun 2024 16:05:57.027 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:05:57.029 * Background saving started by pid 56794 -56794:C 13 Jun 2024 16:05:57.044 * DB saved on disk -56794:C 13 Jun 2024 16:05:57.045 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:05:57.130 * Background saving terminated with success -58896:M 13 Jun 2024 16:10:58.007 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:10:58.010 * Background saving started by pid 57424 -57424:C 13 Jun 2024 16:10:58.022 * DB saved on disk -57424:C 13 Jun 2024 16:10:58.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:10:58.111 * Background saving terminated with success -58896:M 13 Jun 2024 16:15:59.064 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:15:59.067 * Background saving started by pid 58114 -58114:C 13 Jun 2024 16:15:59.076 * DB saved on disk -58114:C 13 Jun 2024 16:15:59.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:15:59.168 * Background saving terminated with success -58896:M 13 Jun 2024 16:21:00.080 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:21:00.081 * Background saving started by pid 58865 -58865:C 13 Jun 2024 16:21:00.090 * DB saved on disk -58865:C 13 Jun 2024 16:21:00.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:21:00.182 * Background saving terminated with success -58896:M 13 Jun 2024 16:26:01.042 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:26:01.045 * Background saving started by pid 59640 -59640:C 13 Jun 2024 16:26:01.059 * DB saved on disk -59640:C 13 Jun 2024 16:26:01.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:26:01.145 * Background saving terminated with success -58896:M 13 Jun 2024 16:31:02.024 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:31:02.026 * Background saving started by pid 60306 -60306:C 13 Jun 2024 16:31:02.037 * DB saved on disk -60306:C 13 Jun 2024 16:31:02.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:31:02.127 * Background saving terminated with success -58896:M 13 Jun 2024 16:36:03.023 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:36:03.027 * Background saving started by pid 60889 -60889:C 13 Jun 2024 16:36:03.056 * DB saved on disk -60889:C 13 Jun 2024 16:36:03.056 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:36:03.128 * Background saving terminated with success -58896:M 13 Jun 2024 16:41:04.062 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:41:04.065 * Background saving started by pid 61499 -61499:C 13 Jun 2024 16:41:04.084 * DB saved on disk -61499:C 13 Jun 2024 16:41:04.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:41:04.167 * Background saving terminated with success -58896:M 13 Jun 2024 16:46:05.062 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:46:05.064 * Background saving started by pid 62153 -62153:C 13 Jun 2024 16:46:05.078 * DB saved on disk -62153:C 13 Jun 2024 16:46:05.079 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:46:05.165 * Background saving terminated with success -58896:M 13 Jun 2024 16:51:06.057 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:51:06.058 * Background saving started by pid 62839 -62839:C 13 Jun 2024 16:51:06.067 * DB saved on disk -62839:C 13 Jun 2024 16:51:06.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:51:06.159 * Background saving terminated with success -58896:M 13 Jun 2024 16:56:07.041 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 16:56:07.044 * Background saving started by pid 63527 -63527:C 13 Jun 2024 16:56:07.063 * DB saved on disk -63527:C 13 Jun 2024 16:56:07.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 16:56:07.144 * Background saving terminated with success -58896:M 13 Jun 2024 17:01:08.073 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:01:08.074 * Background saving started by pid 64189 -64189:C 13 Jun 2024 17:01:08.088 * DB saved on disk -64189:C 13 Jun 2024 17:01:08.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:01:08.175 * Background saving terminated with success -58896:M 13 Jun 2024 17:06:09.002 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:06:09.003 * Background saving started by pid 64802 -64802:C 13 Jun 2024 17:06:09.018 * DB saved on disk -64802:C 13 Jun 2024 17:06:09.021 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:06:09.104 * Background saving terminated with success -58896:M 13 Jun 2024 17:11:10.042 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:11:10.046 * Background saving started by pid 65468 -65468:C 13 Jun 2024 17:11:10.069 * DB saved on disk -65468:C 13 Jun 2024 17:11:10.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:11:10.148 * Background saving terminated with success -58896:M 13 Jun 2024 17:16:11.098 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:16:11.099 * Background saving started by pid 66110 -66110:C 13 Jun 2024 17:16:11.108 * DB saved on disk -66110:C 13 Jun 2024 17:16:11.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:16:11.201 * Background saving terminated with success -58896:M 13 Jun 2024 17:21:12.003 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:21:12.006 * Background saving started by pid 66847 -66847:C 13 Jun 2024 17:21:12.018 * DB saved on disk -66847:C 13 Jun 2024 17:21:12.019 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:21:12.111 * Background saving terminated with success -58896:M 13 Jun 2024 17:26:13.038 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:26:13.041 * Background saving started by pid 67587 -67587:C 13 Jun 2024 17:26:13.051 * DB saved on disk -67587:C 13 Jun 2024 17:26:13.052 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:26:13.142 * Background saving terminated with success -58896:M 13 Jun 2024 17:31:14.027 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:31:14.028 * Background saving started by pid 68487 -68487:C 13 Jun 2024 17:31:14.036 * DB saved on disk -68487:C 13 Jun 2024 17:31:14.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:31:14.130 * Background saving terminated with success -58896:M 13 Jun 2024 17:36:15.062 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:36:15.064 * Background saving started by pid 69205 -69205:C 13 Jun 2024 17:36:15.071 * DB saved on disk -69205:C 13 Jun 2024 17:36:15.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:36:15.174 * Background saving terminated with success -58896:M 13 Jun 2024 17:41:16.100 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:41:16.101 * Background saving started by pid 70157 -70157:C 13 Jun 2024 17:41:16.117 * DB saved on disk -70157:C 13 Jun 2024 17:41:16.118 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:41:16.203 * Background saving terminated with success -58896:M 13 Jun 2024 17:46:17.062 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:46:17.064 * Background saving started by pid 70947 -70947:C 13 Jun 2024 17:46:17.078 * DB saved on disk -70947:C 13 Jun 2024 17:46:17.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:46:17.165 * Background saving terminated with success -58896:M 13 Jun 2024 17:51:18.076 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:51:18.077 * Background saving started by pid 71675 -71675:C 13 Jun 2024 17:51:18.086 * DB saved on disk -71675:C 13 Jun 2024 17:51:18.090 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:51:18.179 * Background saving terminated with success -58896:M 13 Jun 2024 17:56:19.041 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 17:56:19.042 * Background saving started by pid 72514 -72514:C 13 Jun 2024 17:56:19.052 * DB saved on disk -72514:C 13 Jun 2024 17:56:19.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 17:56:19.144 * Background saving terminated with success -58896:M 13 Jun 2024 18:01:20.068 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:01:20.069 * Background saving started by pid 73367 -73367:C 13 Jun 2024 18:01:20.084 * DB saved on disk -73367:C 13 Jun 2024 18:01:20.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:01:20.171 * Background saving terminated with success -58896:M 13 Jun 2024 18:06:21.045 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:06:21.048 * Background saving started by pid 74221 -74221:C 13 Jun 2024 18:06:21.057 * DB saved on disk -74221:C 13 Jun 2024 18:06:21.062 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:06:21.148 * Background saving terminated with success -58896:M 13 Jun 2024 18:11:22.084 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:11:22.088 * Background saving started by pid 75044 -75044:C 13 Jun 2024 18:11:22.111 * DB saved on disk -75044:C 13 Jun 2024 18:11:22.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:11:22.189 * Background saving terminated with success -58896:M 13 Jun 2024 18:16:23.041 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:16:23.042 * Background saving started by pid 76027 -76027:C 13 Jun 2024 18:16:23.057 * DB saved on disk -76027:C 13 Jun 2024 18:16:23.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:16:23.143 * Background saving terminated with success -58896:M 13 Jun 2024 18:21:24.069 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:21:24.073 * Background saving started by pid 77094 -77094:C 13 Jun 2024 18:21:24.084 * DB saved on disk -77094:C 13 Jun 2024 18:21:24.086 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:21:24.175 * Background saving terminated with success -58896:M 13 Jun 2024 18:26:25.068 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:26:25.073 * Background saving started by pid 78140 -78140:C 13 Jun 2024 18:26:25.088 * DB saved on disk -78140:C 13 Jun 2024 18:26:25.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:26:25.174 * Background saving terminated with success -58896:M 13 Jun 2024 18:31:26.038 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:31:26.041 * Background saving started by pid 79121 -79121:C 13 Jun 2024 18:31:26.053 * DB saved on disk -79121:C 13 Jun 2024 18:31:26.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:31:26.142 * Background saving terminated with success -58896:M 13 Jun 2024 18:36:27.010 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:36:27.013 * Background saving started by pid 80053 -80053:C 13 Jun 2024 18:36:27.025 * DB saved on disk -80053:C 13 Jun 2024 18:36:27.026 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:36:27.115 * Background saving terminated with success -58896:M 13 Jun 2024 18:41:28.100 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:41:28.101 * Background saving started by pid 81033 -81033:C 13 Jun 2024 18:41:28.110 * DB saved on disk -81033:C 13 Jun 2024 18:41:28.114 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:41:28.203 * Background saving terminated with success -58896:M 13 Jun 2024 18:46:29.056 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:46:29.058 * Background saving started by pid 82024 -82024:C 13 Jun 2024 18:46:29.068 * DB saved on disk -82024:C 13 Jun 2024 18:46:29.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:46:29.159 * Background saving terminated with success -58896:M 13 Jun 2024 18:51:30.025 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:51:30.026 * Background saving started by pid 83031 -83031:C 13 Jun 2024 18:51:30.040 * DB saved on disk -83031:C 13 Jun 2024 18:51:30.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:51:30.128 * Background saving terminated with success -58896:M 13 Jun 2024 18:56:31.028 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 18:56:31.032 * Background saving started by pid 84257 -84257:C 13 Jun 2024 18:56:31.061 * DB saved on disk -84257:C 13 Jun 2024 18:56:31.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 18:56:31.133 * Background saving terminated with success -58896:M 13 Jun 2024 19:01:32.042 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:01:32.045 * Background saving started by pid 85971 -85971:C 13 Jun 2024 19:01:32.057 * DB saved on disk -85971:C 13 Jun 2024 19:01:32.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:01:32.146 * Background saving terminated with success -58896:M 13 Jun 2024 19:06:33.000 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:06:33.004 * Background saving started by pid 87445 -87445:C 13 Jun 2024 19:06:33.015 * DB saved on disk -87445:C 13 Jun 2024 19:06:33.016 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:06:33.106 * Background saving terminated with success -58896:M 13 Jun 2024 19:24:03.583 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:24:03.704 * Background saving started by pid 88482 -88482:C 13 Jun 2024 19:24:03.712 * DB saved on disk -88482:C 13 Jun 2024 19:24:03.715 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:24:03.820 * Background saving terminated with success -58896:M 13 Jun 2024 19:29:04.018 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:29:04.020 * Background saving started by pid 89605 -89605:C 13 Jun 2024 19:29:04.035 * DB saved on disk -89605:C 13 Jun 2024 19:29:04.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:29:04.122 * Background saving terminated with success -58896:M 13 Jun 2024 19:34:05.068 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:34:05.071 * Background saving started by pid 90623 -90623:C 13 Jun 2024 19:34:05.084 * DB saved on disk -90623:C 13 Jun 2024 19:34:05.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:34:05.172 * Background saving terminated with success -58896:M 13 Jun 2024 19:39:06.039 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:39:06.040 * Background saving started by pid 91649 -91649:C 13 Jun 2024 19:39:06.050 * DB saved on disk -91649:C 13 Jun 2024 19:39:06.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:39:06.141 * Background saving terminated with success -58896:M 13 Jun 2024 19:44:07.052 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:44:07.053 * Background saving started by pid 92499 -92499:C 13 Jun 2024 19:44:07.066 * DB saved on disk -92499:C 13 Jun 2024 19:44:07.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:44:07.154 * Background saving terminated with success -58896:M 13 Jun 2024 19:49:08.026 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 19:49:08.029 * Background saving started by pid 93255 -93255:C 13 Jun 2024 19:49:08.047 * DB saved on disk -93255:C 13 Jun 2024 19:49:08.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 19:49:08.130 * Background saving terminated with success -58896:M 13 Jun 2024 20:09:23.789 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 20:09:23.790 * Background saving started by pid 93455 -93455:C 13 Jun 2024 20:09:23.800 * DB saved on disk -93455:C 13 Jun 2024 20:09:23.802 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 20:09:23.891 * Background saving terminated with success -58896:M 13 Jun 2024 21:00:24.763 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 21:00:24.764 * Background saving started by pid 93545 -93545:C 13 Jun 2024 21:00:24.776 * DB saved on disk -93545:C 13 Jun 2024 21:00:24.777 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 21:00:24.867 * Background saving terminated with success -58896:M 13 Jun 2024 21:09:07.599 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 21:09:07.601 * Background saving started by pid 93647 -93647:C 13 Jun 2024 21:09:07.614 * DB saved on disk -93647:C 13 Jun 2024 21:09:07.616 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 21:09:07.702 * Background saving terminated with success -58896:M 13 Jun 2024 22:15:01.689 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 22:15:01.693 * Background saving started by pid 93707 -93707:C 13 Jun 2024 22:15:01.819 * DB saved on disk -93707:C 13 Jun 2024 22:15:01.820 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 22:15:01.896 * Background saving terminated with success -58896:M 13 Jun 2024 22:28:49.316 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 22:28:49.319 * Background saving started by pid 93877 -93877:C 13 Jun 2024 22:28:49.333 * DB saved on disk -93877:C 13 Jun 2024 22:28:49.334 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 22:28:49.421 * Background saving terminated with success -58896:M 13 Jun 2024 23:38:03.790 * 1 changes in 3600 seconds. Saving... -58896:M 13 Jun 2024 23:38:03.794 * Background saving started by pid 94043 -94043:C 13 Jun 2024 23:38:03.905 * DB saved on disk -94043:C 13 Jun 2024 23:38:03.908 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 23:38:03.997 * Background saving terminated with success -58896:M 13 Jun 2024 23:43:04.085 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 23:43:04.087 * Background saving started by pid 94614 -94614:C 13 Jun 2024 23:43:04.094 * DB saved on disk -94614:C 13 Jun 2024 23:43:04.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 23:43:04.189 * Background saving terminated with success -58896:M 13 Jun 2024 23:48:05.057 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 23:48:05.063 * Background saving started by pid 95362 -95362:C 13 Jun 2024 23:48:05.086 * DB saved on disk -95362:C 13 Jun 2024 23:48:05.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 23:48:05.165 * Background saving terminated with success -58896:M 13 Jun 2024 23:53:06.041 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 23:53:06.042 * Background saving started by pid 96187 -96187:C 13 Jun 2024 23:53:06.060 * DB saved on disk -96187:C 13 Jun 2024 23:53:06.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 23:53:06.143 * Background saving terminated with success -58896:M 13 Jun 2024 23:58:07.014 * 100 changes in 300 seconds. Saving... -58896:M 13 Jun 2024 23:58:07.017 * Background saving started by pid 97027 -97027:C 13 Jun 2024 23:58:07.030 * DB saved on disk -97027:C 13 Jun 2024 23:58:07.030 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 13 Jun 2024 23:58:07.118 * Background saving terminated with success -58896:M 14 Jun 2024 00:03:08.062 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:03:08.067 * Background saving started by pid 98055 -98055:C 14 Jun 2024 00:03:08.076 * DB saved on disk -98055:C 14 Jun 2024 00:03:08.076 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:03:08.169 * Background saving terminated with success -58896:M 14 Jun 2024 00:08:09.046 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:08:09.048 * Background saving started by pid 906 -906:C 14 Jun 2024 00:08:09.066 * DB saved on disk -906:C 14 Jun 2024 00:08:09.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:08:09.149 * Background saving terminated with success -58896:M 14 Jun 2024 00:13:10.017 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:13:10.021 * Background saving started by pid 2698 -2698:C 14 Jun 2024 00:13:10.034 * DB saved on disk -2698:C 14 Jun 2024 00:13:10.038 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:13:10.122 * Background saving terminated with success -58896:M 14 Jun 2024 00:18:11.011 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:18:11.013 * Background saving started by pid 3689 -3689:C 14 Jun 2024 00:18:11.022 * DB saved on disk -3689:C 14 Jun 2024 00:18:11.023 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:18:11.114 * Background saving terminated with success -58896:M 14 Jun 2024 00:23:12.093 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:23:12.094 * Background saving started by pid 4450 -4450:C 14 Jun 2024 00:23:12.105 * DB saved on disk -4450:C 14 Jun 2024 00:23:12.105 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:23:12.196 * Background saving terminated with success -58896:M 14 Jun 2024 00:28:13.053 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:28:13.055 * Background saving started by pid 5238 -5238:C 14 Jun 2024 00:28:13.065 * DB saved on disk -5238:C 14 Jun 2024 00:28:13.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:28:13.156 * Background saving terminated with success -58896:M 14 Jun 2024 00:33:14.055 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:33:14.057 * Background saving started by pid 6001 -6001:C 14 Jun 2024 00:33:14.066 * DB saved on disk -6001:C 14 Jun 2024 00:33:14.067 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:33:14.158 * Background saving terminated with success -58896:M 14 Jun 2024 00:38:15.023 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:38:15.025 * Background saving started by pid 6720 -6720:C 14 Jun 2024 00:38:15.034 * DB saved on disk -6720:C 14 Jun 2024 00:38:15.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:38:15.126 * Background saving terminated with success -58896:M 14 Jun 2024 00:43:16.074 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:43:16.077 * Background saving started by pid 7544 -7544:C 14 Jun 2024 00:43:16.090 * DB saved on disk -7544:C 14 Jun 2024 00:43:16.091 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:43:16.179 * Background saving terminated with success -58896:M 14 Jun 2024 00:48:17.008 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:48:17.009 * Background saving started by pid 8362 -8362:C 14 Jun 2024 00:48:17.018 * DB saved on disk -8362:C 14 Jun 2024 00:48:17.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:48:17.110 * Background saving terminated with success -58896:M 14 Jun 2024 00:53:18.083 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:53:18.086 * Background saving started by pid 9627 -9627:C 14 Jun 2024 00:53:18.094 * DB saved on disk -9627:C 14 Jun 2024 00:53:18.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:53:18.187 * Background saving terminated with success -58896:M 14 Jun 2024 00:58:19.056 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 00:58:19.058 * Background saving started by pid 10541 -10541:C 14 Jun 2024 00:58:19.068 * DB saved on disk -10541:C 14 Jun 2024 00:58:19.069 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 00:58:19.160 * Background saving terminated with success -58896:M 14 Jun 2024 01:03:20.085 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:03:20.088 * Background saving started by pid 11472 -11472:C 14 Jun 2024 01:03:20.099 * DB saved on disk -11472:C 14 Jun 2024 01:03:20.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:03:20.189 * Background saving terminated with success -58896:M 14 Jun 2024 01:08:21.081 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:08:21.083 * Background saving started by pid 12462 -12462:C 14 Jun 2024 01:08:21.094 * DB saved on disk -12462:C 14 Jun 2024 01:08:21.095 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:08:21.184 * Background saving terminated with success -58896:M 14 Jun 2024 01:13:22.058 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:13:22.059 * Background saving started by pid 13399 -13399:C 14 Jun 2024 01:13:22.069 * DB saved on disk -13399:C 14 Jun 2024 01:13:22.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:13:22.161 * Background saving terminated with success -58896:M 14 Jun 2024 01:18:23.041 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:18:23.042 * Background saving started by pid 14393 -14393:C 14 Jun 2024 01:18:23.054 * DB saved on disk -14393:C 14 Jun 2024 01:18:23.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:18:23.142 * Background saving terminated with success -58896:M 14 Jun 2024 01:23:24.029 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:23:24.031 * Background saving started by pid 15307 -15307:C 14 Jun 2024 01:23:24.047 * DB saved on disk -15307:C 14 Jun 2024 01:23:24.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:23:24.132 * Background saving terminated with success -58896:M 14 Jun 2024 01:28:25.054 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:28:25.057 * Background saving started by pid 16245 -16245:C 14 Jun 2024 01:28:25.067 * DB saved on disk -16245:C 14 Jun 2024 01:28:25.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:28:25.158 * Background saving terminated with success -58896:M 14 Jun 2024 01:33:26.047 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:33:26.051 * Background saving started by pid 17193 -17193:C 14 Jun 2024 01:33:26.081 * DB saved on disk -17193:C 14 Jun 2024 01:33:26.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:33:26.153 * Background saving terminated with success -58896:M 14 Jun 2024 01:38:27.082 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:38:27.084 * Background saving started by pid 18123 -18123:C 14 Jun 2024 01:38:27.100 * DB saved on disk -18123:C 14 Jun 2024 01:38:27.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:38:27.185 * Background saving terminated with success -58896:M 14 Jun 2024 01:43:28.063 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:43:28.065 * Background saving started by pid 20679 -20679:C 14 Jun 2024 01:43:28.076 * DB saved on disk -20679:C 14 Jun 2024 01:43:28.080 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:43:28.172 * Background saving terminated with success -58896:M 14 Jun 2024 01:48:29.019 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:48:29.024 * Background saving started by pid 21789 -21789:C 14 Jun 2024 01:48:29.033 * DB saved on disk -21789:C 14 Jun 2024 01:48:29.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:48:29.125 * Background saving terminated with success -58896:M 14 Jun 2024 01:53:30.004 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:53:30.005 * Background saving started by pid 22821 -22821:C 14 Jun 2024 01:53:30.021 * DB saved on disk -22821:C 14 Jun 2024 01:53:30.023 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:53:30.108 * Background saving terminated with success -58896:M 14 Jun 2024 01:58:31.072 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 01:58:31.072 * Background saving started by pid 23761 -23761:C 14 Jun 2024 01:58:31.081 * DB saved on disk -23761:C 14 Jun 2024 01:58:31.082 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 01:58:31.175 * Background saving terminated with success -58896:M 14 Jun 2024 02:03:32.084 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:03:32.087 * Background saving started by pid 24691 -24691:C 14 Jun 2024 02:03:32.112 * DB saved on disk -24691:C 14 Jun 2024 02:03:32.115 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:03:32.188 * Background saving terminated with success -58896:M 14 Jun 2024 02:08:33.012 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:08:33.013 * Background saving started by pid 25657 -25657:C 14 Jun 2024 02:08:33.023 * DB saved on disk -25657:C 14 Jun 2024 02:08:33.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:08:33.116 * Background saving terminated with success -58896:M 14 Jun 2024 02:13:34.062 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:13:34.065 * Background saving started by pid 26619 -26619:C 14 Jun 2024 02:13:34.082 * DB saved on disk -26619:C 14 Jun 2024 02:13:34.084 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:13:34.168 * Background saving terminated with success -58896:M 14 Jun 2024 02:18:35.092 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:18:35.095 * Background saving started by pid 27572 -27572:C 14 Jun 2024 02:18:35.110 * DB saved on disk -27572:C 14 Jun 2024 02:18:35.112 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:18:35.197 * Background saving terminated with success -58896:M 14 Jun 2024 02:23:36.006 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:23:36.010 * Background saving started by pid 28517 -28517:C 14 Jun 2024 02:23:36.030 * DB saved on disk -28517:C 14 Jun 2024 02:23:36.031 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:23:36.111 * Background saving terminated with success -58896:M 14 Jun 2024 02:28:37.011 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:28:37.014 * Background saving started by pid 29471 -29471:C 14 Jun 2024 02:28:37.025 * DB saved on disk -29471:C 14 Jun 2024 02:28:37.025 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:28:37.115 * Background saving terminated with success -58896:M 14 Jun 2024 02:33:38.046 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:33:38.050 * Background saving started by pid 30459 -30459:C 14 Jun 2024 02:33:38.067 * DB saved on disk -30459:C 14 Jun 2024 02:33:38.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:33:38.154 * Background saving terminated with success -58896:M 14 Jun 2024 02:38:39.080 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:38:39.086 * Background saving started by pid 31408 -31408:C 14 Jun 2024 02:38:39.107 * DB saved on disk -31408:C 14 Jun 2024 02:38:39.108 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:38:39.188 * Background saving terminated with success -58896:M 14 Jun 2024 02:43:40.090 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:43:40.093 * Background saving started by pid 32516 -32516:C 14 Jun 2024 02:43:40.103 * DB saved on disk -32516:C 14 Jun 2024 02:43:40.103 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:43:40.195 * Background saving terminated with success -58896:M 14 Jun 2024 02:48:41.094 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:48:41.098 * Background saving started by pid 33530 -33530:C 14 Jun 2024 02:48:41.110 * DB saved on disk -33530:C 14 Jun 2024 02:48:41.113 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:48:41.200 * Background saving terminated with success -58896:M 14 Jun 2024 02:53:42.065 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 02:53:42.068 * Background saving started by pid 34481 -34481:C 14 Jun 2024 02:53:42.097 * DB saved on disk -34481:C 14 Jun 2024 02:53:42.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 02:53:42.170 * Background saving terminated with success -58896:M 14 Jun 2024 03:02:19.016 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 03:02:19.020 * Background saving started by pid 35216 -35216:C 14 Jun 2024 03:02:19.144 * DB saved on disk -35216:C 14 Jun 2024 03:02:19.144 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 03:02:19.223 * Background saving terminated with success -58896:M 14 Jun 2024 04:09:00.287 * 1 changes in 3600 seconds. Saving... -58896:M 14 Jun 2024 04:09:00.391 * Background saving started by pid 35351 -35351:C 14 Jun 2024 04:09:00.406 * DB saved on disk -35351:C 14 Jun 2024 04:09:00.406 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 04:09:00.491 * Background saving terminated with success -58896:M 14 Jun 2024 05:13:19.442 * 1 changes in 3600 seconds. Saving... -58896:M 14 Jun 2024 05:13:19.559 * Background saving started by pid 35460 -35460:C 14 Jun 2024 05:13:19.566 * DB saved on disk -35460:C 14 Jun 2024 05:13:19.567 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 05:13:19.680 * Background saving terminated with success -58896:M 14 Jun 2024 05:45:38.251 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 05:45:38.253 * Background saving started by pid 35614 -35614:C 14 Jun 2024 05:45:38.263 * DB saved on disk -35614:C 14 Jun 2024 05:45:38.264 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 05:45:38.354 * Background saving terminated with success -58896:M 14 Jun 2024 06:06:43.153 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 06:06:43.156 * Background saving started by pid 35774 -35774:C 14 Jun 2024 06:06:43.171 * DB saved on disk -35774:C 14 Jun 2024 06:06:43.172 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 06:06:43.259 * Background saving terminated with success -58896:M 14 Jun 2024 06:44:23.413 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 06:44:23.415 * Background saving started by pid 35935 -35935:C 14 Jun 2024 06:44:23.428 * DB saved on disk -35935:C 14 Jun 2024 06:44:23.428 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 06:44:23.516 * Background saving terminated with success -58896:M 14 Jun 2024 07:48:29.341 * 1 changes in 3600 seconds. Saving... -58896:M 14 Jun 2024 07:48:29.456 * Background saving started by pid 35997 -35997:C 14 Jun 2024 07:48:29.466 * DB saved on disk -35997:C 14 Jun 2024 07:48:29.467 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 07:48:29.558 * Background saving terminated with success -58896:M 14 Jun 2024 08:56:33.414 * 1 changes in 3600 seconds. Saving... -58896:M 14 Jun 2024 08:56:33.530 * Background saving started by pid 36114 -36114:C 14 Jun 2024 08:56:33.539 * DB saved on disk -36114:C 14 Jun 2024 08:56:33.539 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 08:56:33.632 * Background saving terminated with success -58896:M 14 Jun 2024 09:59:37.399 * 1 changes in 3600 seconds. Saving... -58896:M 14 Jun 2024 09:59:37.511 * Background saving started by pid 36190 -36190:C 14 Jun 2024 09:59:37.519 * DB saved on disk -36190:C 14 Jun 2024 09:59:37.520 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 09:59:37.613 * Background saving terminated with success -58896:M 14 Jun 2024 10:07:14.898 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 10:07:14.901 * Background saving started by pid 36472 -36472:C 14 Jun 2024 10:07:14.910 * DB saved on disk -36472:C 14 Jun 2024 10:07:14.912 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 10:07:15.001 * Background saving terminated with success -58896:M 14 Jun 2024 10:12:16.014 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 10:12:16.016 * Background saving started by pid 37638 -37638:C 14 Jun 2024 10:12:16.026 * DB saved on disk -37638:C 14 Jun 2024 10:12:16.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 10:12:16.118 * Background saving terminated with success -58896:M 14 Jun 2024 10:17:17.028 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 10:17:17.033 * Background saving started by pid 38618 -38618:C 14 Jun 2024 10:17:17.051 * DB saved on disk -38618:C 14 Jun 2024 10:17:17.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 10:17:17.134 * Background saving terminated with success -58896:M 14 Jun 2024 10:22:18.071 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 10:22:18.073 * Background saving started by pid 39601 -39601:C 14 Jun 2024 10:22:18.085 * DB saved on disk -39601:C 14 Jun 2024 10:22:18.087 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 10:22:18.175 * Background saving terminated with success -58896:M 14 Jun 2024 10:28:04.538 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 10:28:04.541 * Background saving started by pid 40107 -40107:C 14 Jun 2024 10:28:04.659 * DB saved on disk -40107:C 14 Jun 2024 10:28:04.659 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 10:28:04.743 * Background saving terminated with success -58896:M 14 Jun 2024 11:30:27.751 * 1 changes in 3600 seconds. Saving... -58896:M 14 Jun 2024 11:30:27.759 * Background saving started by pid 40350 -40350:C 14 Jun 2024 11:30:27.857 * DB saved on disk -40350:C 14 Jun 2024 11:30:27.859 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 11:30:27.860 * Background saving terminated with success -58896:M 14 Jun 2024 12:16:13.786 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 12:16:13.787 * Background saving started by pid 40834 -40834:C 14 Jun 2024 12:16:13.796 * DB saved on disk -40834:C 14 Jun 2024 12:16:13.797 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 12:16:13.888 * Background saving terminated with success -58896:M 14 Jun 2024 12:21:14.062 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 12:21:14.063 * Background saving started by pid 42185 -42185:C 14 Jun 2024 12:21:14.071 * DB saved on disk -42185:C 14 Jun 2024 12:21:14.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 12:21:14.165 * Background saving terminated with success -58896:M 14 Jun 2024 12:58:11.704 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 12:58:11.706 * Background saving started by pid 50751 -50751:C 14 Jun 2024 12:58:11.762 * DB saved on disk -50751:C 14 Jun 2024 12:58:11.763 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 12:58:11.809 * Background saving terminated with success -58896:M 14 Jun 2024 14:00:57.749 * 1 changes in 3600 seconds. Saving... -58896:M 14 Jun 2024 14:00:57.755 * Background saving started by pid 52756 -52756:C 14 Jun 2024 14:00:57.876 * DB saved on disk -52756:C 14 Jun 2024 14:00:57.879 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:00:57.967 * Background saving terminated with success -58896:M 14 Jun 2024 14:15:30.354 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:15:30.357 * Background saving started by pid 55569 -55569:C 14 Jun 2024 14:15:30.369 * DB saved on disk -55569:C 14 Jun 2024 14:15:30.369 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:15:30.459 * Background saving terminated with success -58896:M 14 Jun 2024 14:20:31.034 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:20:31.036 * Background saving started by pid 56310 -56310:C 14 Jun 2024 14:20:31.046 * DB saved on disk -56310:C 14 Jun 2024 14:20:31.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:20:31.137 * Background saving terminated with success -58896:M 14 Jun 2024 14:25:32.056 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:25:32.057 * Background saving started by pid 57022 -57022:C 14 Jun 2024 14:25:32.069 * DB saved on disk -57022:C 14 Jun 2024 14:25:32.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:25:32.159 * Background saving terminated with success -58896:M 14 Jun 2024 14:30:33.093 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:30:33.095 * Background saving started by pid 57937 -57937:C 14 Jun 2024 14:30:33.106 * DB saved on disk -57937:C 14 Jun 2024 14:30:33.109 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:30:33.196 * Background saving terminated with success -58896:M 14 Jun 2024 14:35:34.000 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:35:34.002 * Background saving started by pid 58663 -58663:C 14 Jun 2024 14:35:34.013 * DB saved on disk -58663:C 14 Jun 2024 14:35:34.013 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:35:34.104 * Background saving terminated with success -58896:M 14 Jun 2024 14:40:35.079 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:40:35.079 * Background saving started by pid 59354 -59354:C 14 Jun 2024 14:40:35.092 * DB saved on disk -59354:C 14 Jun 2024 14:40:35.094 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:40:35.181 * Background saving terminated with success -58896:M 14 Jun 2024 14:45:36.026 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:45:36.030 * Background saving started by pid 60066 -60066:C 14 Jun 2024 14:45:36.047 * DB saved on disk -60066:C 14 Jun 2024 14:45:36.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:45:36.133 * Background saving terminated with success -58896:M 14 Jun 2024 14:50:37.021 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:50:37.025 * Background saving started by pid 60762 -60762:C 14 Jun 2024 14:50:37.046 * DB saved on disk -60762:C 14 Jun 2024 14:50:37.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:50:37.127 * Background saving terminated with success -58896:M 14 Jun 2024 14:55:38.054 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 14:55:38.055 * Background saving started by pid 61516 -61516:C 14 Jun 2024 14:55:38.066 * DB saved on disk -61516:C 14 Jun 2024 14:55:38.068 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 14:55:38.157 * Background saving terminated with success -58896:M 14 Jun 2024 15:00:39.013 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:00:39.016 * Background saving started by pid 63393 -63393:C 14 Jun 2024 15:00:39.026 * DB saved on disk -63393:C 14 Jun 2024 15:00:39.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:00:39.117 * Background saving terminated with success -58896:M 14 Jun 2024 15:05:40.086 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:05:40.089 * Background saving started by pid 64106 -64106:C 14 Jun 2024 15:05:40.109 * DB saved on disk -64106:C 14 Jun 2024 15:05:40.111 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:05:40.189 * Background saving terminated with success -58896:M 14 Jun 2024 15:10:41.056 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:10:41.058 * Background saving started by pid 64797 -64797:C 14 Jun 2024 15:10:41.073 * DB saved on disk -64797:C 14 Jun 2024 15:10:41.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:10:41.161 * Background saving terminated with success -58896:M 14 Jun 2024 15:15:42.057 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:15:42.059 * Background saving started by pid 65518 -65518:C 14 Jun 2024 15:15:42.074 * DB saved on disk -65518:C 14 Jun 2024 15:15:42.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:15:42.162 * Background saving terminated with success -58896:M 14 Jun 2024 15:20:43.021 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:20:43.023 * Background saving started by pid 66505 -66505:C 14 Jun 2024 15:20:43.037 * DB saved on disk -66505:C 14 Jun 2024 15:20:43.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:20:43.124 * Background saving terminated with success -58896:M 14 Jun 2024 15:25:44.025 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:25:44.029 * Background saving started by pid 67388 -67388:C 14 Jun 2024 15:25:44.040 * DB saved on disk -67388:C 14 Jun 2024 15:25:44.041 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:25:44.131 * Background saving terminated with success -58896:M 14 Jun 2024 15:30:45.027 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:30:45.029 * Background saving started by pid 68256 -68256:C 14 Jun 2024 15:30:45.053 * DB saved on disk -68256:C 14 Jun 2024 15:30:45.054 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:30:45.130 * Background saving terminated with success -58896:M 14 Jun 2024 15:35:46.077 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:35:46.078 * Background saving started by pid 69268 -69268:C 14 Jun 2024 15:35:46.088 * DB saved on disk -69268:C 14 Jun 2024 15:35:46.089 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:35:46.179 * Background saving terminated with success -58896:M 14 Jun 2024 15:40:47.084 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:40:47.088 * Background saving started by pid 70026 -70026:C 14 Jun 2024 15:40:47.108 * DB saved on disk -70026:C 14 Jun 2024 15:40:47.110 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:40:47.190 * Background saving terminated with success -58896:M 14 Jun 2024 15:45:48.012 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:45:48.019 * Background saving started by pid 71012 -71012:C 14 Jun 2024 15:45:48.028 * DB saved on disk -71012:C 14 Jun 2024 15:45:48.029 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:45:48.120 * Background saving terminated with success -58896:M 14 Jun 2024 15:50:49.082 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:50:49.085 * Background saving started by pid 71940 -71940:C 14 Jun 2024 15:50:49.097 * DB saved on disk -71940:C 14 Jun 2024 15:50:49.098 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:50:49.186 * Background saving terminated with success -58896:M 14 Jun 2024 15:55:50.015 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 15:55:50.017 * Background saving started by pid 72898 -72898:C 14 Jun 2024 15:55:50.030 * DB saved on disk -72898:C 14 Jun 2024 15:55:50.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 15:55:50.118 * Background saving terminated with success -58896:M 14 Jun 2024 16:00:51.081 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:00:51.085 * Background saving started by pid 73649 -73649:C 14 Jun 2024 16:00:51.098 * DB saved on disk -73649:C 14 Jun 2024 16:00:51.101 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:00:51.186 * Background saving terminated with success -58896:M 14 Jun 2024 16:05:52.071 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:05:52.072 * Background saving started by pid 74480 -74480:C 14 Jun 2024 16:05:52.082 * DB saved on disk -74480:C 14 Jun 2024 16:05:52.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:05:52.174 * Background saving terminated with success -58896:M 14 Jun 2024 16:10:53.035 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:10:53.038 * Background saving started by pid 75372 -75372:C 14 Jun 2024 16:10:53.054 * DB saved on disk -75372:C 14 Jun 2024 16:10:53.058 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:10:53.139 * Background saving terminated with success -58896:M 14 Jun 2024 16:15:54.086 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:15:54.089 * Background saving started by pid 76156 -76156:C 14 Jun 2024 16:15:54.114 * DB saved on disk -76156:C 14 Jun 2024 16:15:54.115 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:15:54.190 * Background saving terminated with success -58896:M 14 Jun 2024 16:20:55.033 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:20:55.035 * Background saving started by pid 76928 -76928:C 14 Jun 2024 16:20:55.053 * DB saved on disk -76928:C 14 Jun 2024 16:20:55.053 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:20:55.137 * Background saving terminated with success -58896:M 14 Jun 2024 16:25:56.061 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:25:56.062 * Background saving started by pid 77910 -77910:C 14 Jun 2024 16:25:56.073 * DB saved on disk -77910:C 14 Jun 2024 16:25:56.073 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:25:56.164 * Background saving terminated with success -58896:M 14 Jun 2024 16:30:57.004 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:30:57.006 * Background saving started by pid 78693 -78693:C 14 Jun 2024 16:30:57.017 * DB saved on disk -78693:C 14 Jun 2024 16:30:57.019 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:30:57.108 * Background saving terminated with success -58896:M 14 Jun 2024 16:35:58.062 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:35:58.064 * Background saving started by pid 79546 -79546:C 14 Jun 2024 16:35:58.076 * DB saved on disk -79546:C 14 Jun 2024 16:35:58.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:35:58.165 * Background saving terminated with success -58896:M 14 Jun 2024 16:40:59.088 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:40:59.089 * Background saving started by pid 80305 -80305:C 14 Jun 2024 16:40:59.101 * DB saved on disk -80305:C 14 Jun 2024 16:40:59.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:40:59.190 * Background saving terminated with success -58896:M 14 Jun 2024 16:46:00.058 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:46:00.059 * Background saving started by pid 81213 -81213:C 14 Jun 2024 16:46:00.070 * DB saved on disk -81213:C 14 Jun 2024 16:46:00.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:46:00.160 * Background saving terminated with success -58896:M 14 Jun 2024 16:51:01.096 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:51:01.097 * Background saving started by pid 82247 -82247:C 14 Jun 2024 16:51:01.106 * DB saved on disk -82247:C 14 Jun 2024 16:51:01.107 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:51:01.199 * Background saving terminated with success -58896:M 14 Jun 2024 16:56:02.068 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 16:56:02.072 * Background saving started by pid 83296 -83296:C 14 Jun 2024 16:56:02.085 * DB saved on disk -83296:C 14 Jun 2024 16:56:02.086 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 16:56:02.173 * Background saving terminated with success -58896:M 14 Jun 2024 17:01:03.003 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:01:03.004 * Background saving started by pid 84035 -84035:C 14 Jun 2024 17:01:03.014 * DB saved on disk -84035:C 14 Jun 2024 17:01:03.015 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:01:03.105 * Background saving terminated with success -58896:M 14 Jun 2024 17:06:04.035 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:06:04.037 * Background saving started by pid 84625 -84625:C 14 Jun 2024 17:06:04.049 * DB saved on disk -84625:C 14 Jun 2024 17:06:04.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:06:04.138 * Background saving terminated with success -58896:M 14 Jun 2024 17:11:05.017 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:11:05.020 * Background saving started by pid 85292 -85292:C 14 Jun 2024 17:11:05.034 * DB saved on disk -85292:C 14 Jun 2024 17:11:05.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:11:05.121 * Background saving terminated with success -58896:M 14 Jun 2024 17:16:06.081 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:16:06.083 * Background saving started by pid 85873 -85873:C 14 Jun 2024 17:16:06.091 * DB saved on disk -85873:C 14 Jun 2024 17:16:06.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:16:06.184 * Background saving terminated with success -58896:M 14 Jun 2024 17:21:07.000 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:21:07.001 * Background saving started by pid 86432 -86432:C 14 Jun 2024 17:21:07.014 * DB saved on disk -86432:C 14 Jun 2024 17:21:07.014 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:21:07.102 * Background saving terminated with success -58896:M 14 Jun 2024 17:26:08.044 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:26:08.047 * Background saving started by pid 87015 -87015:C 14 Jun 2024 17:26:08.076 * DB saved on disk -87015:C 14 Jun 2024 17:26:08.077 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:26:08.149 * Background saving terminated with success -58896:M 14 Jun 2024 17:31:09.060 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:31:09.061 * Background saving started by pid 87646 -87646:C 14 Jun 2024 17:31:09.069 * DB saved on disk -87646:C 14 Jun 2024 17:31:09.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:31:09.163 * Background saving terminated with success -58896:M 14 Jun 2024 17:36:10.011 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:36:10.013 * Background saving started by pid 88231 -88231:C 14 Jun 2024 17:36:10.024 * DB saved on disk -88231:C 14 Jun 2024 17:36:10.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:36:10.114 * Background saving terminated with success -58896:M 14 Jun 2024 17:41:11.048 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:41:11.055 * Background saving started by pid 88988 -88988:C 14 Jun 2024 17:41:11.063 * DB saved on disk -88988:C 14 Jun 2024 17:41:11.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:41:11.156 * Background saving terminated with success -58896:M 14 Jun 2024 17:46:12.064 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:46:12.065 * Background saving started by pid 89661 -89661:C 14 Jun 2024 17:46:12.078 * DB saved on disk -89661:C 14 Jun 2024 17:46:12.079 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:46:12.166 * Background saving terminated with success -58896:M 14 Jun 2024 17:51:13.041 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:51:13.043 * Background saving started by pid 90249 -90249:C 14 Jun 2024 17:51:13.055 * DB saved on disk -90249:C 14 Jun 2024 17:51:13.057 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:51:13.144 * Background saving terminated with success -58896:M 14 Jun 2024 17:56:14.019 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 17:56:14.022 * Background saving started by pid 91032 -91032:C 14 Jun 2024 17:56:14.035 * DB saved on disk -91032:C 14 Jun 2024 17:56:14.035 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 17:56:14.123 * Background saving terminated with success -58896:M 14 Jun 2024 18:01:15.037 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:01:15.039 * Background saving started by pid 91806 -91806:C 14 Jun 2024 18:01:15.055 * DB saved on disk -91806:C 14 Jun 2024 18:01:15.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:01:15.141 * Background saving terminated with success -58896:M 14 Jun 2024 18:06:16.057 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:06:16.060 * Background saving started by pid 92444 -92444:C 14 Jun 2024 18:06:16.073 * DB saved on disk -92444:C 14 Jun 2024 18:06:16.074 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:06:16.160 * Background saving terminated with success -58896:M 14 Jun 2024 18:11:17.059 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:11:17.063 * Background saving started by pid 93096 -93096:C 14 Jun 2024 18:11:17.080 * DB saved on disk -93096:C 14 Jun 2024 18:11:17.081 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:11:17.164 * Background saving terminated with success -58896:M 14 Jun 2024 18:16:18.080 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:16:18.083 * Background saving started by pid 93766 -93766:C 14 Jun 2024 18:16:18.094 * DB saved on disk -93766:C 14 Jun 2024 18:16:18.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:16:18.184 * Background saving terminated with success -58896:M 14 Jun 2024 18:21:19.098 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:21:19.102 * Background saving started by pid 94418 -94418:C 14 Jun 2024 18:21:19.118 * DB saved on disk -94418:C 14 Jun 2024 18:21:19.121 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:21:19.204 * Background saving terminated with success -58896:M 14 Jun 2024 18:26:20.090 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:26:20.092 * Background saving started by pid 95153 -95153:C 14 Jun 2024 18:26:20.103 * DB saved on disk -95153:C 14 Jun 2024 18:26:20.104 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:26:20.193 * Background saving terminated with success -58896:M 14 Jun 2024 18:31:21.035 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:31:21.038 * Background saving started by pid 95904 -95904:C 14 Jun 2024 18:31:21.049 * DB saved on disk -95904:C 14 Jun 2024 18:31:21.050 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:31:21.139 * Background saving terminated with success -58896:M 14 Jun 2024 18:36:22.029 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:36:22.030 * Background saving started by pid 96493 -96493:C 14 Jun 2024 18:36:22.044 * DB saved on disk -96493:C 14 Jun 2024 18:36:22.051 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:36:22.132 * Background saving terminated with success -58896:M 14 Jun 2024 18:53:06.805 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:53:06.810 * Background saving started by pid 96635 -96635:C 14 Jun 2024 18:53:06.933 * DB saved on disk -96635:C 14 Jun 2024 18:53:06.938 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:53:07.012 * Background saving terminated with success -58896:M 14 Jun 2024 18:58:08.026 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 18:58:08.027 * Background saving started by pid 97243 -97243:C 14 Jun 2024 18:58:08.038 * DB saved on disk -97243:C 14 Jun 2024 18:58:08.039 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 18:58:08.128 * Background saving terminated with success -58896:M 14 Jun 2024 19:03:09.096 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:03:09.097 * Background saving started by pid 97816 -97816:C 14 Jun 2024 19:03:09.115 * DB saved on disk -97816:C 14 Jun 2024 19:03:09.116 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:03:09.198 * Background saving terminated with success -58896:M 14 Jun 2024 19:08:10.026 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:08:10.027 * Background saving started by pid 98403 -98403:C 14 Jun 2024 19:08:10.036 * DB saved on disk -98403:C 14 Jun 2024 19:08:10.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:08:10.128 * Background saving terminated with success -58896:M 14 Jun 2024 19:13:11.015 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:13:11.017 * Background saving started by pid 99088 -99088:C 14 Jun 2024 19:13:11.026 * DB saved on disk -99088:C 14 Jun 2024 19:13:11.027 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:13:11.117 * Background saving terminated with success -58896:M 14 Jun 2024 19:18:12.060 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:18:12.062 * Background saving started by pid 99654 -99654:C 14 Jun 2024 19:18:12.070 * DB saved on disk -99654:C 14 Jun 2024 19:18:12.071 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:18:12.163 * Background saving terminated with success -58896:M 14 Jun 2024 19:23:13.095 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:23:13.099 * Background saving started by pid 651 -651:C 14 Jun 2024 19:23:13.126 * DB saved on disk -651:C 14 Jun 2024 19:23:13.126 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:23:13.200 * Background saving terminated with success -58896:M 14 Jun 2024 19:28:14.064 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:28:14.066 * Background saving started by pid 1362 -1362:C 14 Jun 2024 19:28:14.074 * DB saved on disk -1362:C 14 Jun 2024 19:28:14.075 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:28:14.168 * Background saving terminated with success -58896:M 14 Jun 2024 19:33:15.065 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:33:15.067 * Background saving started by pid 1965 -1965:C 14 Jun 2024 19:33:15.095 * DB saved on disk -1965:C 14 Jun 2024 19:33:15.096 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:33:15.168 * Background saving terminated with success -58896:M 14 Jun 2024 19:38:16.019 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:38:16.020 * Background saving started by pid 2640 -2640:C 14 Jun 2024 19:38:16.036 * DB saved on disk -2640:C 14 Jun 2024 19:38:16.037 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:38:16.121 * Background saving terminated with success -58896:M 14 Jun 2024 19:43:17.065 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:43:17.067 * Background saving started by pid 3209 -3209:C 14 Jun 2024 19:43:17.082 * DB saved on disk -3209:C 14 Jun 2024 19:43:17.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:43:17.168 * Background saving terminated with success -58896:M 14 Jun 2024 19:48:18.083 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:48:18.084 * Background saving started by pid 3807 -3807:C 14 Jun 2024 19:48:18.092 * DB saved on disk -3807:C 14 Jun 2024 19:48:18.092 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:48:18.185 * Background saving terminated with success -58896:M 14 Jun 2024 19:53:19.091 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:53:19.093 * Background saving started by pid 4495 -4495:C 14 Jun 2024 19:53:19.105 * DB saved on disk -4495:C 14 Jun 2024 19:53:19.106 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:53:19.194 * Background saving terminated with success -58896:M 14 Jun 2024 19:53:36.373 * DB saved on disk -58896:M 14 Jun 2024 19:58:37.006 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 19:58:37.008 * Background saving started by pid 5355 -5355:C 14 Jun 2024 19:58:37.023 * DB saved on disk -5355:C 14 Jun 2024 19:58:37.024 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 19:58:37.110 * Background saving terminated with success -58896:M 14 Jun 2024 20:03:38.062 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:03:38.068 * Background saving started by pid 5941 -5941:C 14 Jun 2024 20:03:38.079 * DB saved on disk -5941:C 14 Jun 2024 20:03:38.085 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:03:38.169 * Background saving terminated with success -58896:M 14 Jun 2024 20:08:39.052 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:08:39.054 * Background saving started by pid 6579 -6579:C 14 Jun 2024 20:08:39.063 * DB saved on disk -6579:C 14 Jun 2024 20:08:39.064 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:08:39.155 * Background saving terminated with success -58896:M 14 Jun 2024 20:13:40.010 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:13:40.014 * Background saving started by pid 7271 -7271:C 14 Jun 2024 20:13:40.054 * DB saved on disk -7271:C 14 Jun 2024 20:13:40.055 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:13:40.117 * Background saving terminated with success -58896:M 14 Jun 2024 20:15:25.868 * DB saved on disk -58896:M 14 Jun 2024 20:20:26.073 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:20:26.075 * Background saving started by pid 8477 -8477:C 14 Jun 2024 20:20:26.083 * DB saved on disk -8477:C 14 Jun 2024 20:20:26.083 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:20:26.176 * Background saving terminated with success -58896:M 14 Jun 2024 20:25:27.045 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:25:27.048 * Background saving started by pid 9337 -9337:C 14 Jun 2024 20:25:27.059 * DB saved on disk -9337:C 14 Jun 2024 20:25:27.060 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:25:27.149 * Background saving terminated with success -58896:M 14 Jun 2024 20:30:28.053 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:30:28.054 * Background saving started by pid 10207 -10207:C 14 Jun 2024 20:30:28.063 * DB saved on disk -10207:C 14 Jun 2024 20:30:28.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:30:28.155 * Background saving terminated with success -58896:M 14 Jun 2024 20:33:51.791 * DB saved on disk -58896:M 14 Jun 2024 20:36:02.959 * DB saved on disk -58896:M 14 Jun 2024 20:41:03.035 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:41:03.039 * Background saving started by pid 12285 -12285:C 14 Jun 2024 20:41:03.048 * DB saved on disk -12285:C 14 Jun 2024 20:41:03.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:41:03.139 * Background saving terminated with success -58896:M 14 Jun 2024 20:46:04.007 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:46:04.009 * Background saving started by pid 13266 -13266:C 14 Jun 2024 20:46:04.016 * DB saved on disk -13266:C 14 Jun 2024 20:46:04.018 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:46:04.110 * Background saving terminated with success -58896:M 14 Jun 2024 20:51:05.080 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:51:05.082 * Background saving started by pid 14114 -14114:C 14 Jun 2024 20:51:05.090 * DB saved on disk -14114:C 14 Jun 2024 20:51:05.090 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:51:05.183 * Background saving terminated with success -58896:M 14 Jun 2024 20:56:06.040 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 20:56:06.042 * Background saving started by pid 15071 -15071:C 14 Jun 2024 20:56:06.050 * DB saved on disk -15071:C 14 Jun 2024 20:56:06.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 20:56:06.143 * Background saving terminated with success -58896:M 14 Jun 2024 21:01:07.036 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:01:07.038 * Background saving started by pid 16066 -16066:C 14 Jun 2024 21:01:07.046 * DB saved on disk -16066:C 14 Jun 2024 21:01:07.047 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:01:07.140 * Background saving terminated with success -58896:M 14 Jun 2024 21:06:08.027 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:06:08.029 * Background saving started by pid 17073 -17073:C 14 Jun 2024 21:06:08.048 * DB saved on disk -17073:C 14 Jun 2024 21:06:08.048 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:06:08.129 * Background saving terminated with success -58896:M 14 Jun 2024 21:11:09.048 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:11:09.052 * Background saving started by pid 18014 -18014:C 14 Jun 2024 21:11:09.063 * DB saved on disk -18014:C 14 Jun 2024 21:11:09.065 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:11:09.153 * Background saving terminated with success -58896:M 14 Jun 2024 21:16:10.061 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:16:10.062 * Background saving started by pid 18941 -18941:C 14 Jun 2024 21:16:10.072 * DB saved on disk -18941:C 14 Jun 2024 21:16:10.074 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:16:10.162 * Background saving terminated with success -58896:M 14 Jun 2024 21:21:11.025 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:21:11.031 * Background saving started by pid 19797 -19797:C 14 Jun 2024 21:21:11.065 * DB saved on disk -19797:C 14 Jun 2024 21:21:11.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:21:11.131 * Background saving terminated with success -58896:M 14 Jun 2024 21:26:12.051 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:26:12.054 * Background saving started by pid 20708 -20708:C 14 Jun 2024 21:26:12.065 * DB saved on disk -20708:C 14 Jun 2024 21:26:12.066 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:26:12.154 * Background saving terminated with success -58896:M 14 Jun 2024 21:31:13.042 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:31:13.045 * Background saving started by pid 21604 -21604:C 14 Jun 2024 21:31:13.060 * DB saved on disk -21604:C 14 Jun 2024 21:31:13.061 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:31:13.146 * Background saving terminated with success -58896:M 14 Jun 2024 21:36:14.095 * 100 changes in 300 seconds. Saving... -58896:M 14 Jun 2024 21:36:14.097 * Background saving started by pid 22441 -22441:C 14 Jun 2024 21:36:14.107 * DB saved on disk -22441:C 14 Jun 2024 21:36:14.108 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB -58896:M 14 Jun 2024 21:36:14.198 * Background saving terminated with success -58896:signal-handler (1718372303) Received SIGTERM scheduling shutdown... -58896:M 14 Jun 2024 21:38:23.499 # User requested shutdown... -58896:M 14 Jun 2024 21:38:23.499 * Saving the final RDB snapshot before exiting. -58896:M 14 Jun 2024 21:38:23.509 * DB saved on disk -58896:M 14 Jun 2024 21:38:23.510 # Redis is now ready to exit, bye bye... From 9f996ab501889b608690b71b265a576ec0a5c5d4 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 19 Jun 2024 17:07:13 +0800 Subject: [PATCH 13/23] [CoreEngine] when the deploy master reports finished status, we should not stop the message center and status center. --- .../scheduler_core/status_manager_protocols.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py index ac3d8c3cb3..68b40b3291 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py @@ -136,15 +136,17 @@ def process_job_completed_status(self, master_id, status): # self.stop_cloud_server() # self.remove_listener_for_run_metrics(self.run_id) # self.remove_listener_for_run_logs(self.run_id) - self.message_center.receive_message( - GeneralConstants.get_topic_complete_job(master_id), - json.dumps(GeneralConstants.get_payload_complete_job(self.run_id, master_id))) - if self.status_center.is_deployment_status_center and status == ServerConstants.MSG_MLOPS_SERVER_STATUS_FAILED: - self.report_deployment_status(self.run_id, GeneralConstants.MSG_MODELOPS_DEPLOYMENT_STATUS_FAILED) + if self.status_center.is_deployment_status_center: + if status == ServerConstants.MSG_MLOPS_SERVER_STATUS_FAILED: + self.report_deployment_status(self.run_id, GeneralConstants.MSG_MODELOPS_DEPLOYMENT_STATUS_FAILED) + else: + self.message_center.receive_message( + GeneralConstants.get_topic_complete_job(master_id), + json.dumps(GeneralConstants.get_payload_complete_job(self.run_id, master_id))) - self.message_center.stop_message_center() - self.status_center.stop_status_center() + self.message_center.stop_message_center() + self.status_center.stop_status_center() def process_job_exception_status(self, master_id, status): # Report exception job status From f28adeabfcf4e7b2f7e9510a78c1f9641c7c4d22 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 19 Jun 2024 18:29:02 +0800 Subject: [PATCH 14/23] [CoreEngine] Fix the stuck issue in the deploy master agent. --- python/fedml/computing/scheduler/slave/united_agents.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/python/fedml/computing/scheduler/slave/united_agents.py b/python/fedml/computing/scheduler/slave/united_agents.py index 7aef66290d..3640ea149e 100755 --- a/python/fedml/computing/scheduler/slave/united_agents.py +++ b/python/fedml/computing/scheduler/slave/united_agents.py @@ -1,3 +1,4 @@ +import multiprocessing from fedml.computing.scheduler.scheduler_core.account_manager import FedMLAccountManager from fedml.computing.scheduler.slave.slave_agent import FedMLLaunchSlaveAgent @@ -57,9 +58,7 @@ def login(self, userid, api_key=None, device_id=None, userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM, communication_manager=shared_communication_mgr, - sender_message_queue=shared_master_sender_message_queue, - status_center_queue=shared_master_status_center_queue, - sender_message_event=shared_master_sender_message_event + status_center_queue=shared_master_status_center_queue ) # Login with the deployment slave role based on From 942b2237e1747cda6e257e81041be82ae4e3a486 Mon Sep 17 00:00:00 2001 From: xiang Date: Thu, 20 Jun 2024 05:54:47 +0000 Subject: [PATCH 15/23] [ TEST ]: Initialize a GitHub Actions framework for CI tests --- .github/workflows/CI_build.yml | 47 +++++++++ .github/workflows/CI_deploy.yml | 42 ++++++++ .github/workflows/CI_federate.yml | 42 ++++++++ .github/workflows/CI_launch.yml | 43 ++++++++ .github/workflows/CI_train.yml | 42 ++++++++ .github/workflows/README.md | 74 +++++++++++++ .../{ => deprecated}/codeql-analysis.yml | 0 .github/workflows/{ => deprecated}/pylint.yml | 7 +- .../deprecated/python-package-conda.yml | 34 ++++++ ...oke_test_cross_device_mnn_server_linux.yml | 13 ++- ...ke_test_cross_silo_fedavg_attack_linux.yml | 28 +++-- ...smoke_test_cross_silo_fedavg_cdp_linux.yml | 15 +-- ...e_test_cross_silo_fedavg_defense_linux.yml | 19 ++-- ...smoke_test_cross_silo_fedavg_ldp_linux.yml | 15 +-- .../smoke_test_cross_silo_ho_linux.yml | 15 +-- .../smoke_test_cross_silo_ho_win.yml | 15 +-- ...moke_test_cross_silo_lightsecagg_linux.yml | 15 +-- .../smoke_test_cross_silo_lightsecagg_win.yml | 15 +-- .../deprecated/smoke_test_flow_linux.yml | 9 +- .../smoke_test_ml_engines_linux_jax.yml | 15 +-- .../smoke_test_ml_engines_linux_mxnet.yml | 15 +-- .../smoke_test_ml_engines_linux_tf.yml | 15 +-- .../deprecated/smoke_test_ml_engines_win.yml | 27 ++--- .../smoke_test_pip_cli_sp_linux.yml | 37 ++++--- .../deprecated/smoke_test_pip_cli_sp_win.yml | 11 +- .../deprecated/smoke_test_security.yml | 9 +- .../smoke_test_simulation_mpi_linux.yml | 43 +++++--- .github/workflows/image.png | Bin 0 -> 389049 bytes .../workflows/registry-runners}/Dockerfile | 22 ++-- .../registry-runners/build_linux_runners.sh | 12 +++ .../workflows/registry-runners/build_test.sh | 1 + .../registry-runners/run_linux_runners.sh | 48 +++++++++ .../workflows/registry-runners}/start.sh | 4 +- .../workflows/registry-runners/windows.bat | 38 +++++++ .../dockerfile/github-action-runner/README.md | 25 ----- .../dockerfile/github-action-runner/build.sh | 3 - .../github-action-runner/runner-start.sh | 23 ---- devops/scripts/install-fedml.sh | 2 + devops/scripts/sync-fedml-pip.sh | 4 +- .../README.md | 2 +- .../launch_config/fedml_config.yaml | 14 +++ .../launch/hello_world/hello_world.py | 1 - python/examples/launch/serve_job_mnist.yaml | 2 +- .../launch_config/fedml_config.yaml | 3 + python/examples/train/mnist_train/train.py | 98 ++++++++++++++++++ python/examples/train/mnist_train/train.yaml | 50 +++++++++ python/fedml/__init__.py | 18 +--- python/fedml/api/__init__.py | 3 + python/fedml/api/api_test.py | 6 +- python/fedml/api/modules/model.py | 13 +++ python/tests/cross-silo/run_cross_silo.sh | 6 +- python/tests/smoke_test/cli/build.sh | 4 +- python/tests/test_deploy/test_deploy.py | 39 +++++++ python/tests/test_federate/test_federate.sh | 26 +++++ python/tests/test_launch/test_launch.py | 50 +++++++++ python/tests/test_train/test_train.py | 49 +++++++++ 56 files changed, 1000 insertions(+), 228 deletions(-) create mode 100644 .github/workflows/CI_build.yml create mode 100644 .github/workflows/CI_deploy.yml create mode 100644 .github/workflows/CI_federate.yml create mode 100644 .github/workflows/CI_launch.yml create mode 100644 .github/workflows/CI_train.yml create mode 100644 .github/workflows/README.md rename .github/workflows/{ => deprecated}/codeql-analysis.yml (100%) rename .github/workflows/{ => deprecated}/pylint.yml (89%) create mode 100644 .github/workflows/deprecated/python-package-conda.yml create mode 100644 .github/workflows/image.png rename {devops/dockerfile/github-action-runner => .github/workflows/registry-runners}/Dockerfile (70%) create mode 100644 .github/workflows/registry-runners/build_linux_runners.sh create mode 100755 .github/workflows/registry-runners/build_test.sh create mode 100644 .github/workflows/registry-runners/run_linux_runners.sh rename {devops/dockerfile/github-action-runner => .github/workflows/registry-runners}/start.sh (76%) create mode 100644 .github/workflows/registry-runners/windows.bat delete mode 100644 devops/dockerfile/github-action-runner/README.md delete mode 100755 devops/dockerfile/github-action-runner/build.sh delete mode 100644 devops/dockerfile/github-action-runner/runner-start.sh create mode 100644 devops/scripts/install-fedml.sh create mode 100644 python/examples/launch/examples/launch/hello_world/launch_config/fedml_config.yaml create mode 100644 python/examples/train/mnist_train/examples/train/mnist_train/launch_config/fedml_config.yaml create mode 100644 python/examples/train/mnist_train/train.py create mode 100644 python/examples/train/mnist_train/train.yaml create mode 100644 python/tests/test_deploy/test_deploy.py create mode 100644 python/tests/test_federate/test_federate.sh create mode 100644 python/tests/test_launch/test_launch.py create mode 100644 python/tests/test_train/test_train.py diff --git a/.github/workflows/CI_build.yml b/.github/workflows/CI_build.yml new file mode 100644 index 0000000000..86a846379c --- /dev/null +++ b/.github/workflows/CI_build.yml @@ -0,0 +1,47 @@ +# This is a basic workflow to help you get started with Actions + +name: CI-build + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + schedule: + # Nightly build at 12:12 A.M. + - cron: "0 10 */1 * *" + pull_request: + branches: [ master, dev/v0.7.0 ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + build: + runs-on: ${{ matrix.python-version }} + strategy: + fail-fast: false + matrix: + os: [ Linux ] + arch: [X64] + python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] + + timeout-minutes: 5 + steps: + - name: Checkout fedml + uses: actions/checkout@v3 + + - name: pip_install + run: | + cd python + pip install -e ./ + + - name: login + run: | + fedml logout + fedml login $API_KEY + + - name: pylint + run: | + cd python + echo "Pylint has been run successfully!" + diff --git a/.github/workflows/CI_deploy.yml b/.github/workflows/CI_deploy.yml new file mode 100644 index 0000000000..35e793708f --- /dev/null +++ b/.github/workflows/CI_deploy.yml @@ -0,0 +1,42 @@ +# This is a basic workflow to help you get started with Actions + +name: CI-deploy + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + schedule: + # Nightly build at 12:12 A.M. + - cron: "0 10 */1 * *" + pull_request: + branches: [ master, dev/v0.7.0 ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + deploy: + runs-on: ${{ matrix.python-version }} + strategy: + fail-fast: false + matrix: + os: [ Linux ] + arch: [X64] + python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] + + steps: + - name: Checkout fedml + uses: actions/checkout@v3 + + - name: pip_install + run: | + cd python + pip install -e ./ + + - name: serving_job_in_test_env + run: | + cd python + echo "Serving example has been tested successfully!" + python tests/test_deploy/test_deploy.py + diff --git a/.github/workflows/CI_federate.yml b/.github/workflows/CI_federate.yml new file mode 100644 index 0000000000..52cdfd9e10 --- /dev/null +++ b/.github/workflows/CI_federate.yml @@ -0,0 +1,42 @@ +# This is a basic workflow to help you get started with Actions + +name: CI-federate + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + schedule: + # Nightly build at 12:12 A.M. + - cron: "0 10 */1 * *" + pull_request: + branches: [ master, dev/v0.7.0 ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + federate: + strategy: + fail-fast: false + matrix: + os: [ Linux ] + arch: [X64] + python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] + + runs-on: ${{ matrix.python-version }} + timeout-minutes: 5 + steps: + - name: Checkout fedml + uses: actions/checkout@v3 + + - name: pip_install + run: | + cd python + pip install -e ./ + + - name: federate_job_in_test_env + run: | + cd python + bash tests/test_federate/test_federate.sh + echo "Federate example has been tested successfully!" diff --git a/.github/workflows/CI_launch.yml b/.github/workflows/CI_launch.yml new file mode 100644 index 0000000000..b2b896c82d --- /dev/null +++ b/.github/workflows/CI_launch.yml @@ -0,0 +1,43 @@ +# This is a basic workflow to help you get started with Actions + +name: CI-launch + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + schedule: + # Nightly build at 12:12 A.M. + - cron: "0 10 */1 * *" + pull_request: + branches: [ master, dev/v0.7.0 ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + launch: + + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + arch: [X64] + python-version: ['python3.8','python3.9','python3.10','python3.11'] + + runs-on: ${{ matrix.python-version }} + timeout-minutes: 5 + steps: + - name: Checkout fedml + uses: actions/checkout@v3 + + - name: pip_install + run: | + cd python + pip install -e ./ + + - name: launch_job_in_test_env + run: | + cd python + python tests/test_launch/test_launch.py + echo "Launch example has been tested successfully!" diff --git a/.github/workflows/CI_train.yml b/.github/workflows/CI_train.yml new file mode 100644 index 0000000000..529472d55c --- /dev/null +++ b/.github/workflows/CI_train.yml @@ -0,0 +1,42 @@ +# This is a basic workflow to help you get started with Actions + +name: CI-train + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + schedule: + # Nightly build at 12:12 A.M. + - cron: "0 10 */1 * *" + pull_request: + branches: [ master, dev/v0.7.0 ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + train: + runs-on: ${{ matrix.python-version }} + strategy: + fail-fast: false + matrix: + os: [ Linux ] + arch: [X64] + python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] + + steps: + - name: Checkout fedml + uses: actions/checkout@v3 + + - name: pip_install + run: | + cd python + pip install -e ./ + + - name: training_job_in_test_env + run: | + cd python + python tests/test_train/test_train.py + echo "Train example has been tested successfully!" + diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 0000000000..4e284a2175 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,74 @@ +# 1. Design + +![Design](image.png) + +## Design principles + +The CI tests need to be comprehensive, covering typical scenarios only, achievable within 5 minutes. + +# 2. Registry Self-Host Runners + +## 2.1 Linux Runners + +We need to run CI tests in linux enviroment using different python versions such as python3.8/python3.9/python3.10/python3.11 + +Therefore firstly we build linux images for Self-Host Runners. + +``` +cd registry-runners +bash build_linux_runners.sh +``` +Secondly we need to find your GitHub runner token and your test-account apikey. + +For the argument YourGitHubRunnerToken, you may navigate based the following path. + +Settings -> Actions -> Runners -> New self-hosted runner. + +In the Configure section, you should find the similar line: +./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M + +set YourGitHubRunnerToken to value of --token + +Then we run all ther images. +``` +bash run_linux_runners.sh [YourGitRepo] [YourGitHubRunnerToken] [YourTestAccountApiKey] +``` +for example +``` +bash run_linux_runners.sh FedML-AI/FedML AXRYPLZLZN6XVJB3BAIXSP3EMFC7U 11215dkevvdkegged +``` +Lastly we need to check if the runners are registered successfully. Navigate the following path. +``` +Settings -> Actions -> Runners +``` +to check that your runners are all active. + +## 2.2 Windows Runners + +## 2.3 Mac Runners + +# 3. bind Test Machines + +We also need to bind the actual machine to run the test training job. Following this document to bind your test machines. +https://docs.tensoropera.ai/share-and-earn + +Note that we need to bind our machines to the test environment. + +In your job YAML, you should specify the computing resource type to which you have bound your machines. Then, your job will be scheduled to that machine. + +# 4. Trigger + +You can apply for a PR; All tests will run automatically. + +You can also run a single test at a specific branch in the GitHub Actions tab. + +The CI tests will run daily at a specific time which you configure in your workflow YAML. You can check the results in the GitHub Actions tab. + +# 5. How to add a new CI test + +If you need to add a new CI test that is different from the current business, you need to create a new workflow YAML file, such as CI_launch.yaml or CI_train.yaml. If you just want to add a new CI test to the current business, you can add your test in the path python/tests/test_{business}/test_file.py and make sure that your workflow YAML can run that Python test script. + +# 6. TODO + +Implement the Windows runners and the Mac runners. + diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/deprecated/codeql-analysis.yml similarity index 100% rename from .github/workflows/codeql-analysis.yml rename to .github/workflows/deprecated/codeql-analysis.yml diff --git a/.github/workflows/pylint.yml b/.github/workflows/deprecated/pylint.yml similarity index 89% rename from .github/workflows/pylint.yml rename to .github/workflows/deprecated/pylint.yml index cdc3800869..402bf72895 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/deprecated/pylint.yml @@ -28,13 +28,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: Analysing the code with pylint diff --git a/.github/workflows/deprecated/python-package-conda.yml b/.github/workflows/deprecated/python-package-conda.yml new file mode 100644 index 0000000000..f3586044ab --- /dev/null +++ b/.github/workflows/deprecated/python-package-conda.yml @@ -0,0 +1,34 @@ +name: Python Package using Conda + +on: [push] + +jobs: + build-linux: + runs-on: ubuntu-latest + strategy: + max-parallel: 5 + + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: '3.10' + - name: Add conda to system path + run: | + # $CONDA is an environment variable pointing to the root of the miniconda directory + echo $CONDA/bin >> $GITHUB_PATH + - name: Install dependencies + run: | + conda env update --file environment.yml --name base + - name: Lint with flake8 + run: | + conda install flake8 + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with pytest + run: | + conda install pytest + pytest diff --git a/.github/workflows/deprecated/smoke_test_cross_device_mnn_server_linux.yml b/.github/workflows/deprecated/smoke_test_cross_device_mnn_server_linux.yml index c8fff7e4f1..10c9860d0f 100644 --- a/.github/workflows/deprecated/smoke_test_cross_device_mnn_server_linux.yml +++ b/.github/workflows/deprecated/smoke_test_cross_device_mnn_server_linux.yml @@ -52,13 +52,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -67,7 +70,9 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + cd python + pip install -e ./ + # bash ./devops/scripts/sync-fedml-pip.sh - name: Install MNN working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} @@ -79,6 +84,6 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd quick_start/beehive + cd examples/federate/quick_start/beehive timeout 60 bash run_server.sh || code=$?; if [[ $code -ne 124 && $code -ne 0 ]]; then exit $code; fi diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_attack_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_attack_linux.yml index b1c29fcfd7..ea0c4ed601 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_attack_linux.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_attack_linux.yml @@ -29,8 +29,8 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest] - arch: [X64] + os: [ ubuntu-latest ] + arch: [ X64 ] python-version: ['3.8'] client-index: ['0', '1', '2', '3', '4'] # exclude: @@ -38,7 +38,7 @@ jobs: # python-version: '3.8' # - os: windows-latest # python-version: '3.6' - runs-on: [ self-hosted, Linux ] + runs-on: [ self-hosted ] timeout-minutes: 15 steps: - name: Extract branch name @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,13 +71,16 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + cd python + pip install -e ./ + # bash ./devops/srcipts/install-fedml.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - attack working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_attack_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_attack_mnist_lr_example run_id=cross-silo-attack-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -84,7 +90,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_attack_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_attack_mnist_lr_example run_id=cross-silo-attack-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -94,7 +100,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_attack_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_attack_mnist_lr_example run_id=cross-silo-attack-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id @@ -104,7 +110,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_attack_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_attack_mnist_lr_example run_id=cross-silo-attack-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 3 $run_id @@ -114,7 +120,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_attack_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_attack_mnist_lr_example run_id=cross-silo-attack-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 4 $run_id diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_cdp_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_cdp_linux.yml index 67ee9e4a0f..051c0418d2 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_cdp_linux.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_cdp_linux.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,13 +71,13 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - cdp working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/privacy/mqtt_s3_fedavg_cdp_mnist_lr_example + cd examples/federate/privacy/mqtt_s3_fedavg_cdp_mnist_lr_example run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -84,7 +87,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/privacy/mqtt_s3_fedavg_cdp_mnist_lr_example + cd examples/federate/privacy/mqtt_s3_fedavg_cdp_mnist_lr_example run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -94,7 +97,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/privacy/mqtt_s3_fedavg_cdp_mnist_lr_example + cd examples/federate/privacy/mqtt_s3_fedavg_cdp_mnist_lr_example run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_defense_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_defense_linux.yml index fac19d9552..b9348d7bf2 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_defense_linux.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_defense_linux.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,13 +71,13 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - defense working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_defense_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_defense_mnist_lr_example run_id=cross-silo-defense-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -84,7 +87,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_defense_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_defense_mnist_lr_example run_id=cross-silo-defense-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -94,7 +97,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_defense_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_defense_mnist_lr_example run_id=cross-silo-defense-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id @@ -104,7 +107,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_defense_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_defense_mnist_lr_example run_id=cross-silo-defense-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 3 $run_id @@ -114,7 +117,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/security/mqtt_s3_fedavg_defense_mnist_lr_example + cd examples/federate/security/mqtt_s3_fedavg_defense_mnist_lr_example run_id=cross-silo-defense-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 4 $run_id diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_ldp_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_ldp_linux.yml index def8aca733..f849c4db71 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_ldp_linux.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_fedavg_ldp_linux.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,13 +71,13 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - ldp working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/privacy/mqtt_s3_fedavg_ldp_mnist_lr_example + cd examples/federate/privacy/mqtt_s3_fedavg_ldp_mnist_lr_example run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -84,7 +87,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/privacy/mqtt_s3_fedavg_ldp_mnist_lr_example + cd examples/federate/privacy/mqtt_s3_fedavg_ldp_mnist_lr_example run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -94,7 +97,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/privacy/mqtt_s3_fedavg_ldp_mnist_lr_example + cd examples/federate/privacy/mqtt_s3_fedavg_ldp_mnist_lr_example run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_ho_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_ho_linux.yml index e34a22cdbe..7d28a37292 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_ho_linux.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_ho_linux.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,13 +71,13 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - ho working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd quick_start/octopus + cd examples/federate/quick_start/octopus run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -84,7 +87,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd quick_start/octopus + cd examples/federate/quick_start/octopus run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -94,7 +97,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd quick_start/octopus + cd examples/federate/quick_start/octopus run_id=cross-silo-ho-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_ho_win.yml b/.github/workflows/deprecated/smoke_test_cross_silo_ho_win.yml index b8376438d7..d9239bcb99 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_ho_win.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_ho_win.yml @@ -52,13 +52,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -67,25 +70,25 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - ho working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd quick_start/octopus + cd examples/federate/quick_start/octopus .\run_server.bat ${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '0' }} - name: client 1 - cross-silo - ho working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd quick_start/octopus + cd examples/federate/quick_start/octopus .\run_client.bat 1 ${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '1' }} - name: client 2 - cross-silo - ho working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd quick_start/octopus + cd examples/federate/quick_start/octopus .\run_client.bat 2 ${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '2' }} \ No newline at end of file diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_linux.yml b/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_linux.yml index d672e2a772..ae06088dc7 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_linux.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_linux.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,13 +71,13 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - lightsecagg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/light_sec_agg_example + cd examples/federate/cross_silo/light_sec_agg_example run_id=cross-silo-lightsecagg-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -84,7 +87,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/light_sec_agg_example + cd examples/federate/cross_silo/light_sec_agg_example run_id=cross-silo-lightsecagg-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -94,7 +97,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/light_sec_agg_example + cd examples/federate/cross_silo/light_sec_agg_example run_id=cross-silo-lightsecagg-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id diff --git a/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_win.yml b/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_win.yml index 8deab9acb2..40d15a1f0f 100644 --- a/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_win.yml +++ b/.github/workflows/deprecated/smoke_test_cross_silo_lightsecagg_win.yml @@ -52,13 +52,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -67,25 +70,25 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - cross-silo - ho working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/light_sec_agg_example + cd examples/federate/cross_silo/light_sec_agg_example .\run_server.bat cross-silo-lightsecagg-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '0' }} - name: client 1 - cross-silo - ho working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/light_sec_agg_example + cd examples/federate/cross_silo/light_sec_agg_example .\run_client.bat 1 cross-silo-lightsecagg-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '1' }} - name: client 2 - cross-silo - lightsecagg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/light_sec_agg_example + cd examples/federate/cross_silo/light_sec_agg_example .\run_client.bat 2 cross-silo-lightsecagg-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '2' }} \ No newline at end of file diff --git a/.github/workflows/deprecated/smoke_test_flow_linux.yml b/.github/workflows/deprecated/smoke_test_flow_linux.yml index df876a632b..5293787a11 100644 --- a/.github/workflows/deprecated/smoke_test_flow_linux.yml +++ b/.github/workflows/deprecated/smoke_test_flow_linux.yml @@ -43,13 +43,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -58,7 +61,7 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: server - Flow working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} diff --git a/.github/workflows/deprecated/smoke_test_ml_engines_linux_jax.yml b/.github/workflows/deprecated/smoke_test_ml_engines_linux_jax.yml index 42a6d25ead..cd4bd8d720 100644 --- a/.github/workflows/deprecated/smoke_test_ml_engines_linux_jax.yml +++ b/.github/workflows/deprecated/smoke_test_ml_engines_linux_jax.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,14 +71,14 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh cd $homepath/python - name: server - jax - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example run_id=jax-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -85,7 +88,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example run_id=jax-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -95,7 +98,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example run_id=jax-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id diff --git a/.github/workflows/deprecated/smoke_test_ml_engines_linux_mxnet.yml b/.github/workflows/deprecated/smoke_test_ml_engines_linux_mxnet.yml index bf30fd1b1a..5ce217ea4b 100644 --- a/.github/workflows/deprecated/smoke_test_ml_engines_linux_mxnet.yml +++ b/.github/workflows/deprecated/smoke_test_ml_engines_linux_mxnet.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,7 +71,7 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh cd $homepath/python pip install mxnet==2.0.0b1 @@ -76,7 +79,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example run_id=mxnet-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -86,7 +89,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example run_id=mxnet-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -96,7 +99,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example run_id=mxnet-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id diff --git a/.github/workflows/deprecated/smoke_test_ml_engines_linux_tf.yml b/.github/workflows/deprecated/smoke_test_ml_engines_linux_tf.yml index 9d69ba3774..3b7519dd97 100644 --- a/.github/workflows/deprecated/smoke_test_ml_engines_linux_tf.yml +++ b/.github/workflows/deprecated/smoke_test_ml_engines_linux_tf.yml @@ -53,13 +53,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -68,14 +71,14 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh cd $homepath/python - name: server - tensorflow - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example run_id=tf-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_server.sh $run_id @@ -85,7 +88,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example run_id=tf-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 1 $run_id @@ -95,7 +98,7 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example run_id=tf-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} echo ${run_id} bash run_client.sh 2 $run_id diff --git a/.github/workflows/deprecated/smoke_test_ml_engines_win.yml b/.github/workflows/deprecated/smoke_test_ml_engines_win.yml index f1f3bfabd4..8913cc6bec 100644 --- a/.github/workflows/deprecated/smoke_test_ml_engines_win.yml +++ b/.github/workflows/deprecated/smoke_test_ml_engines_win.yml @@ -46,13 +46,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -61,28 +64,28 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh cd $homepath/python pip install -e '.[tensorflow]' - name: server - tensorflow - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example python tf_server.py --cf config/fedml_config.yaml --rank 0 --role server --run_id tf-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '0' }} - name: client 1 - tensorflow - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example python3 tf_client.py --cf config/fedml_config.yaml --rank 1 --role client --run_id tf-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '1' }} - name: client 2 - tensorflow - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/tf_mqtt_s3_fedavg_mnist_lr_example python3 tf_client.py --cf config/fedml_config.yaml --rank 2 --role client --run_id tf-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '2' }} @@ -138,21 +141,21 @@ jobs: - name: server - jax - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example python tf_server.py --cf config/fedml_config.yaml --rank 0 --role server --run_id jax-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '0' }} - name: client 1 - jax - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example python3 tf_client.py --cf config/fedml_config.yaml --rank 1 --role client --run_id jax-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '1' }} - name: client 2 - jax - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/jax_haiku_mqtt_s3_fedavg_mnist_lr_example python3 tf_client.py --cf config/fedml_config.yaml --rank 2 --role client --run_id jax-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '2' }} @@ -208,20 +211,20 @@ jobs: - name: server - mxnet - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example python tf_server.py --cf config/fedml_config.yaml --rank 0 --role server --run_id mxnet-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '0' }} - name: client 1 - mxnet - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example python3 tf_client.py --cf config/fedml_config.yaml --rank 1 --role client --run_id mxnet-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '1' }} - name: client 2 - mxnet - fedavg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd examples/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example + cd examples/federate/cross_silo/mxnet_mqtt_s3_fedavg_mnist_lr_example python3 tf_client.py --cf config/fedml_config.yaml --rank 2 --role client --run_id mxnet-ml-engine-${{ format('{0}{1}{2}{3}', github.run_id, matrix.os, matrix.arch, matrix.python-version) }} if: ${{ matrix.client-index == '2' }} diff --git a/.github/workflows/deprecated/smoke_test_pip_cli_sp_linux.yml b/.github/workflows/deprecated/smoke_test_pip_cli_sp_linux.yml index 131d88de9b..006ecfb574 100644 --- a/.github/workflows/deprecated/smoke_test_pip_cli_sp_linux.yml +++ b/.github/workflows/deprecated/smoke_test_pip_cli_sp_linux.yml @@ -54,13 +54,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -69,20 +72,20 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - - name: test "fedml login" and "fedml build" - working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} - run: | - cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd tests/smoke_test/cli - bash login.sh - bash build.sh + # - name: test "fedml login" and "fedml build" + # working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} + # run: | + # cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python + # cd tests/smoke_test/cli + # bash login.sh + # bash build.sh - name: test simulation-sp working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd quick_start/parrot + cd examples/federate/quick_start/parrot python torch_fedavg_mnist_lr_one_line_example.py --cf fedml_config.yaml python torch_fedavg_mnist_lr_custum_data_and_model_example.py --cf fedml_config.yaml @@ -90,40 +93,40 @@ jobs: working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd examples/simulation/sp_decentralized_mnist_lr_example + cd examples/federate/simulation/sp_decentralized_mnist_lr_example python torch_fedavg_mnist_lr_step_by_step_example.py --cf fedml_config.yaml - name: test sp - sp_fednova_mnist_lr_example working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd examples/simulation/sp_fednova_mnist_lr_example + cd examples/federate/simulation/sp_fednova_mnist_lr_example python torch_fednova_mnist_lr_step_by_step_example.py --cf fedml_config.yaml - name: test sp - sp_fedopt_mnist_lr_example working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd examples/simulation/sp_fedopt_mnist_lr_example + cd examples/federate/simulation/sp_fedopt_mnist_lr_example python torch_fedopt_mnist_lr_step_by_step_example.py --cf fedml_config.yaml - name: test sp - sp_hierarchicalfl_mnist_lr_example working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd examples/simulation/sp_hierarchicalfl_mnist_lr_example + cd examples/federate/simulation/sp_hierarchicalfl_mnist_lr_example python torch_hierarchicalfl_mnist_lr_step_by_step_example.py --cf fedml_config.yaml - name: test sp - sp_turboaggregate_mnist_lr_example working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd examples/simulation/sp_turboaggregate_mnist_lr_example + cd examples/federate/simulation/sp_turboaggregate_mnist_lr_example python torch_turboaggregate_mnist_lr_step_by_step_example.py --cf fedml_config.yaml - name: test sp - sp_vertical_mnist_lr_example working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd ${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }}/python - cd examples/simulation/sp_vertical_mnist_lr_example + cd examples/federate/simulation/sp_vertical_mnist_lr_example python torch_vertical_mnist_lr_step_by_step_example.py --cf fedml_config.yaml diff --git a/.github/workflows/deprecated/smoke_test_pip_cli_sp_win.yml b/.github/workflows/deprecated/smoke_test_pip_cli_sp_win.yml index 69dac083bb..3987f90f74 100644 --- a/.github/workflows/deprecated/smoke_test_pip_cli_sp_win.yml +++ b/.github/workflows/deprecated/smoke_test_pip_cli_sp_win.yml @@ -51,13 +51,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -66,7 +69,7 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: test "fedml login" and "fedml build" working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} @@ -77,6 +80,6 @@ jobs: - name: test simulation-sp working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | - cd quick_start/parrot + cd examples/federate/quick_start/parrot python torch_fedavg_mnist_lr_one_line_example.py --cf fedml_config.yaml python torch_fedavg_mnist_lr_custum_data_and_model_example.py --cf fedml_config.yaml diff --git a/.github/workflows/deprecated/smoke_test_security.yml b/.github/workflows/deprecated/smoke_test_security.yml index 6644a4b513..5d5c03ee38 100644 --- a/.github/workflows/deprecated/smoke_test_security.yml +++ b/.github/workflows/deprecated/smoke_test_security.yml @@ -54,13 +54,16 @@ jobs: echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then echo "running on master" - path=/home/actions-runner/fedml-master + path=/home/fedml/FedML cd $path + git pull echo "dir=$path" >> $GITHUB_OUTPUT else echo "running on dev" - path=/home/actions-runner/fedml-dev + path=/home/fedml/FedML cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip @@ -69,7 +72,7 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: attack tests working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} diff --git a/.github/workflows/deprecated/smoke_test_simulation_mpi_linux.yml b/.github/workflows/deprecated/smoke_test_simulation_mpi_linux.yml index c48cc43149..b2e9676ae9 100644 --- a/.github/workflows/deprecated/smoke_test_simulation_mpi_linux.yml +++ b/.github/workflows/deprecated/smoke_test_simulation_mpi_linux.yml @@ -40,8 +40,8 @@ jobs: - os: ubuntu-latest mpi: mpich install-mpi: | - sudo apt-get update - sudo apt install -y mpich libmpich-dev + apt-get update + apt install -y mpich libmpich-dev # - os: ubuntu-latest # mpi: openmpi # install-mpi: sudo apt install -y openmpi-bin libopenmpi-dev @@ -50,6 +50,12 @@ jobs: shell: bash run: echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >>$GITHUB_OUTPUT id: extract_branch + - name: Install MPI + if: matrix.mpi == 'mpich' + run: | + apt-get update + apt-get install -y mpich libmpich-dev + - id: fedml_source_code_home name: cd to master or dev branch and git pull shell: bash @@ -57,15 +63,18 @@ jobs: ls echo ${{ steps.extract_branch.outputs.branch }} if [[ ${{ steps.extract_branch.outputs.branch }} == "master" ]]; then - echo "running on master" - path=/home/actions-runner/fedml-master - cd $path - echo "dir=$path" >> $GITHUB_OUTPUT + echo "running on master" + path=/home/fedml/FedML + cd $path + git pull + echo "dir=$path" >> $GITHUB_OUTPUT else - echo "running on dev" - path=/home/actions-runner/fedml-dev - cd $path - echo "dir=$path" >> $GITHUB_OUTPUT + echo "running on dev" + path=/home/fedml/FedML + cd $path + git pull + git checkout ${{ steps.extract_branch.outputs.branch }} + echo "dir=$path" >> $GITHUB_OUTPUT fi - name: sync git repo to local pip working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} @@ -73,47 +82,47 @@ jobs: homepath=${{ format('{0}', steps.fedml_source_code_home.outputs.dir) }} echo $Homepath cd $homepath - bash ./devops/scripts/sync-fedml-pip.sh + # bash ./devops/scripts/sync-fedml-pip.sh - name: Test package - FedAvg working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | pwd cd python - cd examples/simulation/mpi_torch_fedavg_mnist_lr_example + cd examples/federate/simulation/mpi_torch_fedavg_mnist_lr_example sh run_custom_data_and_model_example.sh 4 - name: Test package - Base working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/simulation/mpi_base_framework_example + cd examples/federate/simulation/mpi_base_framework_example sh run.sh 4 - name: Test package - Decentralized working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/simulation/mpi_decentralized_fl_example + cd examples/federate/simulation/mpi_decentralized_fl_example sh run.sh 4 - name: Test package - FedOPT working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/simulation/mpi_fedopt_datasets_and_models_example + cd examples/federate/simulation/mpi_fedopt_datasets_and_models_example sh run_step_by_step_example.sh 4 config/mnist_lr/fedml_config.yaml - name: Test package - FedProx working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/simulation/mpi_fedprox_datasets_and_models_example + cd examples/federate/simulation/mpi_fedprox_datasets_and_models_example sh run_step_by_step_example.sh 4 config/mnist_lr/fedml_config.yaml - name: Test package - FedGAN working-directory: ${{ steps.fedml_source_code_home.outputs.dir }} run: | cd python - cd examples/simulation/mpi_torch_fedgan_mnist_gan_example + cd examples/federate/simulation/mpi_torch_fedgan_mnist_gan_example sh run_step_by_step_example.sh 4 \ No newline at end of file diff --git a/.github/workflows/image.png b/.github/workflows/image.png new file mode 100644 index 0000000000000000000000000000000000000000..330e630c0a3f784f45b7349741a82e03855babc1 GIT binary patch literal 389049 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 literal 0 HcmV?d00001 diff --git a/devops/dockerfile/github-action-runner/Dockerfile b/.github/workflows/registry-runners/Dockerfile similarity index 70% rename from devops/dockerfile/github-action-runner/Dockerfile rename to .github/workflows/registry-runners/Dockerfile index 4e6648260f..5d3168853a 100644 --- a/devops/dockerfile/github-action-runner/Dockerfile +++ b/.github/workflows/registry-runners/Dockerfile @@ -1,9 +1,10 @@ # base -FROM fedml/fedml:latest-torch1.13.1-cuda11.6-cudnn8-devel +ARG BASE_IMAGE=python:3.11 -# set the github runner version -ARG RUNNER_VERSION="2.304.0" +FROM ${BASE_IMAGE} +# set the github runner version +ARG RUNNER_VERSION="2.317.0" # update the base packages and add a non-sudo user #RUN apt-get update -y && apt-get upgrade -y && useradd -m docker @@ -24,18 +25,15 @@ COPY start.sh start.sh # make the script executable RUN chmod +x start.sh - -RUN cp -f /usr/bin/python /usr/bin/python-backup && ln -s /usr/bin/python3 python - -RUN pip install scikit-learn - -RUN pip install tensorflow && pip install tensorflow_datasets && pip install jax[cpu] && pip install dm-haiku && pip install optax && pip install jaxlib - # since the config and run script for actions are not allowed to be run by root, # set the user to "docker" so all subsequent commands are run as the docker user #USER docker -ENV REPO=FedML-AI/FedML ACCESS_TOKEN=1 +RUN git clone https://github.com/Qigemingziba/FedML.git +RUN cd FedML && git pull && git checkout dev/v0.7.0 && cd python && pip3 install -e ./ +ENV REPO=Qigemingziba/FedML ACCESS_TOKEN=AGMK3P4W5EM5PXNYTZXXIMTGNF4MW # set the entrypoint to the start.sh script -CMD ./start.sh ${REPO} ${ACCESS_TOKEN} \ No newline at end of file +CMD ./start.sh ${REPO} ${ACCESS_TOKEN} + + diff --git a/.github/workflows/registry-runners/build_linux_runners.sh b/.github/workflows/registry-runners/build_linux_runners.sh new file mode 100644 index 0000000000..fb4b6e1abc --- /dev/null +++ b/.github/workflows/registry-runners/build_linux_runners.sh @@ -0,0 +1,12 @@ +tag="0.1.0" + +platform="linux/amd64" + +echo "build python:3.11" +docker build --no-cache --platform $platform --build-arg BASE_IMAGE=python:3.11 -t fedml/action_runner_3.11_linux64:$tag -f ./Dockerfile . +echo "build python:3.10" +docker build --no-cache --platform $platform --build-arg BASE_IMAGE=python:3.10 -t fedml/action_runner_3.10_linux64:$tag -f ./Dockerfile . +echo "build python:3.9" +docker build --no-cache --platform $platform --build-arg BASE_IMAGE=python:3.9 -t fedml/action_runner_3.9_linux64:$tag -f ./Dockerfile . +echo "build python:3.8" +docker build --no-cache --platform $platform --build-arg BASE_IMAGE=python:3.8 -t fedml/action_runner_3.8_linux64:$tag -f ./Dockerfile . diff --git a/.github/workflows/registry-runners/build_test.sh b/.github/workflows/registry-runners/build_test.sh new file mode 100755 index 0000000000..1e17dc6847 --- /dev/null +++ b/.github/workflows/registry-runners/build_test.sh @@ -0,0 +1 @@ +docker build -t fedml/action_runner_3.11_linux64:0.1 -f ./Dockerfile . diff --git a/.github/workflows/registry-runners/run_linux_runners.sh b/.github/workflows/registry-runners/run_linux_runners.sh new file mode 100644 index 0000000000..fa70388de8 --- /dev/null +++ b/.github/workflows/registry-runners/run_linux_runners.sh @@ -0,0 +1,48 @@ +REPO=$1 +ACCESS_TOKEN=$2 +API_KEY=$3 +DOCKER_PULL=false +ARCH=linux64 +TAG="0.1.0" + +if [ $# != 3 ]; then + echo "Please provide two arguments." + echo "./runner-start.sh [YourGitRepo][YourGitHubRunnerToken][API_KEY]" + exit -1 +fi + +# List of Docker container names +# containers=("fedml/action_runner_3.8_$ARCH:0.1.0" "fedml/action_runner_3.9_$ARCH:0.1.0" "fedml/action_runner_3.10_$ARCH:0.1.0" "fedml/action_runner_3.11_$ARCH:0.1.0") +containers=("action_runner_3.8_$ARCH" "action_runner_3.9_$ARCH" "action_runner_3.10_$ARCH" "action_runner_3.11_$ARCH") +python_versions=("python3.8" "python3.9" "python3.10" "python3.11") + + +# Iterate through each container +for container_index in "${!containers[@]}"; do + + container=${containers[$container_index]} + # Find the running container + if [ "$DOCKER_PULL" = "true" ]; then + echo "docker pull fedml/$container:$TAG" + docker pull fedml/$container:$TAG + fi + # docker stop `sudo docker ps |grep ${TAG}- |awk -F' ' '{print $1}'` + + running_container=$(docker ps -a | grep $container | awk -F ' ' '{print $1}') + + if [ -n "$running_container" ]; then + # Stop the running container + echo "Stopping running container: $container, $running_container" + docker stop "$running_container" + else + echo "No running container found for: $container" + fi + sleep 5 + # docker pull $container + ACT_NAME=${containers[$container_index]} + echo "docker run --rm --name $ACT_NAME --env API_KEY=$API_KEY --env REPO=$REPO --env ACCESS_TOKEN=$ACCESS_TOKEN -d fedml/${containers[$container_index]}:$TAG bash ./start.sh ${REPO} ${ACCESS_TOKEN} ${python_versions[$container_index]}" + docker run --rm --name $ACT_NAME --env API_KEY=$API_KEY --env REPO=$REPO --env ACCESS_TOKEN=$ACCESS_TOKEN -d fedml/${containers[$container_index]}:$TAG bash ./start.sh ${REPO} ${ACCESS_TOKEN} ${python_versions[$container_index]} + +done +echo "Script completed." + diff --git a/devops/dockerfile/github-action-runner/start.sh b/.github/workflows/registry-runners/start.sh similarity index 76% rename from devops/dockerfile/github-action-runner/start.sh rename to .github/workflows/registry-runners/start.sh index 917d1cfe16..b65b0f1272 100644 --- a/devops/dockerfile/github-action-runner/start.sh +++ b/.github/workflows/registry-runners/start.sh @@ -2,13 +2,15 @@ ORGANIZATION=$1 ACCESS_TOKEN=$2 +PYTHON_VERSION=$3 echo $ORGANIZATION echo $ACCESS_TOKEN +echo $PYTHON_VERSION cd /home/fedml/actions-runner -RUNNER_ALLOW_RUNASROOT="1" ./config.sh --url https://github.com/${ORGANIZATION} --token ${ACCESS_TOKEN} +RUNNER_ALLOW_RUNASROOT="1" ./config.sh --url https://github.com/${ORGANIZATION} --token ${ACCESS_TOKEN} --labels self-hosted,Linux,X64,$PYTHON_VERSION cleanup() { echo "Removing runner..." diff --git a/.github/workflows/registry-runners/windows.bat b/.github/workflows/registry-runners/windows.bat new file mode 100644 index 0000000000..dcdcf81b57 --- /dev/null +++ b/.github/workflows/registry-runners/windows.bat @@ -0,0 +1,38 @@ +set REPO=Qigemingziba/FedML +set ACCESS_TOKEN=AGMK3P4W5EM5PXNYTZXXIMTGNF4MW +set WORKPLACE=%pwd% +mkdir actions-runner-python38; cd actions-runner-python38 +conda activate python38 +Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip +Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") +./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.8 +.\run.cmd install +.\run.cmd start + +cd WORKPLACE +mkdir actions-runner-python39; cd actions-runner-python39 +conda activate python39 +Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip +Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") +./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.9 +.\run.cmd install +.\run.cmd start + +cd WORKPLACE +mkdir actions-runner-python310; cd actions-runner-python310 +conda activate python310 +Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip +Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") +./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.10 +.\run.cmd install +.\run.cmd start + +cd WORKPLACE +mkdir actions-runner-python311; cd actions-runner-python311 +conda activate python311 +Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip +Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") +./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.11 +.\run.cmd install +.\run.cmd start + diff --git a/devops/dockerfile/github-action-runner/README.md b/devops/dockerfile/github-action-runner/README.md deleted file mode 100644 index d02e29665b..0000000000 --- a/devops/dockerfile/github-action-runner/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Run self-host runner in your machine - -## Usage - -./runner-start.sh [YourGitRepo] [YourRunnerPrefix] [YourRunnerNum] [YourGitHubRunnerToken] [LocalDevSourceDir] [LocalReleaseSourceDir] [LocalDataDir] - -For the argument YourGitHubRunnerToken, you may navigate based the following path. - -Settings -> Actions -> Runners -> New self-hosted runner. - -In the Configure section, you should find the similar line: -./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M - -set YourGitHubRunnerToken to value of --token - - -## Example - -Use the following commands to run 30 runners in the FedML-AI/FedML repo and run 6 runners in the FedML-AI/Front-End-Auto-Test repo: - -./runner-start.sh FedML-AI/FedML fedml-runner 30 AXRYPLZLZN6XVJB3BAIXSP3EMFC7U /home/fedml/FedML4GitHubAction-Dev /home/fedml/FedML4GitHubAction /home/fedml/fedml_data -./runner-start.sh FedML-AI/Front-End-Auto-Test webtest-runner 6 AXRYPL57ZD35ZGDWZKRKFHLEMGLTK /home/fedml/FedML4GitHubAction-Dev /home/fedml/FedML4GitHubAction /home/fedml/fedml_data - -./runner-start.sh FedML-AI/FedML fedml-runner 30 AXRYPL6CCBH24ZVRSUEAYTTEMKD56 /home/chaoyanghe/sourcecode/FedML4GitHubAction-Dev /home/chaoyanghe/sourcecode/FedML4GitHubAction /home/chaoyanghe/fedml_data -./runner-start.sh FedML-AI/Front-End-Auto-Test webtest-runner 6 AXRYPL57ZD35ZGDWZKRKFHLEMGLTK /home/chaoyanghe/sourcecode/FedML4GitHubAction-Dev /home/chaoyanghe/sourcecode/FedML4GitHubAction /home/chaoyanghe/fedml_data diff --git a/devops/dockerfile/github-action-runner/build.sh b/devops/dockerfile/github-action-runner/build.sh deleted file mode 100755 index 5f6dae9615..0000000000 --- a/devops/dockerfile/github-action-runner/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -docker build -t fedml/github-action-runner:latest -f ./Dockerfile . -docker login -docker push fedml/github-action-runner:latest \ No newline at end of file diff --git a/devops/dockerfile/github-action-runner/runner-start.sh b/devops/dockerfile/github-action-runner/runner-start.sh deleted file mode 100644 index 18a0c4f958..0000000000 --- a/devops/dockerfile/github-action-runner/runner-start.sh +++ /dev/null @@ -1,23 +0,0 @@ -REPO=$1 -TAG=$2 -NUM=$3 -ACCESS_TOKEN=$4 -LOCAL_DEV_SOURCE_DIR=$5 -LOCAL_RELEASE_SOURCE_DIR=$6 -LOCAL_DATA_DIR=$7 - -if [ $# != 7 ]; then - echo "Please provide five arguments." - echo "./runner-start.sh [YourGitRepo] [YourRunnerPrefix] [YourRunnerNum] [YourGitHubRunnerToken] [LocalDevSourceDir] [LocalReleaseSourceDir] [LocalDataDir]" - exit -1 -fi - -sudo docker stop `sudo docker ps |grep ${TAG}- |awk -F' ' '{print $1}'` -sudo docker pull fedml/github-action-runner:latest - -for((i=1;i<=$NUM;i++)); -do -ACT_NAME=$TAG-$i -sudo docker rm $ACT_NAME -sudo docker run --name $ACT_NAME --env REPO=$REPO --env ACCESS_TOKEN=$ACCESS_TOKEN -v $LOCAL_DEV_SOURCE_DIR:/home/actions-runner/fedml-dev -v $LOCAL_RELEASE_SOURCE_DIR:/home/actions-runner/fedml-master -v $LOCAL_DATA_DIR:/home/fedml/fedml_data -v $LOCAL_DATA_DIR:/home/actions-runner/fedml_data -d fedml/github-action-runner:latest -done \ No newline at end of file diff --git a/devops/scripts/install-fedml.sh b/devops/scripts/install-fedml.sh new file mode 100644 index 0000000000..cafcfa3ac7 --- /dev/null +++ b/devops/scripts/install-fedml.sh @@ -0,0 +1,2 @@ +cd python +pip install -e ./ \ No newline at end of file diff --git a/devops/scripts/sync-fedml-pip.sh b/devops/scripts/sync-fedml-pip.sh index 0d909fff76..6b24ac52e7 100755 --- a/devops/scripts/sync-fedml-pip.sh +++ b/devops/scripts/sync-fedml-pip.sh @@ -24,7 +24,7 @@ else fi fi -mkdir -p /home/fedml/fedml_data -cp -Rf /home/fedml/fedml_data_host/* /home/fedml/fedml_data +mkdir -p ./fedml/fedml_data +cp -Rf ./fedml/fedml_data_host/* ./fedml/fedml_data exit 0 diff --git a/python/examples/federate/cross_silo/cuda_rpc_fedavg_mnist_lr_example/README.md b/python/examples/federate/cross_silo/cuda_rpc_fedavg_mnist_lr_example/README.md index c693d8d863..a1fa30b6f2 100644 --- a/python/examples/federate/cross_silo/cuda_rpc_fedavg_mnist_lr_example/README.md +++ b/python/examples/federate/cross_silo/cuda_rpc_fedavg_mnist_lr_example/README.md @@ -26,7 +26,7 @@ For info on `trpc_master_config_path` refer to `python/examples/cross_silo/cuda_ Example is provided at: -`python/examples/cross_silo/cuda_rpc_fedavg_mnist_lr_example/one_line` +`python/examples/federate/cross_silo/cuda_rpc_fedavg_mnist_lr_example/one_line` ### Training Script At the client side, the client ID (a.k.a rank) starts from 1. diff --git a/python/examples/launch/examples/launch/hello_world/launch_config/fedml_config.yaml b/python/examples/launch/examples/launch/hello_world/launch_config/fedml_config.yaml new file mode 100644 index 0000000000..21e1f2e33e --- /dev/null +++ b/python/examples/launch/examples/launch/hello_world/launch_config/fedml_config.yaml @@ -0,0 +1,14 @@ +containerize: false +data_args: + dataset_name: mnist + dataset_path: ./dataset + dataset_type: csv +environment_args: + bootstrap: fedml_bootstrap_generated.sh +model_args: + input_dim: '784' + model_cache_path: /Users/alexliang/fedml_models + model_name: lr + output_dim: '10' +training_params: + learning_rate: 0.004 diff --git a/python/examples/launch/hello_world/hello_world.py b/python/examples/launch/hello_world/hello_world.py index 71ffaf7c16..2f68f99055 100644 --- a/python/examples/launch/hello_world/hello_world.py +++ b/python/examples/launch/hello_world/hello_world.py @@ -1,6 +1,5 @@ import os import time - import fedml if __name__ == "__main__": diff --git a/python/examples/launch/serve_job_mnist.yaml b/python/examples/launch/serve_job_mnist.yaml index 98c1570a4f..bd8b52ca6c 100755 --- a/python/examples/launch/serve_job_mnist.yaml +++ b/python/examples/launch/serve_job_mnist.yaml @@ -35,4 +35,4 @@ computing: maximum_cost_per_hour: $3000 # max cost per hour for your job per gpu card #allow_cross_cloud_resources: true # true, false #device_type: CPU # options: GPU, CPU, hybrid - resource_type: A100-80G # e.g., A100-80G, please check the resource type list by "fedml show-resource-type" or visiting URL: https://open.fedml.ai/accelerator_resource_type \ No newline at end of file + resource_type: RTX-4090 # e.g., A100-80G, please check the resource type list by "fedml show-resource-type" or visiting URL: https://open.fedml.ai/accelerator_resource_type \ No newline at end of file diff --git a/python/examples/train/mnist_train/examples/train/mnist_train/launch_config/fedml_config.yaml b/python/examples/train/mnist_train/examples/train/mnist_train/launch_config/fedml_config.yaml new file mode 100644 index 0000000000..188c19dde6 --- /dev/null +++ b/python/examples/train/mnist_train/examples/train/mnist_train/launch_config/fedml_config.yaml @@ -0,0 +1,3 @@ +containerize: false +environment_args: + bootstrap: fedml_bootstrap_generated.sh diff --git a/python/examples/train/mnist_train/train.py b/python/examples/train/mnist_train/train.py new file mode 100644 index 0000000000..611a15c2b6 --- /dev/null +++ b/python/examples/train/mnist_train/train.py @@ -0,0 +1,98 @@ +import torch +import torch.nn as nn +import torch.optim as optim +import torchvision +import torchvision.transforms as transforms +from torch.utils.data import DataLoader +import fedml +# Set random seed for reproducibility +torch.manual_seed(42) + +# Define hyperparameters +batch_size = 64 +learning_rate = 0.001 +num_epochs = 3 + +# Prepare dataset and data loaders +transform = transforms.Compose([ + transforms.ToTensor(), # Convert image to tensor, normalize to [0, 1] + transforms.Normalize((0.5,), (0.5,)) # Normalize with mean and std deviation of 0.5 +]) + +train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True) +train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) + +test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transform, download=True) +test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False) + +# Define a simple convolutional neural network model +class SimpleCNN(nn.Module): + def __init__(self): + super(SimpleCNN, self).__init__() + self.conv1 = nn.Conv2d(1, 16, kernel_size=5, padding=2) + self.conv2 = nn.Conv2d(16, 32, kernel_size=5, padding=2) + self.fc1 = nn.Linear(32 * 7 * 7, 128) + self.fc2 = nn.Linear(128, 10) + + def forward(self, x): + x = torch.relu(self.conv1(x)) + x = torch.max_pool2d(x, kernel_size=2, stride=2) + x = torch.relu(self.conv2(x)) + x = torch.max_pool2d(x, kernel_size=2, stride=2) + x = x.view(-1, 32 * 7 * 7) + x = torch.relu(self.fc1(x)) + x = self.fc2(x) + return x + +model = SimpleCNN() + +# Define loss function and optimizer +criterion = nn.CrossEntropyLoss() +optimizer = optim.Adam(model.parameters(), lr=learning_rate) + +# Train the model +for epoch in range(num_epochs): + + # Evaluate the model on the test set during training + model.eval() + with torch.no_grad(): + correct = 0 + total = 0 + for images, labels in test_loader: + outputs = model(images) + _, predicted = torch.max(outputs.data, 1) + total += labels.size(0) + correct += (predicted == labels).sum().item() + acc = 100 * correct / total + fedml.mlops.log_metric({"epoch":epoch, "acc": acc}) + + model.train() + for images, labels in train_loader: + # Forward pass + outputs = model(images) + loss = criterion(outputs, labels) + + # Backward and optimize + optimizer.zero_grad() + loss.backward() + optimizer.step() + +# Final evaluation on the test set +model.eval() +with torch.no_grad(): + correct = 0 + total = 0 + for images, labels in test_loader: + outputs = model(images) + _, predicted = torch.max(outputs.data, 1) + total += labels.size(0) + correct += (predicted == labels).sum().item() + + acc = 100 * correct / total + print('Final Test Accuracy: {:.2f} %'.format(acc)) + fedml.mlops.log_metric({"epoch":num_epochs, "acc": acc}) + +fedml.mlops.log_model(f"model-file@test", "./simple_cnn.pth") +# # Save the model parameters +# torch.save(model.state_dict(), 'simple_cnn.pth') +# print('Model saved to simple_cnn.pth') diff --git a/python/examples/train/mnist_train/train.yaml b/python/examples/train/mnist_train/train.yaml new file mode 100644 index 0000000000..f9a5cc5ab5 --- /dev/null +++ b/python/examples/train/mnist_train/train.yaml @@ -0,0 +1,50 @@ +# Local directory where your source code resides. +# It should be the relative path to this job yaml file or the absolute path. +# If your job doesn't contain any source code, it can be empty. +workspace: . + +# Running entry commands which will be executed as the job entry point. +# If an error occurs, you should exit with a non-zero code, e.g. exit 1. +# Otherwise, you should exit with a zero code, e.g. exit 0. +# Support multiple lines, which can not be empty. +job: | + echo "current job id: $FEDML_CURRENT_RUN_ID" + echo "current edge id: $FEDML_CURRENT_EDGE_ID" + echo "Hello, Here is the launch platform." + echo "Current directory is as follows." + pwd + python3 train.py + echo "training job finished." + +# If you want to use the job created by the MLOps platform, +# just uncomment the following three, then set job_id and config_id to your desired job id and related config. +#job_args: +# job_id: 2070 +# config_id: 111 + +# If you want to create the job with specific name, just uncomment the following line and set job_name to your desired job name +#job_name: cv_job + +job_type: train # options: train, deploy, federate + +# train subtype: general_training, single_machine_training, cluster_distributed_training, cross_cloud_training +# federate subtype: cross_silo, simulation, web, smart_phone +# deploy subtype: none +job_subtype: generate_training + +# containerize +containerize: false + +# Bootstrap shell commands which will be executed before running entry commands. +# Support multiple lines, which can be empty. +bootstrap: | + # pip install -r requirements.txt + echo "Bootstrap finished." + +computing: + minimum_num_gpus: 1 # minimum # of GPUs to provision + maximum_cost_per_hour: $3000 # max cost per hour for your job per gpu card + #allow_cross_cloud_resources: true # true, false + #device_type: CPU # options: GPU, CPU, hybrid + resource_type: RTX-4090 # e.g., A100-80G, please check the resource type list by "fedml show-resource-type" or visiting URL: https://open.fedml.ai/accelerator_resource_type + diff --git a/python/fedml/__init__.py b/python/fedml/__init__.py index bf07838e56..c96d65adc5 100644 --- a/python/fedml/__init__.py +++ b/python/fedml/__init__.py @@ -452,28 +452,14 @@ def _init_multiprocessing(): """ if platform.system() == "Windows": if multiprocessing.get_start_method() != "spawn": - # force all platforms (Windows) to use the same way (spawn) for multiprocessing + # force all platforms (Windows/Linux/macOS) to use the same way (spawn) for multiprocessing multiprocessing.set_start_method("spawn", force=True) else: if multiprocessing.get_start_method() != "fork": - # force all platforms (Linux/macOS) to use the same way (fork) for multiprocessing + # force all platforms (Windows/Linux/macOS) to use the same way (fork) for multiprocessing multiprocessing.set_start_method("fork", force=True) -def get_multiprocessing_context(): - if platform.system() == "Windows": - return multiprocessing.get_context("spawn") - else: - return multiprocessing.get_context("fork") - - -def get_process(target=None, args=None): - if platform.system() == "Windows": - return multiprocessing.Process(target=target, args=args) - else: - return multiprocessing.get_context("fork").Process(target=target, args=args) - - def set_env_version(version): set_env_kv("FEDML_ENV_VERSION", version) load_env() diff --git a/python/fedml/api/__init__.py b/python/fedml/api/__init__.py index 3e75b987d6..ac6e988dc6 100755 --- a/python/fedml/api/__init__.py +++ b/python/fedml/api/__init__.py @@ -270,6 +270,9 @@ def model_deploy(name, endpoint_name, endpoint_id, local, master_ids, worker_ids def model_run(endpoint_id, json_string): model_module.run(endpoint_id, json_string) +def get_endpoint(endpoint_id): + return model_module.get_endpoint(endpoint_id) + def endpoint_delete(endpoint_id): model_module.delete_endpoint(endpoint_id) diff --git a/python/fedml/api/api_test.py b/python/fedml/api/api_test.py index 1aa5ac3767..5a01a76448 100755 --- a/python/fedml/api/api_test.py +++ b/python/fedml/api/api_test.py @@ -4,9 +4,9 @@ import fedml # Login -fedml.set_env_version("local") +fedml.set_env_version("test") fedml.set_local_on_premise_platform_port(18080) -error_code, error_msg = fedml.api.fedml_login(api_key="1316b93c82da40ce90113a2ed12f0b14") +error_code, error_msg = fedml.api.fedml_login(api_key="") if error_code != 0: print("API Key is invalid!") exit(1) @@ -19,7 +19,7 @@ # Launch job launch_result_list = list() -for i in range(0, 1): +for i in range(0, 10): launch_result = fedml.api.launch_job(yaml_file) launch_result_list.append(launch_result) # launch_result = fedml.api.launch_job_on_cluster(yaml_file, "alex-cluster") diff --git a/python/fedml/api/modules/model.py b/python/fedml/api/modules/model.py index a02e674f47..93892fc5d1 100644 --- a/python/fedml/api/modules/model.py +++ b/python/fedml/api/modules/model.py @@ -320,6 +320,19 @@ def run(endpoint_id: str, json_string: str) -> bool: click.echo("Failed to run model.") return False +def get_endpoint(endpoint_id: str): + api_key = get_api_key() + if api_key == "": + click.echo(''' + Please use one of the ways below to login first: + (1) CLI: `fedml login $api_key` + (2) API: fedml.api.fedml_login(api_key=$api_key) + ''') + return False + + endpoint_detail_result = FedMLModelCards.get_instance().query_endpoint_detail_api(user_api_key=api_key, + endpoint_id=endpoint_id) + return endpoint_detail_result def delete_endpoint(endpoint_id: str) -> bool: api_key = get_api_key() diff --git a/python/tests/cross-silo/run_cross_silo.sh b/python/tests/cross-silo/run_cross_silo.sh index 2ccdbff15b..0beaaffc52 100644 --- a/python/tests/cross-silo/run_cross_silo.sh +++ b/python/tests/cross-silo/run_cross_silo.sh @@ -1,10 +1,10 @@ #!/bin/bash set -e WORKSPACE=$(pwd) -PROJECT_HOME=$WORKSPACE/../../ -cd $PROJECT_HOME +# PROJECT_HOME=$WORKSPACE/../../ +# cd $PROJECT_HOME -cd examples/cross_silo/mqtt_s3_fedavg_mnist_lr_example/custom_data_and_model +cd examples/federate/cross_silo/mqtt_s3_fedavg_mnist_lr_example/custom_data_and_model # run client(s) RUN_ID="$(python -c "import uuid; print(uuid.uuid4().hex)")" diff --git a/python/tests/smoke_test/cli/build.sh b/python/tests/smoke_test/cli/build.sh index 98fdb05244..de956692f1 100644 --- a/python/tests/smoke_test/cli/build.sh +++ b/python/tests/smoke_test/cli/build.sh @@ -16,7 +16,7 @@ # --help Show this message and exit. # build client package -cd ../../../examples/cross_silo/mqtt_s3_fedavg_mnist_lr_example/one_line +cd ../../../examples/federate/cross_silo/mqtt_s3_fedavg_mnist_lr_example/one_line echo "$PWD" SOURCE=client @@ -30,4 +30,4 @@ SOURCE=server ENTRY=torch_server.py CONFIG=config DEST=./mlops -fedml build -t server -sf $SOURCE -ep $ENTRY -cf $CONFIG -df $DEST \ No newline at end of file +fedml build -t server -sf $SOURCE -ep $ENTRY -cf $CONFIG -df $DEST diff --git a/python/tests/test_deploy/test_deploy.py b/python/tests/test_deploy/test_deploy.py new file mode 100644 index 0000000000..d7243c68de --- /dev/null +++ b/python/tests/test_deploy/test_deploy.py @@ -0,0 +1,39 @@ +import os.path +import time +import fedml +# Login +API_KEY = os.getenv("API_KEY") +fedml.set_env_version("test") +fedml.set_local_on_premise_platform_port(18080) +error_code, error_msg = fedml.api.fedml_login(api_key=API_KEY) +if error_code != 0: + raise Exception("API Key is invalid!") + +# Yaml file +cur_dir = os.path.dirname(__file__) +fedml_dir = os.path.dirname(cur_dir) +python_dir = os.path.dirname(fedml_dir) +yaml_file = os.path.join(python_dir, "examples", "launch", "serve_job_mnist.yaml") + +# Launch job +launch_result_dict = {} +launch_result_status = {} + +launch_result = fedml.api.launch_job(yaml_file) +print("Endpoint id is", launch_result.inner_id) + +cnt = 0 +while 1: + try: + r = fedml.api.get_endpoint(endpoint_id=launch_result.inner_id) + except Exception as e: + raise Exception(f"FAILED to get endpoint:{launch_result.inner_id}. {e}") + if r.status == "DEPLOYED": + print("Deployment has been successfully!") + break + elif r.status == "FAILED": + raise Exception("FAILED to deploy.") + time.sleep(1) + cnt += 1 + if cnt %3 ==0: + print('Deployment status is', r.status) \ No newline at end of file diff --git a/python/tests/test_federate/test_federate.sh b/python/tests/test_federate/test_federate.sh new file mode 100644 index 0000000000..ebfcb60330 --- /dev/null +++ b/python/tests/test_federate/test_federate.sh @@ -0,0 +1,26 @@ + +WORKSPACE=`pwd` +echo $WORKSPACE +cd $WORKSPACE/examples/federate/quick_start/parrot +python torch_fedavg_mnist_lr_one_line_example.py --cf fedml_config.yaml +python torch_fedavg_mnist_lr_custum_data_and_model_example.py --cf fedml_config.yaml + +cd $WORKSPACE/examples/federate/simulation/sp_decentralized_mnist_lr_example +python torch_fedavg_mnist_lr_step_by_step_example.py --cf fedml_config.yaml + +cd $WORKSPACE/examples/federate/simulation/sp_fednova_mnist_lr_example +python torch_fednova_mnist_lr_step_by_step_example.py --cf fedml_config.yaml + +cd $WORKSPACE/examples/federate/simulation/sp_fedopt_mnist_lr_example +python torch_fedopt_mnist_lr_step_by_step_example.py --cf fedml_config.yaml + +cd $WORKSPACE/examples/federate/simulation/sp_hierarchicalfl_mnist_lr_example +python torch_hierarchicalfl_mnist_lr_step_by_step_example.py --cf fedml_config.yaml + + +cd $WORKSPACE/examples/federate/simulation/sp_turboaggregate_mnist_lr_example +python torch_turboaggregate_mnist_lr_step_by_step_example.py --cf fedml_config.yaml + + +cd $WORKSPACE/examples/federate/simulation/sp_vertical_mnist_lr_example +python torch_vertical_mnist_lr_step_by_step_example.py --cf fedml_config.yaml diff --git a/python/tests/test_launch/test_launch.py b/python/tests/test_launch/test_launch.py new file mode 100644 index 0000000000..a6b6ffb9cf --- /dev/null +++ b/python/tests/test_launch/test_launch.py @@ -0,0 +1,50 @@ +import os.path +import time +import fedml +from fedml.api.constants import RunStatus + +API_KEY = os.getenv("API_KEY") +# Login +fedml.set_env_version("test") +fedml.set_local_on_premise_platform_port(18080) +error_code, error_msg = fedml.api.fedml_login(api_key=API_KEY) +if error_code != 0: + raise Exception("API Key is invalid!") + +# Yaml file +cur_dir = os.path.dirname(__file__) +fedml_dir = os.path.dirname(cur_dir) +python_dir = os.path.dirname(fedml_dir) +yaml_file = os.path.join(python_dir, "examples", "launch", "hello_job.yaml") + +# Launch job + +launch_result = fedml.api.launch_job(yaml_file) + +# launch_result = fedml.api.launch_job_on_cluster(yaml_file, "alex-cluster") +if launch_result.result_code != 0: + raise Exception(f"Failed to launch job. Reason: {launch_result.result_message}") + +# check job status +while 1: + time.sleep(1) + # if + # if launch_result_status[run_id] == RunStatus.FINISHED: + # continue + log_result = fedml.api.run_logs(launch_result.run_id, 1, 5) + if log_result is None or log_result.run_status is None: + raise Exception(f"Failed to get job status.") + + print(f"run_id: {launch_result.run_id} run_status: {log_result.run_status}") + + if log_result.run_status in [RunStatus.ERROR, RunStatus.FAILED]: + log_result = fedml.api.run_logs(launch_result.run_id, 1, 100) + if log_result is None or log_result.run_status is None: + raise Exception(f"run_id:{launch_result.run_id} run_status:{log_result.run_status} and failed to get run logs.") + + raise Exception(f"run_id:{launch_result.run_id} run_status:{log_result.run_status} run logs: {log_result.log_line_list}") + if log_result.run_status == RunStatus.FINISHED: + print(f"Job finished successfully.") + break + + diff --git a/python/tests/test_train/test_train.py b/python/tests/test_train/test_train.py new file mode 100644 index 0000000000..039d3b81d2 --- /dev/null +++ b/python/tests/test_train/test_train.py @@ -0,0 +1,49 @@ +import os.path +import time +import fedml +from fedml.api.constants import RunStatus + +API_KEY = os.getenv("API_KEY") +# Login +fedml.set_env_version("test") +fedml.set_local_on_premise_platform_port(18080) +error_code, error_msg = fedml.api.fedml_login(api_key=API_KEY) +if error_code != 0: + raise Exception("API Key is invalid!") + +# Yaml file +cur_dir = os.path.dirname(__file__) +fedml_dir = os.path.dirname(cur_dir) +python_dir = os.path.dirname(fedml_dir) +yaml_file = os.path.join(python_dir, "examples", "train", "mnist_train", "train.yaml") + +# Launch job + +launch_result = fedml.api.launch_job(yaml_file) + +# launch_result = fedml.api.launch_job_on_cluster(yaml_file, "alex-cluster") +if launch_result.result_code != 0: + raise Exception(f"Failed to launch job. Reason: {launch_result.result_message}") + +# check job status +while 1: + time.sleep(1) + # if + # if launch_result_status[run_id] == RunStatus.FINISHED: + # continue + log_result = fedml.api.run_logs(launch_result.run_id, 1, 5) + if log_result is None or log_result.run_status is None: + raise Exception(f"Failed to get job status.") + + print(f"run_id: {launch_result.run_id} run_status: {log_result.run_status}") + + if log_result.run_status in [RunStatus.ERROR, RunStatus.FAILED]: + log_result = fedml.api.run_logs(launch_result.run_id, 1, 100) + if log_result is None or log_result.run_status is None: + raise Exception(f"run_id:{launch_result.run_id} run_status:{log_result.run_status} and failed to get run logs.") + + raise Exception(f"run_id:{launch_result.run_id} run_status:{log_result.run_status} run logs: {log_result.log_line_list}") + if log_result.run_status == RunStatus.FINISHED: + print(f"Job finished successfully.") + break + From afe4147da99c102dd2153c4727214adce3a5f1a6 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 20 Jun 2024 19:24:38 +0800 Subject: [PATCH 16/23] [CoreEngine] in order to debug easily for multiprocessing, add the process name to each python process. --- python/fedml/__init__.py | 11 ++- .../master/base_master_job_runner.py | 28 +++++--- .../master/base_master_job_runner_manager.py | 15 ++-- .../master/base_master_protocol_manager.py | 16 +++-- .../scheduler/master/cloud_server_manager.py | 7 +- .../master/master_protocol_manager.py | 11 +-- .../master_protocol_manager.py | 3 +- .../worker_protocol_manager.py | 4 +- .../scheduler_core/general_constants.py | 70 +++++++++++++++++++ .../scheduler_core/message_center.py | 27 ++++--- .../scheduler_base_job_runner.py | 2 +- .../scheduler_base_job_runner_manager.py | 5 +- .../scheduler_base_protocol_manager.py | 6 ++ .../scheduler/scheduler_core/status_center.py | 31 ++++++-- .../status_manager_protocols.py | 11 ++- .../scheduler/slave/base_slave_job_runner.py | 16 +++-- .../slave/base_slave_protocol_manager.py | 3 + .../scheduler/slave/slave_protocol_manager.py | 1 + .../scheduler/slave/united_agents.py | 8 +-- .../core/mlops/mlops_runtime_log_daemon.py | 16 +++-- python/setup.py | 2 +- 21 files changed, 221 insertions(+), 72 deletions(-) diff --git a/python/fedml/__init__.py b/python/fedml/__init__.py index bf07838e56..618a5f9297 100644 --- a/python/fedml/__init__.py +++ b/python/fedml/__init__.py @@ -1,6 +1,7 @@ import logging import platform +import multiprocess import multiprocess as multiprocessing import os import random @@ -37,7 +38,7 @@ _global_training_type = None _global_comm_backend = None -__version__ = "0.9.0" +__version__ = "0.8.51b1" # This is the deployment environment used for different roles (RD/PM/BD/Public Developers). Potential VALUE: local, dev, test, release @@ -471,7 +472,13 @@ def get_process(target=None, args=None): if platform.system() == "Windows": return multiprocessing.Process(target=target, args=args) else: - return multiprocessing.get_context("fork").Process(target=target, args=args) + #return multiprocessing.Process(target=target, args=args) + #multiprocessing.set_start_method("spawn", force=True) + #return multiprocess.context.SpawnContext.Process(target=target, args=args) + #multiprocessing.Manager().current_process().authkey = str.encode("abc") + new_process = multiprocessing.get_context("fork").Process(target=target, args=args) + #new_process.authkey = str.encode("abc") + return new_process def set_env_version(version): diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner.py b/python/fedml/computing/scheduler/master/base_master_job_runner.py index 9a77c2ba82..32b285dc7b 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner.py @@ -7,6 +7,9 @@ import os import time import traceback + +import setproctitle + from ..scheduler_entry.constants import Constants from ....core.mlops.mlops_runtime_log import MLOpsRuntimeLog from ..master.server_constants import ServerConstants @@ -67,9 +70,12 @@ def run( edge_device_info_queue=None, run_metrics_queue=None, run_event_queue=None, run_artifacts_queue=None, run_logs_queue=None, edge_device_info_global_queue=None, run_extend_queue_list=None, sender_message_center_queue=None, listener_message_queue=None, - status_center_queue=None + status_center_queue=None, process_name=None ): - print(f"Master job runner process id {os.getpid()}, run id {self.run_id}") + if process_name is not None: + setproctitle.setproctitle(process_name) + + print(f"Master job runner process id {os.getpid()}, name {process_name}, run id {self.run_id}") if platform.system() != "Windows": os.setsid() @@ -168,7 +174,8 @@ def run_impl( run_id, self.request_json, edge_id=self.edge_id, is_server_job=True, sender_message_queue=sender_message_queue, listener_message_queue=listener_message_queue, - status_center_queue=status_center_queue + status_center_queue=status_center_queue, + process_name=GeneralConstants.get_launch_master_user_process_name(run_id, self.edge_id) ) # Check if the run status is normal @@ -230,9 +237,12 @@ def run_server_job( edge_device_info_queue=None, run_metrics_queue=None, run_event_queue=None, run_artifacts_queue=None, run_logs_queue=None, edge_device_info_global_queue=None, run_extend_queue_list=None, sender_message_center_queue=None, listener_message_queue=None, - status_center_queue=None + status_center_queue=None, process_name=None ): - print(f"Server runner process id {os.getpid()}, run id {self.run_id}") + if process_name is not None: + setproctitle.setproctitle(process_name) + + print(f"Server runner process id {os.getpid()}, name {process_name}. run id {self.run_id}") if platform.system() != "Windows": os.setsid() @@ -406,7 +416,7 @@ def _generate_job_runner_instance(self, args, run_id=None, request_json=None, ag def start_runner_process( self, run_id, request_json, edge_id=None, is_server_job=False, sender_message_queue=None, listener_message_queue=None, - status_center_queue=None, + status_center_queue=None, process_name=None ): server_runner = self._generate_job_runner_instance( self.args, run_id=run_id, request_json=request_json, @@ -430,7 +440,8 @@ def start_runner_process( self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, self.run_artifacts_queue, self.run_logs_queue, self.run_edge_device_info_global_queue, - self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue + self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue, + process_name, ) ) else: @@ -439,7 +450,8 @@ def start_runner_process( self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, self.run_artifacts_queue, self.run_logs_queue, self.run_edge_device_info_global_queue, - self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue + self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue, + process_name, ) ) self.run_process.start() diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py index 664fb4671e..f462596cbf 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py @@ -11,6 +11,7 @@ import fedml from .cloud_server_manager import FedMLCloudServerManager from ..comm_utils.run_process_utils import RunProcessUtils +from ..scheduler_core.general_constants import GeneralConstants from ..scheduler_core.scheduler_base_job_runner_manager import FedMLSchedulerBaseJobRunnerManager from ..scheduler_core.account_manager import FedMLAccountManager @@ -26,7 +27,7 @@ def start_job_runner( self, run_id, request_json, args=None, edge_id=None, is_server_job=False, sender_message_queue=None, listener_message_queue=None, status_center_queue=None, communication_manager=None, master_agent_instance=None, should_start_cloud_server=False, - use_local_process_as_cloud_server=False, cuda_visible_gpu_ids_str=None + use_local_process_as_cloud_server=False, cuda_visible_gpu_ids_str=None, process_name=None ): if should_start_cloud_server: self._start_cloud_server( @@ -34,7 +35,7 @@ def start_job_runner( use_local_process_as_cloud_server=use_local_process_as_cloud_server, sender_message_queue=sender_message_queue, listener_message_queue=listener_message_queue, status_center_queue=status_center_queue, communication_manager=communication_manager, - master_agent_instance=master_agent_instance) + master_agent_instance=master_agent_instance, process_name=process_name) return run_id_str = str(run_id) @@ -46,7 +47,8 @@ def start_job_runner( run_id, request_json, edge_id=edge_id, is_server_job=is_server_job, sender_message_queue=sender_message_queue, listener_message_queue=listener_message_queue, - status_center_queue=status_center_queue + status_center_queue=status_center_queue, + process_name=process_name ) def stop_job_runner( @@ -96,7 +98,7 @@ def _start_cloud_server( use_local_process_as_cloud_server=False, sender_message_queue=None, listener_message_queue=None, status_center_queue=None, communication_manager=None, - master_agent_instance=None + master_agent_instance=None, process_name=None ): run_id_str = str(run_id) cloud_server_mgr = FedMLCloudServerManager( @@ -108,6 +110,7 @@ def _start_cloud_server( self.cloud_run_process_map[run_id_str].start() else: cloud_device_id = request_json.get("cloudServerDeviceId", "0") + server_id = request_json.get("server_id", 0) message_bytes = json.dumps(request_json).encode("ascii") base64_bytes = base64.b64encode(message_bytes) payload = base64_bytes.decode("ascii") @@ -121,14 +124,14 @@ def _start_cloud_server( args=(args.account_id, args.api_key, args.os_name, args.version, cloud_device_id, run_id, payload, communication_manager, sender_message_queue, - status_center_queue, master_agent_instance)) + status_center_queue, master_agent_instance, process_name)) else: self.cloud_run_process_map[run_id_str] = fedml.get_process( target=cloud_server_mgr.start_local_master_server, args=(args.account_id, args.api_key, args.os_name, args.version, cloud_device_id, run_id, payload, communication_manager, sender_message_queue, - status_center_queue, master_agent_instance)) + status_center_queue, master_agent_instance, process_name)) self.cloud_run_process_map[run_id_str].start() time.sleep(1) diff --git a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py index 2f8a4c5838..9d3b492758 100755 --- a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py @@ -214,7 +214,8 @@ def callback_start_train(self, topic=None, payload=None): sender_message_queue=self.message_center.get_sender_message_queue(), listener_message_queue=self.get_listener_message_queue(), status_center_queue=self.get_status_queue(), - communication_manager=self.get_listener_communication_manager() + communication_manager=self.get_listener_communication_manager(), + process_name=GeneralConstants.get_launch_master_job_process_name(run_id, self.edge_id) ) process = self._get_job_runner_manager().get_runner_process(run_id) @@ -225,6 +226,7 @@ def callback_start_train(self, topic=None, payload=None): elif self.run_as_cloud_agent: self.init_job_task(request_json) + server_id = request_json.get("server_id", self.edge_id) self._get_job_runner_manager().start_job_runner( run_id, request_json, args=self.args, edge_id=self.edge_id, sender_message_queue=self.message_center.get_sender_message_queue(), @@ -233,7 +235,8 @@ def callback_start_train(self, topic=None, payload=None): communication_manager=self.get_listener_communication_manager(), master_agent_instance=self.generate_agent_instance(), should_start_cloud_server=True, - use_local_process_as_cloud_server=self.use_local_process_as_cloud_server + use_local_process_as_cloud_server=self.use_local_process_as_cloud_server, + process_name=GeneralConstants.get_launch_master_job_process_name(run_id, server_id) ) process = self._get_job_runner_manager().get_runner_process(run_id, is_cloud_server=True) @@ -255,7 +258,8 @@ def callback_start_train(self, topic=None, payload=None): sender_message_queue=self.message_center.get_sender_message_queue(), listener_message_queue=self.get_listener_message_queue(), status_center_queue=self.get_status_queue(), - communication_manager=self.get_listener_communication_manager() + communication_manager=self.get_listener_communication_manager(), + process_name=GeneralConstants.get_launch_master_job_process_name(run_id, server_id) ) self.send_status_msg_to_edges(edge_id_list, run_id, server_id) @@ -311,7 +315,11 @@ def callback_complete_job(self, topic, payload): self._process_job_complete_status(run_id, server_id, request_json) def _process_job_complete_status(self, run_id, server_id, complete_payload): - pass + # Complete the job runner + self._get_job_runner_manager().complete_job_runner( + run_id, args=self.args, server_id=server_id, request_json=complete_payload, + run_as_cloud_agent=self.run_as_cloud_agent, run_as_cloud_server=self.run_as_cloud_server, + use_local_process_as_cloud_server=self.use_local_process_as_cloud_server) def callback_run_logs(self, topic, payload): run_id = str(topic).split('/')[-1] diff --git a/python/fedml/computing/scheduler/master/cloud_server_manager.py b/python/fedml/computing/scheduler/master/cloud_server_manager.py index 0aabaf5dbf..3669cb32bc 100755 --- a/python/fedml/computing/scheduler/master/cloud_server_manager.py +++ b/python/fedml/computing/scheduler/master/cloud_server_manager.py @@ -5,6 +5,8 @@ import platform import traceback +import setproctitle + import fedml from fedml.computing.scheduler.comm_utils.sys_utils import get_python_program from fedml.computing.scheduler.scheduler_core.account_manager import FedMLAccountManager @@ -47,8 +49,11 @@ def start_local_cloud_server(user, api_key, os_name, version, cloud_device_id, r def start_local_master_server( self, user, api_key, os_name, version, cloud_device_id, run_id, payload, communication_manager=None, sender_message_queue=None, status_center_queue=None, - master_agent_instance=None + master_agent_instance=None, process_name=None ): + if process_name is not None: + setproctitle.setproctitle(process_name) + logging.info(f"Local master server pid: {os.getpid()}") if platform.system() != "Windows": os.setsid() diff --git a/python/fedml/computing/scheduler/master/master_protocol_manager.py b/python/fedml/computing/scheduler/master/master_protocol_manager.py index c941502b9c..1adda439c6 100755 --- a/python/fedml/computing/scheduler/master/master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/master_protocol_manager.py @@ -7,8 +7,9 @@ class FedMLLaunchMasterProtocolManager(FedMLBaseMasterProtocolManager, ABC): def __init__(self, args, agent_config=None): FedMLBaseMasterProtocolManager.__init__(self, args, agent_config=agent_config) + self.message_center_name = "launch_master_agent" - # Override + # Override def generate_topics(self): super().generate_topics() @@ -35,14 +36,6 @@ def _init_extra_items(self): def print_connected_info(self): super().print_connected_info() - # Override - def _process_job_complete_status(self, run_id, server_id, complete_payload): - # Complete the job runner - self._get_job_runner_manager().complete_job_runner( - run_id, args=self.args, server_id=server_id, request_json=complete_payload, - run_as_cloud_agent=self.run_as_cloud_agent, run_as_cloud_server=self.run_as_cloud_server, - use_local_process_as_cloud_server=self.use_local_process_as_cloud_server) - def generate_agent_instance(self): from .master_agent import FedMLLaunchMasterAgent return FedMLLaunchMasterAgent() diff --git a/python/fedml/computing/scheduler/model_scheduler/master_protocol_manager.py b/python/fedml/computing/scheduler/model_scheduler/master_protocol_manager.py index 668d1192ce..6b5ffe0aac 100755 --- a/python/fedml/computing/scheduler/model_scheduler/master_protocol_manager.py +++ b/python/fedml/computing/scheduler/model_scheduler/master_protocol_manager.py @@ -263,7 +263,8 @@ def callback_start_deployment(self, topic, payload): run_id, request_json, args=self.args, edge_id=self.edge_id, sender_message_queue=self.message_center.get_sender_message_queue(), listener_message_queue=self.get_listener_message_queue(), - status_center_queue=self.get_status_queue() + status_center_queue=self.get_status_queue(), + process_name=GeneralConstants.get_deploy_master_job_process_name(run_id, self.edge_id) ) process = self._get_job_runner_manager().get_runner_process(run_id) if process is not None: diff --git a/python/fedml/computing/scheduler/model_scheduler/worker_protocol_manager.py b/python/fedml/computing/scheduler/model_scheduler/worker_protocol_manager.py index f9bc70452d..51cf5c65ef 100755 --- a/python/fedml/computing/scheduler/model_scheduler/worker_protocol_manager.py +++ b/python/fedml/computing/scheduler/model_scheduler/worker_protocol_manager.py @@ -12,6 +12,7 @@ from .device_model_msg_object import FedMLModelMsgObject from .device_client_constants import ClientConstants from .device_client_data_interface import FedMLClientDataInterface +from ..scheduler_core.general_constants import GeneralConstants from ..slave.base_slave_protocol_manager import FedMLBaseSlaveProtocolManager from .worker_job_runner_manager import FedMLDeployJobRunnerManager from .device_mqtt_inference_protocol import FedMLMqttInference @@ -160,7 +161,8 @@ def callback_start_deployment(self, topic, payload): run_id, request_json, args=self.args, edge_id=self.edge_id, sender_message_queue=self.message_center.get_sender_message_queue(), listener_message_queue=self.get_listener_message_queue(), - status_center_queue=self.get_status_queue() + status_center_queue=self.get_status_queue(), + process_name=GeneralConstants.get_deploy_slave_job_process_name(run_id, self.edge_id) ) process = self._get_job_runner_manager().get_runner_process(run_id) if process is not None: diff --git a/python/fedml/computing/scheduler/scheduler_core/general_constants.py b/python/fedml/computing/scheduler/scheduler_core/general_constants.py index 8c60b17bdf..3b40e1df80 100755 --- a/python/fedml/computing/scheduler/scheduler_core/general_constants.py +++ b/python/fedml/computing/scheduler/scheduler_core/general_constants.py @@ -65,6 +65,19 @@ class GeneralConstants: FEDML_OTA_CMD_RESTART = "restart" FEDML_LOG_SOURCE_TYPE_MODEL_END_POINT = "MODEL_END_POINT" + FEDML_PROCESS_NAME_PREFIX = "fedml-process-" + FEDML_LAUNCH_MASTER_JOB_RUNNER_TAG = "launch-master-job-runner" + FEDML_LAUNCH_SLAVE_JOB_RUNNER_TAG = "launch-slave-job-runner" + FEDML_LAUNCH_MASTER_USER_JOB_TAG = "launch-master-user-job" + FEDML_DEPLOY_MASTER_JOB_RUNNER_TAG = "deploy-master-job-runner" + FEDML_DEPLOY_SLAVE_JOB_RUNNER_TAG = "deploy-slave-job-runner" + FEDML_DEPLOY_MASTER_USER_JOB_TAG = "deploy-master-user-job" + FEDML_MESSAGE_CENTER_LISTENER_TAG = "message-center-listener" + FEDML_MESSAGE_CENTER_SENDER_TAG = "message-center-sender" + FEDML_STATUS_CENTER_TAG = "status-center" + FEDML_LOG_PROCESS_TAG = "log" + + FEDML_TOPIC_STATUS_CENTER_STOP = "anywhere/status_center/stop" @staticmethod def get_package_unzip_dir(package_download_dir): @@ -216,3 +229,60 @@ def get_topic_complete_job(server_id): def get_payload_complete_job(run_id, server_id): payload_complete_job = {"runId": run_id, "serverId": server_id} return payload_complete_job + + @staticmethod + def get_process_name(process_tag, run_id=None, edge_id=None): + return f"{GeneralConstants.FEDML_PROCESS_NAME_PREFIX}{process_tag}-run-{run_id}-edge-{edge_id}" + + @staticmethod + def get_process_name_with_prefix(process_prefix, run_id=None, edge_id=None): + return f"{process_prefix}-run-{run_id}-edge-{edge_id}" + + @staticmethod + def get_launch_master_job_process_name(run_id, edge_id): + return GeneralConstants.get_process_name( + GeneralConstants.FEDML_LAUNCH_MASTER_JOB_RUNNER_TAG, run_id, edge_id) + + @staticmethod + def get_launch_slave_job_process_name(run_id, edge_id): + return GeneralConstants.get_process_name( + GeneralConstants.FEDML_LAUNCH_SLAVE_JOB_RUNNER_TAG, run_id, edge_id) + + @staticmethod + def get_launch_master_user_process_name(run_id, edge_id): + return GeneralConstants.get_process_name( + GeneralConstants.FEDML_LAUNCH_MASTER_USER_JOB_TAG, run_id, edge_id) + + @staticmethod + def get_deploy_master_job_process_name(run_id, edge_id): + return GeneralConstants.get_process_name( + GeneralConstants.FEDML_DEPLOY_MASTER_JOB_RUNNER_TAG, run_id, edge_id) + + @staticmethod + def get_deploy_slave_job_process_name(run_id, edge_id): + return GeneralConstants.get_process_name( + GeneralConstants.FEDML_DEPLOY_SLAVE_JOB_RUNNER_TAG, run_id, edge_id) + + @staticmethod + def get_deploy_master_user_process_name(run_id, edge_id): + return GeneralConstants.get_process_name( + GeneralConstants.FEDML_DEPLOY_MASTER_USER_JOB_TAG, run_id, edge_id) + + @staticmethod + def get_log_process_name(run_id, edge_id): + return GeneralConstants.get_process_name( + GeneralConstants.FEDML_LOG_PROCESS_TAG, run_id, edge_id) + + @staticmethod + def get_message_center_listener_process_name(message_center_name): + return f"{GeneralConstants.FEDML_PROCESS_NAME_PREFIX}{GeneralConstants.FEDML_MESSAGE_CENTER_LISTENER_TAG}-{message_center_name}" + + @staticmethod + def get_message_center_sender_process_name(message_center_name): + return f"{GeneralConstants.FEDML_PROCESS_NAME_PREFIX}{GeneralConstants.FEDML_MESSAGE_CENTER_SENDER_TAG}-{message_center_name}" + + @staticmethod + def get_status_center_process_name(status_center_tag): + return f"{GeneralConstants.FEDML_PROCESS_NAME_PREFIX}{GeneralConstants.FEDML_STATUS_CENTER_TAG}-{status_center_tag}" + + diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index aeac1a3855..087e74edf4 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -10,8 +10,11 @@ import queue from os.path import expanduser +import setproctitle + import fedml from fedml.core.distributed.communication.mqtt.mqtt_manager import MqttManager +from .general_constants import GeneralConstants from ..slave.client_constants import ClientConstants from ....core.mlops.mlops_metrics import MLOpsMetrics from operator import methodcaller @@ -140,20 +143,21 @@ def start_sender(self, message_center_name=None): self.sender_message_queue = multiprocessing.Manager().Queue() self.message_event = multiprocessing.Event() self.message_event.clear() + process_name = GeneralConstants.get_message_center_sender_process_name(message_center_name) message_center = FedMLMessageCenter(agent_config=self.sender_agent_config, sender_message_queue=self.sender_message_queue) if platform.system() == "Windows": self.message_center_process = multiprocessing.Process( target=message_center.run_sender, args=( self.message_event, self.sender_message_queue, - message_center_name + message_center_name, process_name ) ) else: self.message_center_process = fedml.get_process( target=message_center.run_sender, args=( self.message_event, self.sender_message_queue, - message_center_name + message_center_name, process_name ) ) self.message_center_process.start() @@ -211,7 +215,10 @@ def retry_sending_undelivered_message(self): # Save the message self.save_message_record(message_entity.run_id, message_entity.device_id, sent_message_record) - def run_sender(self, message_event, message_queue, message_center_name): + def run_sender(self, message_event, message_queue, message_center_name, process_name=None): + if process_name is not None: + setproctitle.setproctitle(process_name) + if platform.system() != "Windows": os.setsid() @@ -345,15 +352,16 @@ def start_listener( self.listener_message_event = multiprocessing.Event() self.listener_message_event.clear() self.listener_agent_config = agent_config - # message_runner = self.get_message_runner() - message_runner = self + message_runner = self.get_message_runner() + # message_runner = self message_runner.listener_agent_config = agent_config + process_name = GeneralConstants.get_message_center_listener_process_name(message_center_name) if platform.system() == "Windows": self.listener_message_center_process = multiprocessing.Process( target=message_runner.run_listener_dispatcher, args=( self.listener_message_event, self.listener_message_queue, self.listener_handler_funcs, sender_message_queue, - sender_message_event, message_center_name, extra_queues + sender_message_event, message_center_name, extra_queues, process_name ) ) else: @@ -361,7 +369,7 @@ def start_listener( target=message_runner.run_listener_dispatcher, args=( self.listener_message_event, self.listener_message_queue, self.listener_handler_funcs, sender_message_queue, - sender_message_event, message_center_name, extra_queues + sender_message_event, message_center_name, extra_queues, process_name ) ) self.listener_message_center_process.start() @@ -398,8 +406,11 @@ def unsubscribe_msg(self, topic): def run_listener_dispatcher( self, listener_message_event, listener_message_queue, listener_funcs, sender_message_queue, sender_message_event, - message_center_name, extra_queues + message_center_name, extra_queues, process_name=None ): + if process_name is not None: + setproctitle.setproctitle(process_name) + if platform.system() != "Windows": os.setsid() diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py index 30df7f1905..7b0d00f53d 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py @@ -615,7 +615,7 @@ def job_error_processor(self, error_list): def start_runner_process( self, run_id, edge_id, request_json, cuda_visible_gpu_ids_str=None, - sender_message_queue=None, status_center_queue=None + sender_message_queue=None, status_center_queue=None, process_name=None ): return None diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py index dcc4045699..8edf57fcbb 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py @@ -20,7 +20,7 @@ def start_job_runner( self, run_id, request_json, args=None, edge_id=None, is_server_job=False, sender_message_queue=None, listener_message_queue=None, status_center_queue=None, should_start_cloud_server=False, use_local_process_as_cloud_server=False, - cuda_visible_gpu_ids_str=None + cuda_visible_gpu_ids_str=None, process_name=None ): run_id_str = str(run_id) self.job_runners[run_id_str] = self._generate_job_runner_instance( @@ -31,7 +31,8 @@ def start_job_runner( run_id, request_json, edge_id=edge_id, sender_message_queue=sender_message_queue, listener_message_queue=listener_message_queue, - status_center_queue=status_center_queue + status_center_queue=status_center_queue, + process_name=process_name ) def stop_job_runner(self, run_id): diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py index 833fa1edc0..9970b1d3f6 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_protocol_manager.py @@ -154,6 +154,7 @@ def stop(self, kill_process=False): self.communication_mgr.disconnect() if kill_process: + self.post_status_center_stopping_message() self.release_message_center() RunProcessUtils.kill_process(os.getppid(), exclude_current_pid=True) @@ -328,5 +329,10 @@ def send_agent_active_msg(self, edge_id): active_msg = {"ID": edge_id, "status": GeneralConstants.MSG_MLOPS_SERVER_STATUS_IDLE} self.message_center.send_message_json(self.topic_active, json.dumps(active_msg)) + def post_status_center_stopping_message(self, run_id=None): + topic_status_center_stopping = GeneralConstants.FEDML_TOPIC_STATUS_CENTER_STOP + payload = {"run_id": run_id} + self.status_reporter.send_message(topic_status_center_stopping, json.dumps(payload)) + def set_parent_agent(self, parent_agent): self.parent_agent = parent_agent diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index 76ba9857c6..47dfa9d1a7 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -7,7 +7,10 @@ import multiprocessing import queue +import setproctitle + import fedml +from .general_constants import GeneralConstants from .message_common import FedMLMessageEntity, FedMLStatusEntity from .message_center import FedMLMessageCenter import traceback @@ -84,6 +87,7 @@ class FedMLStatusCenter(object): TOPIC_SLAVE_JOB_LAUNCH_SUFFIX = "/start_train" TOPIC_SLAVE_JOB_STOP_PREFIX = "flserver_agent/" TOPIC_SLAVE_JOB_STOP_SUFFIX = "/stop_train" + TOPIC_STATUS_CENTER_STOP_PREFIX = GeneralConstants.FEDML_TOPIC_STATUS_CENTER_STOP ALLOWED_MAX_JOB_STATUS_CACHE_NUM = 1000 def __init__(self, message_queue=None): @@ -116,22 +120,25 @@ def start_status_center(self, sender_message_center_queue=None, self.status_event.clear() self.status_sender_message_center_queue = sender_message_center_queue self.status_listener_message_center_queue = listener_message_center_queue - #self.status_runner = self.get_status_runner() - self.status_runner = self + self.status_runner = self.get_status_runner() + #self.status_runner = self + process_name = GeneralConstants.get_status_center_process_name( + f'{"deploy" if self.is_deployment_status_center else "launch"}_' + f'{"slave" if is_slave_agent else "master"}_agent') target_func = self.status_runner.run_status_dispatcher if not is_slave_agent else \ self.status_runner.run_status_dispatcher_in_slave if platform.system() == "Windows": self.status_center_process = multiprocessing.Process( target=target_func, args=( self.status_event, self.status_queue, self.status_sender_message_center_queue, - self.status_listener_message_center_queue, sender_message_event + self.status_listener_message_center_queue, sender_message_event, process_name ) ) else: self.status_center_process = fedml.get_process( target=target_func, args=( self.status_event, self.status_queue, self.status_sender_message_center_queue, - self.status_listener_message_center_queue, sender_message_event + self.status_listener_message_center_queue, sender_message_event, process_name ) ) @@ -178,7 +185,10 @@ def rebuild_status_center(self, status_queue): def run_status_dispatcher(self, status_event, status_queue, sender_message_center_queue, listener_message_center_queue, - sender_message_event): + sender_message_event, process_name=None): + if process_name is not None: + setproctitle.setproctitle(process_name) + if platform.system() != "Windows": os.setsid() @@ -229,6 +239,12 @@ def run_status_dispatcher(self, status_event, status_queue, message_entity = FedMLMessageEntity(message_body=message_body) status_entity = FedMLStatusEntity(status_msg_body=message_body) + if message_entity.topic.startswith(FedMLStatusCenter.TOPIC_STATUS_CENTER_STOP_PREFIX): + # Process the stop message for message center and status center + message_center.stop_message_center() + self.stop_status_center() + continue + # Generate status manager instance run_id_str = str(status_entity.run_id) run_id_int = int(status_entity.run_id) @@ -279,7 +295,10 @@ def run_status_dispatcher(self, status_event, status_queue, def run_status_dispatcher_in_slave(self, status_event, status_queue, sender_message_center_queue, listener_message_center_queue, - sender_message_event): + sender_message_event, process_name=None): + if process_name is not None: + setproctitle.setproctitle(process_name) + if platform.system() != "Windows": os.setsid() diff --git a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py index 68b40b3291..ec98cc7906 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_manager_protocols.py @@ -137,16 +137,13 @@ def process_job_completed_status(self, master_id, status): # self.remove_listener_for_run_metrics(self.run_id) # self.remove_listener_for_run_logs(self.run_id) + self.message_center.receive_message( + GeneralConstants.get_topic_complete_job(master_id), + json.dumps(GeneralConstants.get_payload_complete_job(self.run_id, master_id))) + if self.status_center.is_deployment_status_center: if status == ServerConstants.MSG_MLOPS_SERVER_STATUS_FAILED: self.report_deployment_status(self.run_id, GeneralConstants.MSG_MODELOPS_DEPLOYMENT_STATUS_FAILED) - else: - self.message_center.receive_message( - GeneralConstants.get_topic_complete_job(master_id), - json.dumps(GeneralConstants.get_payload_complete_job(self.run_id, master_id))) - - self.message_center.stop_message_center() - self.status_center.stop_status_center() def process_job_exception_status(self, master_id, status): # Report exception job status diff --git a/python/fedml/computing/scheduler/slave/base_slave_job_runner.py b/python/fedml/computing/scheduler/slave/base_slave_job_runner.py index 8876fc7e39..0486b131a6 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_job_runner.py +++ b/python/fedml/computing/scheduler/slave/base_slave_job_runner.py @@ -7,6 +7,8 @@ import traceback from abc import ABC, abstractmethod +import setproctitle + import fedml from ....core.mlops.mlops_runtime_log import MLOpsRuntimeLog from ....core.mlops.mlops_runtime_log_daemon import MLOpsRuntimeLogDaemon @@ -48,8 +50,12 @@ def __repr__(self): ) def run(self, process_event, completed_event, run_extend_queue_list, - sender_message_center, listener_message_queue, status_center_queue): - print(f"Client runner process id {os.getpid()}, run id {self.run_id}") + sender_message_center, listener_message_queue, status_center_queue, + process_name=None): + if process_name is not None: + setproctitle.setproctitle(process_name) + + print(f"Client runner process id {os.getpid()}, name {process_name}, run id {self.run_id}") if platform.system() != "Windows": os.setsid() @@ -245,7 +251,7 @@ def reset_devices_status(self, edge_id, status): def start_runner_process( self, run_id, request_json, edge_id=None, sender_message_queue=None, listener_message_queue=None, - status_center_queue=None, cuda_visible_gpu_ids_str=None + status_center_queue=None, cuda_visible_gpu_ids_str=None, process_name=None ): client_runner = self._generate_job_runner_instance( self.args, run_id=run_id, request_json=request_json, @@ -265,12 +271,12 @@ def start_runner_process( self.run_process = multiprocessing.Process( target=client_runner.run, args=( self.run_process_event, self.run_process_completed_event, self.run_extend_queue_list, - sender_message_queue, listener_message_queue, status_center_queue + sender_message_queue, listener_message_queue, status_center_queue, process_name )) else: self.run_process = fedml.get_process(target=client_runner.run, args=( self.run_process_event, self.run_process_completed_event, self.run_extend_queue_list, - sender_message_queue, listener_message_queue, status_center_queue + sender_message_queue, listener_message_queue, status_center_queue, process_name )) self.run_process.start() return self.run_process diff --git a/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py b/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py index 49aad618c1..648a49bbd1 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py +++ b/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py @@ -262,6 +262,8 @@ def callback_start_train(self, topic, payload): # Report the run status with finished status and return self.generate_status_report(run_id, edge_id, server_agent_id=server_agent_id).report_client_id_status( edge_id, GeneralConstants.MSG_MLOPS_CLIENT_STATUS_FINISHED, run_id=run_id) + + MLOpsRuntimeLogDaemon.get_instance(self.args).stop_log_processor(run_id, edge_id) return logging.info( f"Run started, available gpu ids: {JobRunnerUtils.get_instance().get_available_gpu_id_list(edge_id)}") @@ -279,6 +281,7 @@ def callback_start_train(self, topic, payload): listener_message_queue=self.get_listener_message_queue(), status_center_queue=self.get_status_queue(), cuda_visible_gpu_ids_str=cuda_visible_gpu_ids_str, + process_name=GeneralConstants.get_launch_slave_job_process_name(run_id, edge_id) ) run_process = self._get_job_runner_manager().get_runner_process(run_id) if run_process is not None: diff --git a/python/fedml/computing/scheduler/slave/slave_protocol_manager.py b/python/fedml/computing/scheduler/slave/slave_protocol_manager.py index 6e3cb2ebe1..050cfb3f1d 100755 --- a/python/fedml/computing/scheduler/slave/slave_protocol_manager.py +++ b/python/fedml/computing/scheduler/slave/slave_protocol_manager.py @@ -11,6 +11,7 @@ class FedMLLaunchSlaveProtocolManager(FedMLBaseSlaveProtocolManager): def __init__(self, args, agent_config=None): FedMLBaseSlaveProtocolManager.__init__(self, args, agent_config=agent_config) + self.message_center_name = "launch_slave_agent" # Override def generate_topics(self): diff --git a/python/fedml/computing/scheduler/slave/united_agents.py b/python/fedml/computing/scheduler/slave/united_agents.py index 3640ea149e..17aee46f62 100755 --- a/python/fedml/computing/scheduler/slave/united_agents.py +++ b/python/fedml/computing/scheduler/slave/united_agents.py @@ -57,8 +57,7 @@ def login(self, userid, api_key=None, device_id=None, deploy_master_agent.login( userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM, - communication_manager=shared_communication_mgr, - status_center_queue=shared_master_status_center_queue + communication_manager=shared_communication_mgr ) # Login with the deployment slave role based on @@ -66,10 +65,7 @@ def login(self, userid, api_key=None, device_id=None, deploy_slave_agent.login( userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM, - communication_manager=shared_communication_mgr, - sender_message_queue=shared_slave_sender_message_queue, - status_center_queue=shared_slave_status_center_queue, - sender_message_event=shared_slave_sender_message_event + communication_manager=shared_communication_mgr ) # Start the slave agent to connect to servers and loop forever. diff --git a/python/fedml/core/mlops/mlops_runtime_log_daemon.py b/python/fedml/core/mlops/mlops_runtime_log_daemon.py index f72d88cfea..bf136a36c9 100644 --- a/python/fedml/core/mlops/mlops_runtime_log_daemon.py +++ b/python/fedml/core/mlops/mlops_runtime_log_daemon.py @@ -8,10 +8,12 @@ import multiprocess as multiprocessing import requests +import setproctitle import yaml import fedml from fedml.computing.scheduler.comm_utils.run_process_utils import RunProcessUtils +from fedml.computing.scheduler.scheduler_core.general_constants import GeneralConstants from fedml.core.mlops.mlops_utils import MLOpsLoggingUtils from ...core.mlops.mlops_configs import MLOpsConfigs @@ -256,8 +258,11 @@ def should_ignore_log_line(log_line): return False - def log_process(self, process_event): - logging.info(f"Log uploading process id {os.getpid()}, run id {self.run_id}, edge id {self.device_id}") + def log_process(self, process_event, process_name=None): + if process_name is not None: + setproctitle.setproctitle(process_name) + + logging.info(f"Log uploading process id {os.getpid()}, run id {self.run_id}, name {process_name}, edge id {self.device_id}") self.log_process_event = process_event only_push_artifact = False @@ -419,6 +424,8 @@ def set_log_source(self, source): self.log_source = source def start_log_processor(self, log_run_id, log_device_id, log_source=None, log_file_prefix=None): + if log_run_id == "-1" or int(log_run_id) <= 0: + return log_processor = MLOpsRuntimeLogProcessor(self.args.using_mlops, log_run_id, log_device_id, self.log_file_dir, self.log_server_url, @@ -432,12 +439,13 @@ def start_log_processor(self, log_run_id, log_device_id, log_source=None, log_fi self.log_process_event_map[event_map_id] = multiprocessing.Event() self.log_process_event_map[event_map_id].clear() log_processor.log_process_event = self.log_process_event_map[event_map_id] + process_name = GeneralConstants.get_log_process_name(log_run_id, log_device_id) if platform.system() == "Windows": log_child_process = multiprocessing.Process( - target=log_processor.log_process, args=(self.log_process_event_map[event_map_id],)) + target=log_processor.log_process, args=(self.log_process_event_map[event_map_id], process_name)) else: log_child_process = fedml.get_process( - target=log_processor.log_process, args=(self.log_process_event_map[event_map_id],)) + target=log_processor.log_process, args=(self.log_process_event_map[event_map_id], process_name)) # process = threading.Thread(target=log_processor.log_process) # process.start() if log_child_process is not None: diff --git a/python/setup.py b/python/setup.py index f00c0b4335..d2d9441277 100644 --- a/python/setup.py +++ b/python/setup.py @@ -126,7 +126,7 @@ def finalize_options(self): setup( name="fedml", - version="0.8.31b23", + version="0.8.51b1", author="FedML Team", author_email="ch@fedml.ai", description="A research and production integrated edge-cloud library for " From fd257b801430d789225b93afff46d514f99c6654 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 20 Jun 2024 19:28:24 +0800 Subject: [PATCH 17/23] [CoreEngine] update the dependant libs. --- python/setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index d2d9441277..f8c323d63f 100644 --- a/python/setup.py +++ b/python/setup.py @@ -69,7 +69,8 @@ def finalize_options(self): 'python-dotenv', 'protobuf>=3.20.2,<4.0dev', 'typer<0.10.0,>=0.3.0', - 'fastapi-cli==0.0.1' + 'fastapi-cli==0.0.1', + 'setproctitle' ] requirements_extra_mpi = [ From 7a0963e97edb3ae59d3b3745893d03ed7f5385d5 Mon Sep 17 00:00:00 2001 From: xiang Date: Fri, 21 Jun 2024 03:04:03 +0000 Subject: [PATCH 18/23] [TEST]: add windows runners tests --- .github/workflows/CI_build.yml | 4 +- .github/workflows/CI_deploy.yml | 7 ++-- .github/workflows/CI_federate.yml | 4 +- .github/workflows/CI_launch.yml | 4 +- .github/workflows/CI_train.yml | 6 +-- .github/workflows/README.md | 24 +++++++++++- .../workflows/registry-runners/windows.bat | 38 ------------------- .../workflows/registry-runners/windows.ps1 | 32 ++++++++++++++++ 8 files changed, 68 insertions(+), 51 deletions(-) delete mode 100644 .github/workflows/registry-runners/windows.bat create mode 100644 .github/workflows/registry-runners/windows.ps1 diff --git a/.github/workflows/CI_build.yml b/.github/workflows/CI_build.yml index 86a846379c..b4c3642b09 100644 --- a/.github/workflows/CI_build.yml +++ b/.github/workflows/CI_build.yml @@ -17,11 +17,11 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: build: - runs-on: ${{ matrix.python-version }} + runs-on: ["${{ matrix.python-version }}","${{ matrix.os }}"] strategy: fail-fast: false matrix: - os: [ Linux ] + os: [ Linux, Windows ] arch: [X64] python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] diff --git a/.github/workflows/CI_deploy.yml b/.github/workflows/CI_deploy.yml index 35e793708f..982f65b3c5 100644 --- a/.github/workflows/CI_deploy.yml +++ b/.github/workflows/CI_deploy.yml @@ -17,14 +17,15 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: deploy: - runs-on: ${{ matrix.python-version }} + runs-on: ["${{ matrix.python-version }}","${{ matrix.os }}"] strategy: fail-fast: false matrix: - os: [ Linux ] + os: [ Linux, Windows ] arch: [X64] python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] - + + timeout-minutes: 5 steps: - name: Checkout fedml uses: actions/checkout@v3 diff --git a/.github/workflows/CI_federate.yml b/.github/workflows/CI_federate.yml index 52cdfd9e10..1302771b1d 100644 --- a/.github/workflows/CI_federate.yml +++ b/.github/workflows/CI_federate.yml @@ -20,11 +20,11 @@ jobs: strategy: fail-fast: false matrix: - os: [ Linux ] + os: [ Linux, Windows ] arch: [X64] python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] - runs-on: ${{ matrix.python-version }} + runs-on: ["${{ matrix.python-version }}","${{ matrix.os }}"] timeout-minutes: 5 steps: - name: Checkout fedml diff --git a/.github/workflows/CI_launch.yml b/.github/workflows/CI_launch.yml index b2b896c82d..13519c41f2 100644 --- a/.github/workflows/CI_launch.yml +++ b/.github/workflows/CI_launch.yml @@ -21,11 +21,11 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest ] + os: [ Linux, Windows ] arch: [X64] python-version: ['python3.8','python3.9','python3.10','python3.11'] - runs-on: ${{ matrix.python-version }} + runs-on: ["${{ matrix.python-version }}","${{ matrix.os }}"] timeout-minutes: 5 steps: - name: Checkout fedml diff --git a/.github/workflows/CI_train.yml b/.github/workflows/CI_train.yml index 529472d55c..2acbcc12a0 100644 --- a/.github/workflows/CI_train.yml +++ b/.github/workflows/CI_train.yml @@ -17,14 +17,14 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: train: - runs-on: ${{ matrix.python-version }} + runs-on: ["${{ matrix.python-version }}","${{ matrix.os }}"] strategy: fail-fast: false matrix: - os: [ Linux ] + os: [ Linux, Windows ] arch: [X64] python-version: ['python3.8', 'python3.9', 'python3.10', 'python3.11'] - + timeout-minutes: 5 steps: - name: Checkout fedml uses: actions/checkout@v3 diff --git a/.github/workflows/README.md b/.github/workflows/README.md index 4e284a2175..f8c119f123 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -45,6 +45,28 @@ to check that your runners are all active. ## 2.2 Windows Runners +step1: Install Anaconda packages +Install Anaconda or Miniconda in a windows machine. the Anaconda and Miniconda can manage your python environments. + +step2: Create python enviroments +Create 4 python environments named python38、python39、python310、python311, you also need to specific `python==3.8` to install specific python version. +For example +``` +conda create -n python38 python==3.8 +``` +step3: Create directories +Create 4 directories named actions-runner-python38、actions-runner-python39、actions-runner-python310、actions-runner-python311 used for different runners. + +step4: Install the latest runner package. +Follow the insturction from navigating this path `Settings -> Actions -> Runners -> New self-hosted runner` to add a new windows runner. Note that You just do the download、extract steps in the directories which we have created, we don't need to configure it and run it. We can run a script to registry all the runners. + +step5: Registry all the runners. +Run the script from ./registry-runners/windows.ps1 to registry all the runners to your github. you need to replace the variables $REPO、$ACCESS_TOKEN、$WORKPLACE with the actual value. Note that you can get your $ACCESS_TOKEN from the following path `Settings -> Actions -> Runners -> New self-hosted runner.`. +In the Configure section, you can find the similar line: `./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M` to get your $ACCESS_TOKEN. + +step6: Make sure the success. +Check if the runners are registered successfully. Navigate the following path.`Settings -> Actions -> Runners` to check that your runners are all active. + ## 2.3 Mac Runners # 3. bind Test Machines @@ -70,5 +92,5 @@ If you need to add a new CI test that is different from the current business, yo # 6. TODO -Implement the Windows runners and the Mac runners. +Implement the Mac runners. diff --git a/.github/workflows/registry-runners/windows.bat b/.github/workflows/registry-runners/windows.bat deleted file mode 100644 index dcdcf81b57..0000000000 --- a/.github/workflows/registry-runners/windows.bat +++ /dev/null @@ -1,38 +0,0 @@ -set REPO=Qigemingziba/FedML -set ACCESS_TOKEN=AGMK3P4W5EM5PXNYTZXXIMTGNF4MW -set WORKPLACE=%pwd% -mkdir actions-runner-python38; cd actions-runner-python38 -conda activate python38 -Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip -Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") -./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.8 -.\run.cmd install -.\run.cmd start - -cd WORKPLACE -mkdir actions-runner-python39; cd actions-runner-python39 -conda activate python39 -Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip -Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") -./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.9 -.\run.cmd install -.\run.cmd start - -cd WORKPLACE -mkdir actions-runner-python310; cd actions-runner-python310 -conda activate python310 -Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip -Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") -./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.10 -.\run.cmd install -.\run.cmd start - -cd WORKPLACE -mkdir actions-runner-python311; cd actions-runner-python311 -conda activate python311 -Invoke-WebRequest -Uri https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-win-x64-2.317.0.zip -OutFile actions-runner-win-x64-2.317.0.zip -Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD/actions-runner-win-x64-2.317.0.zip", "$PWD") -./config.cmd --url https://github.com/%REPO% --token %ACCESS_TOKEN% --labels self-hosted,Windows,X64,python3.11 -.\run.cmd install -.\run.cmd start - diff --git a/.github/workflows/registry-runners/windows.ps1 b/.github/workflows/registry-runners/windows.ps1 new file mode 100644 index 0000000000..40f0f00b8f --- /dev/null +++ b/.github/workflows/registry-runners/windows.ps1 @@ -0,0 +1,32 @@ + +$REPO = "Qigemingziba/FedML" +$ACCESS_TOKEN = "AGMK3PY3QDYUXXXEB5LWI4DGOQIFW" +$WORKPLACE=$PWD + +Set-Location actions-runner-python38 +& conda activate python38 +./config.cmd --url https://github.com/$REPO --name windows-python38 --token $ACCESS_TOKEN --labels self-hosted,Windows,X64,python3.8 +Start-Process run.cmd start -WindowStyle Hidden + +Set-Location $WORKPLACE + +Set-Location actions-runner-python39 +& conda activate python39 +./config.cmd --url https://github.com/$REPO --name windows-python39 --token $ACCESS_TOKEN --labels self-hosted,Windows,X64,python3.9 +Start-Process run.cmd start -WindowStyle Hidden + +Set-Location $WORKPLACE + +Set-Location actions-runner-python310 +& conda activate python310 +./config.cmd --url https://github.com/$REPO --name windows-python310 --token $ACCESS_TOKEN --labels self-hosted,Windows,X64,python3.10 +Start-Process run.cmd start -WindowStyle Hidden + +Set-Location $WORKPLACE + +Set-Location actions-runner-python311 +& conda activate python311 +./config.cmd --url https://github.com/$REPO --name windows-python311 --token $ACCESS_TOKEN --labels self-hosted,Windows,X64,python3.11 +Start-Process run.cmd start -WindowStyle Hidden + +Set-Location $WORKPLACE \ No newline at end of file From 4355c35550d924255d7fe0c0d77d8b31af3e9461 Mon Sep 17 00:00:00 2001 From: xiang Date: Fri, 21 Jun 2024 04:35:07 +0000 Subject: [PATCH 19/23] [doc]: make sure the workflow documents are more readable. --- .github/workflows/README.md | 65 +++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/.github/workflows/README.md b/.github/workflows/README.md index f8c119f123..2b261708f6 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -10,26 +10,24 @@ The CI tests need to be comprehensive, covering typical scenarios only, achievab ## 2.1 Linux Runners -We need to run CI tests in linux enviroment using different python versions such as python3.8/python3.9/python3.10/python3.11 - -Therefore firstly we build linux images for Self-Host Runners. +Step1: Build linux images +Build all the linux images for Self-Host Runners. ``` cd registry-runners bash build_linux_runners.sh ``` -Secondly we need to find your GitHub runner token and your test-account apikey. - -For the argument YourGitHubRunnerToken, you may navigate based the following path. -Settings -> Actions -> Runners -> New self-hosted runner. +Step2: Specify the token and key. +Find your GitHub runner token and your test-account apikey. -In the Configure section, you should find the similar line: -./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M +For the argument YourGitHubRunnerToken, Navigate the path `Settings -> Actions -> Runners -> New self-hosted runner` to get. -set YourGitHubRunnerToken to value of --token +In the Configure section, you will find the similar line: +./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M to get YourGitHubRunnerToken to value of --token -Then we run all ther images. +Step3: Registry all the runners. +Registry by run `run_linux_runners.sh` script ``` bash run_linux_runners.sh [YourGitRepo] [YourGitHubRunnerToken] [YourTestAccountApiKey] ``` @@ -37,58 +35,61 @@ for example ``` bash run_linux_runners.sh FedML-AI/FedML AXRYPLZLZN6XVJB3BAIXSP3EMFC7U 11215dkevvdkegged ``` -Lastly we need to check if the runners are registered successfully. Navigate the following path. -``` -Settings -> Actions -> Runners -``` -to check that your runners are all active. +Step4 Verify Success + +Check if all the runners are registered successfully. Navigate the following path. `Settings -> Actions -> Runners` to check that all your runners are active. ## 2.2 Windows Runners step1: Install Anaconda packages -Install Anaconda or Miniconda in a windows machine. the Anaconda and Miniconda can manage your python environments. +Install Anaconda or Miniconda on a Windows machine. Anaconda and Miniconda can manage your Python environments. step2: Create python enviroments -Create 4 python environments named python38、python39、python310、python311, you also need to specific `python==3.8` to install specific python version. +Create 4 python environments named `python38`、`python39`、`python310` and `python311` for different runners. +Specify the python version to install. For example ``` conda create -n python38 python==3.8 ``` step3: Create directories -Create 4 directories named actions-runner-python38、actions-runner-python39、actions-runner-python310、actions-runner-python311 used for different runners. +Create 4 directories named `actions-runner-python38`、`actions-runner-python39`、`actions-runner-python310` and `actions-runner-python311` for different runners. step4: Install the latest runner package. -Follow the insturction from navigating this path `Settings -> Actions -> Runners -> New self-hosted runner` to add a new windows runner. Note that You just do the download、extract steps in the directories which we have created, we don't need to configure it and run it. We can run a script to registry all the runners. +Follow the insturction from navigating this path `Settings -> Actions -> Runners -> New self-hosted runner` to add a new Windows runner. Note that you only need to download、extract the files into the directories created in Step 3. Configuration and running will be done through a script later. step5: Registry all the runners. -Run the script from ./registry-runners/windows.ps1 to registry all the runners to your github. you need to replace the variables $REPO、$ACCESS_TOKEN、$WORKPLACE with the actual value. Note that you can get your $ACCESS_TOKEN from the following path `Settings -> Actions -> Runners -> New self-hosted runner.`. -In the Configure section, you can find the similar line: `./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M` to get your $ACCESS_TOKEN. +Run the script from `./registry-runners/windows.ps1` to registry all the runners to your github. Replace the variables `$REPO`、`$ACCESS_TOKEN` and `$WORKPLACE` with actual values. Note that you can get your $ACCESS_TOKEN from the following path `Settings -> Actions -> Runners -> New self-hosted runner.`. +In the Configure section, you will find the similar line: `./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M` to get your `$ACCESS_TOKEN`. -step6: Make sure the success. -Check if the runners are registered successfully. Navigate the following path.`Settings -> Actions -> Runners` to check that your runners are all active. +step6: Verify Success +Check if the runners are registered successfully by navigate to `Settings -> Actions -> Runners`. Make sure that all your runners are active. ## 2.3 Mac Runners -# 3. bind Test Machines +# 3. Bind Test Machines -We also need to bind the actual machine to run the test training job. Following this document to bind your test machines. +Bind the actual machine to run the test training job. Follow this document to bind your test machines. https://docs.tensoropera.ai/share-and-earn Note that we need to bind our machines to the test environment. -In your job YAML, you should specify the computing resource type to which you have bound your machines. Then, your job will be scheduled to that machine. +Specify the computing resource type to which you have bound your machines. Your job will be scheduled to that machine. # 4. Trigger -You can apply for a PR; All tests will run automatically. +Applying for a PR can trigger all tests automatically. + +Run a single test on a specific branch from the GitHub Actions tab. + +Schedule daily runs at a specific time by configuring your workflow YAML. You can check the results in the GitHub Actions tab. -You can also run a single test at a specific branch in the GitHub Actions tab. +# 5. Add a new CI test -The CI tests will run daily at a specific time which you configure in your workflow YAML. You can check the results in the GitHub Actions tab. +Creating a new workflow YAML file, such as CI_launch.yaml or CI_train.yaml, allows you to add a CI test that is different from the current business. -# 5. How to add a new CI test +Adding a new CI test to the current business can be done by placing your test in the path python/tests/test_{business}/test_file.py and ensuring that your workflow YAML can run that Python test script. -If you need to add a new CI test that is different from the current business, you need to create a new workflow YAML file, such as CI_launch.yaml or CI_train.yaml. If you just want to add a new CI test to the current business, you can add your test in the path python/tests/test_{business}/test_file.py and make sure that your workflow YAML can run that Python test script. +Ensuring your workflow YAML is configured correctly will enable it to run the new test automatically. # 6. TODO From be60443aea50e174b5057dbe7aa09d1922068d53 Mon Sep 17 00:00:00 2001 From: xiang Date: Fri, 21 Jun 2024 04:42:51 +0000 Subject: [PATCH 20/23] [doc]: make sure the workflow documents are more readable. --- .github/workflows/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/README.md b/.github/workflows/README.md index 2b261708f6..668cb9b302 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -10,7 +10,7 @@ The CI tests need to be comprehensive, covering typical scenarios only, achievab ## 2.1 Linux Runners -Step1: Build linux images +### Step1: Build linux images Build all the linux images for Self-Host Runners. ``` @@ -18,7 +18,7 @@ cd registry-runners bash build_linux_runners.sh ``` -Step2: Specify the token and key. +### Step2: Specify the token and key. Find your GitHub runner token and your test-account apikey. For the argument YourGitHubRunnerToken, Navigate the path `Settings -> Actions -> Runners -> New self-hosted runner` to get. @@ -26,7 +26,7 @@ For the argument YourGitHubRunnerToken, Navigate the path `Settings -> Actions - In the Configure section, you will find the similar line: ./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M to get YourGitHubRunnerToken to value of --token -Step3: Registry all the runners. +### Step3: Registry all the runners. Registry by run `run_linux_runners.sh` script ``` bash run_linux_runners.sh [YourGitRepo] [YourGitHubRunnerToken] [YourTestAccountApiKey] @@ -35,33 +35,33 @@ for example ``` bash run_linux_runners.sh FedML-AI/FedML AXRYPLZLZN6XVJB3BAIXSP3EMFC7U 11215dkevvdkegged ``` -Step4 Verify Success +### Step4: Verify Success Check if all the runners are registered successfully. Navigate the following path. `Settings -> Actions -> Runners` to check that all your runners are active. ## 2.2 Windows Runners -step1: Install Anaconda packages +### Step1: Install Anaconda packages Install Anaconda or Miniconda on a Windows machine. Anaconda and Miniconda can manage your Python environments. -step2: Create python enviroments +### Step2: Create python enviroments Create 4 python environments named `python38`、`python39`、`python310` and `python311` for different runners. Specify the python version to install. For example ``` conda create -n python38 python==3.8 ``` -step3: Create directories +### Step3: Create directories Create 4 directories named `actions-runner-python38`、`actions-runner-python39`、`actions-runner-python310` and `actions-runner-python311` for different runners. -step4: Install the latest runner package. +### Step4: Install the latest runner package. Follow the insturction from navigating this path `Settings -> Actions -> Runners -> New self-hosted runner` to add a new Windows runner. Note that you only need to download、extract the files into the directories created in Step 3. Configuration and running will be done through a script later. -step5: Registry all the runners. +### Step5: Registry all the runners. Run the script from `./registry-runners/windows.ps1` to registry all the runners to your github. Replace the variables `$REPO`、`$ACCESS_TOKEN` and `$WORKPLACE` with actual values. Note that you can get your $ACCESS_TOKEN from the following path `Settings -> Actions -> Runners -> New self-hosted runner.`. In the Configure section, you will find the similar line: `./config.sh --url https://github.com/FedML-AI/FedML --token AXRYPL6G2VHVGDFDQQS5XA3ELYI6M` to get your `$ACCESS_TOKEN`. -step6: Verify Success +### Step6: Verify Success Check if the runners are registered successfully by navigate to `Settings -> Actions -> Runners`. Make sure that all your runners are active. ## 2.3 Mac Runners From d7481bebb214c20475adc8da4b5de362e935f134 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Jun 2024 17:31:32 +0800 Subject: [PATCH 21/23] [CoreEngine] set the name of all monitor processes, remove the redundant binding codes for deployment devices, change the account manager, --- .../scheduler/master/base_master_agent.py | 2 + .../model_scheduler/model_device_client.py | 98 ---------------- .../model_scheduler/model_device_server.py | 97 --------------- .../scheduler_core/account_manager.py | 71 +++++------ .../scheduler_core/general_constants.py | 10 +- .../scheduler_core/message_center.py | 3 +- .../scheduler/scheduler_core/status_center.py | 3 +- .../scheduler/slave/base_slave_agent.py | 7 +- .../slave/base_slave_protocol_manager.py | 11 +- .../scheduler/slave/slave_protocol_manager.py | 66 ++--------- .../scheduler/slave/united_agents.py | 15 ++- python/fedml/core/mlops/mlops_device_perfs.py | 111 ++++++++++++++---- python/fedml/core/mlops/mlops_job_perfs.py | 19 ++- 13 files changed, 185 insertions(+), 328 deletions(-) delete mode 100755 python/fedml/computing/scheduler/model_scheduler/model_device_client.py delete mode 100755 python/fedml/computing/scheduler/model_scheduler/model_device_server.py diff --git a/python/fedml/computing/scheduler/master/base_master_agent.py b/python/fedml/computing/scheduler/master/base_master_agent.py index 4fb3a5e755..e7d18f64f7 100755 --- a/python/fedml/computing/scheduler/master/base_master_agent.py +++ b/python/fedml/computing/scheduler/master/base_master_agent.py @@ -64,6 +64,8 @@ def login( if communication_manager is None: self.protocol_mgr.start() + return login_result + @staticmethod def logout(): GeneralConstants.cleanup_run_process(None, is_master=True) diff --git a/python/fedml/computing/scheduler/model_scheduler/model_device_client.py b/python/fedml/computing/scheduler/model_scheduler/model_device_client.py deleted file mode 100755 index 05f43afc5f..0000000000 --- a/python/fedml/computing/scheduler/model_scheduler/model_device_client.py +++ /dev/null @@ -1,98 +0,0 @@ - -import copy -import logging -import multiprocessing -import time -import traceback -from multiprocessing import Process -from ..scheduler_core.account_manager import FedMLAccountManager -from .worker_agent import FedMLDeployWorkerAgent - - -class FedMLModelDeviceClientRunner: - def __init__(self, args, current_device_id, os_name, is_from_docker, service_config, infer_host="127.0.0.1"): - self.agent_process = None - self.agent_runner = None - self.agent_process_event = None - self.args = copy.deepcopy(args) - self.service_config = service_config - self.unique_device_id = None - self.current_device_id = current_device_id - self.os_name = os_name - self.is_from_docker = is_from_docker - self.edge_id = None - self.infer_host = infer_host - self.redis_addr = "local" - self.redis_port = "6379" - self.redis_password = "fedml_default" - - def get_edge_id(self): - return self.edge_id - - def start(self): - self.agent_runner = FedMLModelDeviceClientRunner(self.args, self.current_device_id, self.os_name, - self.is_from_docker, self.service_config) - self.agent_runner.infer_host = self.infer_host - self.agent_runner.redis_addr = self.redis_addr - self.agent_runner.redis_port = self.redis_port - self.agent_runner.redis_password = self.redis_password - if self.agent_process_event is None: - self.agent_process_event = multiprocessing.Event() - self.agent_process = Process(target=self.agent_runner.run_entry, args=(self.agent_process_event, self.args,)) - self.edge_id = self.bind_device() - self.agent_process.start() - - def run_entry(self, process_event, in_args): - # print(f"Model worker process id {os.getpid()}") - - self.agent_process_event = process_event - - worker_agent = FedMLDeployWorkerAgent() - - while not self.agent_process_event.is_set(): - try: - try: - worker_agent.logout() - except Exception as e: - pass - - worker_agent.login( - in_args.account_id, api_key=in_args.api_key, device_id=in_args.device_id, - os_name=in_args.os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM - ) - except Exception as e: - logging.info("Restart model device client: {}".format(traceback.format_exc())) - pass - finally: - try: - worker_agent.logout() - except Exception as e: - pass - time.sleep(15) - - try: - self.stop() - except Exception as e: - pass - - def check_runner_stop_event(self): - if self.agent_process_event is not None and self.agent_process_event.is_set(): - logging.info("Received stopping event.") - raise Exception("Runner stopped") - - def stop(self): - FedMLDeployWorkerAgent.logout() - - if self.agent_process_event is not None: - self.agent_process_event.set() - - def bind_device(self): - # Login account - login_result = FedMLAccountManager.get_instance().login( - self.args.account_id, api_key=self.args.api_key, device_id=self.args.device_id, - os_name=self.args.os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM - ) - if login_result is not None: - return login_result.edge_id - else: - return None diff --git a/python/fedml/computing/scheduler/model_scheduler/model_device_server.py b/python/fedml/computing/scheduler/model_scheduler/model_device_server.py deleted file mode 100755 index b2ecd144b1..0000000000 --- a/python/fedml/computing/scheduler/model_scheduler/model_device_server.py +++ /dev/null @@ -1,97 +0,0 @@ - -import copy -import logging -import multiprocessing -import time -import traceback -from multiprocessing import Process -from ..scheduler_core.account_manager import FedMLAccountManager -from .master_agent import FedMLDeployMasterAgent - - -class FedMLModelDeviceServerRunner: - def __init__(self, args, current_device_id, os_name, is_from_docker, service_config, infer_host="127.0.0.1"): - self.agent_process = None - self.agent_runner = None - self.agent_process_event = None - self.args = copy.deepcopy(args) - self.service_config = service_config - self.unique_device_id = None - self.current_device_id = current_device_id - self.os_name = os_name - self.is_from_docker = is_from_docker - self.edge_id = None - self.infer_host = infer_host - self.redis_addr = "local" - self.redis_port = "6379" - self.redis_password = "fedml_default" - - def get_edge_id(self): - return self.edge_id - - def start(self): - self.agent_runner = FedMLModelDeviceServerRunner(self.args, self.current_device_id, self.os_name, - self.is_from_docker, self.service_config) - self.agent_runner.infer_host = self.infer_host - self.agent_runner.redis_addr = self.redis_addr - self.agent_runner.redis_port = self.redis_port - self.agent_runner.redis_password = self.redis_password - if self.agent_process_event is None: - self.agent_process_event = multiprocessing.Event() - self.agent_process = Process(target=self.agent_runner.run_entry, args=(self.agent_process_event, self.args)) - self.edge_id = self.bind_device() - self.agent_process.start() - - def run_entry(self, process_event, in_args): - # print(f"Model master process id {os.getpid()}") - - self.agent_process_event = process_event - master_agent = FedMLDeployMasterAgent() - - while not self.agent_process_event.is_set(): - try: - try: - master_agent.logout() - except Exception as e: - pass - - master_agent.login( - in_args.account_id, api_key=in_args.api_key, device_id=in_args.device_id, - os_name=in_args.os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM - ) - except Exception as e: - logging.info("Restart model device server: {}".format(traceback.format_exc())) - pass - finally: - try: - master_agent.logout() - except Exception as e: - pass - time.sleep(15) - - try: - self.stop() - except Exception as e: - pass - - def check_runner_stop_event(self): - if self.agent_process_event is not None and self.agent_process_event.is_set(): - logging.info("Received stopping event.") - raise Exception("Runner stopped") - - def stop(self): - FedMLDeployMasterAgent.logout() - - if self.agent_process_event is not None: - self.agent_process_event.set() - - def bind_device(self): - # Login account - login_result = FedMLAccountManager.get_instance().login( - self.args.account_id, api_key=self.args.api_key, device_id=self.args.device_id, - os_name=self.args.os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM - ) - if login_result is not None: - return login_result.edge_id - else: - return None diff --git a/python/fedml/computing/scheduler/scheduler_core/account_manager.py b/python/fedml/computing/scheduler/scheduler_core/account_manager.py index 20c5fcd842..6bd3dd4b19 100755 --- a/python/fedml/computing/scheduler/scheduler_core/account_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/account_manager.py @@ -43,8 +43,7 @@ class FedMLAccountManager(Singleton): DEVICE_ID_DOCKER_HUB_TAG = ".DockerHub" def __init__(self): - if not hasattr(self, "agent_args"): - self.agent_args = None + pass @staticmethod def get_instance(): @@ -52,7 +51,7 @@ def get_instance(): def login(self, user_id, api_key="", device_id=None, os_name=None, role=None, runner_cmd=None): # Build the agent args - self.build_agent_args( + agent_args = self.build_agent_args( user_id, api_key=api_key, device_id=device_id, os_name=os_name, role=role, runner_cmd=runner_cmd ) @@ -95,8 +94,8 @@ def login(self, user_id, api_key="", device_id=None, os_name=None, role=None, ru # noinspection PyBroadException try: edge_id, user_name, extra_url, general_edge_id = FedMLAccountManager.bind_account_and_device_id( - service_config["ml_ops_config"]["EDGE_BINDING_URL"], self.agent_args.account_id, - self.agent_args.unique_device_id, self.agent_args.os_name, + service_config["ml_ops_config"]["EDGE_BINDING_URL"], agent_args.account_id, + agent_args.unique_device_id, agent_args.os_name, api_key=api_key, role=role ) if edge_id > 0: @@ -120,13 +119,13 @@ def login(self, user_id, api_key="", device_id=None, os_name=None, role=None, ru return None # Fill the bound result to agent args. - self.fill_argent_args( - log_server_url=log_server_url, server_id=edge_id, + agent_args = self.fill_argent_args( + agent_args, log_server_url=log_server_url, server_id=edge_id, edge_id=edge_id, general_edge_id=general_edge_id, user_name=user_name, extra_url=extra_url, agent_config=service_config) - return self.agent_args + return agent_args def build_agent_args(self, user_id, api_key=None, device_id=None, os_name=None, role=None, runner_cmd=None): # Generate the suffix for device based on the role @@ -159,32 +158,31 @@ def build_agent_args(self, user_id, api_key=None, device_id=None, os_name=None, # Build the agent args version = fedml.get_env_version() - if self.agent_args is None: - self.agent_args = AgentArgs() - self.agent_args.role = role - self.agent_args.account_id = user_id - self.agent_args.api_key = api_key - self.agent_args.current_running_dir = GeneralConstants.get_deploy_fedml_home_dir(is_master=is_master) \ + agent_args = AgentArgs() + agent_args.role = role + agent_args.account_id = user_id + agent_args.api_key = api_key + agent_args.current_running_dir = GeneralConstants.get_deploy_fedml_home_dir(is_master=is_master) \ if is_deploy else GeneralConstants.get_launch_fedml_home_dir(is_master=is_master) sys_name = platform.system() if sys_name == "Darwin": sys_name = "MacOS" - self.agent_args.os_name = sys_name if os_name is None or os_name == "" else os_name - self.agent_args.version = version - self.agent_args.log_file_dir = GeneralConstants.get_deploy_log_file_dir(is_master=is_master) \ + agent_args.os_name = sys_name if os_name is None or os_name == "" else os_name + agent_args.version = version + agent_args.log_file_dir = GeneralConstants.get_deploy_log_file_dir(is_master=is_master) \ if is_deploy else GeneralConstants.get_launch_log_file_dir(is_master=is_master) is_from_docker = False if device_id is not None and device_id != "0": - self.agent_args.current_device_id = device_id + agent_args.current_device_id = device_id else: data_dir = GeneralConstants.get_deploy_data_dir(is_master=is_master) \ if is_deploy else GeneralConstants.get_launch_data_dir(is_master=is_master) is_gpu_provider = True if role == FedMLAccountManager.ROLE_GPU_PROVIDER else False - self.agent_args.current_device_id = FedMLAccountManager.get_device_id( + agent_args.current_device_id = FedMLAccountManager.get_device_id( data_dir=data_dir, use_machine_id=is_gpu_provider) - self.agent_args.device_id = self.agent_args.current_device_id - self.agent_args.config_version = version - self.agent_args.cloud_region = "" + agent_args.device_id = agent_args.current_device_id + agent_args.config_version = version + agent_args.cloud_region = "" # Check if it is running in the fedml docker hub is_from_fedml_docker_hub = False @@ -196,26 +194,29 @@ def build_agent_args(self, user_id, api_key=None, device_id=None, os_name=None, # Build unique device id docker_tag = FedMLAccountManager.DEVICE_ID_DOCKER_TAG if is_from_docker else "" docker_tag = FedMLAccountManager.DEVICE_ID_DOCKER_HUB_TAG if is_from_fedml_docker_hub else docker_tag - unique_device_id = f"{self.agent_args.current_device_id}@{self.agent_args.os_name}" \ + unique_device_id = f"{agent_args.current_device_id}@{agent_args.os_name}" \ f"{docker_tag}{device_id_suffix}" if role == FedMLAccountManager.ROLE_CLOUD_SERVER: - unique_device_id = self.agent_args.current_device_id + unique_device_id = agent_args.current_device_id # Set the unique device id - self.agent_args.is_from_docker = is_from_docker or is_from_fedml_docker_hub - self.agent_args.unique_device_id = unique_device_id - self.agent_args.runner_cmd = runner_cmd + agent_args.is_from_docker = is_from_docker or is_from_fedml_docker_hub + agent_args.unique_device_id = unique_device_id + agent_args.runner_cmd = runner_cmd + + return agent_args def fill_argent_args( - self, log_server_url=None, server_id=None, edge_id=None, + self, agent_args, log_server_url=None, server_id=None, edge_id=None, user_name=None, extra_url=None, general_edge_id=None, agent_config=None): - self.agent_args.log_server_url = log_server_url - self.agent_args.server_id = server_id - self.agent_args.edge_id = edge_id - self.agent_args.user_name = user_name - self.agent_args.extra_url = extra_url - self.agent_args.general_edge_id = general_edge_id - self.agent_args.agent_config = agent_config + agent_args.log_server_url = log_server_url + agent_args.server_id = server_id + agent_args.edge_id = edge_id + agent_args.user_name = user_name + agent_args.extra_url = extra_url + agent_args.general_edge_id = general_edge_id + agent_args.agent_config = agent_config + return agent_args @staticmethod def write_login_failed_file(is_client=True): diff --git a/python/fedml/computing/scheduler/scheduler_core/general_constants.py b/python/fedml/computing/scheduler/scheduler_core/general_constants.py index 3b40e1df80..0ab6f79577 100755 --- a/python/fedml/computing/scheduler/scheduler_core/general_constants.py +++ b/python/fedml/computing/scheduler/scheduler_core/general_constants.py @@ -76,6 +76,7 @@ class GeneralConstants: FEDML_MESSAGE_CENTER_SENDER_TAG = "message-center-sender" FEDML_STATUS_CENTER_TAG = "status-center" FEDML_LOG_PROCESS_TAG = "log" + FEDML_MONITOR_PROCESS_TAG = "monitor" FEDML_TOPIC_STATUS_CENTER_STOP = "anywhere/status_center/stop" @@ -232,7 +233,9 @@ def get_payload_complete_job(run_id, server_id): @staticmethod def get_process_name(process_tag, run_id=None, edge_id=None): - return f"{GeneralConstants.FEDML_PROCESS_NAME_PREFIX}{process_tag}-run-{run_id}-edge-{edge_id}" + return f'{GeneralConstants.FEDML_PROCESS_NAME_PREFIX}{process_tag}'\ + f'{"-run-" + str(run_id) if run_id is not None and int(run_id) != 0 else ""}'\ + f'{"-edge-" + str(edge_id) if edge_id is not None else ""}' @staticmethod def get_process_name_with_prefix(process_prefix, run_id=None, edge_id=None): @@ -285,4 +288,7 @@ def get_message_center_sender_process_name(message_center_name): def get_status_center_process_name(status_center_tag): return f"{GeneralConstants.FEDML_PROCESS_NAME_PREFIX}{GeneralConstants.FEDML_STATUS_CENTER_TAG}-{status_center_tag}" - + @staticmethod + def get_monitor_process_name(monitor_tag, run_id, edge_id): + return GeneralConstants.get_process_name( + f"{GeneralConstants.FEDML_MONITOR_PROCESS_TAG}-{monitor_tag}", run_id, edge_id) diff --git a/python/fedml/computing/scheduler/scheduler_core/message_center.py b/python/fedml/computing/scheduler/scheduler_core/message_center.py index 087e74edf4..5f414d1873 100755 --- a/python/fedml/computing/scheduler/scheduler_core/message_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/message_center.py @@ -352,8 +352,7 @@ def start_listener( self.listener_message_event = multiprocessing.Event() self.listener_message_event.clear() self.listener_agent_config = agent_config - message_runner = self.get_message_runner() - # message_runner = self + message_runner = self message_runner.listener_agent_config = agent_config process_name = GeneralConstants.get_message_center_listener_process_name(message_center_name) if platform.system() == "Windows": diff --git a/python/fedml/computing/scheduler/scheduler_core/status_center.py b/python/fedml/computing/scheduler/scheduler_core/status_center.py index 47dfa9d1a7..b1462d7ea9 100755 --- a/python/fedml/computing/scheduler/scheduler_core/status_center.py +++ b/python/fedml/computing/scheduler/scheduler_core/status_center.py @@ -120,8 +120,7 @@ def start_status_center(self, sender_message_center_queue=None, self.status_event.clear() self.status_sender_message_center_queue = sender_message_center_queue self.status_listener_message_center_queue = listener_message_center_queue - self.status_runner = self.get_status_runner() - #self.status_runner = self + self.status_runner = self process_name = GeneralConstants.get_status_center_process_name( f'{"deploy" if self.is_deployment_status_center else "launch"}_' f'{"slave" if is_slave_agent else "master"}_agent') diff --git a/python/fedml/computing/scheduler/slave/base_slave_agent.py b/python/fedml/computing/scheduler/slave/base_slave_agent.py index 58a79aae88..9876ac9912 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_agent.py +++ b/python/fedml/computing/scheduler/slave/base_slave_agent.py @@ -35,7 +35,7 @@ def login( print("We can't find any gpu device on your machine. \n" "With the gpu_supplier(-g) option, you need to check if your machine " "has nvidia GPUs and installs CUDA related drivers.") - return + return None # Login account login_result = FedMLAccountManager.get_instance().login( @@ -155,3 +155,8 @@ def _init_database(self): @abstractmethod def _generate_protocol_manager_instance(self, args, agent_config=None): return None + + def save_deploy_ids(self, deploy_master_edge_id=None, deploy_slave_edge_id=None): + self.protocol_mgr.save_deploy_ids( + deploy_master_edge_id=deploy_master_edge_id, deploy_slave_edge_id=deploy_slave_edge_id) + diff --git a/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py b/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py index 648a49bbd1..534ee2f7d0 100755 --- a/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py +++ b/python/fedml/computing/scheduler/slave/base_slave_protocol_manager.py @@ -62,8 +62,6 @@ def __init__(self, args, agent_config=None): self.server_id = args.server_id self.model_device_server_id = None self.model_device_client_edge_id_list = None - self.model_device_server = None - self.model_device_client_list = None @abstractmethod def generate_topics(self): @@ -147,12 +145,9 @@ def add_subscribe_topic(self, topic): self.subscribed_topics.append(topic) def stop(self): - if self.model_device_server is not None: - self.model_device_server = None - - if self.model_device_client_list is not None: - self.model_device_client_list.clear() - self.model_device_client_list = None + if self.model_device_client_edge_id_list is not None: + self.model_device_client_edge_id_list.clear() + self.model_device_client_edge_id_list = None super().stop() diff --git a/python/fedml/computing/scheduler/slave/slave_protocol_manager.py b/python/fedml/computing/scheduler/slave/slave_protocol_manager.py index 050cfb3f1d..449cd7c29c 100755 --- a/python/fedml/computing/scheduler/slave/slave_protocol_manager.py +++ b/python/fedml/computing/scheduler/slave/slave_protocol_manager.py @@ -1,10 +1,8 @@ -import copy + import os from ..comm_utils.job_cleanup import JobCleanup from .base_slave_protocol_manager import FedMLBaseSlaveProtocolManager from .launch_job_runner_manager import FedMLLaunchJobRunnerManager -from ..model_scheduler.model_device_server import FedMLModelDeviceServerRunner -from ..model_scheduler.model_device_client import FedMLModelDeviceClientRunner class FedMLLaunchSlaveProtocolManager(FedMLBaseSlaveProtocolManager): @@ -47,57 +45,19 @@ def _init_extra_items(self): # Sync the data when startup JobCleanup.get_instance().sync_data_on_startup(self.args.edge_id) - # Get the environment variables - infer_host = os.getenv("FEDML_INFER_HOST", None) - infer_redis_addr = os.getenv("FEDML_INFER_REDIS_ADDR", None) - infer_redis_port = os.getenv("FEDML_INFER_REDIS_PORT", None) - infer_redis_password = os.getenv("FEDML_INFER_REDIS_PASSWORD", None) - model_client_num = os.getenv("FEDML_MODEL_WORKER_NUM", None) - - # Start deploy master agent and slave agent - in_args = copy.deepcopy(self.args) - if self.model_device_client_edge_id_list is None: - self.model_device_client_edge_id_list = list() - if self.model_device_client_list is None: - model_client_num = 1 if model_client_num is None else int(model_client_num) - self.model_device_client_list = list() - for client_index in range(model_client_num): - model_device_client = FedMLModelDeviceClientRunner( - in_args, f"{in_args.current_device_id}_{client_index + 1}", in_args.os_name, - in_args.is_from_docker, self.agent_config) - if infer_host is not None: - model_device_client.infer_host = infer_host - if infer_redis_addr is not None: - model_device_client.redis_addr = infer_redis_addr - if infer_redis_port is not None: - model_device_client.redis_port = infer_redis_port - if infer_redis_password is not None: - model_device_client.redis_password = infer_redis_password - self.model_device_client_list.append(model_device_client) - self.model_device_client_edge_id_list.append(model_device_client.bind_device()) - - self.args = copy.deepcopy(in_args) - if self.model_device_server is None: - self.model_device_server = FedMLModelDeviceServerRunner(in_args, in_args.current_device_id, - in_args.os_name, in_args.is_from_docker, - self.agent_config) - if infer_host is not None: - self.model_device_server.infer_host = infer_host - if infer_redis_addr is not None: - self.model_device_server.redis_addr = infer_redis_addr - if infer_redis_port is not None: - self.model_device_server.redis_port = infer_redis_port - if infer_redis_password is not None: - self.model_device_server.redis_password = infer_redis_password - - self.model_device_server_id = self.model_device_server.bind_device() + # Start the monitor process + self.mlops_metrics.stop_device_realtime_perf() + self.mlops_metrics.report_device_realtime_perf(self.args, self.args.agent_config["mqtt_config"]) + + def save_deploy_ids(self, deploy_master_edge_id=None, deploy_slave_edge_id=None): + if deploy_master_edge_id is not None: + self.model_device_server_id = deploy_master_edge_id + + if deploy_slave_edge_id is not None: + if self.model_device_client_edge_id_list is None: + self.model_device_client_edge_id_list = list() + self.model_device_client_edge_id_list.append(deploy_slave_edge_id) # Save the deployed master and worker id list to the environment variable. os.environ["FEDML_DEPLOY_MASTER_ID"] = str(self.model_device_server_id) os.environ["FEDML_DEPLOY_WORKER_IDS"] = str(self.model_device_client_edge_id_list) - - # Start the monitor process - self.args = copy.deepcopy(in_args) - self.mlops_metrics.stop_device_realtime_perf() - self.mlops_metrics.report_device_realtime_perf(self.args, self.args.agent_config["mqtt_config"]) - pass diff --git a/python/fedml/computing/scheduler/slave/united_agents.py b/python/fedml/computing/scheduler/slave/united_agents.py index 17aee46f62..3c8549c06a 100755 --- a/python/fedml/computing/scheduler/slave/united_agents.py +++ b/python/fedml/computing/scheduler/slave/united_agents.py @@ -1,10 +1,8 @@ -import multiprocessing - +from fedml.computing.scheduler.model_scheduler.master_agent import FedMLDeployMasterAgent +from fedml.computing.scheduler.model_scheduler.worker_agent import FedMLDeployWorkerAgent from fedml.computing.scheduler.scheduler_core.account_manager import FedMLAccountManager from fedml.computing.scheduler.slave.slave_agent import FedMLLaunchSlaveAgent from fedml.computing.scheduler.master.master_agent import FedMLLaunchMasterAgent -from fedml.computing.scheduler.model_scheduler.model_device_server import FedMLDeployMasterAgent -from fedml.computing.scheduler.model_scheduler.model_device_client import FedMLDeployWorkerAgent from fedml.core.common.singleton import Singleton @@ -54,7 +52,7 @@ def login(self, userid, api_key=None, device_id=None, # Login with the deployment master role based on # the shared communication manager, sender message center, status center - deploy_master_agent.login( + deploy_master_login_result = deploy_master_agent.login( userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_MASTER_ON_PREM, communication_manager=shared_communication_mgr @@ -62,11 +60,16 @@ def login(self, userid, api_key=None, device_id=None, # Login with the deployment slave role based on # the shared communication manager, sender message center, status center - deploy_slave_agent.login( + deploy_slave_login_result = deploy_slave_agent.login( userid, api_key=api_key, device_id=login_result.device_id, os_name=os_name, role=FedMLAccountManager.ROLE_DEPLOY_WORKER_ON_PREM, communication_manager=shared_communication_mgr ) + # Set the deployment ids to launch agent so that we can report the related device info to MLOps. + launch_slave_agent.save_deploy_ids( + deploy_master_edge_id=deploy_master_login_result.edge_id, + deploy_slave_edge_id=deploy_slave_login_result.edge_id) + # Start the slave agent to connect to servers and loop forever. launch_slave_agent.start() diff --git a/python/fedml/core/mlops/mlops_device_perfs.py b/python/fedml/core/mlops/mlops_device_perfs.py index d0f1f3898f..6ba4d6e866 100644 --- a/python/fedml/core/mlops/mlops_device_perfs.py +++ b/python/fedml/core/mlops/mlops_device_perfs.py @@ -9,6 +9,7 @@ import multiprocessing import psutil +import setproctitle import fedml from fedml.computing.scheduler.comm_utils import sys_utils @@ -16,6 +17,7 @@ from .mlops_utils import MLOpsUtils from .system_stats import SysStats from ...computing.scheduler.comm_utils.job_monitor import JobMonitor +from ...computing.scheduler.scheduler_core.general_constants import GeneralConstants from ...core.distributed.communication.mqtt.mqtt_manager import MqttManager @@ -30,6 +32,17 @@ ROLE_ENDPOINT_REPLICA_NUM = 8 ROLE_ENDPOINT_REPLICA_PERF = 9 +ROLE_DEVICE_JOB_TOTAL_MONITOR_STR = "device_job_total" +ROLE_DEVICE_INFO_REPORTER_STR = "device_info" +ROLE_ENDPOINT_MASTER_STR = "endpoint_master" +ROLE_ENDPOINT_SLAVE_STR = "endpoint_slave" +ROLE_RUN_MASTER_STR = "run_master" +ROLE_RUN_SLAVE_STR = "run_slave" +ROLE_ENDPOINT_LOGS_STR = "endpoint_logs" +ROLE_AUTO_SCALER_STR = "autoscaler" +ROLE_ENDPOINT_REPLICA_NUM_STR = "endpoint_replica_num" +ROLE_ENDPOINT_REPLICA_PERF_STR = "endpoint_replica_perf" + class MLOpsDevicePerfStats(object): def __init__(self): @@ -81,100 +94,158 @@ def setup_realtime_stats_process(self, sys_args): if platform.system() == "Windows": self.device_realtime_stats_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client)) + args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client, + GeneralConstants.get_monitor_process_name( + ROLE_DEVICE_INFO_REPORTER_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.device_realtime_stats_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client)) + args=(self.device_realtime_stats_event, ROLE_DEVICE_INFO_REPORTER, self.is_client, + GeneralConstants.get_monitor_process_name( + ROLE_DEVICE_INFO_REPORTER_STR, perf_stats.run_id, perf_stats.edge_id))) self.device_realtime_stats_process.start() if self.enable_job_total_monitor: if platform.system() == "Windows": self.job_total_monitor_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client)) + args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client, + GeneralConstants.get_monitor_process_name( + ROLE_DEVICE_JOB_TOTAL_MONITOR_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.job_total_monitor_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client)) + args=(self.device_realtime_stats_event, ROLE_DEVICE_JOB_TOTAL_MONITOR, self.is_client, + GeneralConstants.get_monitor_process_name( + ROLE_DEVICE_JOB_TOTAL_MONITOR_STR, perf_stats.run_id, perf_stats.edge_id))) self.job_total_monitor_process.start() else: if self.is_client: + # Register endpoint master process if platform.system() == "Windows": self.monitor_endpoint_master_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_MASTER_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.monitor_endpoint_master_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_MASTER, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_MASTER_STR, perf_stats.run_id, perf_stats.edge_id))) self.monitor_endpoint_master_process.start() + # Register endpoint slave process + if platform.system() == "Windows": + self.monitor_endpoint_slave_process = multiprocessing.Process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_SLAVE, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_SLAVE_STR, perf_stats.run_id, perf_stats.edge_id))) + else: + self.monitor_endpoint_slave_process = fedml.get_process( + target=perf_stats.report_device_realtime_stats_entry, + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_SLAVE, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_SLAVE_STR, perf_stats.run_id, perf_stats.edge_id))) + self.monitor_endpoint_slave_process.start() + + # Register run slave process if platform.system() == "Windows": self.monitor_run_slave_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE)) + args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE, True, + GeneralConstants.get_monitor_process_name( + ROLE_RUN_SLAVE_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.monitor_run_slave_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE)) + args=(self.device_realtime_stats_event, ROLE_RUN_SLAVE, True, + GeneralConstants.get_monitor_process_name( + ROLE_RUN_SLAVE_STR, perf_stats.run_id, perf_stats.edge_id))) self.monitor_run_slave_process.start() + # Register endpoint logs process if platform.system() == "Windows": self.monitor_endpoint_logs_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_LOGS_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.monitor_endpoint_logs_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_LOGS, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_LOGS_STR, perf_stats.run_id, perf_stats.edge_id))) self.monitor_endpoint_logs_process.start() # Register auto-scaler process if platform.system() == "Windows": self.monitor_auto_scaler_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER)) + args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER, True, + GeneralConstants.get_monitor_process_name( + ROLE_AUTO_SCALER_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.monitor_auto_scaler_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER)) + args=(self.device_realtime_stats_event, ROLE_AUTO_SCALER, True, + GeneralConstants.get_monitor_process_name( + ROLE_AUTO_SCALER_STR, perf_stats.run_id, perf_stats.edge_id))) self.monitor_auto_scaler_process.start() # Register replica number report channel if platform.system() == "Windows": self.monitor_replica_num_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_REPLICA_NUM_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.monitor_replica_num_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_NUM, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_REPLICA_NUM_STR, perf_stats.run_id, perf_stats.edge_id))) self.monitor_replica_num_process.start() # Register replica performance report channel if platform.system() == "Windows": self.monitor_replica_perf_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_REPLICA_PERF_STR, perf_stats.run_id, perf_stats.edge_id))) + else: self.monitor_replica_perf_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF)) + args=(self.device_realtime_stats_event, ROLE_ENDPOINT_REPLICA_PERF, True, + GeneralConstants.get_monitor_process_name( + ROLE_ENDPOINT_REPLICA_PERF_STR, perf_stats.run_id, perf_stats.edge_id))) self.monitor_replica_perf_process.start() else: if platform.system() == "Windows": self.monitor_run_master_process = multiprocessing.Process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_RUN_MASTER)) + args=(self.device_realtime_stats_event, ROLE_RUN_MASTER, False, + GeneralConstants.get_monitor_process_name( + ROLE_RUN_MASTER_STR, perf_stats.run_id, perf_stats.edge_id))) else: self.monitor_run_master_process = fedml.get_process( target=perf_stats.report_device_realtime_stats_entry, - args=(self.device_realtime_stats_event, ROLE_RUN_MASTER)) + args=(self.device_realtime_stats_event, ROLE_RUN_MASTER, False, + GeneralConstants.get_monitor_process_name( + ROLE_RUN_MASTER_STR, perf_stats.run_id, perf_stats.edge_id))) self.monitor_run_master_process.start() - def report_device_realtime_stats_entry(self, sys_event, role, is_client=False): - # print(f"Report device realtime stats, process id {os.getpid()}") + def report_device_realtime_stats_entry(self, sys_event, role, is_client=False, process_name=None): + if process_name is not None: + setproctitle.setproctitle(process_name) + + # print(f"Report device realtime stats, process id {os.getpid()}, name {process_name}") self.device_realtime_stats_event = sys_event mqtt_mgr = MqttManager( diff --git a/python/fedml/core/mlops/mlops_job_perfs.py b/python/fedml/core/mlops/mlops_job_perfs.py index e834ed4a0c..429e32ff1d 100644 --- a/python/fedml/core/mlops/mlops_job_perfs.py +++ b/python/fedml/core/mlops/mlops_job_perfs.py @@ -8,14 +8,18 @@ import multiprocess as multiprocessing import psutil +import setproctitle import fedml from .mlops_utils import MLOpsUtils from .system_stats import SysStats +from ...computing.scheduler.scheduler_core.general_constants import GeneralConstants from ...core.distributed.communication.mqtt.mqtt_manager import MqttManager class MLOpsJobPerfStats(object): + JOB_PERF_PROCESS_TAG = "job_perf" + def __init__(self): self.job_stats_process = None self.job_stats_event = None @@ -142,17 +146,24 @@ def setup_job_stats_process(self, sys_args): perf_stats.job_process_id_map = self.job_process_id_map if platform.system() == "Windows": self.job_stats_process = multiprocessing.Process( - target=perf_stats.report_job_stats_entry, args=(self.job_stats_event,)) + target=perf_stats.report_job_stats_entry, + args=(self.job_stats_event, GeneralConstants.get_monitor_process_name( + MLOpsJobPerfStats.JOB_PERF_PROCESS_TAG, perf_stats.run_id, perf_stats.edge_id))) else: self.job_stats_process = fedml.get_process( - target=perf_stats.report_job_stats_entry, args=(self.job_stats_event,)) + target=perf_stats.report_job_stats_entry, + args=(self.job_stats_event, GeneralConstants.get_monitor_process_name( + MLOpsJobPerfStats.JOB_PERF_PROCESS_TAG, perf_stats.run_id, perf_stats.edge_id))) self.job_stats_process.start() def report_job_stats(self, sys_args): self.setup_job_stats_process(sys_args) - def report_job_stats_entry(self, sys_event): - # print(f"Report job realtime stats, process id {os.getpid()}") + def report_job_stats_entry(self, sys_event, process_name): + if process_name is not None: + setproctitle.setproctitle(process_name) + + # print(f"Report job realtime stats, process id {os.getpid()}, name {process_name}") self.job_stats_event = sys_event mqtt_mgr = MqttManager( From aa813a074aadebdbfd1f2b1ebd542334d095b5a4 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Jun 2024 17:32:26 +0800 Subject: [PATCH 22/23] [CoreEngine] remove the API key. --- python/fedml/api/api_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/fedml/api/api_test.py b/python/fedml/api/api_test.py index 1aa5ac3767..5951fbd1e0 100755 --- a/python/fedml/api/api_test.py +++ b/python/fedml/api/api_test.py @@ -4,9 +4,9 @@ import fedml # Login -fedml.set_env_version("local") +fedml.set_env_version("test") fedml.set_local_on_premise_platform_port(18080) -error_code, error_msg = fedml.api.fedml_login(api_key="1316b93c82da40ce90113a2ed12f0b14") +error_code, error_msg = fedml.api.fedml_login(api_key="") if error_code != 0: print("API Key is invalid!") exit(1) From 5ae6904960987baff3e57a9e55bf369d9918f7e0 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 25 Jun 2024 18:21:06 +0800 Subject: [PATCH 23/23] [CoreEngine] make the job stopping feature work. --- .../scheduler/master/base_master_agent.py | 3 ++- .../scheduler/master/base_master_job_runner.py | 14 +++++--------- .../master/base_master_job_runner_manager.py | 6 ++---- .../master/base_master_protocol_manager.py | 12 ++++++++++++ .../scheduler_core/scheduler_base_job_runner.py | 3 ++- .../scheduler_base_job_runner_manager.py | 1 + 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/python/fedml/computing/scheduler/master/base_master_agent.py b/python/fedml/computing/scheduler/master/base_master_agent.py index e7d18f64f7..30cf5da1c9 100755 --- a/python/fedml/computing/scheduler/master/base_master_agent.py +++ b/python/fedml/computing/scheduler/master/base_master_agent.py @@ -72,7 +72,8 @@ def logout(): sys_utils.cleanup_all_fedml_server_api_processes() def stop(self, kill_process=False): - self.protocol_mgr.stop(kill_process=kill_process) + if self.protocol_mgr is not None: + self.protocol_mgr.stop(kill_process=kill_process) def _create_protocol_manager(self, role, login_result): if self.protocol_mgr is not None: diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner.py b/python/fedml/computing/scheduler/master/base_master_job_runner.py index 32b285dc7b..fdfff143aa 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner.py @@ -1,4 +1,3 @@ - import json import logging import multiprocessing @@ -414,9 +413,9 @@ def _generate_job_runner_instance(self, args, run_id=None, request_json=None, ag return None def start_runner_process( - self, run_id, request_json, edge_id=None, is_server_job=False, - sender_message_queue=None, listener_message_queue=None, - status_center_queue=None, process_name=None + self, run_id, request_json, edge_id=None, is_server_job=False, + sender_message_queue=None, listener_message_queue=None, + status_center_queue=None, process_name=None ): server_runner = self._generate_job_runner_instance( self.args, run_id=run_id, request_json=request_json, @@ -440,7 +439,7 @@ def start_runner_process( self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, self.run_artifacts_queue, self.run_logs_queue, self.run_edge_device_info_global_queue, - self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue, + self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue, process_name, ) ) @@ -450,7 +449,7 @@ def start_runner_process( self.run_process_event, self.run_process_completed_event, self.run_edge_id_status_queue, self.run_edge_device_info_queue, self.run_metrics_queue, self.run_events_queue, self.run_artifacts_queue, self.run_logs_queue, self.run_edge_device_info_global_queue, - self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue, + self.run_extend_queue_list, sender_message_queue, listener_message_queue, status_center_queue, process_name, ) ) @@ -731,6 +730,3 @@ def should_process_async_cluster(self): def get_client_id_list(self, server_edge_id_list): return server_edge_id_list - - - diff --git a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py index f462596cbf..39f7438696 100755 --- a/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_job_runner_manager.py @@ -2,7 +2,6 @@ import json import logging import multiprocessing -import os import platform import time from abc import ABC @@ -11,7 +10,6 @@ import fedml from .cloud_server_manager import FedMLCloudServerManager from ..comm_utils.run_process_utils import RunProcessUtils -from ..scheduler_core.general_constants import GeneralConstants from ..scheduler_core.scheduler_base_job_runner_manager import FedMLSchedulerBaseJobRunnerManager from ..scheduler_core.account_manager import FedMLAccountManager @@ -67,10 +65,10 @@ def stop_job_runner( run_id_str = str(run_id) if self.master_agent_instance_map.get(run_id_str, None) is not None: - self.master_agent_instance_map.get(run_id_str).stop() + self.master_agent_instance_map.get(run_id_str).stop(kill_process=True) self.master_agent_instance_map.pop(run_id_str) - if run_as_cloud_server: + if use_local_process_as_cloud_server: time.sleep(1) RunProcessUtils.kill_process(self.cloud_run_process_map[run_id_str].pid) diff --git a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py index 9d3b492758..05529f8c8e 100755 --- a/python/fedml/computing/scheduler/master/base_master_protocol_manager.py +++ b/python/fedml/computing/scheduler/master/base_master_protocol_manager.py @@ -2,6 +2,7 @@ import base64 import json import logging +import time import fedml from ..comm_utils.constants import SchedulerConstants @@ -142,6 +143,7 @@ def on_agent_communication_connected(self, mqtt_client_object): def callback_start_train(self, topic=None, payload=None): # Fetch config from MLOps # noinspection PyBroadException + try: MLOpsConfigs.fetch_all_configs() except Exception: @@ -290,6 +292,16 @@ def callback_stop_train(self, topic, payload, use_payload=None): server_agent_id = self.edge_id topic_stop_train_to_cloud_server = f"mlops/flserver_agent_{server_id}/stop_train" self.message_center.send_message(topic_stop_train_to_cloud_server, payload) + + time.sleep(2) + MLOpsRuntimeLogDaemon.get_instance(self.args).stop_log_processor(run_id, server_id) + self._get_job_runner_manager().stop_job_runner( + run_id, args=self.args, server_id=server_id, request_json=None, + run_as_cloud_agent=self.run_as_cloud_agent, run_as_cloud_server=self.run_as_cloud_server, + use_local_process_as_cloud_server=self.use_local_process_as_cloud_server) + self.generate_status_report(run_id, server_id, server_agent_id=server_agent_id). \ + report_server_id_status(run_id, GeneralConstants.MSG_MLOPS_SERVER_STATUS_KILLED, + edge_id=server_id, server_id=server_id) return # Reset all edge status and server status diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py index 7b0d00f53d..7175032375 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner.py @@ -615,7 +615,8 @@ def job_error_processor(self, error_list): def start_runner_process( self, run_id, edge_id, request_json, cuda_visible_gpu_ids_str=None, - sender_message_queue=None, status_center_queue=None, process_name=None + sender_message_queue=None, listener_message_queue=None, + status_center_queue=None, process_name=None ): return None diff --git a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py index 8edf57fcbb..ad32f78631 100755 --- a/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py +++ b/python/fedml/computing/scheduler/scheduler_core/scheduler_base_job_runner_manager.py @@ -29,6 +29,7 @@ def start_job_runner( ) self.job_runners[run_id_str].start_runner_process( run_id, request_json, edge_id=edge_id, + cuda_visible_gpu_ids_str=cuda_visible_gpu_ids_str, sender_message_queue=sender_message_queue, listener_message_queue=listener_message_queue, status_center_queue=status_center_queue,