edu.isi.pegasus.planner.transfer.implementation

## Class Stork

- java.lang.Object
- - edu.isi.pegasus.planner.transfer.implementation.Abstract
  - - edu.isi.pegasus.planner.transfer.implementation.AbstractSingleFTPerXFERJob
    - - edu.isi.pegasus.planner.transfer.implementation.Stork

All Implemented Interfaces:
  Implementation, SingleFTPerXFERJob

    public class Stork
    extends AbstractSingleFTPerXFERJob

The implementation that creates transfer jobs referring to the stork data placement scheduler that can handle only one transfer per job.

Stork is directly invoked by DAGMAN. The appropriate Stork modules need to be installed on the submit host.

It leads to the creation of the setup chmod jobs to the workflow, that appear as parents to compute jobs in case the transfer implementation does not preserve the X bit on the file being transferred. This is required for staging of executables as part of the workflow. The setup jobs are only added as children to the stage in jobs.

In order to use the transfer implementation implemented by this class, the property `vds.transfer.*.impl` must be set to value `Stork`.

Version:
  $Revision$
Author:
  Karan Vahi

### Field Summary

Fields
`static java.lang.String` `DERIVATION_NAME` The name of the underlying derivation.
`static java.lang.String` `DERIVATION_NAMESPACE` The derivation namespace for for the transfer job.
`static java.lang.String` `DERIVATION_VERSION` The derivation version number for the transfer job.
`static java.lang.String` `DESCRIPTION` A short description of the transfer implementation.
`static java.lang.String` `TRANSFORMATION_NAME` The name of the underlying transformation that is queried for in the Transformation Catalog.
`static java.lang.String` `TRANSFORMATION_NAMESPACE` The transformation namespace for the transfer job.
`static java.lang.String` `TRANSFORMATION_VERSION` The version number for the transfer job.

### Fields inherited from class edu.isi.pegasus.planner.transfer.implementation.Abstract

`CHANGE_XBIT_TRANSFORMATION, mAddNodesForSettingXBit, mChmodDisabledForAllSites, mDisabledChmodSites, mLocalIrodsEnv, mLocalIrodsEnvBasename, mLocalS3cfg, mLocalS3cfgBasename, mLocalUserProxy, mLocalUserProxyBasename, mLogger, mPOptions, mProps, mRefiner, mSiteStore, mTCHandle, NOOP_PREFIX, SET_XBIT_PREFIX, XBIT_DERIVATION_NS, XBIT_DERIVATION_VERSION, XBIT_EXECUTABLE_BASENAME, XBIT_TRANSFORMATION_NS, XBIT_TRANSFORMATION_VERSION`

### Fields inherited from interface edu.isi.pegasus.planner.transfer.Implementation

`TRANSFER_UNIVERSE, VERSION`

### Constructor Summary

Constructors
Constructor and Description
`Stork(PegasusBag bag)` The overloaded constructor, that is called by the Factory to load the class.

### Method Summary

All Methods Instance Methods Concrete Methods
`TransferJob` `createTransferJob(Job job, FileTransfer file, java.util.Collection execFiles, java.lang.String txJobName, int jobClass)` Constructs a general transfer job that handles single transfers per transfer job.
`boolean` `doesPreserveXBit()` Returns a boolean indicating whether the transfer protocol being used by the implementation preserves the X Bit or not while staging.
`protected java.lang.String` `generateArgumentStringAndAssociateCredentials(TransferJob job, FileTransfer file)` It constructs the arguments to the transfer executable that need to be passed to the executable referred to in this transfer mode.
`protected java.lang.String` `getCompleteTCName()` Returns the complete name for the transformation.
`protected java.lang.String` `getDerivationName()` Returns the logical name of the derivation that this implementation refers to.
`protected java.lang.String` `getDerivationNamespace()` Returns the namespace of the derivation that this implementation refers to.
`protected java.lang.String` `getDerivationVersion()` Returns the version of the derivation that this implementation refers to.
`java.lang.String` `getDescription()` Returns a textual description of the transfer implementation.
`TransformationCatalogEntry` `getTransformationCatalogEntry(java.lang.String siteHandle, int jobClass)` Retrieves the transformation catalog entry for the executable that is being used to transfer the files in the implementation.
`boolean` `useThirdPartyTransferAlways()` Return a boolean indicating whether the transfers to be done always in a third party transfer mode.

### Methods inherited from class edu.isi.pegasus.planner.transfer.implementation.AbstractSingleFTPerXFERJob

`createTransferJob, createTransferJob`

### Methods inherited from class edu.isi.pegasus.planner.transfer.implementation.Abstract

`addSetXBitJobs, addSetXBitJobs, addSetXBitJobs, applyPriority, checkAndTransferIrodsEnvFile, checkAndTransferProxy, construct, createNoOPJob, createSetXBitJob, createSetXBitJob, createSetXBitJob, determineDisabledChmodSites, disableChmodJobCreation, getNOOPJobName, getPriority, getSetXBitJobName, setRefiner`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### TRANSFORMATION_NAMESPACE

    public static final java.lang.String TRANSFORMATION_NAMESPACE

The transformation namespace for the transfer job.

#### TRANSFORMATION_NAME

    public static final java.lang.String TRANSFORMATION_NAME

The name of the underlying transformation that is queried for in the Transformation Catalog.

See Also:
  Constant Field Values

#### TRANSFORMATION_VERSION

    public static final java.lang.String TRANSFORMATION_VERSION

The version number for the transfer job.

#### DERIVATION_NAMESPACE

    public static final java.lang.String DERIVATION_NAMESPACE

The derivation namespace for for the transfer job.

See Also:
  Constant Field Values

#### DERIVATION_NAME

    public static final java.lang.String DERIVATION_NAME

The name of the underlying derivation.

See Also:
  Constant Field Values

#### DERIVATION_VERSION

    public static final java.lang.String DERIVATION_VERSION

The derivation version number for the transfer job.

See Also:
  Constant Field Values

#### DESCRIPTION

    public static final java.lang.String DESCRIPTION

A short description of the transfer implementation.

See Also:
  Constant Field Values

### Constructor Detail

#### Stork

    public Stork(PegasusBag bag)

The overloaded constructor, that is called by the Factory to load the class.

Parameters:
  `bag` - bag of intialization objects.

### Method Detail

#### useThirdPartyTransferAlways

    public boolean useThirdPartyTransferAlways()

Return a boolean indicating whether the transfers to be done always in a third party transfer mode. A value of false, results in the direct or peer to peer transfers being done.

A value of false does not preclude third party transfers. They still can be done, by setting the property "vds.transfer.*.thirdparty.sites".

Returns:
  boolean indicating whether to always use third party transfers or not.
See Also:
  `PegasusProperties.getThirdPartySites(String)`

#### doesPreserveXBit

    public boolean doesPreserveXBit()

Returns a boolean indicating whether the transfer protocol being used by the implementation preserves the X Bit or not while staging.

Returns:
  boolean

#### getDescription

    public java.lang.String getDescription()

Returns a textual description of the transfer implementation.

Returns:
  a short textual description

#### createTransferJob

    public TransferJob createTransferJob(Job job,
                                         FileTransfer file,
                                         java.util.Collection execFiles,
                                         java.lang.String txJobName,
                                         int jobClass)

Constructs a general transfer job that handles single transfers per transfer job. There are appropriate callouts to generate the implementation specific details. It throws an error if asked to create a transfer job for more than one transfer.

Parameters:
  `job` - the Job object for the job, in relation to which the transfer node is being added. Either the transfer node can be transferring this jobs input files to the execution pool, or transferring this job's output files to the output pool.
  `file` - collection of `FileTransfer` objects representing the data files and staged executables to be transferred.
  `execFiles` - subset collection of the files parameter, that identifies the executable files that are being transferred.
  `txJobName` - the name of transfer node.
  `jobClass` - the job Class for the newly added job. Can be one of the following: stage-in stage-out inter-pool transfer
Returns:
  the created TransferJob.

#### getTransformationCatalogEntry

    public TransformationCatalogEntry getTransformationCatalogEntry(java.lang.String siteHandle,
                                                                    int jobClass)

Retrieves the transformation catalog entry for the executable that is being used to transfer the files in the implementation. The entry does not refer to any physical path.

Parameters:
  `siteHandle` - the handle of the site where the transformation is to be searched.
  `jobClass` - the job Class for the newly added job. Can be one of the following: stage-in stage-out inter-pool transfer stage-in worker transfer
Returns:
  the transformation catalog entry if found, else null.

#### getDerivationNamespace

    protected java.lang.String getDerivationNamespace()

Returns the namespace of the derivation that this implementation refers to.

Specified by:
  `getDerivationNamespace` in class `AbstractSingleFTPerXFERJob`
Returns:
  the namespace of the derivation.

#### getDerivationName

    protected java.lang.String getDerivationName()

Returns the logical name of the derivation that this implementation refers to.

Specified by:
  `getDerivationName` in class `AbstractSingleFTPerXFERJob`
Returns:
  the name of the derivation.

#### getDerivationVersion

    protected java.lang.String getDerivationVersion()

Returns the version of the derivation that this implementation refers to.

Specified by:
  `getDerivationVersion` in class `AbstractSingleFTPerXFERJob`
Returns:
  the version of the derivation.

#### generateArgumentStringAndAssociateCredentials

    protected java.lang.String generateArgumentStringAndAssociateCredentials(TransferJob job,
                                                                             FileTransfer file)

It constructs the arguments to the transfer executable that need to be passed to the executable referred to in this transfer mode.

Specified by:
  `generateArgumentStringAndAssociateCredentials` in class `AbstractSingleFTPerXFERJob`
Parameters:
  `job` - the transfer job that is being created.
  `file` - the FileTransfer that needs to be done.
Returns:
  the argument string

#### getCompleteTCName

    protected java.lang.String getCompleteTCName()

Returns the complete name for the transformation.

Specified by:
  `getCompleteTCName` in class `AbstractSingleFTPerXFERJob`
Returns:
  the complete name.