+sub TrimStorage($$$) {
+ my ($self, $type, $tag, $region) = @_;
+
+ my $today = Today2SQLDatetime;
+
+ my $oldage = SubtractDays $today, $Clearadm::CLEAROPTS{CLEARADM_SCRUBDAYS};
+
+ my $table = $type =~ /vob/i
+ ? 'vobstorage'
+ : 'viewstorage';
+
+ my ($dberr, $dbmsg) = $self->_deleteRecord(
+ $table,
+ "tag='$tag' and region='$region' and timestamp<='$oldage'"
+ );
+
+ if ($dbmsg eq 'Records deleted') {
+ return (0, $dbmsg) if $dberr == 0;
+
+ my %runlog;
+
+ $runlog{task} = 'Scrub';
+ $runlog{started} = $today;
+ $runlog{status} = 0;
+ $runlog{message} =
+ "Scrubbed $dberr ${type}storage records";
+
+ my ($err, $msg) = $self->AddRunlog(%runlog);
+
+ $self->Error("Unable to add runload (Error: $err)\n$msg") if $err;
+ } # if
+
+ return ($dberr, $dbmsg);
+} # TrimStorage
+
+sub ValidateCCObjects() {
+ my ($self) = @_;
+
+ my $vobRecordsDeleted = 0;
+ my $viewRecordsDeleted = 0;
+
+ for my $region ($Clearcase::CC->regions) {
+ for my $type (qw(vob view)) {
+ my @ccobjs;
+ verbose "Processing ${type}s in $region";
+
+ if ($type eq 'vob') {
+ verbose "Finding all vobs in region $region";
+ @ccobjs = $self->FindVob(undef, $region);
+ verbose 'Found ' . scalar @ccobjs . ' vobs to process';
+ } elsif ($type eq 'view') {
+ verbose "Finding all views in region $region";
+ @ccobjs = $self->FindView(undef, $region);
+ verbose 'Found ' . scalar @ccobjs . ' views to process';
+ } # if
+
+ for my $object (@ccobjs) {
+ my %ccobjrec = %$object;
+
+ verbose "Processing $ccobjrec{tag}:$ccobjrec{region}";
+
+ my $ccobj;
+
+ if ($type eq 'vob') {
+ $ccobj = Clearcase::Vob->new($ccobjrec{tag}, $ccobjrec{region});
+ } else {
+ $ccobj = Clearcase::View->new($ccobjrec{tag}, $ccobjrec{region});
+ } # if
+
+ verbose_nolf 'Checking if ' . $ccobj->{tag} . ':' . $ccobj->{region} . ' exists anymore...';
+
+ if ($ccobj->exists) {
+ verbose ' it does! Skipping...';
+ next;
+ } else {
+ verbose ' it doesn\'t!';
+ } # if
+
+ #next if $ccobj->exists;
+
+ verbose "Deleting $type $ccobjrec{tag}:$ccobjrec{region}";
+
+ my ($recordsDeleted, $msg) = $self->_deleteRecord($type,
+ "tag='$ccobjrec{tag}' and region='$ccobjrec{region}'");
+
+ if ($msg ne 'Records deleted') {
+ return ($recordsDeleted, $msg);
+ } else {
+ $viewRecordsDeleted += $recordsDeleted if $type eq 'view';
+ $vobRecordsDeleted += $recordsDeleted if $type eq 'vob';
+ } # if
+ } # for
+ } # for
+ } # for
+
+ return ($viewRecordsDeleted, $vobRecordsDeleted);
+} # ValidateCCObjects
+
+sub GetFS($$;$$$$) {