From: Matt Joiner Date: Wed, 21 Aug 2019 00:43:06 +0000 (+1000) Subject: Tidy up piece completion change handling X-Git-Tag: v1.7.0~4 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=ee5e459ea3f8feae8d0b194449b8fd08814c7e1b;p=btrtrc.git Tidy up piece completion change handling --- diff --git a/client_test.go b/client_test.go index b84b9f3b..18288e4e 100644 --- a/client_test.go +++ b/client_test.go @@ -106,7 +106,7 @@ func TestTorrentInitialState(t *testing.T) { dir, mi := testutil.GreetingTestTorrent() defer os.RemoveAll(dir) cl := &Client{ - config: &ClientConfig{}, + config: TestingConfig(), } cl.initLogger() tor := cl.newTorrent( diff --git a/torrent.go b/torrent.go index 5fd2bbff..02ee63af 100644 --- a/torrent.go +++ b/torrent.go @@ -735,7 +735,7 @@ func (t *Torrent) pieceLength(piece pieceIndex) pp.Integer { func (t *Torrent) hashPiece(piece pieceIndex) (ret metainfo.Hash) { hash := pieceHash.New() - p := &t.pieces[piece] + p := t.piece(piece) p.waitNoPendingWrites() ip := t.info.Piece(int(piece)) pl := ip.Length() @@ -997,7 +997,7 @@ func (t *Torrent) pendRequest(req request) { } func (t *Torrent) pieceCompletionChanged(piece pieceIndex) { - log.Call().Add("piece", piece).AddValue(debugLogValue).Log(t.logger) + t.tickleReaders() t.cl.event.Broadcast() if t.pieceComplete(piece) { t.onPieceCompleted(piece) @@ -1056,16 +1056,14 @@ func (t *Torrent) putPieceInclination(pi []int) { } func (t *Torrent) updatePieceCompletion(piece pieceIndex) bool { - pcu := t.pieceCompleteUncached(piece) - p := &t.pieces[piece] - changed := t.completedPieces.Get(bitmap.BitIndex(piece)) != pcu.Complete || p.storageCompletionOk != pcu.Ok - log.Fmsg("piece %d completion: %v", piece, pcu.Ok).AddValue(debugLogValue).Log(t.logger) - p.storageCompletionOk = pcu.Ok - t.completedPieces.Set(bitmap.BitIndex(piece), pcu.Complete) - t.tickleReaders() - // t.logger.Printf("piece %d uncached completion: %v", piece, pcu.Complete) - // t.logger.Printf("piece %d changed: %v", piece, changed) + p := t.piece(piece) + uncached := t.pieceCompleteUncached(piece) + cached := p.completion() + changed := cached != uncached + p.storageCompletionOk = uncached.Ok + t.completedPieces.Set(bitmap.BitIndex(piece), uncached.Complete) if changed { + t.logger.Log(log.Fstr("piece %d completion changed: %+v -> %+v", piece, cached, uncached)) t.pieceCompletionChanged(piece) } return changed @@ -1721,3 +1719,7 @@ func (t *Torrent) pieceQueuedForHash(i pieceIndex) bool { func (t *Torrent) dialTimeout() time.Duration { return reducedDialTimeout(t.cl.config.MinDialTimeout, t.cl.config.NominalDialTimeout, t.cl.config.HalfOpenConnsPerTorrent, t.peers.Len()) } + +func (t *Torrent) piece(i int) *Piece { + return &t.pieces[i] +}