Springle has submitted this change and it was merged.

Change subject: Ensure MariaDB event logging statements are deterministic.
......................................................................


Ensure MariaDB event logging statements are deterministic.

Change-Id: I0cb6d51fc817e680f8a33583391e88b8518c24c3
---
M dbtools/events_coredb_slave.sql
M dbtools/events_labsdb.sql
2 files changed, 31 insertions(+), 17 deletions(-)

Approvals:
  Springle: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/dbtools/events_coredb_slave.sql b/dbtools/events_coredb_slave.sql
index 037a950..e9290a5 100644
--- a/dbtools/events_coredb_slave.sql
+++ b/dbtools/events_coredb_slave.sql
@@ -13,8 +13,7 @@
 -- Remember, table is replicated!
 -- https://wikitech.wikimedia.org/wiki/MariaDB#Schema_Changes
 
-drop table if exists event_log;
-create table event_log (
+create table if not exists event_log (
   server_id int unsigned  not null,
   stamp     datetime      not null,
   event     varchar(100)  not null,
@@ -39,12 +38,11 @@
 
     do begin
 
-        -- If using statement based replication the @@server_id is unsafe. 
Convert it to a constant.
-        set @sql := concat(
-            'delete from event_log where stamp < now() - interval 1 day and 
server_id = ', @@server_id
-        );
+        declare sid int;
 
-        prepare stmt from @sql; execute stmt; deallocate prepare stmt;
+        set sid := @@server_id;
+
+        delete from event_log where stamp < now() - interval 1 day and 
server_id = sid;
 
     end ;;
 
@@ -64,6 +62,7 @@
 
     do begin
 
+        declare sid int;
         declare all_done int default 0;
         declare thread_id bigint default null;
         declare thread_query varchar(100);
@@ -82,6 +81,8 @@
 
         declare continue handler for not found set all_done = 1;
 
+        set sid := @@server_id;
+
         if (get_lock('wmf_slave_wikiuser_slow', 1) = 0) then
             signal sqlstate value '45000' set message_text = 'get_lock';
         end if;
@@ -95,7 +96,7 @@
 
                 kill thread_id;
 
-                insert into event_log values (@@server_id, now(), 
'wmf_slave_wikiuser_slow',
+                insert into event_log values (sid, now(), 
'wmf_slave_wikiuser_slow',
                     concat('kill ',thread_id, '; ',thread_query)
                 );
 
@@ -124,6 +125,7 @@
 
     do begin
 
+        declare sid int;
         declare all_done int default 0;
         declare thread_id bigint default null;
 
@@ -142,6 +144,8 @@
             signal sqlstate value '45000' set message_text = 'get_lock';
         end if;
 
+        set sid := @@server_id;
+
         set all_done = 0;
         open threads_sleeping;
 
@@ -151,7 +155,7 @@
 
                 kill thread_id;
 
-                insert into event_log values (@@server_id, now(), 
'wmf_slave_wikiuser_sleep',
+                insert into event_log values (sid, now(), 
'wmf_slave_wikiuser_sleep',
                     concat('kill ',thread_id)
                 );
 
@@ -179,6 +183,7 @@
 
     do begin
 
+        declare sid int;
         declare all_done int default 0;
         declare thread_id bigint default null;
         declare thread_query varchar(100);
@@ -203,6 +208,8 @@
             signal sqlstate value '45000' set message_text = 'get_lock';
         end if;
 
+        set sid := @@server_id;
+
         set active_count := (
             select count(ps.id)
             from information_schema.processlist ps
@@ -225,7 +232,7 @@
 
                     kill thread_id;
 
-                    insert into event_log values (@@server_id, now(), 
'wmf_slave_overload (300)',
+                    insert into event_log values (sid, now(), 
'wmf_slave_overload (300)',
                         concat('kill ',thread_id,'; ',thread_query)
                     );
 
diff --git a/dbtools/events_labsdb.sql b/dbtools/events_labsdb.sql
index 71adfb2..96c9784 100644
--- a/dbtools/events_labsdb.sql
+++ b/dbtools/events_labsdb.sql
@@ -3,6 +3,9 @@
 set @cache_sql_log_bin := @@session.sql_log_bin;
 set @@session.sql_log_bin = 1;
 
+set @cache_event_scheduler := @@global.event_scheduler;
+set @@global.event_scheduler = 0;
+
 create database if not exists ops;
 
 use ops;
@@ -10,8 +13,7 @@
 -- Remember, table is replicated!
 -- https://wikitech.wikimedia.org/wiki/MariaDB#Schema_Changes
 
-drop table if exists event_log;
-create table event_log (
+create table if not exists event_log (
   server_id int unsigned  not null,
   stamp     datetime      not null,
   event     varchar(100)  not null,
@@ -36,10 +38,11 @@
 
     do begin
 
-        delete from event_log
-        where stamp < now() - interval 1 day
-            and server_id = @@server_id
-        limit 1000;
+        declare sid int;
+
+        set sid := @@server_id;
+
+        delete from event_log where stamp < now() - interval 1 day and 
server_id = sid;
 
     end ;;
 
@@ -56,6 +59,7 @@
 
     do begin
 
+        declare sid int;
         declare thread_id bigint;
 
         set thread_id := ( select ps.id
@@ -70,11 +74,13 @@
             limit 1
         );
 
+        set sid := @@server_id;
+
         if (thread_id is not null) then
 
             kill thread_id;
 
-            insert into event_log values (@@server_id, now(), 
'wmf_labs_sleepers_txn',
+            insert into event_log values (sid, now(), 'wmf_labs_sleepers_txn',
                 concat('kill ',thread_id)
             );
 
@@ -85,3 +91,4 @@
 delimiter ;
 
 set @@session.sql_log_bin = @cache_sql_log_bin;
+set @@global.event_scheduler = @cache_event_scheduler;

-- 
To view, visit https://gerrit.wikimedia.org/r/145509
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0cb6d51fc817e680f8a33583391e88b8518c24c3
Gerrit-PatchSet: 1
Gerrit-Project: operations/software
Gerrit-Branch: master
Gerrit-Owner: Springle <sprin...@wikimedia.org>
Gerrit-Reviewer: Springle <sprin...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to