Package com.biglybt.core.dht.db.impl
Class DHTDBImpl
- java.lang.Object
-
- com.biglybt.core.dht.db.impl.DHTDBImpl
-
- All Implemented Interfaces:
DHTDB
,DHTDBStats
public class DHTDBImpl extends java.lang.Object implements DHTDB, DHTDBStats
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
DHTDBImpl.adapterFacade
protected static class
DHTDBImpl.SurveyContactState
-
Field Summary
-
Fields inherited from interface com.biglybt.core.dht.db.DHTDBStats
VD_DIRECT_SIZE, VD_DIV_FREQ, VD_DIV_SIZE, VD_INDIRECT_SIZE, VD_LOCAL_SIZE, VD_VALUE_COUNT
-
-
Constructor Summary
Constructors Constructor Description DHTDBImpl(DHTStorageAdapter _adapter, int _original_republish_interval, int _cache_republish_interval, byte _protocol_version, DHTLogger _logger)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addToPrefixMap(DHTDBMapping mapping)
protected boolean
applyRF(DHTDBMapping mapping)
protected void
banContact(DHTTransportContact contact, java.lang.String reason)
protected void
checkCacheExpiration(boolean force)
protected void
checkPreciousStuff()
protected void
decrementValueAdds(DHTTransportContact contact)
void
destroy()
protected void
doQuery(byte[] survey_my_id, int total, java.util.Map<DHTDBMapping,java.util.List<DHTTransportContact>> mapping_to_node_map, java.util.LinkedList<java.util.Map.Entry<DHTTransportContact,ByteArrayHashMap<java.util.List<DHTDBMapping>>>> to_do, java.util.Map<DHTTransportContact,java.lang.Object[]> replies, DHTTransportContact done_contact, java.util.List<DHTDBMapping> done_mappings, java.util.List<byte[]> done_reply)
DHTDBLookupResult
get(DHTTransportContact reader, HashWrapper key, int max_values, short flags, boolean external_request)
DHTDBValue
get(HashWrapper key)
Internal lookup for locally originated valuesprotected DHTStorageAdapter
getAdapter()
java.util.List<DHTDBValue>
getAllValues(HashWrapper key)
DHTDBValue
getAnyValue(HashWrapper key)
Returns a value for the given key (local or remote) if foundDHTStorageBlock[]
getDirectKeyBlocks()
int
getKeyBlockCount()
DHTStorageBlock
getKeyBlockDetails(byte[] key)
int
getKeyCount()
java.util.Iterator<HashWrapper>
getKeys()
Returns an iterator over HashWrapper values denoting the snapshot of keys Thus by the time a key is used the entry may no longer existprotected DHTTransportContact
getLocalContact()
int
getLocalKeyCount()
protected int
getNextValueVersion()
int
getSize()
DHTDBStats
getStats()
int
getValueCount()
int[]
getValueDetails()
returned values indexed by above VD_ constants for meaningboolean
hasKey(HashWrapper key)
protected void
incrementValueAdds(DHTTransportContact contact)
boolean
isEmpty()
boolean
isKeyBlocked(byte[] key)
DHTStorageBlock
keyBlockRequest(DHTTransportContact direct_sender, byte[] request, byte[] signature)
protected void
log(java.lang.String str)
void
print(boolean full)
protected void
processSurvey(byte[] survey_my_id, java.util.List<HashWrapper> applicable_keys, ByteArrayHashMap<DHTTransportContact> survey)
protected void
queriesComplete(byte[] survey_my_id, java.util.Map<DHTDBMapping,java.util.List<DHTTransportContact>> mapping_to_node_map, java.util.Map<DHTTransportContact,java.lang.Object[]> replies)
DHTTransportQueryStoreReply
queryStore(DHTTransportContact originating_contact, int header_len, java.util.List<java.lang.Object[]> keys)
protected void
rebuildIPBloomFilter(boolean increase_size)
DHTDBValue
remove(DHTTransportContact originator, HashWrapper key)
Local remove - returns a value suitable for putting in the DHTprotected void
removeFromPrefixMap(DHTDBMapping mapping)
protected void
reportSizes(java.lang.String op)
protected int[]
republishCachedMappings()
protected int
republishOriginalMappings()
void
setControl(DHTControl _control)
void
setSleeping(boolean asleep)
void
setSuspended(boolean susp)
private void
sleep()
byte
store(DHTTransportContact sender, HashWrapper key, DHTTransportValue[] values)
Remote storeDHTDBValue
store(HashWrapper key, byte[] value, short flags, byte life_hours, byte replication_control)
Local storeprotected void
survey()
-
-
-
Field Detail
-
MAX_VALUE_LIFETIME
private static final int MAX_VALUE_LIFETIME
- See Also:
- Constant Field Values
-
original_republish_interval
private final int original_republish_interval
-
ORIGINAL_REPUBLISH_INTERVAL_GRACE
public static final int ORIGINAL_REPUBLISH_INTERVAL_GRACE
- See Also:
- Constant Field Values
-
ENABLE_PRECIOUS_STUFF
private static final boolean ENABLE_PRECIOUS_STUFF
- See Also:
- Constant Field Values
-
PRECIOUS_CHECK_INTERVAL
private static final int PRECIOUS_CHECK_INTERVAL
- See Also:
- Constant Field Values
-
cache_republish_interval
private final int cache_republish_interval
-
MIN_CACHE_EXPIRY_CHECK_INTERVAL
private static final long MIN_CACHE_EXPIRY_CHECK_INTERVAL
- See Also:
- Constant Field Values
-
last_cache_expiry_check
private long last_cache_expiry_check
-
IP_BLOOM_FILTER_REBUILD_PERIOD
private static final long IP_BLOOM_FILTER_REBUILD_PERIOD
- See Also:
- Constant Field Values
-
IP_COUNT_BLOOM_SIZE_INCREASE_CHUNK
private static final int IP_COUNT_BLOOM_SIZE_INCREASE_CHUNK
- See Also:
- Constant Field Values
-
ip_count_bloom_filter
private BloomFilter ip_count_bloom_filter
-
VALUE_VERSION_CHUNK
private static final int VALUE_VERSION_CHUNK
- See Also:
- Constant Field Values
-
next_value_version
private int next_value_version
-
next_value_version_left
private int next_value_version_left
-
QUERY_STORE_REQUEST_ENTRY_SIZE
protected static final int QUERY_STORE_REQUEST_ENTRY_SIZE
- See Also:
- Constant Field Values
-
QUERY_STORE_REPLY_ENTRY_SIZE
protected static final int QUERY_STORE_REPLY_ENTRY_SIZE
- See Also:
- Constant Field Values
-
stored_values
final java.util.Map<HashWrapper,DHTDBMapping> stored_values
-
stored_values_prefix_map
private final java.util.Map<DHTDBMapping.ShortHash,DHTDBMapping> stored_values_prefix_map
-
control
DHTControl control
-
adapter
private final DHTStorageAdapter adapter
-
router
DHTRouter router
-
local_contact
DHTTransportContact local_contact
-
logger
final DHTLogger logger
-
MAX_TOTAL_SIZE
private static final long MAX_TOTAL_SIZE
- See Also:
- Constant Field Values
-
total_size
int total_size
-
total_values
int total_values
-
total_keys
int total_keys
-
total_local_keys
private int total_local_keys
-
force_original_republish
boolean force_original_republish
-
ip_filter
private final IpFilter ip_filter
-
this_mon
final AEMonitor this_mon
-
DEBUG_SURVEY
private static final boolean DEBUG_SURVEY
- See Also:
- Constant Field Values
-
SURVEY_ONLY_RF_KEYS
private static final boolean SURVEY_ONLY_RF_KEYS
- See Also:
- Constant Field Values
-
SURVEY_PERIOD
private static final int SURVEY_PERIOD
- See Also:
- Constant Field Values
-
SURVEY_STATE_INACT_TIMEOUT
private static final int SURVEY_STATE_INACT_TIMEOUT
- See Also:
- Constant Field Values
-
SURVEY_STATE_MAX_LIFE_TIMEOUT
private static final int SURVEY_STATE_MAX_LIFE_TIMEOUT
- See Also:
- Constant Field Values
-
SURVEY_STATE_MAX_LIFE_RAND
private static final int SURVEY_STATE_MAX_LIFE_RAND
- See Also:
- Constant Field Values
-
MAX_SURVEY_SIZE
private static final int MAX_SURVEY_SIZE
- See Also:
- Constant Field Values
-
MAX_SURVEY_STATE_SIZE
private static final int MAX_SURVEY_STATE_SIZE
- See Also:
- Constant Field Values
-
survey_in_progress
private volatile boolean survey_in_progress
-
survey_mapping_times
private final java.util.Map<HashWrapper,java.lang.Long> survey_mapping_times
-
survey_state
private final java.util.Map<HashWrapper,DHTDBImpl.SurveyContactState> survey_state
-
precious_timer
private TimerEventPeriodic precious_timer
-
original_republish_timer
private TimerEventPeriodic original_republish_timer
-
cache_republish_timer
private TimerEventPeriodic cache_republish_timer
-
bloom_timer
private final TimerEventPeriodic bloom_timer
-
survey_timer
private TimerEventPeriodic survey_timer
-
sleeping
private boolean sleeping
-
suspended
private boolean suspended
-
destroyed
private volatile boolean destroyed
-
-
Constructor Detail
-
DHTDBImpl
public DHTDBImpl(DHTStorageAdapter _adapter, int _original_republish_interval, int _cache_republish_interval, byte _protocol_version, DHTLogger _logger)
-
-
Method Detail
-
setControl
public void setControl(DHTControl _control)
- Specified by:
setControl
in interfaceDHTDB
-
store
public DHTDBValue store(HashWrapper key, byte[] value, short flags, byte life_hours, byte replication_control)
Description copied from interface:DHTDB
Local store
-
store
public byte store(DHTTransportContact sender, HashWrapper key, DHTTransportValue[] values)
Description copied from interface:DHTDB
Remote store
-
get
public DHTDBLookupResult get(DHTTransportContact reader, HashWrapper key, int max_values, short flags, boolean external_request)
-
get
public DHTDBValue get(HashWrapper key)
Description copied from interface:DHTDB
Internal lookup for locally originated values
-
getAnyValue
public DHTDBValue getAnyValue(HashWrapper key)
Description copied from interface:DHTDB
Returns a value for the given key (local or remote) if found- Specified by:
getAnyValue
in interfaceDHTDB
- Returns:
-
getAllValues
public java.util.List<DHTDBValue> getAllValues(HashWrapper key)
- Specified by:
getAllValues
in interfaceDHTDB
-
hasKey
public boolean hasKey(HashWrapper key)
-
remove
public DHTDBValue remove(DHTTransportContact originator, HashWrapper key)
Description copied from interface:DHTDB
Local remove - returns a value suitable for putting in the DHT
-
keyBlockRequest
public DHTStorageBlock keyBlockRequest(DHTTransportContact direct_sender, byte[] request, byte[] signature)
- Specified by:
keyBlockRequest
in interfaceDHTDB
-
getKeyBlockDetails
public DHTStorageBlock getKeyBlockDetails(byte[] key)
- Specified by:
getKeyBlockDetails
in interfaceDHTDB
-
isKeyBlocked
public boolean isKeyBlocked(byte[] key)
- Specified by:
isKeyBlocked
in interfaceDHTDB
-
getDirectKeyBlocks
public DHTStorageBlock[] getDirectKeyBlocks()
- Specified by:
getDirectKeyBlocks
in interfaceDHTDB
-
getKeyCount
public int getKeyCount()
- Specified by:
getKeyCount
in interfaceDHTDBStats
-
getLocalKeyCount
public int getLocalKeyCount()
- Specified by:
getLocalKeyCount
in interfaceDHTDBStats
-
getValueCount
public int getValueCount()
- Specified by:
getValueCount
in interfaceDHTDBStats
-
getSize
public int getSize()
- Specified by:
getSize
in interfaceDHTDBStats
-
getValueDetails
public int[] getValueDetails()
Description copied from interface:DHTDBStats
returned values indexed by above VD_ constants for meaning- Specified by:
getValueDetails
in interfaceDHTDBStats
- Returns:
-
getKeyBlockCount
public int getKeyBlockCount()
- Specified by:
getKeyBlockCount
in interfaceDHTDBStats
-
getKeys
public java.util.Iterator<HashWrapper> getKeys()
Description copied from interface:DHTDB
Returns an iterator over HashWrapper values denoting the snapshot of keys Thus by the time a key is used the entry may no longer exist
-
republishOriginalMappings
protected int republishOriginalMappings()
-
republishCachedMappings
protected int[] republishCachedMappings()
-
checkCacheExpiration
protected void checkCacheExpiration(boolean force)
-
addToPrefixMap
protected void addToPrefixMap(DHTDBMapping mapping)
-
removeFromPrefixMap
protected void removeFromPrefixMap(DHTDBMapping mapping)
-
checkPreciousStuff
protected void checkPreciousStuff()
-
getLocalContact
protected DHTTransportContact getLocalContact()
-
getAdapter
protected DHTStorageAdapter getAdapter()
-
log
protected void log(java.lang.String str)
-
getStats
public DHTDBStats getStats()
-
survey
protected void survey()
-
processSurvey
protected void processSurvey(byte[] survey_my_id, java.util.List<HashWrapper> applicable_keys, ByteArrayHashMap<DHTTransportContact> survey)
-
applyRF
protected boolean applyRF(DHTDBMapping mapping)
-
doQuery
protected void doQuery(byte[] survey_my_id, int total, java.util.Map<DHTDBMapping,java.util.List<DHTTransportContact>> mapping_to_node_map, java.util.LinkedList<java.util.Map.Entry<DHTTransportContact,ByteArrayHashMap<java.util.List<DHTDBMapping>>>> to_do, java.util.Map<DHTTransportContact,java.lang.Object[]> replies, DHTTransportContact done_contact, java.util.List<DHTDBMapping> done_mappings, java.util.List<byte[]> done_reply)
-
queriesComplete
protected void queriesComplete(byte[] survey_my_id, java.util.Map<DHTDBMapping,java.util.List<DHTTransportContact>> mapping_to_node_map, java.util.Map<DHTTransportContact,java.lang.Object[]> replies)
-
sleep
private void sleep()
-
setSleeping
public void setSleeping(boolean asleep)
- Specified by:
setSleeping
in interfaceDHTDB
-
setSuspended
public void setSuspended(boolean susp)
- Specified by:
setSuspended
in interfaceDHTDB
-
queryStore
public DHTTransportQueryStoreReply queryStore(DHTTransportContact originating_contact, int header_len, java.util.List<java.lang.Object[]> keys)
- Specified by:
queryStore
in interfaceDHTDB
-
banContact
protected void banContact(DHTTransportContact contact, java.lang.String reason)
-
incrementValueAdds
protected void incrementValueAdds(DHTTransportContact contact)
-
decrementValueAdds
protected void decrementValueAdds(DHTTransportContact contact)
-
rebuildIPBloomFilter
protected void rebuildIPBloomFilter(boolean increase_size)
-
reportSizes
protected void reportSizes(java.lang.String op)
-
getNextValueVersion
protected int getNextValueVersion()
-
-