From 3a6d185d400d88607c28514f7b2ba5c0361c91b3 Mon Sep 17 00:00:00 2001 From: Jacob Thebault-Spieker Date: Wed, 22 Jul 2009 17:56:32 -0400 Subject: [PATCH] Expose locally collected rx peer statistics This implements rx_GetLocalPeers(), which exposes peer statistics that are currently collected to the cache manager. This function will later be used to rank both the file server and vldb server lists using the statistics exposed by rx_GetLocalPeers(). Reviewed-on: http://gerrit.openafs.org/http://gerrit.openafs.org/186 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- src/libafsrpc/afsrpc.def | 1 + src/libafsrpc/afsrpc.exp | 1 + src/rx/rx.c | 54 +++++++++++++++++++++++++++++++++++ src/rx/rx_prototypes.h | 2 ++ src/shlibafsrpc/libafsrpc.exp | 1 + src/shlibafsrpc/libafsrpc.map | 1 + 6 files changed, 60 insertions(+) mode change 100644 => 100755 src/libafsrpc/afsrpc.def mode change 100644 => 100755 src/libafsrpc/afsrpc.exp mode change 100644 => 100755 src/rx/rx.c mode change 100644 => 100755 src/rx/rx_prototypes.h mode change 100644 => 100755 src/shlibafsrpc/libafsrpc.exp mode change 100644 => 100755 src/shlibafsrpc/libafsrpc.map diff --git a/src/libafsrpc/afsrpc.def b/src/libafsrpc/afsrpc.def old mode 100644 new mode 100755 index e727d04cb..0fe1c643f --- a/src/libafsrpc/afsrpc.def +++ b/src/libafsrpc/afsrpc.def @@ -247,6 +247,7 @@ EXPORTS xdr_free @252 RXAFS_FsCmd @253 rxi_CallError @254 + rx_GetLocalPeers @255 ; for performance testing rx_TSFPQGlobSize @2001 DATA diff --git a/src/libafsrpc/afsrpc.exp b/src/libafsrpc/afsrpc.exp old mode 100644 new mode 100755 index 97e3bb5d6..0b19b05ee --- a/src/libafsrpc/afsrpc.exp +++ b/src/libafsrpc/afsrpc.exp @@ -166,3 +166,4 @@ RXAFS_FlushCPS RXAFS_DFSSymlink RXAFSCB_function_names RXAFS_FsCmd +rx_GetLocalPeers diff --git a/src/rx/rx.c b/src/rx/rx.c old mode 100644 new mode 100755 index f91c6cfbf..df2349b7d --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -6959,6 +6959,60 @@ rx_GetServerPeers(osi_socket socket, afs_uint32 remoteAddr, return rc; } +afs_int32 +rx_GetLocalPeers(afs_uint32 peerHost, afs_uint16 peerPort, + struct rx_debugPeer * peerStats) +{ + struct rx_peer *tp; + afs_int32 error = 1; /* default to "did not succeed" */ + afs_uint32 hashValue = PEER_HASH(peerHost, peerPort); + + MUTEX_ENTER(&rx_peerHashTable_lock); + for(tp = rx_peerHashTable[hashValue]; + tp != NULL; tp = tp->next) { + if (tp->host == peerHost) + break; + } + + if (tp) { + error = 0; + + peerStats->host = tp->host; + peerStats->port = tp->port; + peerStats->ifMTU = tp->ifMTU; + peerStats->idleWhen = tp->idleWhen; + peerStats->refCount = tp->refCount; + peerStats->burstSize = tp->burstSize; + peerStats->burst = tp->burst; + peerStats->burstWait.sec = tp->burstWait.sec; + peerStats->burstWait.usec = tp->burstWait.usec; + peerStats->rtt = tp->rtt; + peerStats->rtt_dev = tp->rtt_dev; + peerStats->timeout.sec = tp->timeout.sec; + peerStats->timeout.usec = tp->timeout.usec; + peerStats->nSent = tp->nSent; + peerStats->reSends = tp->reSends; + peerStats->inPacketSkew = tp->inPacketSkew; + peerStats->outPacketSkew = tp->outPacketSkew; + peerStats->rateFlag = tp->rateFlag; + peerStats->natMTU = tp->natMTU; + peerStats->maxMTU = tp->maxMTU; + peerStats->maxDgramPackets = tp->maxDgramPackets; + peerStats->ifDgramPackets = tp->ifDgramPackets; + peerStats->MTU = tp->MTU; + peerStats->cwind = tp->cwind; + peerStats->nDgramPackets = tp->nDgramPackets; + peerStats->congestSeq = tp->congestSeq; + peerStats->bytesSent.high = tp->bytesSent.high; + peerStats->bytesSent.low = tp->bytesSent.low; + peerStats->bytesReceived.high = tp->bytesReceived.high; + peerStats->bytesReceived.low = tp->bytesReceived.low; + } + MUTEX_EXIT(&rx_peerHashTable_lock); + + return error; +} + void shutdown_rx(void) { diff --git a/src/rx/rx_prototypes.h b/src/rx/rx_prototypes.h old mode 100644 new mode 100755 index 307e75d01..b7415ac78 --- a/src/rx/rx_prototypes.h +++ b/src/rx/rx_prototypes.h @@ -217,6 +217,8 @@ extern afs_int32 rx_GetServerPeers(osi_socket socket, afs_uint32 remoteAddr, afs_uint32 debugSupportedValues, struct rx_debugPeer *peer, afs_uint32 * supportedValues); +extern afs_int32 rx_GetLocalPeers(afs_uint32 peerHost, afs_uint16 peerPort, + struct rx_debugPeer * peerStats); extern void shutdown_rx(void); #ifndef osirx_AssertMine extern void osirx_AssertMine(afs_kmutex_t * lockaddr, char *msg); diff --git a/src/shlibafsrpc/libafsrpc.exp b/src/shlibafsrpc/libafsrpc.exp old mode 100644 new mode 100755 index 06f1af9f6..c73bb6319 --- a/src/shlibafsrpc/libafsrpc.exp +++ b/src/shlibafsrpc/libafsrpc.exp @@ -165,3 +165,4 @@ RXAFS_Lookup RXAFS_FlushCPS RXAFS_DFSSymlink RXAFSCB_function_names +rx_GetLocalPeers diff --git a/src/shlibafsrpc/libafsrpc.map b/src/shlibafsrpc/libafsrpc.map old mode 100644 new mode 100755 index b29b98f2d..d816cb0d3 --- a/src/shlibafsrpc/libafsrpc.map +++ b/src/shlibafsrpc/libafsrpc.map @@ -120,6 +120,7 @@ ucstring; lcstring; AssertionFailed; + rx_GetLocalPeers local: *; -- 2.39.5