Springle has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/165966

Change subject: Events for m2-master
......................................................................

Events for m2-master

- Eventlogging purge after N days
- Eventlogging purge before T stamp

Change-Id: I870bc8a12fea8d29e43e2d1986e8cfb4e27146c3
---
A dbtools/events_m2_master.sql
1 file changed, 182 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/software 
refs/changes/66/165966/1

diff --git a/dbtools/events_m2_master.sql b/dbtools/events_m2_master.sql
new file mode 100644
index 0000000..412c17b
--- /dev/null
+++ b/dbtools/events_m2_master.sql
@@ -0,0 +1,182 @@
+-- Events for m2-master
+
+set @cache_sql_log_bin := @@session.sql_log_bin;
+set @@session.sql_log_bin = 0;
+
+set @cache_event_scheduler := @@global.event_scheduler;
+set @@global.event_scheduler = 0;
+
+-- Eventlogging
+
+use log;
+
+drop table if exists purge_schedule;
+create table purge_schedule (
+  table_name varchar(100) not null primary key,
+  after_days int unsigned default null,
+  before_stamp varbinary(14) default null,
+  batch_size int unsigned default 10000
+) engine=innodb default charset=binary;
+
+insert into purge_schedule (table_name, after_days) values
+    ('MediaViewer_6054199', 40),
+    ('MediaViewer_6055641', 40),
+    ('MediaViewer_6066908', 40),
+    ('MediaViewer_6636420', 40),
+    ('MediaViewer_7670440', 40),
+    ('MediaViewer_8245578', 40),
+    ('MediaViewer_8572637', 40),
+    ('MediaViewer_8935662', 40),
+    ('MediaViewer_9792855', 40),
+    ('MediaViewer_9989959', 40),
+    ('MultimediaViewerAttribution_9758179', 40),
+    ('MultimediaViewerDimensions_10014238', 40),
+    ('MultimediaViewerDuration_8318615', 40),
+    ('MultimediaViewerDuration_8572641', 40),
+    ('MultimediaViewerNetworkPerformance_7393226', 40),
+    ('MultimediaViewerNetworkPerformance_7488625', 40),
+    ('MultimediaViewerNetworkPerformance_7917896', 40)
+;
+
+insert into purge_schedule (table_name, before_stamp) values
+    ('MobileWebClickTracking_5929948', '20140101000000')
+;
+
+drop table if exists event_log;
+create table event_log (
+  stamp     datetime      not null,
+  event     varchar(100)  not null,
+  content   varchar(1024) not null,
+  index stamp (stamp)
+) engine=innodb default charset=binary;
+
+delimiter ;;
+
+drop event if exists delete_schedule;;
+
+create event delete_schedule
+
+    on schedule every 10 second starts date(now())
+
+    do begin
+
+        declare all_done int default 0;
+        declare table_name varchar(100) default null;
+        declare after_days int unsigned default null;
+        declare batch_size int unsigned default null;
+
+        declare purge_tables cursor for
+            select p.table_name, p.after_days, p.batch_size from 
purge_schedule p where p.after_days is not null;
+
+        declare continue handler for not found set all_done = 1;
+
+        if (get_lock('log_delete_schedule', 1) = 1) then
+
+            set @@session.autocommit = 1;
+            set @@session.sql_log_bin = 0;
+
+            set all_done = 0;
+            open purge_tables;
+
+            repeat fetch purge_tables into table_name, after_days, batch_size;
+
+                if (all_done = 0 and table_name is not null and after_days is 
not null and after_days > 30) then
+
+                    set @stamp := date_format(
+                        now() - interval after_days day, '%Y%m%d%H%i%s'
+                    );
+
+                    set @sql := concat(
+                        ' delete from ', table_name,
+                        ' where timestamp < "', @stamp, '"'
+                        ' order by timestamp, id limit ', batch_size
+                    );
+
+                    prepare stmt from @sql;
+                    set @@session.sql_log_bin = 1;
+                    execute stmt;
+                    set @@session.sql_log_bin = 0;
+                    deallocate prepare stmt;
+                    -- set @@session.sql_log_bin = 0;
+                    -- insert into event_log values (now(), 'del', @sql);
+
+                end if;
+
+                until all_done
+            end repeat;
+
+            close purge_tables;
+
+            -- https://mariadb.atlassian.net/browse/MDEV-4602
+            select 1 from (select 1) as t;
+
+            do release_lock('log_delete_schedule');
+
+        end if;
+
+    end ;;
+
+drop event if exists delete_schedule2;;
+
+create event delete_schedule2
+
+    on schedule every 10 second starts date(now())
+
+    do begin
+
+        declare all_done int default 0;
+        declare table_name varchar(100) default null;
+        declare before_stamp varbinary(14) default null;
+        declare batch_size int unsigned default null;
+
+        declare purge_tables cursor for
+            select p.table_name, p.before_stamp, p.batch_size from 
purge_schedule p where p.before_stamp is not null;
+
+        declare continue handler for not found set all_done = 1;
+
+        if (get_lock('log_delete_schedule2', 1) = 1) then
+
+            set @@session.autocommit = 1;
+            set @@session.sql_log_bin = 0;
+
+            set all_done = 0;
+            open purge_tables;
+
+            repeat fetch purge_tables into table_name, before_stamp, 
batch_size;
+
+                if (all_done = 0 and table_name is not null and before_stamp 
is not null) then
+
+                    set @sql := concat(
+                        ' delete from ', table_name,
+                        ' where timestamp < "', before_stamp, '"'
+                        ' order by timestamp, id limit ', batch_size
+                    );
+
+                    prepare stmt from @sql;
+                    set @@session.sql_log_bin = 1;
+                    execute stmt;
+                    set @@session.sql_log_bin = 0;
+                    deallocate prepare stmt;
+                    -- set @@session.sql_log_bin = 0;
+                    -- insert into event_log values (now(), 'del', @sql);
+
+                end if;
+
+                until all_done
+            end repeat;
+
+            close purge_tables;
+
+            -- https://mariadb.atlassian.net/browse/MDEV-4602
+            select 1 from (select 1) as t;
+
+            do release_lock('log_delete_schedule2');
+
+        end if;
+
+    end ;;
+
+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/165966
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I870bc8a12fea8d29e43e2d1986e8cfb4e27146c3
Gerrit-PatchSet: 1
Gerrit-Project: operations/software
Gerrit-Branch: master
Gerrit-Owner: Springle <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to