What is it?

Third-party FTP involves a client and two servers. Instead of exchanging files directly with one server, the client causes the two servers to exchange files. The client can be on the same node as one of the servers or it can be somewhere else.

Why do we need it?

MySpace can make good use of third-party FTP. It's a way to migrate data between MySpace nodes.

Consider an application service a1 at node A that is commanded to operate on data currently at node B, where B has a MySpace server b0; the client commanding the operation is c at node C. Without third-party transfer there are two ways to get the data to B: either c copies first from B to C and then from C to A, or a1 talks directly to b0 to transfer from A to B. Neither of these solutions is ideal. The double-transfer wastes bandwidth and C may be outside the high-speed backbone of the network. Having a1 talk to b0 is efficient, but it makes a1 more complex. If there are many services a1..an at A, then it would be neater to just have one service a0 that corrsponds with b0.

Now suppose that a0 and b0 are both GridFTP servers. The client c can then tell a0 to collect and cache the data from b0. It can then tell a1 to operate on a URL that represents a local file.

Where do we get it from?

The GridFTP servers in the Globus Toolkit (GT2) can do third-party FTP if we can get them configured correctly. It may be that ordinary FTP servers can do it too; this is unclear at the moment.

An example

This is the generic form of the command (from the Unix shell) for GridFTP:

globus-url-copy gsiftp://aife.jb.man.ac.uk/tmp/sample gsiftp://cass111.ast.cam.ac.uk/tmp/sample
In principle, this works from anywhere; you don't have to be on aife or cass111 to do it.

In practice, the command fails like this:

gtr@cass123> globus-url-copy gsiftp://aife.jb.man.ac.uk/tmp/wibble gsiftp://cass111.ast.cam.ac.uk/tmp/wibble
error: the server sent an error response: 500 500 Illegal PORT Command
This means that one of the servers rejected a command to select a data port in the other server. It's a configuration problem: FTP servers don't like taking PORT commands from addresses other than that of the current client. The restrictions are controlled by the file $GLOBUS_LOCATION/etc/ftpaccess and this file needs to be changed to allow PORT commands from all addresses.

-- GuyRixon - 11 Oct 2002


An interesting idea.

'c' would presumably be the job control utility (JCU) in most cases. It would therefore need to know that service 'a1' is of a type that works best with the data local rather than read direct from B. Which would mean putting this in the service metadata to be interpreted. I guess it is better for the JCU to do this as it is more likely to be able to get at the bandwidth characteristics between the two sites.

I was thinking that maybe the workflow engine (WFE) should sort this out but it is better left with the JCU to determine the best way of completing a job at the time the job is run rather than the WFE which may have constructed the job days, weeks or months before (eg in the case of a standard job being run and rerun over time).

Thinking more - for those jobs where it is better to read the data from the source rather than copy it over (eg in a case where job 'a1' might stop after reading a dozen records from a 10 Tb file), should we set up a LocalReader service which provides access to any file and provides buffering and read-ahead, or are there technologies that do this efficiently anyway? Maybe we should create something like ADO, which can read from files, databases etc providing the appropriate driver is available and hides the complexities from the user? Or does this conflict with DAI?

I'll stop now - I'm waffling...

-- TonyLinde - 11 Oct 2002


See AstroGridMyPipe for a description of something like Tony's LocalReader . At the cost of double buffering each transfer, this effect could be got by copying the remote file into a local file that is a POSIX named pipe. I suspect that any service we wrote to buffer a streamed file in memory and supply bits of it on demand would be less efficient than the named pipe; however it might be more flexible. A custom service would make it easier to have the pipe self-destruct after reading.

It will certainly be necessary to state in the service metadata how a service is prepared to take its data. I suspect that "works best" could resolve to "works at all". The set of services that can run purely off read-once data-streams may be small.

-- GuyRixon - 24 Oct 2002


A progress update. Several AstroGrid sites have GT2.2 GridFTP-servers, and Cambridge now has one of these on cass123 (the server on cass111 is the old GT2.0 version). Using these servers and the ftaccess files supplied with GT2.2, third-party FTP is now working. I have tested these configurations:

  • RAL to CASU, invoked from CASU (different CASU machines for client and server).
  • RAL to JBO, invoked from CASU.
  • CASU to JBO, invoked from CASU (different CASU machines for client and server).
  • JBO to CASU, invoked from CASU (different CASU machines for client and server).

The client for this is globus-url-copy.

-- GuyRixon - 24 Oct 2002

Topic revision: r3 - 2002-10-24 - 16:47:00 - GuyRixon
 
AstroGrid Service Click here for the
AstroGrid Service Web
This is the AstroGrid
Development Wiki

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback