[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[EP-tech] Re: Difficulty in getting object retrieval working in custom storage module



$repo->log() goes straight to STDERR, so should appear in the Apache
error log (remember to check 'ssl_error' if you have https).

Note that lib/storage/default.xml determines which plugin to use to
store file data - so if you haven't overridden that to use your own
plugin EPrints will default to the Local plugin.

All the best,
Tim.

On Tue, 2013-02-05 at 14:34 +0000, Simon McLeish wrote:
> Hi again,
> 
> 
> I can answer my own question: the code is fine and works properly. I
> was trying to access one of my test uploads from before I got the
> uploader working properly, without realising it. A new uploaded file
> downloads fine. The lack of log information appears to be due to
> EPrints doing some local caching of the data - is there any way to
> turn that off?
> 
> 
> Simon
> 
> 
> 
> On Tue, Feb 5, 2013 at 12:54 PM, Simon McLeish
> <simon.mcleish at gmail.com> wrote:
>         Hi,
>         
>         
>         I'm trying to set up a custom storage module which
>         communicates with a REST interface using LWP. I can store
>         objects OK, and retrieve them directly (i.e. not through
>         eprints). But when I try to retrieve an object through the
>         EPrints interface I get the following in the log:
>         
>         ------------------------------------------------------------------
>         ---------------- EPrints System Error
>         ----------------------------
>         ------------------------------------------------------------------
>         Error in file retrieval: failed to get file contents
>         ------------------------------------------------------------------
>          at /usr/share/eprints3/perl_lib/EPrints/Apache/Storage.pm
>         line 261
>         
>         EPrints::Apache::Storage::handler('Apache2::RequestRec=SCALAR(0x7f9a1fb053c0)') called at -e line 0
>             eval {...} called at -e line 0
>         [Tue Feb 05 12:35:20 2013] [error] [client 138.38.192.151]
>         EPrints::abort()\n, referer:
>         https://float.bath.ac.uk/cgi/users/home?screen=EPrint::Edit&eprintid=1&stage=files
>         
>         
>         The retrieve sub in the module looks like this:
>         
>         sub retrieve
>         {
>             my( $self, $fileobj, $sourceid, $offset, $n, $f ) = @_;
>         
>             my $repository = $self->{session}->get_repository;
>             $repository->log( "Attempting to set up user agent" ) if
>         ($self->{debug}); # for testing
>             if (create_ua( $self, $fileobj))
>             {
>                 $repository->log( "Attempting to access HCP " .
>         $self->{_url}->{$fileobj} ) if ($self->{debug}); # for testing
>                 my $ua = $self->{_ua}->{$fileobj};
>                 my $request = new HTTP::Request('GET',
>         $self->{_url}->{$fileobj});    
>                 my $response = $ua->request( $request,$f ); # feed the
>         response to the callback function
>                 $repository->log( "Have response" ) if
>         ($self->{debug}); # for testing
>                 if( $response->is_error )
>                 {
>                     $repository->log( $response->as_string );
>                 }
>                 return $response->is_success;
>             }
>             else
>             {
>                 $repository->log("Could not define LWP user agent:
>         aborting file save\n");
>                 return 0;
>             }
>         }
>         
>         
>         The log doesn't seem to be receiving the debug info, either
>         (which works fine in the open_write, write, and close_write
>         subs). create_ua sets up the LWP object with the cookies
>         needed for authentication, and saves it as
>         $self->{_ua}->{$fileobj} - again, this works perfectly in the
>         write routines.  According to the LWP docs, 
>         
>         $ua->request( $request,$f )
>         
>         
>         should feed back the content from the response to the callback
>         function ("this function will be called for each chunk of the
>         response content as it is received from the server" -
>         http://search.cpan.org/~gaas/libwww-perl-6.04/lib/LWP/UserAgent.pm).
>         
>         
>         I've based the list of arguments to the sub on those in
>         Local.pm - is is much of the rest of the EPrints interacting
>         part of the code. This list is different from both the list at
>         http://wiki.eprints.org/w/API:EPrints/Storage ($self,
>         $fileobj, $offset, $n, CALLBACK ) and
>         http://trac.eprints.org/eprints/browser/trunk/system/perl_lib/EPrints/Plugin/Storage/AmazonS3.pm?rev=4327 (the Amazon S3 module) ($self, $fileobj, $uri, $f) - could you possibly indicate which list is correct, if this isn't?
>         
>         
>         Any suggestions would be very welcome!
>         
>         
>         Thanks,
>         
>         Simon
>         
>         
>         *** Options:
>         http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
>         *** Archive: http://www.eprints.org/tech.php/
>         *** EPrints community wiki: http://wiki.eprints.org/
>         
> 
> 
> *** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
> *** Archive: http://www.eprints.org/tech.php/
> *** EPrints community wiki: http://wiki.eprints.org/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part
Url : http://mailman.ecs.soton.ac.uk/pipermail/eprints-tech/attachments/20130205/c28650ef/attachment-0001.bin