[Rt-commit] r18203 - rt/3.8/trunk/sbin
ruz at bestpractical.com
ruz at bestpractical.com
Wed Feb 4 14:15:07 EST 2009
Author: ruz
Date: Wed Feb 4 14:15:06 2009
New Revision: 18203
Modified:
rt/3.8/trunk/sbin/rt-validator.in
Log:
* fix checking and recovering CGMs
Modified: rt/3.8/trunk/sbin/rt-validator.in
==============================================================================
--- rt/3.8/trunk/sbin/rt-validator.in (original)
+++ rt/3.8/trunk/sbin/rt-validator.in Wed Feb 4 14:15:06 2009
@@ -497,10 +497,11 @@
);
# for every CGM where ImmediateParentId != GroupId there should be
- # matching parent record
+ # matching parent record (first level)
check_integrity(
- CachedGroupMembers => ['ImmediateParentId', 'MemberId', 'Via'],
- CachedGroupMembers => ['GroupId', 'MemberId', 'id'],
+ CachedGroupMembers => ['ImmediateParentId', 'MemberId'],
+ CachedGroupMembers => ['GroupId', 'MemberId'],
+ join_condition => 't.Via = t.id',
condition => 's.ImmediateParentId != s.GroupId',
action => sub {
my $id = shift;
@@ -516,8 +517,8 @@
# for every CGM where ImmediateParentId != GroupId there should be
# matching "grand" parent record
check_integrity(
- CachedGroupMembers => ['GroupId', 'ImmediateParentId'],
- CachedGroupMembers => ['GroupId', 'MemberId'],
+ CachedGroupMembers => ['GroupId', 'ImmediateParentId', 'Via'],
+ CachedGroupMembers => ['GroupId', 'MemberId', 'id'],
condition => 's.ImmediateParentId != s.GroupId',
action => sub {
my $id = shift;
@@ -531,25 +532,23 @@
);
# CHECK recursive records:
- # if we have G1 - (M1 == G2) - M2 then we should have G1 - M2 record with
- # Via = CGM2.id and IP = CGM2.G
- # Disabled field should be fixed separatedly
+ # if we have CGM1 (G1,M1,V1,IP1) then for every GM2(G2, M2), where G2 == M1,
+ # we should have CGM3 where G3 = G1, M3 = M2, V3 = ID1, IP3 = M1
{
my $query = <<END;
-SELECT grand.GroupId, parent.MemberId, parent.id AS Via,
- parent.GroupId AS ImmediateParentId, grand.Disabled, parent.Disabled
+SELECT cgm1.GroupId, gm2.MemberId, cgm1.id AS Via,
+ cgm1.MemberId AS ImmediateParentId, cgm1.Disabled
FROM
- CachedGroupMembers grand
- CROSS JOIN CachedGroupMembers parent
- LEFT JOIN CachedGroupMembers grand_child ON (
- grand_child.GroupId = grand.GroupId
- AND grand_child.MemberId = parent.MemberId
- AND grand_child.Via = parent.id
- AND grand_child.ImmediateParentId = parent.GroupId )
-WHERE grand.GroupId != grand.MemberId
-AND parent.GroupId != parent.MemberId
-AND parent.GroupId = grand.MemberId
-AND grand_child.id IS NULL
+ CachedGroupMembers cgm1
+ CROSS JOIN GroupMembers gm2
+ LEFT JOIN CachedGroupMembers cgm3 ON (
+ cgm3.GroupId = cgm1.GroupId
+ AND cgm3.MemberId = gm2.MemberId
+ AND cgm3.Via = cgm1.id
+ AND cgm3.ImmediateParentId = cgm1.MemberId )
+WHERE cgm1.GroupId != cgm1.MemberId
+AND gm2.GroupId = cgm1.MemberId
+AND cgm3.id IS NULL
END
my $action = sub {
@@ -562,12 +561,12 @@
};
my $sth = execute_query( $query );
- while ( my ($g, $m, $via, $ip, $gdis, $pdis) = $sth->fetchrow_array ) {
- print STDERR "Principal #$m is member of #$ip when #$ip is member of #$g,\n";
- print STDERR "but there is no cached GM record that $m is member of #$g.\n";
+ while ( my ($g, $m, $via, $ip, $dis) = $sth->fetchrow_array ) {
+ print STDERR "Principal #$m is member of #$ip when #$ip is member of #$g,";
+ print STDERR " but there is no cached GM record that $m is member of #$g.\n";
$action->(
GroupId => $g, MemberId => $m, Via => $via,
- ImmediateParentId => $ip, Disabled => $gdis || $pdis,
+ ImmediateParentId => $ip, Disabled => $dis,
);
}
}
More information about the Rt-commit
mailing list