XRootD
Loading...
Searching...
No Matches
XrdCl::SIDManager Class Reference

Handle XRootD stream IDs. More...

#include <XrdClSIDManager.hh>

Collaboration diagram for XrdCl::SIDManager:

Public Member Functions

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

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.
const uint16_t errNoMoreFreeSIDs

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 }

◆ SIDMgrPool

friend class SIDMgrPool
friend

Definition at line 44 of file XrdClSIDManager.hh.

References SIDMgrPool.

Referenced by SIDMgrPool.


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