From 85dc3c204a2a8738f61407a3597ca065c91bb025 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 25 Jun 2018 14:06:30 +1000 Subject: [PATCH] Rework stats for receiving chunks Related to #253. --- conn_stats.go | 6 +++--- connection.go | 23 ++++++++++++----------- torrent.go | 2 +- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/conn_stats.go b/conn_stats.go index 67188acb..2f1a5030 100644 --- a/conn_stats.go +++ b/conn_stats.go @@ -25,9 +25,9 @@ type ConnStats struct { ChunksWritten Count - ChunksRead Count - ChunksReadUseful Count - ChunksReadUnwanted Count + ChunksRead Count + ChunksReadUseful Count + ChunksReadWasted Count // Number of pieces data was written to, that subsequently passed verification. PiecesDirtiedGood Count diff --git a/connection.go b/connection.go index a019ff20..6e9fd028 100644 --- a/connection.go +++ b/connection.go @@ -1287,32 +1287,33 @@ func (c *connection) receiveChunk(msg *pp.Message) error { req := newRequestFromMessage(msg) + if c.PeerChoked { + torrent.Add("chunks received while choked", 1) + } + if _, ok := c.validReceiveChunks[req]; !ok { + torrent.Add("chunks received unexpected", 1) return errors.New("received unexpected chunk") } delete(c.validReceiveChunks, req) + if c.PeerChoked && c.peerAllowedFast.Get(int(req.Index)) { + torrent.Add("chunks received due to allowed fast", 1) + } + // Request has been satisfied. if c.deleteRequest(req) { if c.expectingChunks() { c.chunksReceivedWhileExpecting++ } - c.updateRequests() } else { - torrent.Add("chunks received unexpected", 1) - } - - if c.PeerChoked { - torrent.Add("chunks received while choked", 1) - if c.peerAllowedFast.Get(int(req.Index)) { - torrent.Add("chunks received due to allowed fast", 1) - } + torrent.Add("chunks received unwanted", 1) } // Do we actually want this chunk? if t.haveChunk(req) { - torrent.Add("chunks received unwanted", 1) - c.allStats(add(1, func(cs *ConnStats) *Count { return &cs.ChunksReadUnwanted })) + torrent.Add("chunks received wasted", 1) + c.allStats(add(1, func(cs *ConnStats) *Count { return &cs.ChunksReadWasted })) return nil } diff --git a/torrent.go b/torrent.go index 36fa7706..fe3df93f 100644 --- a/torrent.go +++ b/torrent.go @@ -857,7 +857,7 @@ func (t *Torrent) worstBadConn() *connection { heap.Init(&wcs) for wcs.Len() != 0 { c := heap.Pop(&wcs).(*connection) - if c.stats.ChunksReadUnwanted.Int64() >= 6 && c.stats.ChunksReadUnwanted.Int64() > c.stats.ChunksReadUseful.Int64() { + if c.stats.ChunksReadWasted.Int64() >= 6 && c.stats.ChunksReadWasted.Int64() > c.stats.ChunksReadUseful.Int64() { return c } // If the connection is in the worst half of the established -- 2.48.1