Package com.biglybt.core.lws
Class LWSDiskManager
- java.lang.Object
-
- com.biglybt.core.lws.LWSDiskManager
-
- All Implemented Interfaces:
DiskManager
,DiskManagerHelper
public class LWSDiskManager extends java.lang.Object implements DiskManagerHelper
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
LWSDiskManager.sePiece
-
Nested classes/interfaces inherited from interface com.biglybt.core.disk.DiskManager
DiskManager.DownloadEndedProgress
-
-
Field Summary
Fields Modifier and Type Field Description private BitFlags
availability
private DMChecker
checker_use_accessor
private DiskAccessController
disk_access_controller
private DownloadManagerState
download_state
private java.lang.String
error_message
private int
error_type
private DiskManagerFileInfoImpl[]
files
private java.lang.String
internal_name
private LightWeightSeed
lws
private static LWSDiskManager.sePiece
piece
private DMPieceMap
piece_map_use_accessor
private DMPieceMapper
piece_mapper
private LWSDiskManager.sePiece[]
pieces
private DMReader
reader
private java.io.File
save_file
private boolean
started
private int
state
-
Fields inherited from interface com.biglybt.core.disk.DiskManager
ALLOCATING, BLOCK_SIZE, BLOCK_SIZE_KB, CHECKING, ET_FILE_MISSING, ET_INSUFFICIENT_SPACE, ET_NONE, ET_OTHER, ET_READ_ERROR, ET_STOP_DURING_INIT, ET_WRITE_ERROR, FAULTY, INITIALIZING, READY
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
LWSDiskManager(LightWeightSeed _lws, java.io.File _save_file)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addListener(DiskManagerListener l)
boolean
checkBlockConsistencyForHint(java.lang.String originator, int pieceNumber, int offset, int length)
boolean
checkBlockConsistencyForRead(java.lang.String originator, boolean peer_request, int pieceNumber, int offset, int length)
method for checking that the block details are sensibleboolean
checkBlockConsistencyForWrite(java.lang.String originator, int pieceNumber, int offset, DirectByteBuffer data)
method for checking that the block details are sensibleDiskManagerCheckRequest
createCheckRequest(int pieceNumber, java.lang.Object user_data)
Create a request to check a particular pieceDiskManagerReadRequest
createReadRequest(int pieceNumber, int offset, int length)
DiskManagerWriteRequest
createWriteRequest(int pieceNumber, int offset, DirectByteBuffer data, java.lang.Object user_data)
DiskManager.DownloadEndedProgress
downloadEnded()
void
downloadRemoved()
void
enqueueCheckRequest(DiskManagerCheckRequest request, DiskManagerCheckRequestListener listener)
enqueue an asynchronous single piece checkvoid
enqueueCompleteRecheckRequest(DiskManagerCheckRequest request, DiskManagerCheckRequestListener listener)
recheck the entire torrent asynchronously, reporting each piece to the listenervoid
enqueueReadRequest(DiskManagerReadRequest request, DiskManagerReadRequestListener listener)
Enqueue an async disk read request.void
enqueueWriteRequest(DiskManagerWriteRequest request, DiskManagerWriteRequestListener listener)
enqueue an async write requestboolean
filesExist()
void
generateEvidence(IndentWriter writer)
BitFlags
getAvailability()
int
getCacheMode()
protected DMChecker
getChecker()
int
getCompleteRecheckStatus()
returns -1 if no recheck in progress, percentage complete in 1000 notation otherwiseDiskAccessController
getDiskAccessController()
java.lang.String
getDisplayName()
DownloadManager
getDownload()
DownloadManagerState
getDownloadState()
java.lang.String
getErrorMessage()
int
getErrorType()
protected DiskManagerFileInfoImpl[]
getFileInfo(DMPieceMapperFile[] pm_files, java.io.File save_location)
DiskManagerFileInfo[]
getFiles()
DiskManagerFileInfoSet
getFileSet()
java.lang.String
getInternalName()
int
getLastPieceLength()
long[]
getMoveProgress()
When a download's data is moving (for completion or removal events) this gives the [progress in 1000 notation,total_size] null if nothing's going onjava.lang.String
getMoveSubTask()
java.lang.String
getName()
int
getNbPieces()
int
getPercentAllocated()
int
getPercentDone()
Get the percentage done during checking, allocation or initializingint
getPercentDoneExcludingDND()
DiskManagerPiece
getPiece(int index)
byte[]
getPieceHash(int piece_number)
int
getPieceLength()
int
getPieceLength(int piece_number)
DMPieceList
getPieceList(int piece_number)
DMPieceMap
getPieceMap()
DON'T CACHE the DMPieceMap - as it is designed to be discarded when not in useDiskManagerPiece[]
getPieces()
long
getPriorityChangeMarker()
long[]
getReadStats()
DiskManagerRecheckScheduler
getRecheckScheduler()
long
getRemaining()
Get remaining bytes to completion *including* DND fileslong
getRemainingExcludingDND()
java.io.File
getSaveLocation()
long
getSizeExcludingDND()
int
getState()
java.lang.String
getStorageType(int fileIndex)
Returns the storage type for file atfileIndex
.java.lang.String[]
getStorageTypes()
Returns the storage type for all files.TOTorrent
getTorrent()
long
getTotalLength()
long[]
getWriteStats()
boolean
hasListener(DiskManagerListener l)
boolean
hasOutstandingCheckRequestForPiece(int piece_number)
boolean
hasOutstandingReadRequestForPiece(int piece_number)
boolean
hasOutstandingWriteRequestForPiece(int piece_number)
boolean
isDone(int piece_num)
boolean
isInteresting(int piece_num)
boolean
isStopped()
void
moveDataFiles(java.io.File new_parent_dir, java.lang.String new_name)
void
priorityChanged(DiskManagerFileInfo file)
DirectByteBuffer
readBlock(int pieceNumber, int offset, int length)
void
removeListener(DiskManagerListener l)
void
saveResumeData(boolean interim_save)
void
saveState(boolean interim)
Save the individual file priorities map to DownloadManager.getData( "file_priorities" ).void
setFailed(int type, java.lang.String reason, java.lang.Throwable cause)
Stops the disk manager and informs the download manager that things have gone wrong.void
setFailedAndRecheck(DiskManagerFileInfo file, java.lang.String reason)
void
setMoveState(int state)
void
setPieceCheckingEnabled(boolean enabled)
void
setPieceDone(DiskManagerPieceImpl dmPiece, boolean done)
void
skippedFileSetChanged(DiskManagerFileInfo file)
void
start()
Start checking/allocatingboolean
stop(boolean closing)
Stop can go async if the download is in a 'starting' state - if so this method returns truevoid
storageTypeChanged(DiskManagerFileInfo file)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.biglybt.core.disk.DiskManager
getAllocationTask, getLatency
-
-
-
-
Field Detail
-
piece
private static final LWSDiskManager.sePiece piece
-
lws
private final LightWeightSeed lws
-
disk_access_controller
private final DiskAccessController disk_access_controller
-
save_file
private final java.io.File save_file
-
reader
private DMReader reader
-
checker_use_accessor
private DMChecker checker_use_accessor
-
piece_mapper
private DMPieceMapper piece_mapper
-
piece_map_use_accessor
private DMPieceMap piece_map_use_accessor
-
pieces
private final LWSDiskManager.sePiece[] pieces
-
availability
private final BitFlags availability
-
files
private DiskManagerFileInfoImpl[] files
-
internal_name
private java.lang.String internal_name
-
download_state
private final DownloadManagerState download_state
-
started
private boolean started
-
state
private int state
-
error_message
private java.lang.String error_message
-
error_type
private int error_type
-
-
Constructor Detail
-
LWSDiskManager
protected LWSDiskManager(LightWeightSeed _lws, java.io.File _save_file)
-
-
Method Detail
-
getName
public java.lang.String getName()
-
getDisplayName
public java.lang.String getDisplayName()
- Specified by:
getDisplayName
in interfaceDiskManagerHelper
-
getDownload
public DownloadManager getDownload()
- Specified by:
getDownload
in interfaceDiskManager
- Returns:
- MAY BE NULL
-
getCacheMode
public int getCacheMode()
- Specified by:
getCacheMode
in interfaceDiskManager
-
getReadStats
public long[] getReadStats()
- Specified by:
getReadStats
in interfaceDiskManager
-
getWriteStats
public long[] getWriteStats()
- Specified by:
getWriteStats
in interfaceDiskManager
-
start
public void start()
Description copied from interface:DiskManager
Start checking/allocating- Specified by:
start
in interfaceDiskManager
-
getFileInfo
protected DiskManagerFileInfoImpl[] getFileInfo(DMPieceMapperFile[] pm_files, java.io.File save_location)
-
setPieceDone
public void setPieceDone(DiskManagerPieceImpl dmPiece, boolean done)
- Specified by:
setPieceDone
in interfaceDiskManagerHelper
-
stop
public boolean stop(boolean closing)
Description copied from interface:DiskManager
Stop can go async if the download is in a 'starting' state - if so this method returns true- Specified by:
stop
in interfaceDiskManager
- Returns:
-
isStopped
public boolean isStopped()
- Specified by:
isStopped
in interfaceDiskManager
-
filesExist
public boolean filesExist()
- Specified by:
filesExist
in interfaceDiskManager
- Returns:
- whether all files exist and sizes match
-
createWriteRequest
public DiskManagerWriteRequest createWriteRequest(int pieceNumber, int offset, DirectByteBuffer data, java.lang.Object user_data)
- Specified by:
createWriteRequest
in interfaceDiskManager
-
enqueueWriteRequest
public void enqueueWriteRequest(DiskManagerWriteRequest request, DiskManagerWriteRequestListener listener)
Description copied from interface:DiskManager
enqueue an async write request- Specified by:
enqueueWriteRequest
in interfaceDiskManager
-
hasOutstandingWriteRequestForPiece
public boolean hasOutstandingWriteRequestForPiece(int piece_number)
- Specified by:
hasOutstandingWriteRequestForPiece
in interfaceDiskManager
-
hasOutstandingReadRequestForPiece
public boolean hasOutstandingReadRequestForPiece(int piece_number)
- Specified by:
hasOutstandingReadRequestForPiece
in interfaceDiskManager
-
hasOutstandingCheckRequestForPiece
public boolean hasOutstandingCheckRequestForPiece(int piece_number)
- Specified by:
hasOutstandingCheckRequestForPiece
in interfaceDiskManager
-
readBlock
public DirectByteBuffer readBlock(int pieceNumber, int offset, int length)
- Specified by:
readBlock
in interfaceDiskManager
-
createReadRequest
public DiskManagerReadRequest createReadRequest(int pieceNumber, int offset, int length)
- Specified by:
createReadRequest
in interfaceDiskManager
-
enqueueReadRequest
public void enqueueReadRequest(DiskManagerReadRequest request, DiskManagerReadRequestListener listener)
Description copied from interface:DiskManager
Enqueue an async disk read request.- Specified by:
enqueueReadRequest
in interfaceDiskManager
-
createCheckRequest
public DiskManagerCheckRequest createCheckRequest(int pieceNumber, java.lang.Object user_data)
Description copied from interface:DiskManager
Create a request to check a particular piece- Specified by:
createCheckRequest
in interfaceDiskManager
- Parameters:
pieceNumber
- -1 for a complete recheck request- Returns:
-
enqueueCheckRequest
public void enqueueCheckRequest(DiskManagerCheckRequest request, DiskManagerCheckRequestListener listener)
Description copied from interface:DiskManager
enqueue an asynchronous single piece check- Specified by:
enqueueCheckRequest
in interfaceDiskManager
-
enqueueCompleteRecheckRequest
public void enqueueCompleteRecheckRequest(DiskManagerCheckRequest request, DiskManagerCheckRequestListener listener)
Description copied from interface:DiskManager
recheck the entire torrent asynchronously, reporting each piece to the listener- Specified by:
enqueueCompleteRecheckRequest
in interfaceDiskManager
-
setPieceCheckingEnabled
public void setPieceCheckingEnabled(boolean enabled)
- Specified by:
setPieceCheckingEnabled
in interfaceDiskManager
-
saveResumeData
public void saveResumeData(boolean interim_save)
- Specified by:
saveResumeData
in interfaceDiskManager
-
getPieces
public DiskManagerPiece[] getPieces()
- Specified by:
getPieces
in interfaceDiskManager
-
getAvailability
public BitFlags getAvailability()
- Specified by:
getAvailability
in interfaceDiskManager
-
getPiece
public DiskManagerPiece getPiece(int index)
- Specified by:
getPiece
in interfaceDiskManager
-
isInteresting
public boolean isInteresting(int piece_num)
- Specified by:
isInteresting
in interfaceDiskManager
- Returns:
- true if the pieceNumber is Needed and not Done
-
isDone
public boolean isDone(int piece_num)
- Specified by:
isDone
in interfaceDiskManager
-
getNbPieces
public int getNbPieces()
- Specified by:
getNbPieces
in interfaceDiskManager
-
getFiles
public DiskManagerFileInfo[] getFiles()
- Specified by:
getFiles
in interfaceDiskManager
-
getFileSet
public DiskManagerFileInfoSet getFileSet()
- Specified by:
getFileSet
in interfaceDiskManager
-
getState
public int getState()
- Specified by:
getState
in interfaceDiskManager
-
getTotalLength
public long getTotalLength()
- Specified by:
getTotalLength
in interfaceDiskManager
-
getPieceLength
public int getPieceLength()
- Specified by:
getPieceLength
in interfaceDiskManager
-
getPieceLength
public int getPieceLength(int piece_number)
- Specified by:
getPieceLength
in interfaceDiskManager
-
getLastPieceLength
public int getLastPieceLength()
-
getRemaining
public long getRemaining()
Description copied from interface:DiskManager
Get remaining bytes to completion *including* DND files- Specified by:
getRemaining
in interfaceDiskManager
-
getRemainingExcludingDND
public long getRemainingExcludingDND()
- Specified by:
getRemainingExcludingDND
in interfaceDiskManager
-
getPercentDone
public int getPercentDone()
Description copied from interface:DiskManager
Get the percentage done during checking, allocation or initializing- Specified by:
getPercentDone
in interfaceDiskManager
- Returns:
- percent done * 1000 (1000 = 100%)
-
getPercentAllocated
public int getPercentAllocated()
- Specified by:
getPercentAllocated
in interfaceDiskManager
-
getPercentDoneExcludingDND
public int getPercentDoneExcludingDND()
- Specified by:
getPercentDoneExcludingDND
in interfaceDiskManager
-
getSizeExcludingDND
public long getSizeExcludingDND()
- Specified by:
getSizeExcludingDND
in interfaceDiskManager
-
getErrorMessage
public java.lang.String getErrorMessage()
- Specified by:
getErrorMessage
in interfaceDiskManager
-
getErrorType
public int getErrorType()
- Specified by:
getErrorType
in interfaceDiskManager
-
downloadEnded
public DiskManager.DownloadEndedProgress downloadEnded()
- Specified by:
downloadEnded
in interfaceDiskManager
-
moveDataFiles
public void moveDataFiles(java.io.File new_parent_dir, java.lang.String new_name)
- Specified by:
moveDataFiles
in interfaceDiskManager
-
getCompleteRecheckStatus
public int getCompleteRecheckStatus()
Description copied from interface:DiskManager
returns -1 if no recheck in progress, percentage complete in 1000 notation otherwise- Specified by:
getCompleteRecheckStatus
in interfaceDiskManager
- Returns:
-
getMoveProgress
public long[] getMoveProgress()
Description copied from interface:DiskManager
When a download's data is moving (for completion or removal events) this gives the [progress in 1000 notation,total_size] null if nothing's going on- Specified by:
getMoveProgress
in interfaceDiskManager
- Returns:
-
getMoveSubTask
public java.lang.String getMoveSubTask()
- Specified by:
getMoveSubTask
in interfaceDiskManager
-
setMoveState
public void setMoveState(int state)
- Specified by:
setMoveState
in interfaceDiskManager
-
checkBlockConsistencyForWrite
public boolean checkBlockConsistencyForWrite(java.lang.String originator, int pieceNumber, int offset, DirectByteBuffer data)
Description copied from interface:DiskManager
method for checking that the block details are sensible- Specified by:
checkBlockConsistencyForWrite
in interfaceDiskManager
- Returns:
-
checkBlockConsistencyForRead
public boolean checkBlockConsistencyForRead(java.lang.String originator, boolean peer_request, int pieceNumber, int offset, int length)
Description copied from interface:DiskManager
method for checking that the block details are sensible- Specified by:
checkBlockConsistencyForRead
in interfaceDiskManager
- Returns:
-
checkBlockConsistencyForHint
public boolean checkBlockConsistencyForHint(java.lang.String originator, int pieceNumber, int offset, int length)
- Specified by:
checkBlockConsistencyForHint
in interfaceDiskManager
-
addListener
public void addListener(DiskManagerListener l)
- Specified by:
addListener
in interfaceDiskManager
-
removeListener
public void removeListener(DiskManagerListener l)
- Specified by:
removeListener
in interfaceDiskManager
-
hasListener
public boolean hasListener(DiskManagerListener l)
- Specified by:
hasListener
in interfaceDiskManager
-
saveState
public void saveState(boolean interim)
Description copied from interface:DiskManager
Save the individual file priorities map to DownloadManager.getData( "file_priorities" ).- Specified by:
saveState
in interfaceDiskManager
-
getDiskAccessController
public DiskAccessController getDiskAccessController()
- Specified by:
getDiskAccessController
in interfaceDiskManagerHelper
-
getPieceMap
public DMPieceMap getPieceMap()
Description copied from interface:DiskManager
DON'T CACHE the DMPieceMap - as it is designed to be discarded when not in use- Specified by:
getPieceMap
in interfaceDiskManager
- Returns:
-
getPieceList
public DMPieceList getPieceList(int piece_number)
- Specified by:
getPieceList
in interfaceDiskManager
- Specified by:
getPieceList
in interfaceDiskManagerHelper
-
getChecker
protected DMChecker getChecker()
-
getPieceHash
public byte[] getPieceHash(int piece_number) throws TOTorrentException
- Specified by:
getPieceHash
in interfaceDiskManagerHelper
- Throws:
TOTorrentException
-
getRecheckScheduler
public DiskManagerRecheckScheduler getRecheckScheduler()
- Specified by:
getRecheckScheduler
in interfaceDiskManagerHelper
-
downloadRemoved
public void downloadRemoved()
- Specified by:
downloadRemoved
in interfaceDiskManager
-
setFailed
public void setFailed(int type, java.lang.String reason, java.lang.Throwable cause)
Description copied from interface:DiskManagerHelper
Stops the disk manager and informs the download manager that things have gone wrong.- Specified by:
setFailed
in interfaceDiskManagerHelper
-
setFailedAndRecheck
public void setFailedAndRecheck(DiskManagerFileInfo file, java.lang.String reason)
- Specified by:
setFailedAndRecheck
in interfaceDiskManagerHelper
-
getTorrent
public TOTorrent getTorrent()
- Specified by:
getTorrent
in interfaceDiskManager
- Specified by:
getTorrent
in interfaceDiskManagerHelper
-
getStorageTypes
public java.lang.String[] getStorageTypes()
Description copied from interface:DiskManagerHelper
Returns the storage type for all files. According toDiskManagerUtil.convertDMStorageTypeFromString(String)
, values are:
"R"DiskManagerFileInfo.ST_REORDER
"L"DiskManagerFileInfo.ST_LINEAR
"C"DiskManagerFileInfo.ST_COMPACT
"X"DiskManagerFileInfo.ST_REORDER_COMPACT
- Specified by:
getStorageTypes
in interfaceDiskManagerHelper
-
getStorageType
public java.lang.String getStorageType(int fileIndex)
Description copied from interface:DiskManagerHelper
Returns the storage type for file atfileIndex
. According toDiskManagerUtil.convertDMStorageTypeFromString(String)
, values are:
"R"DiskManagerFileInfo.ST_REORDER
"L"DiskManagerFileInfo.ST_LINEAR
"C"DiskManagerFileInfo.ST_COMPACT
"X"DiskManagerFileInfo.ST_REORDER_COMPACT
- Specified by:
getStorageType
in interfaceDiskManagerHelper
-
skippedFileSetChanged
public void skippedFileSetChanged(DiskManagerFileInfo file)
- Specified by:
skippedFileSetChanged
in interfaceDiskManagerHelper
-
priorityChanged
public void priorityChanged(DiskManagerFileInfo file)
- Specified by:
priorityChanged
in interfaceDiskManagerHelper
-
storageTypeChanged
public void storageTypeChanged(DiskManagerFileInfo file)
- Specified by:
storageTypeChanged
in interfaceDiskManagerHelper
-
getSaveLocation
public java.io.File getSaveLocation()
- Specified by:
getSaveLocation
in interfaceDiskManager
-
getInternalName
public java.lang.String getInternalName()
- Specified by:
getInternalName
in interfaceDiskManagerHelper
-
getDownloadState
public DownloadManagerState getDownloadState()
- Specified by:
getDownloadState
in interfaceDiskManagerHelper
-
getPriorityChangeMarker
public long getPriorityChangeMarker()
- Specified by:
getPriorityChangeMarker
in interfaceDiskManager
-
generateEvidence
public void generateEvidence(IndentWriter writer)
- Specified by:
generateEvidence
in interfaceDiskManager
-
-