com.aelitis.azureus.core.peermanager.piecepicker.impl
Class PiecePickerImpl

java.lang.Object
  extended by com.aelitis.azureus.core.peermanager.piecepicker.impl.PiecePickerImpl
All Implemented Interfaces:
PiecePicker

public class PiecePickerImpl
extends java.lang.Object
implements PiecePicker

Author:
MjrTom

Nested Class Summary
protected static class PiecePickerImpl.RealTimeData
           
 
Field Summary
protected  int[] availability
          periodically updated consistent view of availability for calculating
protected  int[] availabilityAsynch
          asyncronously updated availability
protected  long availabilityChange
           
protected  long availabilityDrift
          indicates availability needs to be recomputed due to detected drift
protected  AEMonitor availabilityMon
           
protected static boolean completionPriority
           
protected  DiskManagerPiece[] dmPieces
           
protected  long filePriorityChange
          event # of user file priority settings changes
protected static boolean firstPiecePriority
           
protected  boolean hasNeededUndonePiece
           
protected  int nbPieces
           
protected  int nbPiecesDone
           
protected  long neededUndonePieceChange
           
protected static long paramPriorityChange
          event # of user settings controlling priority changes
protected  java.util.Map peerListeners
           
protected  PEPiece[] pePieces
           
 
Fields inherited from interface com.aelitis.azureus.core.peermanager.piecepicker.PiecePicker
REQUEST_HINT_MAX_LIFE
 
Constructor Summary
PiecePickerImpl(PEPeerControl pc)
           
 
Method Summary
protected  void abandonEndGameMode()
           
 void addEndGameChunks(PEPiece pePiece)
          adds every block from the piece to the list of chuncks to be selected for egm requesting
 void addHavePiece(PEPeer peer, int pieceNumber)
           
 void addListener(PiecePickerListener listener)
           
 void addPriorityProvider(PiecePriorityProvider provider)
           
 void addRTAProvider(PieceRTAProvider provider)
           
 void allocateRequests()
          one reason requests don't stem from the individual peers is so the connections can be sorted by best uploaders, providing some ooprtunity to download the most important (ie; rarest and/or highest priority) pieces faster and more reliably
protected  void checkDownloadablePiece()
          Early-outs when finds a downloadable piece Either way sets hasNeededUndonePiece and neededUndonePieceChange if necessary
 void clearEndGameChunks()
           
 void destroy()
           
protected  int findPieceInEndGameMode(PEPeerTransport pt, int wants)
           
protected  int findPieceToDownload(PEPeerTransport pt, int nbWanted)
           
protected  boolean findRTAPieceToDownload(PEPeerTransport pt, boolean best_uploader, long best_uploader_next_block_eta)
           
 void generateEvidence(IndentWriter writer)
           
 int[] getAvailability()
           
 int getAvailability(int pieceNumber)
           
 long getAvailWentBadTime()
           
 float getAvgAvail()
           
 long getBytesUnavailable()
           
 int[] getGlobalRequestHint()
           
 int getMaxAvailability()
           
 float getMinAvailability()
           
 float getMinAvailability(int fileIndex)
           
 int getNbPiecesDone()
           
 long getNeededUndonePieceChange()
           
protected  int getNextBlockETAFromNow(PEPeerTransport pt)
           
 int getNumberOfPieces()
           
 java.lang.String getPieceString(int piece_number)
           
protected  int getPieceToStart(BitFlags startCandidates)
           
 java.util.List getPriorityProviders()
           
 boolean getReverseBlockOrder()
           
 java.util.List getRTAProviders()
           
 boolean hasDownloadablePiece()
           
 boolean hasEndGameModeBeenAbandoned()
           
 boolean isForcePiece(int pieceNumber)
           
 boolean isInEndGameMode()
           
protected  void leaveEndGameMode()
           
 void removeFromEndGameModeChunks(int pieceNumber, int offset)
           
 void removeListener(PiecePickerListener listener)
           
 void removePriorityProvider(PiecePriorityProvider provider)
           
 void removeRTAProvider(PieceRTAProvider provider)
           
 void setForcePiece(int pieceNumber, boolean forced)
           
 void setGlobalRequestHint(int piece_number, int start_bytes, int byte_count)
           
 void setReverseBlockOrder(boolean is_reverse)
           
 void updateAvailability()
          This methd will compute the pieces' overall availability (including ourself) and the _globalMinOthers & _globalAvail
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

firstPiecePriority

protected static volatile boolean firstPiecePriority

completionPriority

protected static volatile boolean completionPriority

paramPriorityChange

protected static volatile long paramPriorityChange
event # of user settings controlling priority changes


peerListeners

protected final java.util.Map peerListeners

nbPieces

protected final int nbPieces

dmPieces

protected final DiskManagerPiece[] dmPieces

pePieces

protected final PEPiece[] pePieces

availabilityMon

protected final AEMonitor availabilityMon

nbPiecesDone

protected volatile int nbPiecesDone

availabilityAsynch

protected volatile int[] availabilityAsynch
asyncronously updated availability


availabilityDrift

protected volatile long availabilityDrift
indicates availability needs to be recomputed due to detected drift


availability

protected volatile int[] availability
periodically updated consistent view of availability for calculating


availabilityChange

protected volatile long availabilityChange

filePriorityChange

protected volatile long filePriorityChange
event # of user file priority settings changes


hasNeededUndonePiece

protected volatile boolean hasNeededUndonePiece

neededUndonePieceChange

protected volatile long neededUndonePieceChange
Constructor Detail

PiecePickerImpl

public PiecePickerImpl(PEPeerControl pc)
Method Detail

addHavePiece

public final void addHavePiece(PEPeer peer,
                               int pieceNumber)
Specified by:
addHavePiece in interface PiecePicker

updateAvailability

public final void updateAvailability()
This methd will compute the pieces' overall availability (including ourself) and the _globalMinOthers & _globalAvail

Specified by:
updateAvailability in interface PiecePicker

getNumberOfPieces

public int getNumberOfPieces()
Specified by:
getNumberOfPieces in interface PiecePicker

getAvailability

public final int[] getAvailability()
Specified by:
getAvailability in interface PiecePicker

getAvailability

public final int getAvailability(int pieceNumber)
Specified by:
getAvailability in interface PiecePicker

getMinAvailability

public final float getMinAvailability()
Specified by:
getMinAvailability in interface PiecePicker

getMinAvailability

public float getMinAvailability(int fileIndex)
Specified by:
getMinAvailability in interface PiecePicker

getBytesUnavailable

public final long getBytesUnavailable()
Specified by:
getBytesUnavailable in interface PiecePicker

getAvailWentBadTime

public final long getAvailWentBadTime()
Specified by:
getAvailWentBadTime in interface PiecePicker

getMaxAvailability

public final int getMaxAvailability()
Specified by:
getMaxAvailability in interface PiecePicker

getAvgAvail

public final float getAvgAvail()
Specified by:
getAvgAvail in interface PiecePicker

getNbPiecesDone

public int getNbPiecesDone()
Specified by:
getNbPiecesDone in interface PiecePicker

checkDownloadablePiece

protected final void checkDownloadablePiece()
Early-outs when finds a downloadable piece Either way sets hasNeededUndonePiece and neededUndonePieceChange if necessary


allocateRequests

public final void allocateRequests()
one reason requests don't stem from the individual peers is so the connections can be sorted by best uploaders, providing some ooprtunity to download the most important (ie; rarest and/or highest priority) pieces faster and more reliably

Specified by:
allocateRequests in interface PiecePicker

getNextBlockETAFromNow

protected int getNextBlockETAFromNow(PEPeerTransport pt)

findPieceToDownload

protected final int findPieceToDownload(PEPeerTransport pt,
                                        int nbWanted)
Parameters:
pt - the PEPeerTransport we're working on
Returns:
int # of blocks that were requested (0 if no requests were made)

findRTAPieceToDownload

protected final boolean findRTAPieceToDownload(PEPeerTransport pt,
                                               boolean best_uploader,
                                               long best_uploader_next_block_eta)

getPieceToStart

protected final int getPieceToStart(BitFlags startCandidates)
Parameters:
startCandidates - BitFlags of potential candidates to choose from
Returns:
int the piece number that was chosen to be started. Note it's possible for the chosen piece to have been started already (by another thread). This method considers that potential to not be relevant.

hasDownloadablePiece

public final boolean hasDownloadablePiece()
Specified by:
hasDownloadablePiece in interface PiecePicker

getNeededUndonePieceChange

public final long getNeededUndonePieceChange()
Specified by:
getNeededUndonePieceChange in interface PiecePicker
Returns:
long value indicated serial number of current count of changes to hasNeededUndonePiece. A method interesting in tracking changes can compare this with a locally stored value to determine if the hasNeededUndonePiece status has changed since the last check.

isInEndGameMode

public final boolean isInEndGameMode()
Specified by:
isInEndGameMode in interface PiecePicker

hasEndGameModeBeenAbandoned

public boolean hasEndGameModeBeenAbandoned()
Specified by:
hasEndGameModeBeenAbandoned in interface PiecePicker

addEndGameChunks

public final void addEndGameChunks(PEPiece pePiece)
adds every block from the piece to the list of chuncks to be selected for egm requesting

Specified by:
addEndGameChunks in interface PiecePicker

findPieceInEndGameMode

protected final int findPieceInEndGameMode(PEPeerTransport pt,
                                           int wants)

removeFromEndGameModeChunks

public final void removeFromEndGameModeChunks(int pieceNumber,
                                              int offset)
Specified by:
removeFromEndGameModeChunks in interface PiecePicker

clearEndGameChunks

public final void clearEndGameChunks()
Specified by:
clearEndGameChunks in interface PiecePicker

leaveEndGameMode

protected void leaveEndGameMode()

abandonEndGameMode

protected void abandonEndGameMode()

addRTAProvider

public void addRTAProvider(PieceRTAProvider provider)
Specified by:
addRTAProvider in interface PiecePicker

removeRTAProvider

public void removeRTAProvider(PieceRTAProvider provider)
Specified by:
removeRTAProvider in interface PiecePicker

getRTAProviders

public java.util.List getRTAProviders()
Specified by:
getRTAProviders in interface PiecePicker

addPriorityProvider

public void addPriorityProvider(PiecePriorityProvider provider)
Specified by:
addPriorityProvider in interface PiecePicker

removePriorityProvider

public void removePriorityProvider(PiecePriorityProvider provider)
Specified by:
removePriorityProvider in interface PiecePicker

getPriorityProviders

public java.util.List getPriorityProviders()
Specified by:
getPriorityProviders in interface PiecePicker

addListener

public void addListener(PiecePickerListener listener)
Specified by:
addListener in interface PiecePicker

removeListener

public void removeListener(PiecePickerListener listener)
Specified by:
removeListener in interface PiecePicker

setForcePiece

public void setForcePiece(int pieceNumber,
                          boolean forced)
Specified by:
setForcePiece in interface PiecePicker

isForcePiece

public boolean isForcePiece(int pieceNumber)
Specified by:
isForcePiece in interface PiecePicker

setGlobalRequestHint

public void setGlobalRequestHint(int piece_number,
                                 int start_bytes,
                                 int byte_count)
Specified by:
setGlobalRequestHint in interface PiecePicker

getGlobalRequestHint

public int[] getGlobalRequestHint()
Specified by:
getGlobalRequestHint in interface PiecePicker

setReverseBlockOrder

public void setReverseBlockOrder(boolean is_reverse)
Specified by:
setReverseBlockOrder in interface PiecePicker

getReverseBlockOrder

public boolean getReverseBlockOrder()
Specified by:
getReverseBlockOrder in interface PiecePicker

destroy

public void destroy()
Specified by:
destroy in interface PiecePicker

getPieceString

public java.lang.String getPieceString(int piece_number)
Specified by:
getPieceString in interface PiecePicker

generateEvidence

public void generateEvidence(IndentWriter writer)
Specified by:
generateEvidence in interface PiecePicker