Class CacheFileManagerImpl
java.lang.Object
com.biglybt.core.diskmanager.cache.impl.CacheFileManagerImpl
- All Implemented Interfaces:
CacheFileManager, AEDiagnosticsEvidenceGenerator
public class CacheFileManagerImpl
extends Object
implements CacheFileManager, AEDiagnosticsEvidenceGenerator
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected longprotected longstatic final intprotected booleanprotected final LinkedHashMapprivate longprotected WeakHashMapprotected longprotected longprotected longprotected booleanprotected longprotected longprotected longprotected boolean(package private) longstatic final booleanstatic final longprotected longprotected longprotected final FMFileManagerprotected longprotected longprivate static final LogIDsprotected CacheFileManagerStatsImplstatic final intprotected final AEMonitorprotected final Mapprotected WeakHashMap -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddCacheSpace(CacheEntry new_entry) protected CacheEntryallocateCacheSpace(int entry_type, CacheFileWithCache file, DirectByteBuffer buffer, long file_position, int length) allocates space but does NOT add it to the cache list due to synchronization issues.protected voidcacheBytesRead(int num) protected voidcacheBytesWritten(long num) protected voidcacheEntryUsed(CacheEntry entry) protected voidprotected voidcloseFile(CacheFileWithCache file) protected static intconvertCacheToFileType(int cache_type) protected static intconvertFileToCacheType(int file_type) createFile(CacheFileOwner owner, StringInterner.FileKey file, int type, boolean force) protected voidfileBytesRead(int num) protected voidfileBytesWritten(long num) voidgenerate(IndentWriter writer) protected boolean[]getBytesInCache(TOTorrent torrent, long[] absoluteOffsets, long[] lengths) protected longprotected longprotected longprotected longlongprotected longprotected longlonglonglonggetStats()protected voidinitialise(boolean enabled, boolean enable_read, boolean enable_write, long size, long not_smaller_than) protected booleanprotected booleanprotected booleanprotected voidreleaseCacheSpace(CacheEntry entry) protected voidrethrow(CacheFile file, FMFileManagerException e)
-
Field Details
-
LOGID
-
DEBUG
public static final boolean DEBUG- See Also:
-
CACHE_CLEANER_TICKS
public static final int CACHE_CLEANER_TICKS- See Also:
-
STATS_UPDATE_FREQUENCY
public static final int STATS_UPDATE_FREQUENCY- See Also:
-
DIRTY_CACHE_WRITE_MAX_AGE
public static final long DIRTY_CACHE_WRITE_MAX_AGE- See Also:
-
cache_enabled
protected boolean cache_enabled -
cache_read_enabled
protected boolean cache_read_enabled -
cache_write_enabled
protected boolean cache_write_enabled -
cache_size
protected long cache_size -
cache_files_not_smaller_than
protected long cache_files_not_smaller_than -
cache_minimum_free_size
protected long cache_minimum_free_size -
cache_space_free
protected long cache_space_free -
cache_file_id_next
private long cache_file_id_next -
file_manager
-
cache_files
-
updated_cache_files
-
cache_entries
-
stats
-
torrent_to_cache_file_map
-
cache_bytes_written
protected long cache_bytes_written -
cache_bytes_read
protected long cache_bytes_read -
file_bytes_written
protected long file_bytes_written -
file_bytes_read
protected long file_bytes_read -
cache_read_count
protected long cache_read_count -
cache_write_count
protected long cache_write_count -
file_read_count
protected long file_read_count -
file_write_count
protected long file_write_count -
this_mon
-
cleaner_ticks
long cleaner_ticks
-
-
Constructor Details
-
CacheFileManagerImpl
public CacheFileManagerImpl()
-
-
Method Details
-
convertCacheToFileType
protected static int convertCacheToFileType(int cache_type) -
convertFileToCacheType
protected static int convertFileToCacheType(int file_type) -
initialise
protected void initialise(boolean enabled, boolean enable_read, boolean enable_write, long size, long not_smaller_than) -
isWriteCacheEnabled
protected boolean isWriteCacheEnabled() -
isReadCacheEnabled
protected boolean isReadCacheEnabled() -
createFile
public CacheFile createFile(CacheFileOwner owner, StringInterner.FileKey file, int type, boolean force) throws CacheFileManagerException - Specified by:
createFilein interfaceCacheFileManager- Throws:
CacheFileManagerException
-
getStats
- Specified by:
getStatsin interfaceCacheFileManager
-
isCacheEnabled
protected boolean isCacheEnabled() -
allocateCacheSpace
protected CacheEntry allocateCacheSpace(int entry_type, CacheFileWithCache file, DirectByteBuffer buffer, long file_position, int length) throws CacheFileManagerException allocates space but does NOT add it to the cache list due to synchronization issues. Basically the caller mustn't hold their monitor when calling allocate, as a flush may result in one or more other files being flushed which results in their monitor being taken, and we've got an A->B and B->A classic deadlock situation. However, we must keep the file's cache and our cache in step. It is not acceptable to have an entry inserted into our records but not in the file's as this then screws up the flush algorithm (which assumes that if it finds an entry in our list, a flush of that file is guaranteed to release space). Therefore we add the cache entry in addCacheSpace so that the caller can safely do this while synchronised firstly on its monitor and then we can sync on our. Hence we only ever get A->B monitor grabs which won't deadlock- Parameters:
file-buffer-file_position-length-- Returns:
- Throws:
CacheFileManagerException
-
cacheStatsAndCleaner
protected void cacheStatsAndCleaner() -
addCacheSpace
- Throws:
CacheFileManagerException
-
cacheEntryUsed
- Throws:
CacheFileManagerException
-
releaseCacheSpace
- Throws:
CacheFileManagerException
-
getCacheSize
protected long getCacheSize() -
getCacheUsed
protected long getCacheUsed() -
cacheBytesWritten
protected void cacheBytesWritten(long num) -
cacheBytesRead
protected void cacheBytesRead(int num) -
fileBytesWritten
protected void fileBytesWritten(long num) -
fileBytesRead
protected void fileBytesRead(int num) -
getBytesWrittenToCache
protected long getBytesWrittenToCache() -
getBytesWrittenToFile
protected long getBytesWrittenToFile() -
getBytesReadFromCache
protected long getBytesReadFromCache() -
getBytesReadFromFile
protected long getBytesReadFromFile() -
getCacheReadCount
public long getCacheReadCount() -
getCacheWriteCount
public long getCacheWriteCount() -
getFileReadCount
public long getFileReadCount() -
getFileWriteCount
public long getFileWriteCount() -
closeFile
-
getBytesInCache
-
rethrow
- Throws:
CacheFileManagerException
-
generate
- Specified by:
generatein interfaceAEDiagnosticsEvidenceGenerator
-