Skip to content

Commit fcea789

Browse files
committed
add graceful termination --skip-tests
1 parent 3ab17d7 commit fcea789

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

cwm_worker_operator/daemon.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import time
2+
import signal
23

34
import prometheus_client
45

@@ -22,6 +23,7 @@ def __init__(self, name, sleep_time_between_iterations_seconds,
2223
self.sleep_time_between_iterations_seconds = sleep_time_between_iterations_seconds
2324
self.run_single_iteration_extra_kwargs = {} if run_single_iteration_extra_kwargs is None else run_single_iteration_extra_kwargs
2425
self.deployments_manager = deployments_manager if deployments_manager else DeploymentsManager()
26+
self.terminate_requested = False
2527

2628
def start(self, once=False, with_prometheus=None):
2729
if with_prometheus is None:
@@ -41,15 +43,25 @@ def start(self, once=False, with_prometheus=None):
4143
else:
4244
self.start_main_loop()
4345

46+
def on_sigterm(self, *args, **kwargs):
47+
logs.debug_info(f"SIGTERM received for daemon {self.name}")
48+
self.terminate_requested = True
49+
4450
def start_main_loop(self):
45-
while True:
51+
signal.signal(signal.SIGTERM, self.on_sigterm)
52+
while not self.terminate_requested:
4653
self.run_single_iteration(**self.run_single_iteration_extra_kwargs)
54+
if self.terminate_requested:
55+
break
4756
time.sleep(self.sleep_time_between_iterations_seconds)
57+
assert self.terminate_requested, f'Unexpected termination of daemon {self.name}'
58+
logs.debug_info(f"Graceful termination of daemon {self.name}")
4859

4960
def run_single_iteration(self, **kwargs):
5061
self.run_single_iteration_callback(
5162
domains_config=self.domains_config,
5263
metrics=self.metrics,
5364
deployments_manager=self.deployments_manager,
65+
daemon=self,
5466
**kwargs
5567
)

cwm_worker_operator/kafka_streamer.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def delete_records(topic, latest_partition_offset):
9292
], env={**os.environ, 'DEBUG': ''})
9393

9494

95-
def run_single_iteration(domains_config: DomainsConfig, topic=None, no_kafka_commit=False, no_kafka_delete=False, **_):
95+
def run_single_iteration(domains_config: DomainsConfig, topic, daemon, no_kafka_commit=False, no_kafka_delete=False, **_):
9696
start_time = common.now()
9797
assert topic, "topic is required"
9898
logs.debug(f"running iteration for topic: {topic}", 8)
@@ -105,7 +105,7 @@ def run_single_iteration(domains_config: DomainsConfig, topic=None, no_kafka_com
105105
latest_partition_offset = {}
106106
try:
107107
agg_data = {}
108-
while (common.now() - start_time).total_seconds() < config.KAFKA_STREAMER_POLL_TIME_SECONDS:
108+
while (common.now() - start_time).total_seconds() < config.KAFKA_STREAMER_POLL_TIME_SECONDS and not daemon.terminate_requested:
109109
msg = consumer.poll(timeout=config.KAFKA_STREAMER_CONSUMER_POLL_TIMEOUT_SECONDS)
110110
if msg is None:
111111
# logs.debug("Waiting for messages...", 10)

0 commit comments

Comments
 (0)