--- 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 = ?",