61 lines
1.6 KiB
Perl
Executable file
61 lines
1.6 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
#
|
|
# Written to clean out extraneous subscriptions after user migrations.
|
|
# Should be safe to run, but we shouldn't need to again. Committed for
|
|
# posterity.
|
|
#
|
|
|
|
use v5.10;
|
|
use strict;
|
|
BEGIN {
|
|
require "$ENV{LJHOME}/cgi-bin/ljlib.pl";
|
|
}
|
|
|
|
use Data::Dumper qw/ Dumper /;
|
|
|
|
my $dbr = LJ::get_db_reader();
|
|
my $sth = $dbr->prepare( 'SELECT userid, clusterid FROM user ORDER BY userid');
|
|
$sth->execute or die;
|
|
|
|
my %users;
|
|
my $ct = 0;
|
|
|
|
my $process = sub {
|
|
# For each cluster, get the list of people who are NOT on it
|
|
foreach my $target_cid ( @LJ::CLUSTERS ) {
|
|
my @userids;
|
|
foreach my $test_cid ( @LJ::CLUSTERS ) {
|
|
next if $test_cid == $target_cid;
|
|
|
|
push @userids, @{$users{$test_cid} || []};
|
|
}
|
|
next unless @userids;
|
|
|
|
my $userid_str = join ',', @userids;
|
|
my $dbcm = LJ::get_cluster_master( $target_cid ) or die;
|
|
my $subs = $dbcm->selectall_arrayref(
|
|
qq{SELECT userid, subid, is_dirty, journalid, etypeid, arg1, arg2,
|
|
ntypeid, createtime, expiretime, flags
|
|
FROM subs WHERE userid IN ($userid_str)} );
|
|
if ( $subs && @$subs ) {
|
|
foreach my $sub ( @$subs ) {
|
|
print "/* $target_cid */ " . join(',', @$sub) . "\n";
|
|
}
|
|
|
|
print "/* Deleting... */\n";
|
|
$dbcm->do( qq{/* [$target_cid] */ DELETE FROM subs WHERE userid IN ($userid_str)} )
|
|
or die;
|
|
}
|
|
}
|
|
|
|
$ct = 0;
|
|
%users = ();
|
|
};
|
|
|
|
while ( my ( $uid, $cid ) = $sth->fetchrow_array ) {
|
|
push @{$users{$cid} ||= []}, $uid;
|
|
next unless ++$ct == 100;
|
|
|
|
$process->();
|
|
}
|
|
$process->();
|