XrdCl::XCpCtx Class Reference

#include <XrdClXCpCtx.hh>

Collaboration diagram for XrdCl::XCpCtx:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 XCpCtx (const std::vector< std::string > &urls, uint64_t blockSize, uint8_t parallelSrc, uint64_t chunkSize, uint64_t parallelChunks, int64_t fileSize)
void Delete ()
XCpCtxSelf ()
bool GetNextUrl (std::string &url)
XCpSrcWeakestLink (XCpSrc *exclude)
void PutChunk (ChunkInfo *chunk)
std::pair< uint64_t, uint64_t > GetBlock ()
void SetFileSize (int64_t size)
int64_t GetSize ()
XRootDStatus Initialize ()
XRootDStatus GetChunk (XrdCl::ChunkInfo &ci)
void RemoveSrc (XCpSrc *src)
void NotifyIdleSrc ()
bool AllDone ()
void NotifyInitExpectant ()

Private Member Functions

size_t GetRunning ()
virtual ~XCpCtx ()

Private Attributes

std::queue< std::string > pUrls
uint64_t pBlockSize
uint8_t pParallelSrc
uint32_t pChunkSize
uint8_t pParallelChunks
uint64_t pOffset
int64_t pFileSize
XrdSysCondVar pFileSizeCV
std::list< XCpSrc * > pSources
SyncQueue< ChunkInfo * > pSink
uint64_t pDataReceived
bool pDone
XrdSysCondVar pDoneCV
XrdSysMutex pMtx
size_t pRefCount

Constructor & Destructor Documentation

XrdCl::XCpCtx::XCpCtx ( const std::vector< std::string > &  urls,
uint64_t  blockSize,
uint8_t  parallelSrc,
uint64_t  chunkSize,
uint64_t  parallelChunks,
int64_t  fileSize 
)

Constructor

Parameters:
urls : list of replica urls
blockSize : the default block size
parallelSrc : maximum number of parallel sources
chunkSize : the default chunk size
parallelChunks : the default number of parallel chunks per source
fileSize : the file size if specified in the metalink file (-1 indicates that the file size is not known and a stat should be done)
virtual XrdCl::XCpCtx::~XCpCtx (  )  [private, virtual]

Destructor (private).

Use Delelte to destroy the object.


Member Function Documentation

bool XrdCl::XCpCtx::AllDone (  ) 

Returns true if all chunks have been transfered, otherwise blocks until NotifyIdleSrc is called, or a 1 minute timeout occurs.

Returns:
: true is all chunks have been transfered, false otherwise.
void XrdCl::XCpCtx::Delete (  )  [inline]

Deletes the instance if the reference counter reached 0.

References pMtx, pRefCount, and XrdSysMutexHelper::UnLock().

std::pair<uint64_t, uint64_t> XrdCl::XCpCtx::GetBlock (  ) 

Get next block that has to be transfered

Returns:
: pair of offset and block size
XRootDStatus XrdCl::XCpCtx::GetChunk ( XrdCl::ChunkInfo ci  ) 

Gets the next chunk from the sink, if the sink is empty blocks.

Parameters:
ci : the chunk retrieved from sink (output parameter) : stError if we failed to transfer the file, stOK otherwise, with one of the following codes:

  • suDone : the whole file has been transfered, we are done
  • suContinue : a chunk has been written into ci, continue calling GetChunk in order to retrieve remaining chunks
  • suRetry : a chunk has not been written into ci, try again.
bool XrdCl::XCpCtx::GetNextUrl ( std::string &  url  ) 

Gets the next URL from the list of file replicas

Parameters:
url : the output parameter
Returns:
: true if a url has been written to the url parameter, false otherwise
size_t XrdCl::XCpCtx::GetRunning (  )  [private]

Returns the number of active sources

Returns:
: number of active sources

Referenced by GetSize().

int64_t XrdCl::XCpCtx::GetSize (  )  [inline]

Get file size. The call blocks until the file size is being set using SetFileSize.

References GetRunning(), pFileSize, pFileSizeCV, and XrdSysCondVar::Wait().

XRootDStatus XrdCl::XCpCtx::Initialize (  ) 

Starts one thread per source, each thread tries to open a file, stat the file if necessary, and then starts reading the file, all chunks read go to the sink.

Returns:
Error if we were not able to create any threads
void XrdCl::XCpCtx::NotifyIdleSrc (  ) 

Notify idle sources, used in two case:

  • if one of the sources failed and an idle source needs to take over
  • or if we are done and all idle source should be stopped
void XrdCl::XCpCtx::NotifyInitExpectant (  )  [inline]

Notify those who are waiting for initialization. In particular the GetSize() caller will be waiting on the result of initialization.

References XrdSysCondVar::Broadcast(), and pFileSizeCV.

void XrdCl::XCpCtx::PutChunk ( ChunkInfo chunk  ) 

Put a chunk into the sink

Parameters:
chunk : the chunk
void XrdCl::XCpCtx::RemoveSrc ( XCpSrc src  )  [inline]

Remove given source

Parameters:
src : the source to be removed

References pMtx, and pSources.

XCpCtx* XrdCl::XCpCtx::Self (  )  [inline]

Increments the reference counter.

Returns:
: myself.

References pMtx, and pRefCount.

void XrdCl::XCpCtx::SetFileSize ( int64_t  size  ) 

Set the file size (GetSize will block until SetFileSize will be called). Also calculates the block size.

Parameters:
size : file size
XCpSrc* XrdCl::XCpCtx::WeakestLink ( XCpSrc exclude  ) 

Get the 'weakest' sources

Parameters:
exclude : the source that is excluded from the search
Returns:
: the weakest source

Member Data Documentation

uint64_t XrdCl::XCpCtx::pBlockSize [private]

The size of the block allocated to a single source.

uint32_t XrdCl::XCpCtx::pChunkSize [private]

Chunk size.

uint64_t XrdCl::XCpCtx::pDataReceived [private]

Total amount of data received

bool XrdCl::XCpCtx::pDone [private]

A flag, true if all chunks have been received and we are done, false otherwise

A condition variable, idle sources wait on this cond var until we are done, or until one of the active sources fails.

int64_t XrdCl::XCpCtx::pFileSize [private]

File size.

Referenced by GetSize().

File Size conditional variable. (notifies waiters if the file size has been set)

Referenced by GetSize(), and NotifyInitExpectant().

A mutex guarding the object

Referenced by Delete(), RemoveSrc(), and Self().

uint64_t XrdCl::XCpCtx::pOffset [private]

Offset in the file (everything before the offset has been allocated, everything after the offset needs to be allocated)

uint8_t XrdCl::XCpCtx::pParallelChunks [private]

Number of parallel chunks per source.

uint8_t XrdCl::XCpCtx::pParallelSrc [private]

Number of parallel sources.

size_t XrdCl::XCpCtx::pRefCount [private]

Reference counter

Referenced by Delete(), and Self().

A queue shared between all the sources (producers), and the extreme copy context (consumer).

std::list<XCpSrc*> XrdCl::XCpCtx::pSources [private]

List of sources. Those pointers are not owned by this object.

Referenced by RemoveSrc().

std::queue<std::string> XrdCl::XCpCtx::pUrls [private]

The URLs of all the replicas that were provided to us.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 7 Apr 2019 for xrootd by  doxygen 1.6.1