App-Glacier

 view release on metacpan or  search on metacpan

lib/App/Glacier/Command.pm  view on Meta::CPAN

	    $self->config->as_hash(qw(database job))
	);
    }
    return $self->{_jobdb};
}

sub describe_vault {
    my ($self, $vault_name) = @_;
    my $res = $self->glacier->Describe_vault($vault_name);
    if ($self->glacier->lasterr) {
	if ($self->glacier->lasterr('code') == 404) {
	    return undef;
	} else {
	    $self->abend(EX_FAILURE, "can't list vault: ",
			 $self->glacier->last_error_message);
	}
    }
    return timestamp_deserialize($res);
}

sub directory {

lib/App/Glacier/Command.pm  view on Meta::CPAN

		     "deleting failed $key $vault "
		     . ($descr->{JobDescription} || $descr->{Action})
		     . ' '
		     . $descr->{JobId});
	$self->jobdb()->delete($key) unless $self->dry_run;
	return;
    }

    my $res = $self->glacier->Describe_job($vault, $descr->{JobId});
    if ($self->glacier->lasterr) {
	if ($self->glacier->lasterr('code') == 404) {
	    $self->debug(1,
			 "deleting expired $key $vault "
			 . ($descr->{JobDescription} || $descr->{Action})
			 . ' '
			 . $descr->{JobId});
	    App::Glacier::Job->fromdb($self, $vault, $key, $res)->delete()
		unless $self->dry_run;
	} else {
	    $self->error("can't describe job $descr->{JobId}: ",
			 $self->glacier->last_error_message);

lib/App/Glacier/Command/Sync.pm  view on Meta::CPAN

sub sync {
    my ($self, $vault_name, %opts) = @_;

    my $dir = $self->directory($vault_name);
    my $job = new App::Glacier::Job::InventoryRetrieval(
	$self, $vault_name,
	invalidate => $opts{force});
    if ($job->is_completed) {
	my $res = $self->glacier->Get_job_output($vault_name, $job->id);
	if ($self->glacier->lasterr) {
	    if ($self->glacier->lasterr('code') == 404 && !$opts{force})  {
		if ($opts{restart}) {
		    $self->abend(EX_FAILURE,
				 "unexpected error after restart:",
				 $self->glacier->last_error_message);
		}
		# Job expired, delete it
		# ('mesg' => 'The job ID was not found...)
		$opts{force} = 1;
		return $self->sync($vault_name, %opts);
	    } else {

lib/App/Glacier/Job.pm  view on Meta::CPAN

	    $db->store($self->{_key}, $job);
	}

	if (!$job->{Completed}
	    || ($self->{_ttl} 
		&& (time - $job->{CompletionDate}->epoch) > $self->{_ttl})) {
	    $self->debug(2, "checking status of job $self->{_key}");
	    my $res = $self->glacier->Describe_job($self->{_vault},
						   $job->{JobId});
	    if ($self->glacier->lasterr) {
		if ($self->glacier->lasterr('code') == 404) {
		    $self->debug(2, "job $self->{_key} expired");
		    $db->delete($self->{_key});
		    return $self->_get_job;
		} else {
		    $self->command->abend(EX_UNAVAILABLE,
					 "can't describe job $job->{JobId}: ",
					 $self->glacier->last_error_message);
		}
	    } elsif (ref($res) ne 'HASH') {
		croak "describe_job returned wrong datatype (".ref($res).") for \"$job->{JobId}\"";

lib/App/Glacier/Job/ArchiveRetrieval.pm  view on Meta::CPAN

    $self->{_descr} = $descr;
    return $self;
}

sub init {
    my $self = shift;
    my $jid = $self->glacier->Initiate_archive_retrieval($self->vault,
			  			         $self->{_archive},
						         $self->{_descr});
    if ($self->glacier->lasterr) {
	if ($self->glacier->lasterr('code') == 404) {
	    $self->command->abend(EX_TEMPFAIL,
				  $self->glacier->last_error_message
				  . "\n"
				  . "Try again later or use the --cached option to see the cached content.")
	} else {
	    $self->command->abend(EX_FAILURE,
				  "can't create job: ",
				  $self->command->lasterr('code'),
				  $self->command->last_error_message);
	}

lib/App/Glacier/Job/InventoryRetrieval.pm  view on Meta::CPAN

}

sub init {
    my $self = shift;
    my $jid = $self->glacier->Initiate_inventory_retrieval(
		          $self->vault,
		          'JSON',
		          "Inventory retrieval for vault ".$self->vault
              );
    if ($self->glacier->lasterr) {
	if ($self->glacier->lasterr('code') == 404) {
	    $self->command->abend(EX_TEMPFAIL,
				  $self->glacier->last_error_message
				  . "\n"
				  . "Try again later or use the --cached option to see the cached content.")
	} else {
	    $self->command->abend(EX_FAILURE,
				  "can't create job: ",
				  $self->glacier->lasterr('code'),
				  $self->glacier->last_error_message);
	}



( run in 1.787 second using v1.01-cache-2.11-cpan-39bf76dae61 )