FTS3DB
Frontend to FTS3 MySQL DB. Written using sqlalchemy
- class DIRAC.DataManagementSystem.DB.FTS3DB.FTS3DB(pool_size=15, url=None, parentLogger=None)
Bases:
object
- class RequestDB
db holding requests
- __init__(pool_size=15, url=None, parentLogger=None)
c’tor
- Parameters:
self – self reference
pool_size – size of the connection pool to the DB
- cancelNonExistingJob(operationID, ftsGUID)
Cancel an FTS3Job with the associated FTS3Files. This is to be used when the job is not found on the server when monitoring.
The status of the job and files will be ‘Canceled’. The error is specifying that the job is not found. The ftsGUID of the file is released as to be able to pick it up again
- Parameters:
operationID – guess
ftsGUID – guess
- Returns:
S_OK() if successful, S_ERROR otherwise
- createTables()
create tables
- deleteFinalOperations(limit=20, deleteDelay=180)
deletes operation in final state that are older than given time
- getActiveJobs(limit=20, lastMonitor=None, jobAssignmentTag='Assigned')
- Get the FTSJobs that are not in a final state, and are not assigned for monitoring
or has its operation being treated
- By assigning the job to the DB:
it cannot be monitored by another agent
the operation to which it belongs cannot be treated
- Parameters:
limit – max number of Jobs to retrieve
lastMonitor – jobs monitored earlier than the given date
jobAssignmentTag – if not None, block the Job for other queries, and use it as a prefix for the value in the operation table
- Returns:
list of FTS3Jobs
- getNonFinishedOperations(limit=20, operationAssignmentTag='Assigned')
Get all the non assigned FTS3Operations that are not yet finished, so either Active or Processed. An operation won’t be picked if it is already assigned, or one of its job is.
- Parameters:
limit – max number of operations to retrieve
operationAssignmentTag – if not None, block the operations for other queries, and use it as a prefix for the value in the operation table
- Returns:
list of Operations
- getOperation(operationID)
read request
This does not set the assignment flag
- Parameters:
operationID – ID of the FTS3Operation
- getOperationsFromRMSOpID(rmsOpID)
Returns the FTS3Operations matching a given RMS OperationID
This does not set the assignment flag
- Parameters:
rmsOpID – ID of the RMS Operation
- kickStuckJobs(limit=20, kickDelay=2)
- finds jobs that have not been updated for more than a given
time but are still assigned and resets the assignment
- kickStuckOperations(limit=20, kickDelay=2)
- finds operations that have not been updated for more than a given
time but are still assigned and resets the assignment
- persistOperation(operation)
- update or insert request into db
Also release the assignment tag
- Parameters:
operation – FTS3Operation instance
- updateFileStatus(fileStatusDict, ftsGUID=None)
- Update the file ftsStatus and error
The update is only done if the file is not in a final state (To avoid bringing back to life a file by consuming MQ a posteriori)
TODO: maybe it should query first the status and filter the rows I want to update !
- Parameters:
fileStatusDict – { fileID : { status , error, ftsGUID } }
ftsGUID – If specified, only update the rows where the ftsGUID matches this value. This avoids two jobs handling the same file one after another to step on each other foot. Note that for the moment it is an optional parameter, but it may turn mandatory soon.
- updateJobStatus(jobStatusDict)
- Update the job Status and error
The update is only done if the job is not in a final state The assignment flag is released
- Parameters:
jobStatusDict – { jobID : { status , error, completeness } }