XRootD
XrdCl::SIDManager Class Reference

Handle XRootD stream IDs. More...

#include <XrdClSIDManager.hh>

+ Collaboration diagram for XrdCl::SIDManager:

Public Member Functions

 ~SIDManager ()
 Destructor. More...
 
Status AllocateSID (uint8_t sid[2])
 
uint16_t GetNumberOfAllocatedSIDs () const
 Number of allocated streams. More...
 
bool IsAnySIDOldAs (const time_t tlim) const
 Check if any SID was allocated at or before a given time. More...
 
bool IsTimedOut (uint8_t sid[2])
 Check if a SID is timed out. More...
 
uint32_t NumberOfTimedOutSIDs () const
 Number of timeout sids. More...
 
void ReleaseAllTimedOut ()
 Release all timed out SIDs. More...
 
void ReleaseSID (uint8_t sid[2])
 Release the SID that is no longer needed. More...
 
void ReleaseTimedOut (uint8_t sid[2])
 Release a timed out SID. More...
 
void TimeOutSID (uint8_t sid[2])
 Register a SID of a request that timed out. More...
 

Friends

class SIDMgrPool
 

Detailed Description

Handle XRootD stream IDs.

Definition at line 42 of file XrdClSIDManager.hh.

Constructor & Destructor Documentation

◆ ~SIDManager()

XrdCl::SIDManager::~SIDManager ( )
inline

Destructor.

Definition at line 64 of file XrdClSIDManager.hh.

64 { }

Member Function Documentation

◆ AllocateSID()

Status XrdCl::SIDManager::AllocateSID ( uint8_t  sid[2])

Allocate a SID

Parameters
sida two byte array where the allocated SID should be stored
Returns
stOK on success, stError on error

Definition at line 36 of file XrdClSIDManager.cc.

37  {
38  XrdSysMutexHelper scopedLock( pMutex );
39 
40  uint16_t allocSID = 1;
41 
42  //--------------------------------------------------------------------------
43  // Get a SID from the list of free SIDs if it's not empty
44  //--------------------------------------------------------------------------
45  if( !pFreeSIDs.empty() )
46  {
47  allocSID = pFreeSIDs.front();
48  pFreeSIDs.pop_front();
49  }
50  //--------------------------------------------------------------------------
51  // Allocate a new SID if possible
52  //--------------------------------------------------------------------------
53  else
54  {
55  if( pSIDCeiling == 0xffff )
56  return Status( stError, errNoMoreFreeSIDs );
57  allocSID = pSIDCeiling++;
58  }
59 
60  memcpy( sid, &allocSID, 2 );
61  pAllocTime[allocSID] = time(0);
62  return Status();
63  }
const uint16_t stError
An error occurred that could potentially be retried.
Definition: XrdClStatus.hh:32
const uint16_t errNoMoreFreeSIDs
Definition: XrdClStatus.hh:97

References XrdCl::errNoMoreFreeSIDs, and XrdCl::stError.

◆ GetNumberOfAllocatedSIDs()

uint16_t XrdCl::SIDManager::GetNumberOfAllocatedSIDs ( ) const

Number of allocated streams.

Definition at line 143 of file XrdClSIDManager.cc.

144  {
145  XrdSysMutexHelper scopedLock( pMutex );
146  return pSIDCeiling - pFreeSIDs.size() - pTimeOutSIDs.size() - 1;
147  }

◆ IsAnySIDOldAs()

bool XrdCl::SIDManager::IsAnySIDOldAs ( const time_t  tlim) const

Check if any SID was allocated at or before a given time.

Definition at line 92 of file XrdClSIDManager.cc.

93  {
94  XrdSysMutexHelper scopedLock( pMutex );
95  return std::any_of( pAllocTime.begin(), pAllocTime.end(),
96  [tlim](const auto& p)
97  {
98  return p.second <= tlim;
99  } );
100  }

◆ IsTimedOut()

bool XrdCl::SIDManager::IsTimedOut ( uint8_t  sid[2])

Check if a SID is timed out.

Definition at line 105 of file XrdClSIDManager.cc.

106  {
107  XrdSysMutexHelper scopedLock( pMutex );
108  uint16_t tiSID = 0;
109  memcpy( &tiSID, sid, 2 );
110  std::set<uint16_t>::iterator it = pTimeOutSIDs.find( tiSID );
111  if( it != pTimeOutSIDs.end() )
112  return true;
113  return false;
114  }

◆ NumberOfTimedOutSIDs()

uint32_t XrdCl::SIDManager::NumberOfTimedOutSIDs ( ) const
inline

Number of timeout sids.

Definition at line 109 of file XrdClSIDManager.hh.

110  {
111  XrdSysMutexHelper scopedLock( pMutex );
112  return pTimeOutSIDs.size();
113  }

◆ ReleaseAllTimedOut()

void XrdCl::SIDManager::ReleaseAllTimedOut ( )

Release all timed out SIDs.

Definition at line 131 of file XrdClSIDManager.cc.

132  {
133  XrdSysMutexHelper scopedLock( pMutex );
134  std::set<uint16_t>::iterator it;
135  for( it = pTimeOutSIDs.begin(); it != pTimeOutSIDs.end(); ++it )
136  pFreeSIDs.push_back( *it );
137  pTimeOutSIDs.clear();
138  }

◆ ReleaseSID()

void XrdCl::SIDManager::ReleaseSID ( uint8_t  sid[2])

Release the SID that is no longer needed.

Definition at line 68 of file XrdClSIDManager.cc.

69  {
70  XrdSysMutexHelper scopedLock( pMutex );
71  uint16_t relSID = 0;
72  memcpy( &relSID, sid, 2 );
73  pFreeSIDs.push_back( relSID );
74  pAllocTime.erase( relSID );
75  }

◆ ReleaseTimedOut()

void XrdCl::SIDManager::ReleaseTimedOut ( uint8_t  sid[2])

Release a timed out SID.

Definition at line 119 of file XrdClSIDManager.cc.

120  {
121  XrdSysMutexHelper scopedLock( pMutex );
122  uint16_t tiSID = 0;
123  memcpy( &tiSID, sid, 2 );
124  pTimeOutSIDs.erase( tiSID );
125  pFreeSIDs.push_back( tiSID );
126  }

◆ TimeOutSID()

void XrdCl::SIDManager::TimeOutSID ( uint8_t  sid[2])

Register a SID of a request that timed out.

Definition at line 80 of file XrdClSIDManager.cc.

81  {
82  XrdSysMutexHelper scopedLock( pMutex );
83  uint16_t tiSID = 0;
84  memcpy( &tiSID, sid, 2 );
85  pTimeOutSIDs.insert( tiSID );
86  pAllocTime.erase( tiSID );
87  }

Friends And Related Function Documentation

◆ SIDMgrPool

friend class SIDMgrPool
friend

Definition at line 44 of file XrdClSIDManager.hh.


The documentation for this class was generated from the following files: