Command Usage: sam v8_1_5
sam request file transfer

Just having some fun...
Command Description:

This command is the "guts" behind the scenes for storing sam files,
but more flexible.  (The "sam store" command transfers file only
to the Fermilab enstore robot; the "request file transfer" command
can transfer files to any valid sam location).

For files that have been previously declared to SAM, this command
allows you to use local copies of the file to create replicas at
other valid SAM locations, using the file transfer knowledge
encapsulated within the SAM station code.

For new files, you may add the "--declareFile" option, along
with a suitable --descriptionFile (or metadata object, if using
the python API), to declare the file first and *then* create
the replica.

The "--sourceFile" option is the path to the file (including
fileName) on the local system.

The "--destinationPath" option is the target destination, which
must be a valid SAM location.

The "--station" option determines which station's FSS will be
called upon to perform the file transfer.  (The station must be
able to communicate with the local node, of course).

The --temporaryTransferLocation option is a temporary/intermediate
location to transfer the file; This location must be accessible by 
SAM station. When used, the file will be transfered to this location
using samcp before SAM transfers the file to final destination.
This is useful when the originating location of the transfer 
cannot be accessed by SAM.

If the "--eraseSourceWhenDone" flag is passed, the original file
will be removed when the transfer is completed.

If the "--waitForCompletion" flag is passed, the returned
FileTransferStatus object will contain the status of the
transfer.  If this flag is not passed, the returned status
object will contain a status of "pending", and the user
will need to poll with the "get file transfer status" command
to determine if/when the file transfer completes.


A couple of examples using the PYTHON API:

   from Sam import sam
   from SamFile.SamDataFile import SamDataFile
   import SAM

   # declare and transfer a file:
   transferRequestId = sam.requestFileTransfer(station='myStationName',
                           sourceFile='mynode.fnal.gov:/tmp/files/for/sam/myFileNameGoesHere.txt',
                           destinationPath='/pnfs/sam/dzero/logfiles/',
                           declareFile=1,
                           metadata=SamDataFile(fileName='myFileNameGoesHere.txt',
                                                fileType=SAM.DataFileType_NonPhysicsGeneric,
                                                fileSize='1000Kb',
                                                group='dzero',
                                                ))

   # transfer a file that already exists in sam, but without the 'group' attribute;
   #  erase the original when complete
   transferRequestId = sam.requestFileTransfer(station='myStationName',
                           sourceFile='mynode.fnal.gov:/sam/cache/boo/alreadyInSamCache',
                           destinationPath='/my/disk/sam/dzero/important/other/files/',
                           group='test',
                           eraseSourceWhenDone=1)

   # transfer a file that already exists, and WAIT for the
   #  transfer to complete before returning to the called;
   # in this case, the node will be assumed to be the local node.
   transferRequestId = sam.requestFileTransfer(station='myStationName',
                           sourceFile='/tmp/files/mySamFile',
                           destinationPath='/some/place/for/files',
                           group='dzero',
                           waitForCompletion=1)


Usage:
       sam request file transfer <--requiredOptions> [--options] [-flags]

Where:

  --requiredOptions:
	     --destinationPath=<value> # destination location; must be a valid SAM location
	          --sourceFile=<value> # fully-specified path to the file
	             --station=<value> # station (fss) which should perform the file transfer

  --options:
	                 --declareFile # indicates that this is a new file which must first be declared to SAM
	         --eraseSourceWhenDone # remove the original file when the transfer is complete
	           --waitForCompletion # wait, polling the FSS, until the file transfer has completed
	    --corbaCallTimeout=<value> # time in seconds for CORBA method calls to return before timing out (default: 0; zero implies no timeout)
	     --descriptionFile=<value> # metadata description file, if the file must be declared
	               --group=<value> # group responsible for the file (if not contained in the metadata)
	--minPnfsFileStoreSize=<value> # reject requests to transfer files smaller than this into enstore
	       --retryInterval=<value> # retry interval base in seconds; will multiply this base times retryCount (default: 5)
	         --retryJitter=<value> # retry jitter, random jitter added to base retry interval times retryCount (default: 5)
	       --retryMaxCount=<value> # number of times to retry CORBA calls for retriable exceptions (default: 25; zero implies no retries)
	--temporaryTransferLocation=<value> # Temporary (Intermediate) location to transfer the file; must be accessible by SAM station.

   -flags:
	                            -c # automatically close all servants after each method call
	                            -d # debug mode
	                            -s # retrySilently mode (do not issue messages to stderr on proxy retries)
	                            -t # time-it mode (print additional info on timings)
	                            -v # verbose mode

Synonymous Options:
	             --descrip=<value> # synonym for --descriptionFile=<value>

Required Data Types:
	              corbaCallTimeout : int 
	               descriptionFile : string 
	               destinationPath : string 
	                         group : string 
	          minPnfsFileStoreSize : SamSize 
	                 retryInterval : int 
	                   retryJitter : int 
	                 retryMaxCount : int 
	                    sourceFile : string 
	                       station : string 
	     temporaryTransferLocation : string 

You may omit "-c" if the $SAM_PYAPI_AUTO_CLOSE_SERVANTS environmental variable is set.
You may omit "--corbaCallTimeout=<value>" if the $SAM_PYAPI_CORBA_CALL_TIMEOUT environmental variable is set.
You may omit "--minPnfsFileStoreSize=<value>" if the $SAM_MIN_PNFS_FILE_STORE_SIZE environmental variable is set.
You may omit "--retryInterval=<value>" if the $SAM_PYAPI_RETRY_INTERVAL environmental variable is set.
You may omit "--retryJitter=<value>" if the $SAM_PYAPI_RETRY_JITTER environmental variable is set.
You may omit "--retryMaxCount=<value>" if the $SAM_PYAPI_RETRY_MAX_COUNT environmental variable is set.
You may omit "-s" if the $SAM_PYAPI_RETRY_SILENTLY environmental variable is set.
You may omit "--station=<value>" if the $SAM_STATION environmental variable is set.

UNIX ExitStatus:
	             Success :   0
	Unhandled exceptions : 127


See Also: