33import time
44from logging import getLogger
55
6- from config import Settings
7- from mysql_api import MySQLApi
8- from clickhouse_api import ClickhouseApi
6+ from .config import Settings
7+ from .mysql_api import MySQLApi
8+ from .clickhouse_api import ClickhouseApi
9+ from .utils import GracefulKiller
910
1011
1112logger = getLogger (__name__ )
@@ -40,7 +41,7 @@ class DbOptimizer:
4041 def __init__ (self , config : Settings ):
4142 self .state = State (os .path .join (
4243 config .binlog_replicator .data_dir ,
43- ''
44+ 'db_optimizer.bin' ,
4445 ))
4546 self .config = config
4647 self .mysql_api = MySQLApi (
@@ -72,6 +73,7 @@ def optimize_table(self, db_name, table_name):
7273 f'OPTIMIZE TABLE { db_name } .{ table_name } FINAL SETTINGS mutations_sync = 2'
7374 )
7475 logger .info ('Optimize finished' )
76+ self .state .last_process_time [db_name ] = time .time ()
7577
7678 def optimize_database (self , db_name ):
7779 self .mysql_api .set_database (db_name )
@@ -87,15 +89,15 @@ def optimize_database(self, db_name):
8789 self .optimize_table (db_name , table )
8890
8991 def run (self ):
90- while True :
91- time .sleep (999 )
92-
92+ logger .info ('running optimizer' )
93+ killer = GracefulKiller ()
9394 try :
94- while True :
95+ while not killer . kill_now :
9596 db_to_optimize = self .select_db_to_optimize ()
9697 if db_to_optimize is None :
9798 time .sleep (min (120 , self .config .optimize_interval ))
9899 continue
99100 self .optimize_database (db_name = db_to_optimize )
100101 except Exception as e :
101102 logger .error (f'error { e } ' , exc_info = True )
103+ logger .info ('optimizer stopped' )
0 commit comments