Package com.biglybt.core.peer.impl
Class PEPieceImpl
java.lang.Object
com.biglybt.core.peer.impl.PEPieceImpl
- All Implemented Interfaces:
PEPiece
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final AEMonitor
private long
private final DiskManagerPiece
private final boolean[]
private boolean
private boolean
private static final LogIDs
private final int
private final PiecePicker
private Object
private final String[]
private String
private int
private int
private long
private final String[]
private final List
-
Constructor Summary
ConstructorsConstructorDescriptionPEPieceImpl
(PiecePicker _picker, DiskManagerPiece _dm_piece, int _pieceSpeed) piece for tracking partially downloaded pieces -
Method Summary
Modifier and TypeMethodDescriptionvoid
record details of a piece's blocks that have been completed for bad peer detection purposesprotected void
addWrite
(PEPieceWriteImpl write) void
This will scan each block looking for requested blocks.void
clearDownloaded
(int offset) This flags the block at the given offset as NOT having been downloaded and the whole piece as not having been fully downloadedvoid
clearRequested
(int blockNumber) This method clears the requested information for the given block unless the block has already been downloaded, in which case the writer's IP is recorded as a request for the block.private void
void
getAndMarkBlock
(PEPeer peer, int index) int[]
getAndMarkBlocks
(PEPeer peer, int nbWanted, int[] request_hint, boolean reverse_order) This method scans a piece for the first unrequested block.int
int
getBlockNumber
(int offset) int
getBlockSize
(int blockNumber) long
The time the pePiece was [re]createdboolean[]
long
getLastDownloadTime
(long now) int
int
int
int
int
This support method returns how many blocks have already been written from the dmPieceint
getPieceWrites
(int blockNumber) getPieceWrites
(PEPeer peer) getPieceWrites
(String ip) int
int
getSpeed()
long
How many ms since a write to the piece, or since the piece was created if no last write time is known.String[]
boolean[]
This support method returns the dmPiece's written arrayboolean
boolean
boolean
boolean
isDownloaded
(int blockNumber) Tells if a block has been downloadedboolean
boolean
boolean
isRequested
(int blockNumber) Tells if a block has been requestedboolean
boolean
isWritten
(int block) void
reDownloadBlock
(int blockNumber) for a block that's already downloadedt, mark up the piece so that the block will get downloaded again.void
reDownloadBlocks
(String address) finds all blocks downloaded by the given address and marks them up for re-downloadingvoid
reset()
void
setDownloaded
(int offset) This flags the block at the given offset as having been downloaded If all blocks are now downloaed, sets the dmPiece as downloadedvoid
setLastRequestedPeerSpeed
(int peerSpeed) void
void
void
boolean
setRequested
(PEPeer peer, int blockNumber) Assumption - single threaded with getAndMarkBlockvoid
setReservedBy
(String peer) void
setResumePriority
(int p) void
setSpeed
(int newSpeed) void
setWritten
(String peer, int blockNumber) This marks a given block as having been written by the given peer
-
Field Details
-
LOGID
-
dmPiece
-
piecePicker
-
nbBlocks
private final int nbBlocks -
creationTime
private long creationTime -
requested
-
fully_requested
private boolean fully_requested -
downloaded
private final boolean[] downloaded -
fully_downloaded
private boolean fully_downloaded -
time_last_download
private long time_last_download -
writers
-
writes
-
reservedBy
-
speed
private int speed -
resumePriority
private int resumePriority -
real_time_data
-
class_mon
-
-
Constructor Details
-
PEPieceImpl
piece for tracking partially downloaded pieces- Parameters:
_manager
- the PEPeerManager_dm_piece
- the backing dmPiece_pieceSpeed
- the speed threshold for potential new requesters
-
-
Method Details
-
getDMPiece
- Specified by:
getDMPiece
in interfacePEPiece
-
getCreationTime
public long getCreationTime()Description copied from interface:PEPiece
The time the pePiece was [re]created- Specified by:
getCreationTime
in interfacePEPiece
-
getTimeSinceLastActivity
public long getTimeSinceLastActivity()Description copied from interface:PEPiece
How many ms since a write to the piece, or since the piece was created if no last write time is known. The return value will be 0 when there's no writes and the piece is new.- Specified by:
getTimeSinceLastActivity
in interfacePEPiece
- Returns:
- long
-
getLastDownloadTime
public long getLastDownloadTime(long now) - Specified by:
getLastDownloadTime
in interfacePEPiece
-
isRequested
public boolean isRequested(int blockNumber) Tells if a block has been requested- Specified by:
isRequested
in interfacePEPiece
- Parameters:
blockNumber
- the block in question- Returns:
- true if the block is Requested already
-
isDownloaded
public boolean isDownloaded(int blockNumber) Tells if a block has been downloaded- Specified by:
isDownloaded
in interfacePEPiece
- Parameters:
blockNumber
- the block in question- Returns:
- true if the block is downloaded already
-
setDownloaded
public void setDownloaded(int offset) This flags the block at the given offset as having been downloaded If all blocks are now downloaed, sets the dmPiece as downloaded- Specified by:
setDownloaded
in interfacePEPiece
- Parameters:
blockNumber
-
-
clearDownloaded
public void clearDownloaded(int offset) This flags the block at the given offset as NOT having been downloaded and the whole piece as not having been fully downloaded- Specified by:
clearDownloaded
in interfacePEPiece
- Parameters:
blockNumber
-
-
isDownloaded
public boolean isDownloaded()- Specified by:
isDownloaded
in interfacePEPiece
-
getDownloaded
public boolean[] getDownloaded()- Specified by:
getDownloaded
in interfacePEPiece
-
hasUndownloadedBlock
public boolean hasUndownloadedBlock()- Specified by:
hasUndownloadedBlock
in interfacePEPiece
-
setWritten
This marks a given block as having been written by the given peer- Specified by:
setWritten
in interfacePEPiece
- Parameters:
peer
- the peer that sent the datablockNumber
- the block we're operating on
-
clearRequested
public void clearRequested(int blockNumber) This method clears the requested information for the given block unless the block has already been downloaded, in which case the writer's IP is recorded as a request for the block.- Specified by:
clearRequested
in interfacePEPiece
-
isRequested
public boolean isRequested()- Specified by:
isRequested
in interfacePEPiece
-
setRequested
public void setRequested()- Specified by:
setRequested
in interfacePEPiece
-
checkRequests
public void checkRequests()This will scan each block looking for requested blocks. For each one, it'll verify if the PEPeer for it still exists and is still willing and able to upload data. If not, it'll unmark the block as requested. -
hasUnrequestedBlock
public boolean hasUnrequestedBlock()- Specified by:
hasUnrequestedBlock
in interfacePEPiece
- Returns:
- true if the piece has any blocks that are not; Downloaded, Requested, or Written
-
getAndMarkBlocks
This method scans a piece for the first unrequested block. Upon finding it, it counts how many are unrequested up to nbWanted. The blocks are marked as requested by the PEPeer Assumption - single threaded access to this TODO: this should return the largest span equal or smaller than nbWanted OR, probably a different method should do that, so this one can support 'more sequential' picking- Specified by:
getAndMarkBlocks
in interfacePEPiece
-
getAndMarkBlock
- Specified by:
getAndMarkBlock
in interfacePEPiece
-
getNbRequests
public int getNbRequests()- Specified by:
getNbRequests
in interfacePEPiece
-
getNbUnrequested
public int getNbUnrequested()- Specified by:
getNbUnrequested
in interfacePEPiece
-
setRequested
Assumption - single threaded with getAndMarkBlock- Specified by:
setRequested
in interfacePEPiece
-
isRequestable
public boolean isRequestable()- Specified by:
isRequestable
in interfacePEPiece
-
getBlockSize
public int getBlockSize(int blockNumber) - Specified by:
getBlockSize
in interfacePEPiece
-
getBlockNumber
public int getBlockNumber(int offset) - Specified by:
getBlockNumber
in interfacePEPiece
- Parameters:
offset
- int bytes into piece- Returns:
- block int number corresponding to given offset
-
getNbBlocks
public int getNbBlocks()- Specified by:
getNbBlocks
in interfacePEPiece
-
getPieceWrites
-
getPieceWrites
-
getPieceWrites
-
getPieceWrites
-
fixupPadFile
private void fixupPadFile() -
reset
public void reset() -
getRealTimeData
- Specified by:
getRealTimeData
in interfacePEPiece
-
setRealTimeData
- Specified by:
setRealTimeData
in interfacePEPiece
-
addWrite
-
addWrite
Description copied from interface:PEPiece
record details of a piece's blocks that have been completed for bad peer detection purposes -
getWriters
- Specified by:
getWriters
in interfacePEPiece
-
getSpeed
public int getSpeed() -
setSpeed
public void setSpeed(int newSpeed) -
setLastRequestedPeerSpeed
public void setLastRequestedPeerSpeed(int peerSpeed) - Specified by:
setLastRequestedPeerSpeed
in interfacePEPiece
-
getPiecePicker
- Specified by:
getPiecePicker
in interfacePEPiece
-
getManager
- Specified by:
getManager
in interfacePEPiece
- Returns:
- Returns the manager.
-
setReservedBy
- Specified by:
setReservedBy
in interfacePEPiece
-
getReservedBy
- Specified by:
getReservedBy
in interfacePEPiece
-
reDownloadBlock
public void reDownloadBlock(int blockNumber) for a block that's already downloadedt, mark up the piece so that the block will get downloaded again. This is used when the piece fails hash-checking. -
reDownloadBlocks
finds all blocks downloaded by the given address and marks them up for re-downloading- Parameters:
address
- String
-
setResumePriority
public void setResumePriority(int p) - Specified by:
setResumePriority
in interfacePEPiece
- Parameters:
p
- the Resume Priority to set, for display purposes
-
getResumePriority
public int getResumePriority()- Specified by:
getResumePriority
in interfacePEPiece
- Returns:
- int ResumePriority (startPriority + resuming adjustments)
-
getAvailability
public int getAvailability()- Specified by:
getAvailability
in interfacePEPiece
- Returns:
- int of availability in the swarm for this piece
-
getNbWritten
public int getNbWritten()This support method returns how many blocks have already been written from the dmPiece- Specified by:
getNbWritten
in interfacePEPiece
- Returns:
- int from dmPiece.getNbWritten()
-
getWritten
public boolean[] getWritten()This support method returns the dmPiece's written array- Returns:
- boolean[] from the dmPiece
-
isWritten
public boolean isWritten() -
isWritten
public boolean isWritten(int block) -
getPieceNumber
public int getPieceNumber()- Specified by:
getPieceNumber
in interfacePEPiece
-
getLength
public int getLength() -
setRequestable
public void setRequestable() -
getString
-