Improve update, remove unused groups
authorVincent Tondellier <tonton+hg@team1664.org>
Wed, 21 Jun 2017 23:13:43 +0200
changeset 129 0705ab429133
parent 128 6b56182fd491
child 130 81932c723dfd
Improve update, remove unused groups
lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm
lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm
--- a/lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm	Wed Jun 21 23:11:42 2017 +0200
+++ b/lib/CrashTest/Plugin/Storage/Sql/Model/CrashGroup.pm	Wed Jun 21 23:13:43 2017 +0200
@@ -197,8 +197,6 @@
 sub _create_pg94 {
     my ($self, $db, $uuid, $sig, $title) = @_;
 
-    my $tx = $db->begin;
-
     # avoid race condition, no other safe way without upsert
     $db->query("LOCK TABLE crash_groups IN EXCLUSIVE MODE")->finish;
 
@@ -217,8 +215,6 @@
         warn "crash group is null after insert, reselected " . $crash_group->{id} . "\n";
     }
 
-    $tx->commit;
-
     return $crash_group;
 }
 
@@ -257,4 +253,10 @@
     return $crash_group;
 }
 
+sub delete_unused {
+    my ($self, $db) = @_;
+
+    $db->query("DELETE FROM crash_groups WHERE NOT EXISTS (SELECT 1 FROM crash_reports WHERE crash_group_id = crash_groups.id)")->finish;
+}
+
 1;
--- a/lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm	Wed Jun 21 23:11:42 2017 +0200
+++ b/lib/CrashTest/Plugin/Storage/Sql/Model/CrashReport.pm	Wed Jun 21 23:13:43 2017 +0200
@@ -252,14 +252,23 @@
 
     my $dbcrash = $db->query("SELECT id FROM crash_reports WHERE uuid = ?", $uuid)->hash;
 
-    my $crash_group = $self->crash_groups->find_or_create($uuid, $pjson, $db);
-
     $db->query("
         UPDATE crash_report_datas SET processed = ?
         WHERE crash_report_id = ?",
         encode_json($pjson),
         $dbcrash->{id},
     );
+
+    $db->query("
+        UPDATE crash_reports SET crash_group_id = NULL, crash_group_distance = NULL
+        WHERE id = ?",
+        $dbcrash->{id},
+    );
+
+    $self->crash_groups->delete_unused($db);
+
+    my $crash_group = $self->crash_groups->find_or_create($uuid, $pjson, $db);
+
     $db->query("
         UPDATE crash_reports SET crash_group_id = ?, crash_group_distance = ?
         WHERE id = ?",