I've noticed RemoteBlast does not handle a specific error message from
NCBI correctly. retrieve_blast() should return 0 if waiting, -1 on
error, or the results when completed. It looks like the method relies
on a specific tag in the NCBI return, 'QBlastInfoBegin'. The error
message I'm getting does not have this tag or a value of
'Status=ERROR'. After contacting NCBI 'Blast-help', they stated that
QBlastInfoBegin should not be expected from all GET requests. The error
can be reproduced by using RID CM2YJJW501R, until it expires tomorrow.
my $rid = 'CM2YJJW501R';
my $factory = Bio::Tools::Run::RemoteBlast->new( -verbose => 1,);
my $rc = $factory->retrieve_blast($rid);
print $rc ."\n";
The content returned from NCBI looks like:
<hr><font color="red">ERROR: An error has occurred on the server, Too
many HSPs to save all
Contact Blast-help at ncbi.nlm.nih.gov and include your RID:
CM2YJJW501R</font><hr>
I added a conditional statement as seen below to correct my local copy.
I'm not sure this is the best fix, but it works.
sub retrieve_blast {
...
if( /QBlastInfoBegin/i ) {
$s = 1;
} elsif( $s ) {
if( /Status=(WAITING|ERROR|READY)/i ) {
...
}
} elsif( /^(?:#\s)?[\w-]*?BLAST\w+/ ) {
$waiting = 0;
last;
} elsif ( /ERROR/i ) {
close($TMP);
open(my $ERR, "<$tempfile") or $self->throw("cannot open file
$tempfile");
$self->warn(join("", <$ERR>));
close $ERR;
return -1;
}
...
}
Thanks,
Jason Walker