Class PEPieceImpl

  • All Implemented Interfaces:
    PEPiece

    public class PEPieceImpl
    extends java.lang.Object
    implements PEPiece
    • Field Detail

      • LOGID

        private static final LogIDs LOGID
      • nbBlocks

        private final int nbBlocks
      • creationTime

        private long creationTime
      • requested

        private final java.lang.String[] 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

        private final java.lang.String[] writers
      • writes

        private final java.util.List writes
      • reservedBy

        private java.lang.String reservedBy
      • speed

        private int speed
      • resumePriority

        private int resumePriority
      • real_time_data

        private java.lang.Object real_time_data
      • class_mon

        protected static final AEMonitor class_mon
    • Constructor Detail

      • PEPieceImpl

        public PEPieceImpl​(PiecePicker _picker,
                           DiskManagerPiece _dm_piece,
                           int _pieceSpeed)
        piece for tracking partially downloaded pieces
        Parameters:
        _manager - the PEPeerManager
        _dm_piece - the backing dmPiece
        _pieceSpeed - the speed threshold for potential new requesters
    • Method Detail

      • getCreationTime

        public long getCreationTime()
        Description copied from interface: PEPiece
        The time the pePiece was [re]created
        Specified by:
        getCreationTime in interface PEPiece
      • 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 interface PEPiece
        Returns:
        long
      • isRequested

        public boolean isRequested​(int blockNumber)
        Tells if a block has been requested
        Specified by:
        isRequested in interface PEPiece
        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 interface PEPiece
        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 interface PEPiece
        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 interface PEPiece
        Parameters:
        blockNumber -
      • isDownloaded

        public boolean isDownloaded()
        Specified by:
        isDownloaded in interface PEPiece
      • getDownloaded

        public boolean[] getDownloaded()
        Specified by:
        getDownloaded in interface PEPiece
      • setWritten

        public void setWritten​(java.lang.String peer,
                               int blockNumber)
        This marks a given block as having been written by the given peer
        Specified by:
        setWritten in interface PEPiece
        Parameters:
        peer - the peer that sent the data
        blockNumber - 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 interface PEPiece
      • isRequested

        public boolean isRequested()
        Specified by:
        isRequested in interface PEPiece
      • 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 interface PEPiece
        Returns:
        true if the piece has any blocks that are not; Downloaded, Requested, or Written
      • getAndMarkBlocks

        public int[] getAndMarkBlocks​(PEPeer peer,
                                      int nbWanted,
                                      int[] request_hint,
                                      boolean reverse_order)
        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 interface PEPiece
      • setRequested

        public boolean setRequested​(PEPeer peer,
                                    int blockNumber)
        Assumption - single threaded with getAndMarkBlock
        Specified by:
        setRequested in interface PEPiece
      • getBlockSize

        public int getBlockSize​(int blockNumber)
        Specified by:
        getBlockSize in interface PEPiece
      • getBlockNumber

        public int getBlockNumber​(int offset)
        Specified by:
        getBlockNumber in interface PEPiece
        Parameters:
        offset - int bytes into piece
        Returns:
        block int number corresponding to given offset
      • getPieceWrites

        public java.util.List getPieceWrites()
      • getPieceWrites

        public java.util.List getPieceWrites​(int blockNumber)
      • getPieceWrites

        public java.util.List getPieceWrites​(PEPeer peer)
      • getPieceWrites

        public java.util.List getPieceWrites​(java.lang.String ip)
      • fixupPadFile

        private void fixupPadFile()
      • reset

        public void reset()
        Specified by:
        reset in interface PEPiece
      • getRealTimeData

        public java.lang.Object getRealTimeData()
        Specified by:
        getRealTimeData in interface PEPiece
      • setRealTimeData

        public void setRealTimeData​(java.lang.Object o)
        Specified by:
        setRealTimeData in interface PEPiece
      • addWrite

        public void addWrite​(int blockNumber,
                             java.lang.String sender,
                             byte[] hash,
                             boolean correct)
        Description copied from interface: PEPiece
        record details of a piece's blocks that have been completed for bad peer detection purposes
        Specified by:
        addWrite in interface PEPiece
      • getWriters

        public java.lang.String[] getWriters()
        Specified by:
        getWriters in interface PEPiece
      • getSpeed

        public int getSpeed()
        Specified by:
        getSpeed in interface PEPiece
      • setSpeed

        public void setSpeed​(int newSpeed)
        Specified by:
        setSpeed in interface PEPiece
      • setReservedBy

        public void setReservedBy​(java.lang.String peer)
        Specified by:
        setReservedBy in interface PEPiece
      • getReservedBy

        public java.lang.String getReservedBy()
        Specified by:
        getReservedBy in interface PEPiece
      • 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

        public void reDownloadBlocks​(java.lang.String address)
        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 interface PEPiece
        Parameters:
        p - the Resume Priority to set, for display purposes
      • getResumePriority

        public int getResumePriority()
        Specified by:
        getResumePriority in interface PEPiece
        Returns:
        int ResumePriority (startPriority + resuming adjustments)
      • getAvailability

        public int getAvailability()
        Specified by:
        getAvailability in interface PEPiece
        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 interface PEPiece
        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()
        Specified by:
        isWritten in interface PEPiece
      • isWritten

        public boolean isWritten​(int block)
        Specified by:
        isWritten in interface PEPiece
      • getLength

        public int getLength()
        Specified by:
        getLength in interface PEPiece
      • setRequestable

        public void setRequestable()
      • getString

        public java.lang.String getString()
        Specified by:
        getString in interface PEPiece