Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [geclipse-dev] File Transfer Service / 3rd Party Transfers

Hi all,

Continuing last post by Mateusz (from 03.09.2008) let me describe transfer mechanism, and especially transfer resuming functionality.

1. Transfer manager uses a repository (xml) file, stored in gEclipse metadata, containing informations about pending transfers. This information will be used to restore the transfer in case of something unexpected happens (gEclipse crashed/is closed while transfering etc.).
2. When user starts new transfer new entry is created in repository file.
3. After creating new entry in the repository file, third party transfer extension point is queried if there is any extension which can handle this transfer (i.e. manage transfer from source_scheme to destination_scheme). If no such extension is found default transfer service is used. Default transfer service transfers data using local machine: source -> local -> destination. After choosing best transfer service, the transfer operation starts. 4. Transfer service can set additional informations (transfer token id etc.) and save them in the repository file. 5. After transfer completes (it doesn't matter if it was successful or not) transfer entry is removed from the repository.

At gEclipse startup the repository file is checked if there are any pending transfers. A dialog is shown which lists all unfinished transfers. User then chooses which (if any) he wants to resume. Again extension is queried for best transfer service and transfer is resumed. In case of the default transfer service this means that the operation is run from the begining. For other transfer services this could mean resuming transfer from last checkpoint, or just checking if the transfer has already finished (fire-and-forget 3rd party transfers).

Regarding the technical stuff (still a lot of work to do here):
Concerning the technical side I am curious how this will be implemented
on the MW-independent side. I guess this has to be covered by our UI's
transfer operation? Or will you provide a completely new mechanism here?

Currently I am still using GridElementTransferOperation class, but some of the functionalities (like the fundamental ones: copyFile and copyFolder) are in fact moved to different classes. I think that in later development this class will be removed.

Obviously the transfers should be implemented in the
EFS-implementation's copy/move-methods. Are these already used by our
transfer operation? I do not know the current implementation but the
initial implementation made use of the IResource methods for copying
files. So this may also be a subject of change then.

Current implementation of the transfer operation (and the default transfer service from the above description) is just a simple stream transfer. Regarding the first part: copy/move methods of the EFS is not a good place for the transport operation: we may have different source-scheme and target-scheme (e.g. srm -> gridftp), so these operation should be defined outside of the IFileStore implementation. Currently simple interface is definied:

public interface ITransferService {
  public boolean transfer( final IFileStore source,
                           final IFileStore destination,
                           final IProgressMonitor monitor );
}


On the teleconference tomorrow i will show the first implementation of this functionality and hopefully hear your opinions and remarks.

Cheers,
Szymon



Back to the top