When checking for active connections, such as in depooling, instead of waiting until only the desired connections are active (i.e. replication user, orchestrator user, cumin user, etc) code will do a wild-card search.
For depooling, it is done via:
def _fetch_instance_connections_count_wikiusers(ins: MInst) -> int: """Count database instance connections matching wiki-related users.""" sql = "SELECT COUNT(*) AS cnt FROM information_schema.processlist WHERE user LIKE '%%wiki%%'" row = ins.fetch_one_row(sql, ()) return int(row["cnt"])
For the rolling restarts, it is done differently, including the time in between checks:
def depool(self, ticket: Optional[str]) -> bool: # TODO: check if it's depoolable run("dbctl instance {} depool".format(self.host)) run('dbctl config commit -b -m "Depooling {} ({})"'.format(self.host, ticket)) start_depool_time = time.time() while True: if (time.time() - start_depool_time) > 3600: print("Depool timed out, repooling") self.repool(ticket) return False if self.has_traffic() and "--run" in sys.argv: print("Sleeping for the traffic to drain") time.sleep(60) else: break return True def has_traffic(self) -> bool: # TODO: Make the users check more strict and include root result = self.run_sql("SELECT * FROM information_schema.processlist WHERE User like '%wiki%';") return bool(result)
For the ES rolling restarts, there doesn't appear to be a check:
step("depool", "Depooling")
dbctl.instance.depool(host.hostname)
dbctl_commit_change(dbctl, host.dc, f"Depool {host.hostname}")
step("drain", "Wait for connection draining after depool")
time.sleep(60 * 3)The following may not be exhaustive, but it shows that there are some other cases too:
auto_schema/auto_schema/tests/test_functional_run.py
553: '''db-mysql db1165 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
644:db-mysql db1165 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"
735: '''db-mysql db1165 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
757: '''db-mysql dbNNNN -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"'''
758: '''db-mysql dbNNNN -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
759: '''db-mysql dbNNNN -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
864:db-mysql db1165 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"
927:db-mysql db1168 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"
987:db-mysql db1173 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"
1047:db-mysql db1180 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"
1235: '''db-mysql db1168 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"'''
1236: '''db-mysql db1168 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
1237: '''db-mysql db1168 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
1321:db-mysql db1168 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"
1484: '''db-mysql db1165 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
1489: '''db-mysql db1175 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
1499: '''db-mysql db1179 -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
auto_schema/auto_schema/tests/test_replica_set.py
135: '''db-mysql dbNNNN -N -e "SELECT * FROM information_schema.processlist WHERE User like '%wiki%';"''',
auto_schema/auto_schema/host.py
67: result = self.run_sql("SELECT * FROM information_schema.processlist WHERE User like '%wiki%';")
cookbooks/cookbooks/sre/mysql/depool.py
57: sql = "SELECT COUNT(*) AS cnt FROM information_schema.processlist WHERE user LIKE '%%wiki%%'"
85: FROM information_schema.processlist GROUP BY user, command"""
cookbooks/tests/unit/sre/mysql/depool_test.py
70: sql = "SELECT COUNT(*) AS cnt FROM information_schema.processlist WHERE user LIKE '%%wiki%%'"
scripts/__snapshots__/test_rolling_restart.ambr
24: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
46: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
72: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
94: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
120: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
142: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
168: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
190: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
216: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
238: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
264: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
286: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
312: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
334: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
360: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
382: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
408: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
430: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
456: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
478: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
504: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
526: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
552: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
574: sql 'SELECT * FROM information_schema.processlist WHERE User like '%dump%';'
scripts/rolling_restart.py
320: res = host_section.run_sql(r"SELECT * FROM information_schema.processlist WHERE User like '%dump%';")
329: res = host.run_sql(r"SELECT * FROM information_schema.processlist WHERE User like '%dump%';")
scripts/test_rolling_restart.py
63: "SELECT * FROM information_schema.processlist WHERE User like '%dump%';",