FTS3Placement

class DIRAC.DataManagementSystem.private.FTS3.FTS3Placement.FTS3Placement(csPath=None, ftsHistoryViews=None)

Bases: DIRAC.DataManagementSystem.private.FTSAbstractPlacement.FTSAbstractPlacement

This class manages all the FTS strategies, routes and what not

__init__(csPath=None, ftsHistoryViews=None)

Call the init of the parent, and initialize the list of FTS3 servers

findRoute(sourceSE, targetSE)

Find the appropriate route from point A to B

:param sourceSE : source SE :param targetSE : destination SE

Returns:S_OK(FTSRoute)
finishTransferOnRoute(route)

Declare that one finishes a transfer on a given route. Accounting purpose only

:param route : FTSRoute that is used

getReplicationTree(sourceSEs, targetSEs, size, strategy=None)
For multiple source to multiple destination, find the optimal replication
strategy.

:param sourceSEs : list of source SE :param targetSEs : list of destination SE :param size : size of the File :param strategy : which strategy to use

:returns S_OK(dict) < route name : { dict with key Ancestor, SourceSE, TargetSEtargetSE, Strategy } >

For the time being, we are waiting for FTS3 to provide advisory mechanisms. So we just use simple techniques

isRouteValid(route)
FIXME: until RSS is ready, I check manually the status In FTS3, all routes are valid a priori. If a route was not valid for some reason, then FTS would know it thanks to the blacklist sent by RSS, and would deal with it itself.

:param route : FTSRoute

Returns:S_OK or S_ERROR(reason)
refresh(ftsHistoryViews)

Refresh, whatever that means… recalculate all what you need, fetches the latest conf and what not.

startTransferOnRoute(route)

Declare that one starts a transfer on a given route. Accounting purpose only

:param route : FTSRoute that is used