Back to home page

Project CMSSW displayed by LXR

 
 

    


Warning, /Utilities/XrdAdaptor/README.md is written in an unsupported language. File is not indexed.

0001 # XrdAdaptor
0002 
0003 ## Introduction
0004 
0005 The `XrdAdaptor` package is the CMSSW implementation of CMS' AAA infrastructure. The main features on top of the stock XRootD client library are
0006 * Recovery from some errors via re-tries
0007 * Use of multiple XRootD sources (described further [here](doc/multisource_algorithm_design.md))
0008 
0009 ## Short description of components
0010 
0011 ### `ClientRequest`
0012 
0013 The `ClientRequest` implements `XrdCl::ResponseHandler`, and represents a single read request(?).
0014 
0015 ### `QualityMetric`
0016 
0017 The `QualityMetric` implements a measurement of the server's recent performance for the client. It's based on the time taken to service requests (under the assumption that, since requests are split into potentially smaller-chunks by the request manager, the time to service them should be roughly the same) with a small amount of exponential weighting to prefer data points from the most recent request.
0018 
0019 Since the metric is based on time to serve requests, a lower value is better.
0020 
0021 Potential improvements include:
0022 * Actually weighting the scores based on the size (or complexity) of the reads. The assumption that latency dominates transfer time may be OK in some cases -- but we've seen for large files (e.g., heavy ion), that bandwidth really is relevant and that large vector reads can cause much more server stress due to read amplification for erasure-coded systems than a simple read.
0023 * Switching from the hand-calculated exponential weighting to a more typical exponentially weighted moving average setup.
0024 
0025 
0026 ### `RequestManager`
0027 
0028 The `RequestManager` containes the actual implementation of the retries and the multi-source algorithm. There is one `RequestManager` object for one PFN, and it contains one or more `Source` objects.
0029 
0030 #### `RequestManager::OpenHandler`
0031 
0032 The `OpenHandler` implements XRootD's `XrdCl::ResponseHandler` in an asynchronous way. An instance is created in `RequestManager::initialize()`, and used when additional Sources are opened, either as part of the multi-source comparisons (`RequestManager::checkSourcesImpl()`) or read error recovery (`RequestManager::requestFailure()`).
0033 
0034 Most of the internal operations for the xrootd client are asynchronous while ROOT expects a synchronous interface from the adaptor. The difference between the two here is the asynchronous one is used for "background probing" to find additional sources.
0035 
0036 ### `Source`
0037 
0038 The `Source` represents a connection to one storage server. There can be more than one `Source` for one PFN. 
0039 
0040 ### `SyncHostResponseHandler`
0041 
0042 The `SyncHostResponseHandler` implements XRootD's `XrdCl::ResponseHandler` in a synchronous way(?). It is used in `RequestManager::initialize()` for the initial file open.
0043 
0044 ### `XrdFile`
0045 
0046 The `XrdFile` implements `edm::storage::Storage` (see [Utilities/StorageFactory/README.md](../../Utilities/StorageFactory/README.md). In CMS' terminology it represents one Physical File Name (PFN), and acts as a glue between the `edm::storage::Storage` API and `RequestManager`.
0047 
0048 ### `XrdStatistics`
0049 
0050 The `XrdStatistics` provides per-"site" counters (bytes read, total time), providing the `XrdStatisticsService` with a viewpoint of how individual sites are performing for a given client. The intent is to provide more visibility into the performance encountered by grouping I/O operations into a per-site basis, under the theory that performance within a site is similar but could differ between two different sites.
0051 
0052 ### `XrdStatisticsService`
0053 
0054 The `XrdStatisticsService` is a Service to report XrootD-related statistics centrally. It is one of the default Services that are enabled in `cmsRun`.
0055 
0056 ### `XrdStorageMaker`
0057 
0058 The `XrdStorageMaker` is a plugin in the `StorageMaker` hierarchy. See [Utilities/StorageFactory/README.md](../../Utilities/StorageFactory/README.md) for more information. Among other things it creates `XrdFile` objects.