Changeset 8453c34b


Ignore:
Timestamp:
May 30, 2012 3:21:37 PM (8 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
ddc329e8
Parents:
c6fcdf9
Message:

Improve rarest-first behavior by not favoring a partial piece
held by multiple peers when requesting from a seed

Location:
apps/i2psnark/java/src/org/klomp/snark
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java

    rc6fcdf9 r8453c34b  
    11471147              int savedPiece = pp.getPiece();
    11481148              if (havePieces.get(savedPiece)) {
    1149                  iter.remove();
    11501149                 // this is just a double-check, it should be in there
     1150                 boolean skipped = false;
    11511151                 for(Piece piece : wantedPieces) {
    11521152                     if (piece.getId() == savedPiece) {
     1153                         if (peer.isCompleted() && piece.getPeerCount() > 1) {
     1154                             // Try to preserve rarest-first when we have only one seeder
     1155                             // by not preferring a partial piece that others have too
     1156                             // from a seeder
     1157                             skipped = true;
     1158                             break;
     1159                         }
     1160                         iter.remove();
    11531161                         piece.setRequested(peer, true);
    11541162                         if (_log.shouldLog(Log.INFO)) {
     
    11591167                      }
    11601168                  }
    1161                   if (_log.shouldLog(Log.WARN))
    1162                       _log.warn("Partial piece " + pp + " NOT in wantedPieces??");
     1169                  if (_log.shouldLog(Log.WARN)) {
     1170                      if (skipped)
     1171                          _log.warn("Partial piece " + pp + " with multiple peers skipped for seeder");
     1172                      else
     1173                          _log.warn("Partial piece " + pp + " NOT in wantedPieces??");
     1174                  }
    11631175              }
    11641176          }
  • apps/i2psnark/java/src/org/klomp/snark/Piece.java

    rc6fcdf9 r8453c34b  
    5858    public boolean removePeer(Peer peer) { return this.peers.remove(peer.getPeerID()); }
    5959
     60    /**
     61     * How many peers have this piece?
     62     * Caller must synchronize
     63     * @since 0.9.1
     64     */
     65    public int getPeerCount() {
     66        return this.peers.size();
     67    }
     68   
    6069    /** caller must synchronize */
    6170    public boolean isRequested() {
Note: See TracChangeset for help on using the changeset viewer.