From: Jacob Thebault-Spieker Date: Wed, 22 Jul 2009 21:56:32 +0000 (-0400) Subject: Expose locally collected rx peer statistics X-Git-Tag: openafs-devel-1_5_61~65 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=3a6d185d400d88607c28514f7b2ba5c0361c91b3;p=packages%2Fo%2Fopenafs.git 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 --- 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: *;