Table of Contents
Abstract
This document contains the information needed to configure thea GLite Data Transfer Agent. For additional information how to install that module, please refer to the gLite Data Transfer Agents Module Install Guide.
This package provide the agents that perform the actions concerning the Data Transfers. We distinguished two different kinds of agent: the Channel Agent and the VO Agent.
The Channel Agent is responsible to manage all the file transfers through a channel, i.e. the entity that represent the phisical, monodirectional link between two sites: this agent will fetch the files transfers requests from a Queue and submit them to the configured TransferService.
The other type of agent, the VO Agent, is in charge to perform all the action that are related to a VO specific Virtual Organization, which involves applying VO policies, and Catalog interaction. Moreover, we dustinguish between two possible VO Agent deployment types:
The agent would manage job where the source and destination contains Physical File Names (SURLs or TURLs). No catalog interaction is foreseen.
Extend the previous model adding the interaction with a Catalog Service, in order to retrieve the source and destination physical file names from the Logical File Names (LFNs and GUIDs) and source and destination sites. Once a transfer is completed, the new replicas are registered to the appropriate catalog.
One Channel Agent is needed for each channels available on the site, and one VO Agent is needed for each VO that what to perfoms data transfer requests. All of these agents share the same Queue, but the FTA frameworks guarantees that they interact each other in the proper way: a VO Agent is allowed to see just the jobs (and related information) that belongs to itself, in the same way a Channel Agent is not able to process requests belonging to a different channel. You can imagine that each agent act on a view of the entire Queue:
/---------------\ | Queue | \---------------/ |-------- | VO_1 || Vo_1 | | Agent =====> View |-------| |-------- Ch_1 || Channel_1 | | View <===== Agent |-------- || VO_2 || Vo_2 |-------| Agent =====> View |-------| |-------- Ch_2 || Channel_2 | | View <===== Agent |-------- || VO_3 || Vo_2 |-------| Agent =====> View | | |-------- | \---------------/
The way of the Channel and the VO Agent work is the same: they periodically run some action in order to perform the step required to transfer data.
The Channel Agent actions are:
Submit new File transfer request to the TransferService
Check the state of all the active File transfer requests and update the Queue with the retrieved information
Revoke active file transfers marked as canceling on the Queue
The VO Agent actions are:
File Transfer Service:
Allocate a transfer job to a channel based on the source and destination of the related files
Reschedule failed transfers that are in waiting state
Revoke pending (i.e. not yet processed by the Channel Agent) file transfers marked as canceling on the Queue.
File Placement Service; adds the following actions to the FTS ones:
Resolve the source Logical File Names into an SURL and generate the destination SURL looking at the information provided by the Service Discovery
When a Transfer Job is completed, register the new replicas on the Catalog Service
The GLite Data Transfer Agents module provides a default action for all of these types, but it would also allow to extend the behavior of an agent by configuring different actions.
The gLite Data Transfer Agents use the gLite Data Config Service modules for retrieving initialization and configuration parameters. For a detailed explanation how that module works please have a look at the gLite Data Config Service User's Guide.
The GLite Transfer Agent requires the configuration files named glite-transfer-channel-agent-<CHANNEL_NAME>.properties.xml and glite-transfer-channel-agent-<CHANNEL_NAME>.log-properties in $GLITE_LOCATION_USER/etc, $GLITE_LOCATION/etc or $GLITE_LOCATION_VAR/etc, where <CHANNEL_NAME> is the name of the Channel which the agent is responsible for. The structure of theconfiguration file depends of the type of Queue and Transfer Service the Channel Agent has to contact:
<service name="transfer-channel-agent"> <components> <component name="transfer-agent-sd"> <!-- ServiceDiscovery client Configuration--> </component> <component name="transfer-agent-myproxy"> <!-- MyProxy client Configuration--> </component> <component name="transfer-agent-fsm"> <!-- FSM Configuration--> </component> <component name="transfer-agent-dao-****"> <!-- Queue (Data Access Object) Connector --> </component> <component name="transfer-agent-ts-****"> <!-- Transfer Service Connector --> </component> <component name="transfer-agent-scheduler"> <!-- Scheduler Configuration--> </component> <component name="transfer-agent-channel-actions"> <!-- Channel Actions Configuration --> </component> <component name="transfer-channel-agent"> <!-- Channel Agent Configuration --> </component> </components> </service>
where the sections markled with **** depends on the connector that has to be used.
The GLite Transfer Agent requires the configuration files named glite-transfer-vo-agent-<VO_NAME>.properties.xml and glite-transfer-vo-agent-<VO_NAME>.log-properties in $GLITE_LOCATION_USER/etc, $GLITE_LOCATION/etc or $GLITE_LOCATION_VAR/etc, where <VO_NAME> is the name of the Virtual Organization which the Agent belongs to. The structure of the configuration file depends also on the chosen VO Agent deployment type (FTS or FPS) and on the type of the Queue the Agent has to contact. Please note that a VO can't install both a FTS VO Agent and a FPS VO agent.
<service name="transfer-vo-agent-fts"> <components> <component name="transfer-agent-sd"> <!-- ServiceDiscovery client Configuration--> </component> <component name="transfer-agent-myproxy"> <!-- MyProxy client Configuration--> </component> <component name="transfer-agent-fsm"> <!-- FSM Configuration--> </component> <component name="transfer-agent-dao-****"> <!-- Queue (Data Access Object) Connector --> </component> <component name="transfer-agent-scheduler"> <!-- Scheduler Configuration--> </component> <component name="transfer-agent-vo-actions"> <!-- VO Actions Configuration --> </component> <component name="transfer-vo-agent"> <!-- VO Agent Configuration --> </component> </components> </service>
<service name="transfer-vo-agent-fps"> <components> <component name="transfer-agent-sd"> <!-- ServiceDiscovery client Configuration--> </component> <component name="transfer-agent-myproxy"> <!-- MyProxy client Configuration--> </component> <component name="transfer-agent-catalog-****"> <!-- Catalog Service client Plugin --> </component> <component name="transfer-agent-fsm"> <!-- FSM Configuration--> </component> <component name="transfer-agent-dao-****"> <!-- Queue (Data Access Object) Connector --> </component> <component name="transfer-agent-scheduler"> <!-- Scheduler Configuration--> </component> <component name="transfer-agent-vo-actions"> <!-- VO Actions Configuration --> </component> <component name="transfer-agent-vo-fps-actions"> <!-- VO FPS Actions Configuration --> </component> <component name="transfer-vo-agent"> <!-- VO Agent Configuration --> </component> </components> </service>
where the sections markled with **** depends on the connector/plug-in that has to be used.
Currently, the following Connectors are implemented:
Transfer Service:
It can be configured to use third party gsiftp transfers (type is "urlcopy") or to issue SRM copy requests (type is "srmcopy")
Deprecated. Maintained for testing.
Data Access Object:
MySQL -- transfer-agent-dao-mysql
Oracle -- transfer-agent-dao-oracle
The requirement is that the configuration should contain one connector per type (transfer-agent-ts-* and transfer-agent-dao-*).
For what concern the Catalog Client, currently we provide:
GLite Fireman -- transfer-agent-catalog-fireman
Please note that a Catalog Client is required only for the VO Agent FPS deployment scenario.
The following section describes the configuration parameter for the GLite Transfer Agents. The configuration for the Connectors/Plug-ins is reported in a dedicated section. Since most of the modules are common for the Channel, VO FTS and VO FPS Agents, deployment model specifics are discussed on the description note. For a structure of the configuration file for a given agent, please check the previous section.
Represents the module that should be use to retieve service information from ServiceDiscovery
libglite_data_transfer_agent_sd.so
The type used to register SRM Services on ServiceDiscovery
Type: string; Default value: 'SRM'
The type used to register GRIDFTP Servers on ServiceDiscovery
Type: string; Default value: 'gsiftp'
The type used to register MyProxy Catalog Services on ServiceDiscovery
Type: string; Default value: 'MyProxy'
The type used to register FileTransfer Services on ServiceDiscovery
Type: string; Default value: 'org.glite.FileTransfer'
The type used to register FilePlacement Services on ServiceDiscovery
Type: string; Default value: 'org.glite.FilePlacement'
The name of the SRM Service Property that provides the mount point to be used
Type: string; Default value: 'SEMountPoint'
Enable caching of ServiceDiscovery information
Type: boolean; Default value: 'true'
<No configuration parameters>
Represents the mmodule that provide a client to the MyProxy Server for retrieving proxy certificates to be used for the File Transfers
libglite_data_transfer_agent_myproxy.so
The host name of the MyProxy Server. If that parameter is not set or is empty, the Myproxy Server is looked up using the Service Discovery and then, if not found, the myproxy default will apply (MYPROXY_SERVER environment variable)
Type: string; Default value: ''
The port of the MyProxy Server. If that parameter is not set or is 0, the myproxy default will applies
Type: integer; Default value: '0'
The lifetime in seconds of the proxy certificates that will be created
Type: integer; Default value: '86400'
The location where the certificates retrieved from the MyProxy Service will be stored. That location must already exist
Type: string; Default value: '/tmp'
The minimum validity time (in seconds) an already existent certificate should have before submitting a new job. In case the certificate couldn't satisfy that requirement, a new certificate will be retrieved from the MyProxy Service
Type: integer; Default value: '3600'
<No configuration parameters>
Represents the library that provides the logic for the File and Job State transitions
libglite_data_transfer_agent_fsm.so
When this parameter is set to true, in case of consecutive failures, a transfer will be moved to the "Hold" state, waiting for manual intervention, otherwise it will go in "Failed"
Type: boolean; Default value: 'true'
<No configuration parameters>
This module provides a scheduler class that is able to periodically execute FTA Actions
libglite_data_transfer_agent_scheduler.so
<No initialization parameters>
The number of consecutive failures before an Action is considered disabled for <DisableTime> seconds. If that value is set to zero, actions will never be disabled and the parameter <DisableTime> is ignored
Type: integer; Default value: '0'
The number of seconds an action stays disabled
Type: integer; Default value: '300'
Specify the time interval, in seconds, to periodically check if the DAO context is valid. If 0 is specified,the context is checked on every iteration
Type: integer; Default value: '60'
Specify the timeout, in seconds, that a scheduler has to wait for the stopping its thread gracefully. If the timeout elapsed a signal in sent in order to try to abort the running action
Type: integer; Default value: '100'
Catalog Client: Client for retrieving Replica Information from a Catalog Service. In case the no catalog interaction is foreseen (like for the FTS deployment model), this component can be removed from the configuration file. This module will be loaded at run-time. Currently, the supported plugins are:
This module represents the module that should be used to connect to the GLite Fireman Catalog in order to resolve logical file names and register new replicas
libglite_data_transfer_agent_catalog_fireman.so
The type used to register a Fireman Catalog Services in ServiceDiscovery. If this parameter is set, the same value will be assigned to the Global and Local Catalog Service Types and the related Initialization Parameters are ignored.
Type: string; Default value: 'org.glite.FiremanCatalog'
The type used to register a Global Fireman Catalog Services in ServiceDiscovery. This parameter is taken into account only if "Fireman_ServiceType" is not set
Type: string; Default value: 'org.glite.FiremanCatalog'
The type used to register a Local Fireman Catalog Services in ServiceDiscovery. This parameter is taken into account only if "Fireman_ServiceType" is not set
Type: string; Default value: 'org.glite.FiremanCatalog'
<No configuration parameters>
File Transfer Service Connector: the configuration file for the GLite Transfer Agent should specify one connector for contacting the Transfer Service. This module will be loaded at run-time.
Represents the connector to use the URLCopy as Transfer Service
libglite_data_transfer_agent_ts_urlcopy.so
The type of transfer that should be performed. This value can be either "urlcopy" or "srmcopy": In the first case, the TransferService would perform the SRM interaction and start a GridFTP transfer, in the latter the TransferService would delegate the transfer to the SRM by an SRMCopy call
Type: string; Default value: 'urlcopy'
The maximum number of transfer request that the Transfer Service can process simultaneously
Type: integer; Default value: '50'
The maximum number of parallel streams that could be used during the transfer. A transfer is performed with the number of streams specified in the channel table, if lesser than "Streams", otherwise this threshold would be used. In any case the value can be overwritten by a job using the job's parameter "-p". Currently, this value has no effect if the "TransferType" parameter is set to "srmcopy"
Type: integer; Default value: '10'
The TCP Block Size that should be used during the transfer.If set to 0, the default is used This parameter can be overwritten by a job using the job's parameter "-tcpbs". Currently, this value has no effect if the "TransferType" parameter is set to "srmcopy"
Type: integer; Default value: '0'
The timeout value (in seconds) that should be used to detect that a transfer is hanging.0 means no timeout.In case the specified value is -1, the glite-url-copy default will apply. Please note that in case of SrmCopy bulk requests the global transfer timeout is computed by multiplying this value for the size of the request.If this property is not set, it will assume 600 in case of UrlCopy transfer type and 0 in case of SrmCopy transfer type
Type: integer; Default value: '600'
The timeout value (in seconds) that should be used for the SOAP calls to the SRM. This timeout is used both for send and receiving.0 means no timeout. In case the specified value is -1, the glite-url-copy default will apply.
Type: integer; Default value: '-1'
The timeout value (in seconds) that should be used for an SRM Put request. 0 means no timeout.In case the specified value is -1, the glite-url-copy default will apply. This value is ignored if the "TransferType" parameter is different from "urlcopy"
Type: integer; Default value: '60'
The timeout value (in seconds) that should be used for an SRM Get request. 0 means no timeout. In case the specified value is -1, the glite-url-copy default will apply. This value if ignored is the "TransferType" parameter is different from "urlcopy"
Type: integer; Default value: '60'
The timeout value (in seconds) that should be used for trying to set the SRM status of the Destination File to Done.0 means no timeout.In case the specified value is -1, the glite-url-copy default will apply. This value is ignored if the "TransferType" parameter is different from "urlcopy"
Type: integer; Default value: '60'
The timeout value (in seconds) that should be used for trying to set the SRM status of the Source File to Done.0 means no timeout.In case the specified value is -1, the glite-url-copy default will apply. This value is ignored if the "TransferType" parameter is different from "urlcopy"
Type: integer; Default value: '60'
The timeout value (in seconds) between two Transfer Markers that should be used to detect that a transfer is hanging.0 means no timeout.In case the specified value is -1, the glite-url-copy default will apply. This value is ignored if the "TransferType" parameter is different from "urlcopy"
Type: integer; Default value: '120'
The timeout value (in seconds) that should be used for an SRM Copy request. 0 means no timeout.In case the specified value is -1, the glite-url-copy default will apply. This value is ignored if the "TransferType" parameter is different from "srmcopy"
Type: integer; Default value: '120'
The time interval (in seconds) that should be used in order to abort an srm copy call: when the SRM can't be contacted for the time specified by that parameter, the transfer will be aborted. 0 means no timeout. This value is ignored if the "TransferType" parameter is different from "srmcopy"
Type: integer; Default value: '600'
The maximum size for a bulk SrmCopy request. This value is ignored if the "TransferType" parameter is different from "srmcopy"
Type: integer; Default value: '100'
The direction of the srm copy transfer. Can assume the following values: "pull" (the transfer is driven by the destination SRM), "push" (the transfer is driven by the source SRM), "default" (defualt value of glite-urlcopy, usually pull). This value is ignored if the "TransferType" parameter is different from "srmcopy"
Type: string; Default value: 'default'
The Log Level for the Glite URL Copy Transfer. Allowed values are: DEBUG, INFO, WARN, and ERROR
Type: string; Default value: 'DEBUG'
Represents the conncetor that should be used to contact Stork as Transfer Service
libglite_data_transfer_agent_ts_stork.so
The name of the host where the Stork Server is running
Type: string; Default value: 'localhost'
the name of the CredD credential to be passed to Stork
Type: string; Default value: ''
The maximum number of transfers Stork can process simultaneously
Type: integer; Default value: '1000'
The type of proxy that should be used to contact Stork. This param could assume the following values: - Api: Use Stork C API (Not yet implemented) - Exec: Use Stork Command Line Interface, spawining a process for each command and piping the result
Type: string; Default value: 'Exec'
The location where Stork Command Line tools are installed. This parameter is required only if the <Type> parameter is set to "Exec"
Type: string; Default value: '/opt/stork/bin'
<No configuration parameters>
Data Access Object Connector: the configuration file for the GLite Transfer Agent should specify one connector for contacting the Queue. This module will be loaded at run-time.
Represents the module to Access Data (DAO) using MySQL as Data Source
libglite_data_transfer_agent_dao_mysql.so
The name of the DB Server where mySQL is installed
Type: string; Default value: 'localhost'
The port of the mySQL DB Server. 0 means the mySQL default
Type: integer; Default value: '0'
the name of the Database holding the queue
Type: string; Default value: 'transfer'
the name of the user that should be used to connect to the DB
Type: string; Default value: ''
the password of the user that should be used to connect to the DB
Type: string; Default value: ''
The name of the socket to be used to connect to the DB Server in case <HostName> is "localhost". If no value is specified, the mysql default is used
Type: string; Default value: ''
Enable the VO View DAO Factory
Type: string; Default value: 'false'
Enable the Channel View DAO Factory
Type: string; Default value: 'true'
<No configuration parameters>
Represents the module to Access Data (DAO) using MySQL as Data Source
libglite_data_transfer_agent_dao_mysql.so
The name of the DB Server where mySQL is installed
Type: string; Default value: 'localhost'
The port of the mySQL DB Server. 0 means the mySQL default
Type: integer; Default value: '0'
the name of the Database holding the queue
Type: string; Default value: 'transfer'
the name of the user that should be used to connect to the DB
Type: string; Default value: ''
the password of the user that should be used to connect to the DB
Type: string; Default value: ''
The name of the socket to be used to connect to the DB Server in case <HostName> is "localhost". If no value is specified, the mysql default is used
Type: string; Default value: ''
Enable the VO View DAO Factory
Type: string; Default value: 'true'
Enable the Channel View DAO Factory
Type: string; Default value: 'false'
<No configuration parameters>
Represents the module to Access Data (DAO) using Oracle as Data Source
libglite_data_transfer_agent_dao_oracle.so
The Oracle ConnectString identifying the DB
Type: string; Default value: 'localhost'
the name of the user that should be used to connect to the DB
Type: string; Default value: ''
the password of the user that should be used to connect to the DB
Type: string; Default value: ''
The Size of the statement Cache.0 means that the caching is disabled. Note: since some memory leaks has been observed, it better for the moment to keep the cache disabled
Type: integer; Default value: '0'
Enable the VO View DAO Factory
Type: string; Default value: 'false'
Enable the Channel View DAO Factory
Type: string; Default value: 'true'
Specify if the application is using Threads or not. Allowed value are: none - No threads; mutexed - Thread safe mode, mutexed internally by OCCI; unmutexed - Thread safe mode, client is responsible for mutexing.
Type: string; Default value: 'none'
<No configuration parameters>
Represents the module to Access Data (DAO) using Oracle as Data Source
libglite_data_transfer_agent_dao_oracle.so
The Oracle ConnectString identifying the DB
Type: string; Default value: 'localhost'
the name of the user that should be used to connect to the DB
Type: string; Default value: ''
the password of the user that should be used to connect to the DB
Type: string; Default value: ''
The Size of the statement Cache.0 means that the caching is disabled. Note: since some memory leaks has been observed, it better for the moment to keep the cache disabled
Type: integer; Default value: '0'
Enable the VO View DAO Factory
Type: string; Default value: 'true'
Enable the Channel View DAO Factory
Type: string; Default value: 'false'
Specify if the application is using Threads or not. Allowed value are: none - No threads; mutexed - Thread safe mode, mutexed internally by OCCI; unmutexed - Thread safe mode, client is responsible for mutexing.
Type: string; Default value: 'none'
<No configuration parameters>
Channel Agent: this section will report the Channel Agent-specific modules
Represents the module that provides the Channel Agent Actions. These actions are: <Fetch> : Submit job through the channel; <CheckState> : Check Active Jobs' State; <CancelActive>: Cancel Active Transfers;
libglite_data_transfer_agent_channel_actions.so
The strategy to be used to change the format of the SURLs. Allowed values are: compact: SURLs would be converted to the format srm://<host>/<sfn> compact-with-port: SURLs would be converted to the format srm://<host>:<port>/<sfn> fully-qualified: SURLs would be converted to the format srm://<host>:<port>/<path>?SFN=<sfn> where <path> is usually retrieved from the SRM endpoint and it's usually <srm/managerv1> disabled: no convertion is performed. The SURLs are processed as submitted by the users
Type: string; Default value: 'compact'
Enable Client Credential Delagation. If this value is set to true, transfers would be executed using client delegated credentials, retrieved from MyProxy, otherwise the agent would use its Service credentials.
Type: boolean; Default value: 'true'
This module represent the agent that should run the actions concerning a Channel. Actions are provided by different libraries that should be loaded into the the agent process using GLite Data Config Service. The Channel Agent requires to run three different kind of action: <Fetch> : Transfer files through the channel using the configured TransferService; <Check> : Check the status of pending TransferService requests; <Cancel>: Cancel a pending transfer TransferService request; This configuration assign a default value for all of these types, however it would be possible to provide different action types and use them, just provide the type of the action on the related <action_type>_Type initialization parameter. By default, all the action are scheduled to be executed periodically with an interval provided by the "DefaultInterval" configuration parameter. In order to modify the sceduling interval based on the action type, just provide a <action_type>_Interval configuration parameter with the value you want to assign. In addition to the actions described above, the Channel Agent also execute other two internal actions: <Heartbeat> : Periodically refresh the status of agent in teh Database <CleanSDCache>: Clean the ServiceDiscovery Cache For what concern the scheduling interval of these actions, the values are specified by the parameters <Heartbeat_Interval> and <CleanSDCache_Interval>
libglite_data_transfer_channel_agent.so
The name of the Channel which the agent is responsible for
Type: string; Default value: ''
The contact information of the Administrator responsible for that agent
Type: string; Default value: ''
This parameter specify how to interpret the VO Share values associated to a channel. It should be one the following values: * normalized: the share is the value of the channel voshare property for the given VO, normalized to the sum of all the share for all the VOs in the same channel. This option could be used when channel administrators wantto guarantee slots for certain VOs, in order to implement some sort of QoS, accepting to eventually penalize the total throughput (transfer slots would be reserved to a VO even if that VO has no job to process) * absolute: the share is the value on the channel voshare property expressed as a percentage. No normalization is performed, that means that the sum of all the shares on the same channel can exceed 100%. This option could be used when channel administrators want to balance the share between the VOs, without allowing that a single VO fully allocate a channel but minimizing the risk to allocate slots to VOs that don't have any job to process. This option implies some tuning on the VO share values based on the experience, but it would allow to have a compromise between throughput and QoS * normalized-on-active: the share is the value of the channel voshare property for the given VO, normalized to the sum of all the share for all the VOs in the same channel that has at least one job that can be processed by the Channel Agent (job state should be Active, Pending or Canceling). This option is the default one and could be used when the channel administrators want to optimize the throughput of the channel (the channel can be fully allocated even by one VO), but with a lower QoS
Type: string; Default value: 'normalized-on-active'
The name of the action that provides the logic to fetch transfers
Type: string; Default value: 'glite:Fetch'
The name of the action that provides the logic to check the state of running transfers
Type: string; Default value: 'glite:CheckState'
The name of the action that provides the logic to cancel active transfers
Type: string; Default value: 'glite:CancelActive'
The default interval, in secons, to be used for scheduling the Channel actions
Type: integer; Default value: '3'
The interval, in seconds, to be used for scheduling the Heartbeat action. The purpose of this action is to periodically update the lastActive timestamp in the t_agent table, in order to demonstrate that agent is up and running. If this value is 0, the Heartbeat action will be disabled
Type: integer; Default value: '60'
The interval, in seconds, to be used for cleading the ServiceDiscovery cache in order to evaluate eventual changes in the information system. If the SD Cache is disabled, this action doesn't do anything
Type: integer; Default value: '3600'
The interval, in secons, to be used for scheduling the Fetch action. If this parameter is not set or is empty, the Fetch action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Fetch action will be disabled (useful only for debugging purposes)
Type: integer; Default value: ''
The interval, in secons, to be used for scheduling the Check State action. If this parameter is not set or is empty, the Check State action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Check action will be disabled (useful only for debugging purposes)
Type: integer; Default value: ''
The interval, in secons, to be used for scheduling the Cancel action. If this parameter is not set or is empty, the Cancel action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Cancel action will be disabled (useful only for debugging purposes)
Type: integer; Default value: ''
VO Agent: this section will report the VO Agent-specific modules
Represents the module that provides the VO Agent Actions. These actions are: <Allocate> : allocate a job into a channel based on the source and destination ; <CancelPending>: revoke pending job in Canceling state ; <BasicRetry< : reschedule transfers that are in waiting state;
libglite_data_transfer_agent_vo_actions.so
The strategy to be used to change the format of the SURLs. Allowed values are: compact: SURLs would be converted to the format srm://<host>/<sfn> compact-with-port: SURLs would be converted to the format srm://<host>:<port>/<sfn> fully-qualified: SURLs would be converted to the format srm://<host>:<port>/<path>?SFN=<sfn> where <path> is usually retrieved from the SRM endpoint and it's usually <srm/managerv1> disabled: no convertion is performed. The SURLs are processed as submitted by the users
Type: string; Default value: 'compact'
Enable Client Credential Delagation. If this value is set to true, vo agent actions would be executed using client delegated credentials, retrieved from MyProxy, otherwise the agent would use its Service credentials. Please note that this option is introduced for testing purposes and therefore is not supported in production
Type: boolean; Default value: 'true'
The maximum number of failures before moving the file to Hold (or Failed, depending on "Transfer Agent FSM" EnableHold advanced parameter)
Type: integer; Default value: '3'
The delay in second before a Waiting transfer is resubmitted
Type: integer; Default value: '600'
Enable Unknown Source Site. If this value is set to true, during the allocation phase, in case the source SE is not listed on the Information System, the job would be assigned to the fake "UNKNOWN" site; otherwise the job would fail. This option is useful in order to transfer files from an SE that is on a different Grid
Type: boolean; Default value: 'false'
Enable Unknown Destination Site. If this value is set to true, during the allocation phase, in case the destination SE is not listed on the Information System, the job would be assigned to the fake "UNKNOWN" site; otherwise the job would fail. This option is useful in order to transfer files to an SE that is on a different Grid
Type: boolean; Default value: 'false'
Represents the module that provides the VO FPS Actions. These actions are: <Resolve> : Resolve Logical name into phisical ones; <Register>: Register the new replicas when the transfer is finished;
libglite_data_transfer_agent_vo_fps_actions.so
<No initialization parameters>
<No configuration parameters>
VO FTS Agent:
This module represents the agent that should run the actions concerning a Virtual Organization in order to provide the FTS/FPS functionality. Actions are provided by different libraries that should be loaded into the the agent process using GLite Data Config Service. The VO Agent configured in FTS mode requires to run three different kind of actions: <Allocate> : Allocate transfer job to a channel; <Retry> : Try to resubmit failed transfers; <Cancel> : Cancel a pending file (not yet processed by a channel); In configured inb FPS mode, the VO Agent requires to run two additional actions: <Resolve> : Resolve source and destination physical file names starting from; the logical name <Register> : Register the new replica when the transfer is completed; This module provides a default value for all of these types, however it would be possible to provide different action types and use them, by specifying the type of the action on the related <action_type>_Type initialization parameter. By default, all the actions (except the Retry which) are scheduled to be executed periodically with an interval provided by the "DefaultInterval" configuration parameter. The interval for the Retry Action is specified by the <Retry_Interval> parameter. In order to modify the scheduling interval based on the action type, you can provide a <action_type>_Interval configuration parameter with the value you want to assign. In addition to the actions described above, the VO Agent also execute other two internal actions: <Heartbeat> : Periodically refresh the status of agent in teh Database <CleanSDCache>: Clean the ServiceDiscovery Cache For what concern the scheduling interval of these actions, the values are specified by the parameters <Heartbeat_Interval> and <CleanSDCache_Interval>
libglite_data_transfer_vo_agent.so
The name of the VO which the agent belong to
Type: string; Default value: ''
The contact information of the Administrator responsible for that agent
Type: string; Default value: ''
If that parameter is set to true, the transfers will be performed using the related Channel Agent service credentails, otherwise they will use the client proxy certificate downloaded from MyProxy
Type: boolean; Default value: 'false'
The deployment type of the agent. It could be "fts" in case the agent should act as File Transfer Service or "fps" in case it should act as File Placement Service
Type: string; Default value: 'fts'
The name of the action type that provides the logic to allocate a transfer job to a channel
Type: string; Default value: 'glite:Allocate'
The name of the action type that provides the logic to retry failed transfers
Type: string; Default value: 'glite:BasicRetry'
The name of the action type that provides the logic to cancel pending (i.e. not yet processed by a channel) file transfers
Type: string; Default value: 'glite:CancelPending'
The default interval, in seconds, for scheduling the VO actions
Type: integer; Default value: '3'
The interval, in seconds, to be used for scheduling the Heartbeat action. The purpose of this action is to periodically update the lastActive timestamp in the t_agent table, in order to demonstrate that agent is up and running. If this value is 0, the Heartbeat action will be disabled
Type: integer; Default value: '60'
The interval, in seconds, to be used for cleading the ServiceDiscovery cache in order to evaluate eventual changes in the information system. If the SD Cache is disabled, this action doesn't do anything
Type: integer; Default value: '3600'
The interval, in seconds, to be used for scheduling the Allocate action. If this parameter is not set or is empty, the Allocate action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Allocate action will be disabled (useful only for debugging purposes)
Type: integer; Default value: ''
The interval, in seconds, to be used for scheduling the Retry action. If this parameter is not set or is empty, the Retry action will be scheduled every 60 seconds. If this value is 0, the Retry action will be disabled (useful only for debugging purposes)
Type: integer; Default value: '60'
The interval, in seconds, to be used for scheduling the Cancel action. If this parameter is not set or is empty, the Cancel action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Cancel action will be disabled (useful only for debugging purposes)
Type: integer; Default value: ''
VO FPS Agent:
This module represents the agent that should run the actions concerning a Virtual Organization in order to provide the FTS/FPS functionality. Actions are provided by different libraries that should be loaded into the the agent process using GLite Data Config Service. The VO Agent configured in FTS mode requires to run three different kind of actions: <Allocate> : Allocate transfer job to a channel; <Retry> : Try to resubmit failed transfers; <Cancel> : Cancel a pending file (not yet processed by a channel); In configured inb FPS mode, the VO Agent requires to run two additional actions: <Resolve> : Resolve source and destination physical file names starting from; the logical name <Register> : Register the new replica when the transfer is completed; This module provides a default value for all of these types, however it would be possible to provide different action types and use them, by specifying the type of the action on the related <action_type>_Type initialization parameter. By default, all the actions (except the Retry which) are scheduled to be executed periodically with an interval provided by the "DefaultInterval" configuration parameter. The interval for the Retry Action is specified by the <Retry_Interval> parameter. In order to modify the scheduling interval based on the action type, you can provide a <action_type>_Interval configuration parameter with the value you want to assign. In addition to the actions described above, the VO Agent also execute other two internal actions: <Heartbeat> : Periodically refresh the status of agent in teh Database <CleanSDCache>: Clean the ServiceDiscovery Cache For what concern the scheduling interval of these actions, the values are specified by the parameters <Heartbeat_Interval> and <CleanSDCache_Interval>
libglite_data_transfer_vo_agent.so
The name of the VO which the agent belong to
Type: string; Default value: ''
The contact information of the Administrator responsible for that agent
Type: string; Default value: ''
If that parameter is set to true, the transfers will be performed using the related Channel Agent service credentails, otherwise they will use the client proxy certificate downloaded from MyProxy
Type: boolean; Default value: 'true'
The deployment type of the agent. It could be "fts" in case the agent should act as File Transfer Service or "fps" in case it should act as File Placement Service
Type: string; Default value: 'fps'
The name of the action type that provides the logic to allocate a transfer job to a channel
Type: string; Default value: 'glite:Allocate'
The name of the action type that provides the logic to retry failed transfers
Type: string; Default value: 'glite:BasicRetry'
The name of the action type that provides the logic to cancel pending (i.e. not yet processed by a channel) file transfers
Type: string; Default value: 'glite:CancelPending'
The name of the action type that provides the logic to resolve source and destination physical file names starting from a logical name (LFN or GUID) and the source and destination sites. This parameters is used only in case the <DeploymentType> is set to "fps"
Type: string; Default value: 'glite:Resolve'
The name of the action type that provides the logic to register the new replicas into a Catalog Service when the file transfer are completed. This parameters is used only in case the <DeploymentType> is set to "fps"
Type: string; Default value: 'glite:Resolve'
The default interval, in seconds, for scheduling the VO actions
Type: integer; Default value: '3'
The interval, in seconds, to be used for scheduling the Heartbeat action. The purpose of this action is to periodically update the lastActive timestamp in the t_agent table, in order to demonstrate that agent is up and running. If this value is 0, the Heartbeat action will be disabled
Type: integer; Default value: '60'
The interval, in seconds, to be used for cleading the ServiceDiscovery cache in order to evaluate eventual changes in the information system. If the SD Cache is disabled, this action doesn't do anything
Type: integer; Default value: '3600'
The interval, in seconds, to be used for scheduling the Allocate action. If this parameter is not set or is empty, the Allocate action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Allocate action will be disabled (useful only for debugging purposes)
Type: integer; Default value: ''
The interval, in seconds, to be used for scheduling the Retry action. If this parameter is not set or is empty, the Retry action will be scheduled every 60 seconds. If this value is 0, the Retry action will be disabled (useful only for debugging purposes)
Type: integer; Default value: '60'
The interval, in seconds, to be used for scheduling the Cancel action. If this parameter is not set or is empty, the Cancel action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Cancel action will be disabled (useful only for debugging purposes)
Type: integer; Default value: ''
The interval, in seconds, to be used for scheduling the Name Resolution action. If this parameter is not set or is empty, the Name Resolution action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Name Resolution action will be disabled (useful only for debugging purposes). This parameters is used only in case the <DeploymentType> is set to "fps"
Type: integer; Default value: ''
The interval, in seconds, to be used for scheduling the Replica Registration action. If this parameter is not set or is empty, the Replica Registration action will be scheduled using the value provided by the "DefaultInterval" parameter. If this value is 0, the Replica Registration action will be disabled (useful only for debugging purposes). This parameters is used only in case the <DeploymentType> is set to "fps"
Type: integer; Default value: ''
This section contains some example of the GLite Data Transfer Channel and VO Agent configuration files. Those values should be changed according to the environment where the GLite Data Transfer Channel Agent is installed. Fireman, UrlCopy and Oracle connectors are used.
<?xml version="1.0" encoding="UTF8"?> <service> <components> <component name="transfer-agent-sd"> <lib>libglite_data_transfer_agent_sd.so</lib> </component> <component name="transfer-agent-myproxy"> <lib>libglite_data_transfer_agent_myproxy.so</lib> <init> <param name="Server"> <value>lxb1414.cern.ch</value> </param> </init> </component> <component name="transfer-agent-fsm"> <lib>libglite_data_transfer_agent_fsm.so</lib> </component> <component name="transfer-agent-dao-oracle"> <lib>libglite_data_transfer_agent_dao_oracle.so</lib> <init> <param name="ConnectString"> <value>@DBNAME</value> </param> <param name="User"> <value>@DBUSER</value> </param> <param name="Password"> <value>@DBPASSWORD</value> </param> <param name="VOView"> <value>false</value> </param> <param name="ChannelView"> <value>true</value> </param> </init> </component> <component name="transfer-agent-ts-urlcopy"> <lib>libglite_data_transfer_agent_ts_urlcopy.so</lib> <dependencies> <lib>libglite_data_transfer_url_copy.so</lib> </dependencies> <init> <param name="MaxTransfers"> <value>3</value> </param> </init> <config> <param name="LogLevel"> <value>DEBUG</value> </param> </config> </component> <component name="transfer-agent-scheduler"> <lib>libglite_data_transfer_agent_scheduler.so</lib> </component> <component name="transfer-agent-channel-actions"> <lib>libglite_data_transfer_agent_channel_actions.so</lib> </component> <component name="transfer-channel-agent"> <lib>libglite_data_transfer_channel_agent.so</lib> <init> <param name="Name"> <value>channel_1</value> </param> <param name="DefaultInterval"> <value>3</value> </param> </init> </component> </components> </service>
<?xml version="1.0" encoding="UTF8"?> <service> <components> <component name="transfer-agent-sd"> <lib>libglite_data_transfer_agent_sd.so</lib> </component> <component name="transfer-agent-myproxy"> <lib>libglite_data_transfer_agent_myproxy.so</lib> <init> <param name="Server"> <value>lxb1414.cern.ch</value> </param> </init> </component> <component name="transfer-agent-fsm"> <lib>libglite_data_transfer_agent_fsm.so</lib> </component> <component name="transfer-agent-dao-oracle"> <lib>libglite_data_transfer_agent_dao_oracle.so</lib> <init> <param name="ConnectString"> <value>@DBNAME</value> </param> <param name="User"> <value>@DBUSER</value> </param> <param name="Password"> <value>@DBPASSWORD</value> </param> <param name="VOView"> <value>true</value> </param> <param name="ChannelView"> <value>false</value> </param> </init> </component> <component name="transfer-agent-scheduler"> <lib>libglite_data_transfer_agent_scheduler.so</lib> </component> <component name="transfer-agent-vo-actions"> <lib>libglite_data_transfer_agent_vo_actions.so</lib> </component> <component name="transfer-vo-agent"> <lib>libglite_data_transfer_vo_agent.so</lib> <init> <param name="Name"> <value>EGEE</value> </param> <param name="DeploymentType"> <value>fts</value> <param name="DefaultInterval"> <value>3</value> </param> </init> </component> </components> </service>
<?xml version="1.0" encoding="UTF8"?> <service> <components> <component name="transfer-agent-sd"> <lib>libglite_data_transfer_agent_sd.so</lib> </component> <component name="transfer-agent-myproxy"> <lib>libglite_data_transfer_agent_myproxy.so</lib> <init> <param name="Server"> <value>lxb1414.cern.ch</value> </param> </init> </component> <component name="transfer-agent-catalog-fireman"> <lib>libglite_data_transfer_agent_catalog_fireman.so</lib> </component> <component name="transfer-agent-fsm"> <lib>libglite_data_transfer_agent_fsm.so</lib> </component> <component name="transfer-agent-dao-oracle"> <lib>libglite_data_transfer_agent_dao_oracle.so</lib> <init> <param name="ConnectString"> <value>@DBNAME</value> </param> <param name="User"> <value>@DBUSER</value> </param> <param name="Password"> <value>@DBPASSWORD</value> </param> <param name="VOView"> <value>true</value> </param> <param name="ChannelView"> <value>false</value> </param> </init> </component> <component name="transfer-agent-scheduler"> <lib>libglite_data_transfer_agent_scheduler.so</lib> </component> <component name="transfer-agent-vo-actions"> <lib>libglite_data_transfer_agent_vo_actions.so</lib> </component> <component name="transfer-agent-vo-fps-actions"> <lib>libglite_data_transfer_agent_vo_fps_actions.so</lib> </component> <component name="transfer-vo-agent"> <lib>libglite_data_transfer_vo_agent.so</lib> <init> <param name="Name"> <value>EGEE</value> </param> <param name="DeploymentType"> <value>fps</value> <param name="DefaultInterval"> <value>3</value> </param> </init> </component> </components> </service>
An example of a logging configuration file is:
log4j.rootCategory=DEBUG, file log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%m%n log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.fileName=/var/log/glite/glite-transfer-vo-agent-EGEE.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d %-6p %c - %m%n
The agent configuration template file can then be generated by concatenating the differenet transfer-agent-*.config-template.xml files contained into the config folder. This configuration template file can then be used to generate the configuration file as explained in the gLite Data Transfer Agents Install Guide document.
All the VO Agent Actions can be overridden specifying the appropriate action type in the vo-agent configuration. In order to do that, the library providing the action should be loaded inside the process (using the Glite Sevrice Configurator Library) and the related action types shoudl be registered in ActionFactory. However, this approach is quite complex and requires that the actions reimplement most of the logic already provided by the default ones. Due to that reason, from version 2.2.0 FileTransferAgent starts adopting the Strategy Pattern, decoupling the logic of the action (that a VO may want to customize) from the common tasks (get instances from the DB, update changes, etc...). This new approach, combined with the possibility to call python scripts within the VO Agent process, would allow then to specify these strategy in a easier way. At the moment, the only action startegy that can be overridden is the Retry, but new ones will be added in future versions.
In order to use this feature, the structure of the VO Agent shold be modified as illustrated below:
<service name="transfer-vo-agent-fts"> <components> <component name="transfer-agent-sd"> <!-- ServiceDiscovery client Configuration--> </component> <component name="transfer-agent-myproxy"> <!-- MyProxy client Configuration--> </component> <component name="transfer-agent-python"> <!-- FTS Python module --> </component> <component name="transfer-agent-fsm"> <!-- FSM Configuration--> </component> <component name="transfer-agent-dao-****"> <!-- Queue (Data Access Object) Connector --> </component> <component name="transfer-agent-scheduler"> <!-- Scheduler Configuration--> </component> <component name="transfer-agent-vo-actions"> <!-- VO Actions Configuration --> </component> <component name="transfer-agent-vo-actions-python"> <!-- VO Python Actions Configuration --> </component> <component name="transfer-vo-agent"> <!-- VO Agent Configuration --> </component> </components> </service>
The configuration properties of these new modules are:
The purpose of this module is to load and initialize the Python interpreter in order to run python script inside the FileTransferAgent process. The module also initialize some wrapper modules that can be used to pass object to the scripts
libglite_data_transfer_agent_python.so
The location where the python interpret look for modules and packages. The value can be a list of directory path separated by ':' (in a unix-like sistem). If this property is set, the module would add the value to the PYTHONPATh environment variable
Type: string; Default value: ''
<No configuration parameters>
Represents the module that overrides some VO Actions allowing to specify the strategy as a python script These actions are, at the moment: <Retry>: Retry failed transfers or move them to hold;
libglite_data_transfer_agent_vo_actions_python.so
The name of the python module that contains the function that would be evaluated in order to choose if a file has to be retried, faild or let it in Waiting state. If you want to configure the VO agent in order to use the retry action that call this module, you have to set the property "transfer-vo-agent.Retry_Type" to "glite:PythonRetry"
Type: string; Default value: ''
This parameter represent an initialization string that will be passed to the python module that contains the retry logic, specified by the "RetryModule" parameter. The format of that string is module dependent
Type: string; Default value: ''
<No configuration parameters>
Please note that in order to be able to call the strategy defined in the python script you have to, you have to set the expert property "transfer-vo-agent.Retry_Type" to "glite:PythonRetry"
In case of the VO Agent configured to handle transfers starting from the logical name is exactly the same, you need just to take as reference the VO Agent FPS configuration.
The current release of transfer-agents provides two python retry strategies, located in GLITE_LOCATION/lib/python/glite/fts/strategies:
basic_retry.py: the python implementation of the default BasicRetry Strategy. No configuration parameters are exposed this script
smarter_retry.py a more advanced retry logic that check for the last transfer failures: fail immediately if source files doesn't exist; wait more if a timeout on get is received;delete destination file if a "file exists" error follows a "transfer error". This script accepts the following configuration parameters, that you could pass through the "transfer-agent-vo-actions-python.RetryParams":
MaxFailures : The maximum number of failures allowed for a file (Default:100)
MaxFileExistsFailures : The maximum number of consecutive "File Exists" failures (Default: 3)
HoldEnabled : If this value is set to true, when a file fails,it will be moved to HOLD. If this value is set to false, the file status will be FAILED(Default: true)
OverwriteFailedFiles : When the strategy detect that a "file exists" failure is due by a incomplete cleanup of a previous failed transfer, delete the destination file before performing the new attempt (Default: true)
OverwriteExistingFiles : In case of "file exists" failure, always delete the destination before retrying the transfer (Default: false)
DefaultRetryDelay : The default interval (in seconds) before retyring a transfer (Default:600)
RetryDelayForTimeoutOnGet : The interval (in seconds) before retyring a transfer that failed with a "Timeout on Get" error (Default:1800)
RetryDelayForDestFileExists : The interval (in seconds) before retyring a transfer that failed at the destination (Default:600)
RetryDelayForDestFileExists : The interval (in seconds) before retyring a transfer that failed at the destination (Default:600)
SrmServiceType : The service type that identify an SRM into the information systrem (Default: SRM)
The following section illustrate an example of configuration that use a python script as retry strategy
<?xml version="1.0" encoding="UTF8"?> <service> <components> <component name="transfer-agent-sd"> <lib>libglite_data_transfer_agent_sd.so</lib> </component> <component name="transfer-agent-myproxy"> <lib>libglite_data_transfer_agent_myproxy.so</lib> </component> <component name="transfer-agent-fsm"> <lib>libglite_data_transfer_agent_fsm.so</lib> </component> <component name="transfer-agent-dao-oracle"> <lib>libglite_data_transfer_agent_dao_oracle.so</lib> <init> <param name="ConnectString"> <value>@DBNAME</value> </param> <param name="User"> <value>@DBUSER</value> </param> <param name="Password"> <value>@DBPASSWORD</value> </param> <param name="VOView"> <value>true</value> </param> <param name="ChannelView"> <value>false</value> </param> </init> </component> <component name="transfer-agent-scheduler"> <lib>libglite_data_transfer_agent_scheduler.so</lib> </component> <component name="transfer-agent-python"> <lib>libglite_data_transfer_agent_python.so</lib> <init> <param name="PythonPath"> <value>/opt/glite/lib/python2.2/site-packages: /opt/glite/lib/python/glite/fts/strategies/</value> </param> </init> </component> <component name="transfer-agent-vo-actions"> <lib>libglite_data_transfer_agent_vo_actions.so</lib> </component> <component name="transfer-agent-vo-actions-python"> <lib>libglite_data_transfer_agent_vo_actions_python.so</lib> <init> <param name="RetryModule"> <value>smarter_retry</value> </param> <param name="RetryParams"> <value> MaxFailures = 10 ; HoldEnabled = true ; OverwriteFailedFiles = true ; OverwriteExistingFiles = false ; DefaultRetryDelay = 60 ; RetryDelayForTimeoutOnGet = 300 ; RetryDelayForDestFileExists = 60 ; </value> </param> </init> </component> <component name="transfer-vo-agent"> <lib>libglite_data_transfer_vo_agent.so</lib> <init> <param name="Name"> <value>EGEE</value> </param> <param name="Retry_Type"> <value>glite:PythonRetry</value> </param> <param name="DeploymentType"> <value>fts</value> </param> </init> </component> </components> </service>