Class StartStopRulesDefaultPlugin
- java.lang.Object
-
- com.biglybt.plugin.startstoprules.defaultplugin.StartStopRulesDefaultPlugin
-
- All Implemented Interfaces:
COConfigurationListener
,AEDiagnosticsEvidenceGenerator
,Plugin
public class StartStopRulesDefaultPlugin extends java.lang.Object implements Plugin, COConfigurationListener, AEDiagnosticsEvidenceGenerator
Handles Starting and Stopping of torrents. TODO: RANK_TIMED is quite a hack and is spread all over. It needs to be redone, probably with a timer on each seeding torrent which triggers when time is up and it needs to stop. BUG: When "AutoStart 0 Peers" is on, and minSpeedForActivelySeeding is enabled, the 0 peer torrents will continuously switch from seeding to queued, probably due to the connection attempt registering speed. This might be fixed by the "wait XX ms before switching active state" code. Other Notes: "CD" is often used to refer to "Seed" or "Seeding", because "C" sounds like "See"
-
-
Nested Class Summary
-
Field Summary
Fields Modifier and Type Field Description private int
_maxActive
private int
_maxActiveWhenSeeding
private boolean
_maxActiveWhenSeedingEnabled
private static boolean
bAlreadyInitialized
private boolean
bAutoReposition
private boolean
bAutoStart0Peers
protected boolean
bDebugLog
Whether Debug Info is written to the log and tooltipprivate boolean
bDownloadTestActive
private boolean
bMaxDownloadIgnoreChecking
private boolean
bStartNoMoreSeedsWhenUpLimitMet
private boolean
bStartNoMoreSeedsWhenUpLimitMetPercent
private int
bStartNoMoreSeedsWhenUpLimitMetSlack
private boolean
bStopOnceBandwidthMet
private boolean
bTagFirstPriority
private long
changeCheckCount
private long
changeCheckMaxMS
private long
changeCheckTotalMS
private static int
CHECK_FOR_GROSS_CHANGE_PERIOD
Check for non triggerable changes ever period of time (in ms)private boolean
closingDown
private TableContextMenuItem
debugMenuItem
protected LoggerChannel
dlog
private DefaultRankCalculator
dlr_current_active
private long
dlr_max_rate_time
private DownloadManager
download_manager
private boolean
ENABLE_DLOG
private static int
FORCE_CHECK_PERIOD
Force at least one check every period of time (in ms).private Tag
fp_tag
private int
globalDownloadLimit
private Average
globalDownloadSpeedAverage
private int
globalUploadLimit
private int
globalUploadWhenSeedingLimit
private int
iDownloadReTestMillis
private int
iDownloadSortType
private int
iDownloadTestTimeMillis
private static float
IGNORE_SLOT_THRESHOLD_FACTOR
private boolean
immediateProcessingScheduled
private int
iRankType
Ranking System to use.private CopyOnWriteList
listenersFP
protected LoggerChannel
log
private int
maxConfiguredDownloads
private int
maxOverLimitSeeding
private int
maxStalledSeeding
Maximimum # of stalled torrents that are in seeding modeprivate static int
MIN_DOWNLOADING_STARTUP_WAIT
private static int
MIN_FIRST_SCRAPE_WAIT
Wait at least xx ms for first scrape, before starting completed torrentsprivate static int
MIN_SEEDING_STARTUP_WAIT
Wait xx ms before starting completed torrents (so scrapes can come in)private int
minDownloads
private int
minSpeedForActiveSeeding
private long
minTimeAlive
private long
monoStartedOn
When rules class started.private int
numReservedSeedingSlots
static boolean
pauseChangeFlagChecker
private PluginInterface
pi
protected PluginConfig
plugin_config
private static int
PROCESS_CHECK_PERIOD
Interval in ms between checks to see if thesomethingChanged
flag changedprivate long
processCount
private long
processLastComplete
private long
processMaxMS
private long
processMergeCount
Request that the startstop rules process.private long
processTotalGap
private long
processTotalMS
private long
processTotalRecalcs
private long
processTotalZeroRecalcs
static int
RANK_NONE
Do not rank completed torrentsstatic int
RANK_PEERCOUNT
Rank completed torrents using the peers count, weighted by the seeds to peers ratiostatic int
RANK_SEEDCOUNT
Rank completed torrents using Seed Count methodstatic int
RANK_SPRATIO
Rank completed torrents using Seeds:Peer Ratiostatic int
RANK_TIMED
Rank completed torrents using a timed rotation of minTimeAliveprivate static java.util.Map<java.lang.Object,DefaultRankCalculator>
rankCalculatorMap
Map to relate downloadData to a Download OR reserved slotprivate java.util.Set<DefaultRankCalculator>
ranksToRecalc
private AEMonitor
ranksToRecalc_mon
private StartStopRulesDefaultPlugin.RecalcSeedingRanksTask
recalcSeedingRanksTask
Used only for RANK_TIMED.private java.util.LinkedList<RankCalculatorSlotReserver>
reservedSlots
private java.util.Set<DefaultRankCalculator>
reservedSlotsAllocated
private java.lang.String
slotStatus
private static int
SMOOTHING_PERIOD
private static int
SMOOTHING_PERIOD_SECS
private boolean
somethingChanged
private DefaultRankCalculator[]
sortedArrayCache
this is used to reduce the number of comperator invocations by keeping a mostly sorted copy around, must be nulled whenever the map is changedprivate static java.lang.String
sStates
private boolean
stalledSeedingIgnoreZP
private StartStopRulesDefaultPlugin.UIAdapter
swt_ui
private TagManager
tag_manager
private boolean
tagsHaveDLLimits
private AEMonitor
this_mon
-
Constructor Summary
Constructors Constructor Description StartStopRulesDefaultPlugin()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addListener(StartStopRulesFPListener listener)
private java.lang.String
boolDebug(boolean b)
private int
calcMaxSeeders(int iDLs)
void
configurationSaved()
void
generate(IndentWriter writer)
java.util.List
getFPListeners()
protected int
getMaxActive()
private int
getMaxDownloads()
static DefaultRankCalculator
getRankCalculator(Download dl)
protected java.lang.String
getSlotStatus()
protected boolean
getTagFP()
TagManager
getTagManager()
private void
handleCompletedDownload(DefaultRankCalculator[] dlDataArray, DefaultRankCalculator dlData, StartStopRulesDefaultPlugin.ProcessVars vars, StartStopRulesDefaultPlugin.TotalsStats totals)
Process Completed (Seeding) downloads, starting and stopping as neededprivate void
handleInCompleteDownload(DefaultRankCalculator dlData, StartStopRulesDefaultPlugin.ProcessVars vars, StartStopRulesDefaultPlugin.ProcessTagVars[] tagVars, StartStopRulesDefaultPlugin.TotalsStats totals)
boolean
hasTagDLLimits()
void
initialize(PluginInterface _plugin_interface)
This method is called when the Plugin is loaded by the clientstatic void
load(PluginInterface plugin_interface)
private void
printDebugChanges(java.lang.String sPrefixFirstLine, java.lang.String[] oldEntries, java.lang.String[] newEntries, java.lang.String sDebugLine, java.lang.String sPrefix, boolean bAlwaysPrintNoChangeLine, DefaultRankCalculator dlData)
protected void
process()
private void
processDownloadingRules(java.util.List<DefaultRankCalculator> downloads)
private void
recalcAllSeedingRanks()
private void
reloadConfigParams()
void
removeListener(StartStopRulesFPListener listener)
void
requestProcessCycle(DefaultRankCalculator rankToRecalc)
protected void
setFPTagStatus(DownloadManager dm, boolean is_fp)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.biglybt.pif.Plugin
getInitialProperties
-
-
-
-
Field Detail
-
sStates
private static final java.lang.String sStates
- See Also:
- Constant Field Values
-
RANK_NONE
public static final int RANK_NONE
Do not rank completed torrents- See Also:
- Constant Field Values
-
RANK_SPRATIO
public static final int RANK_SPRATIO
Rank completed torrents using Seeds:Peer Ratio- See Also:
- Constant Field Values
-
RANK_SEEDCOUNT
public static final int RANK_SEEDCOUNT
Rank completed torrents using Seed Count method- See Also:
- Constant Field Values
-
RANK_TIMED
public static final int RANK_TIMED
Rank completed torrents using a timed rotation of minTimeAlive- See Also:
- Constant Field Values
-
RANK_PEERCOUNT
public static final int RANK_PEERCOUNT
Rank completed torrents using the peers count, weighted by the seeds to peers ratio- See Also:
- Constant Field Values
-
FORCE_CHECK_PERIOD
private static final int FORCE_CHECK_PERIOD
Force at least one check every period of time (in ms). Used in ChangeFlagCheckerTask- See Also:
- Constant Field Values
-
CHECK_FOR_GROSS_CHANGE_PERIOD
private static final int CHECK_FOR_GROSS_CHANGE_PERIOD
Check for non triggerable changes ever period of time (in ms)- See Also:
- Constant Field Values
-
PROCESS_CHECK_PERIOD
private static final int PROCESS_CHECK_PERIOD
Interval in ms between checks to see if thesomethingChanged
flag changed- See Also:
- Constant Field Values
-
MIN_SEEDING_STARTUP_WAIT
private static final int MIN_SEEDING_STARTUP_WAIT
Wait xx ms before starting completed torrents (so scrapes can come in)- See Also:
- Constant Field Values
-
MIN_FIRST_SCRAPE_WAIT
private static final int MIN_FIRST_SCRAPE_WAIT
Wait at least xx ms for first scrape, before starting completed torrents- See Also:
- Constant Field Values
-
IGNORE_SLOT_THRESHOLD_FACTOR
private static final float IGNORE_SLOT_THRESHOLD_FACTOR
- See Also:
- Constant Field Values
-
MIN_DOWNLOADING_STARTUP_WAIT
private static final int MIN_DOWNLOADING_STARTUP_WAIT
- See Also:
- Constant Field Values
-
SMOOTHING_PERIOD_SECS
private static final int SMOOTHING_PERIOD_SECS
- See Also:
- Constant Field Values
-
SMOOTHING_PERIOD
private static final int SMOOTHING_PERIOD
- See Also:
- Constant Field Values
-
tag_manager
private TagManager tag_manager
-
tagsHaveDLLimits
private volatile boolean tagsHaveDLLimits
-
globalDownloadSpeedAverage
private Average globalDownloadSpeedAverage
-
this_mon
private AEMonitor this_mon
-
pi
private PluginInterface pi
-
plugin_config
protected PluginConfig plugin_config
-
download_manager
private DownloadManager download_manager
-
log
protected LoggerChannel log
-
ENABLE_DLOG
private final boolean ENABLE_DLOG
- See Also:
- Constant Field Values
-
dlog
protected LoggerChannel dlog
-
recalcSeedingRanksTask
private StartStopRulesDefaultPlugin.RecalcSeedingRanksTask recalcSeedingRanksTask
Used only for RANK_TIMED. Recalculate ranks on a timer
-
rankCalculatorMap
private static java.util.Map<java.lang.Object,DefaultRankCalculator> rankCalculatorMap
Map to relate downloadData to a Download OR reserved slot
-
sortedArrayCache
private volatile DefaultRankCalculator[] sortedArrayCache
this is used to reduce the number of comperator invocations by keeping a mostly sorted copy around, must be nulled whenever the map is changed
-
closingDown
private volatile boolean closingDown
-
somethingChanged
private volatile boolean somethingChanged
-
ranksToRecalc
private java.util.Set<DefaultRankCalculator> ranksToRecalc
-
ranksToRecalc_mon
private AEMonitor ranksToRecalc_mon
-
monoStartedOn
private long monoStartedOn
When rules class started. Used for initial waiting logic
-
bDebugLog
protected boolean bDebugLog
Whether Debug Info is written to the log and tooltip
-
iRankType
private int iRankType
Ranking System to use. One of RANK_* constants
-
minSpeedForActiveSeeding
private int minSpeedForActiveSeeding
-
maxStalledSeeding
private int maxStalledSeeding
Maximimum # of stalled torrents that are in seeding mode
-
maxOverLimitSeeding
private int maxOverLimitSeeding
-
stalledSeedingIgnoreZP
private boolean stalledSeedingIgnoreZP
-
_maxActive
private int _maxActive
-
_maxActiveWhenSeedingEnabled
private boolean _maxActiveWhenSeedingEnabled
-
_maxActiveWhenSeeding
private int _maxActiveWhenSeeding
-
globalDownloadLimit
private int globalDownloadLimit
-
globalUploadLimit
private int globalUploadLimit
-
globalUploadWhenSeedingLimit
private int globalUploadWhenSeedingLimit
-
maxConfiguredDownloads
private int maxConfiguredDownloads
-
bMaxDownloadIgnoreChecking
private boolean bMaxDownloadIgnoreChecking
-
minDownloads
private int minDownloads
-
bAutoReposition
private boolean bAutoReposition
-
minTimeAlive
private long minTimeAlive
-
bAutoStart0Peers
private boolean bAutoStart0Peers
-
bStopOnceBandwidthMet
private boolean bStopOnceBandwidthMet
-
bStartNoMoreSeedsWhenUpLimitMet
private boolean bStartNoMoreSeedsWhenUpLimitMet
-
bStartNoMoreSeedsWhenUpLimitMetPercent
private boolean bStartNoMoreSeedsWhenUpLimitMetPercent
-
bStartNoMoreSeedsWhenUpLimitMetSlack
private int bStartNoMoreSeedsWhenUpLimitMetSlack
-
iDownloadSortType
private int iDownloadSortType
-
iDownloadTestTimeMillis
private int iDownloadTestTimeMillis
-
iDownloadReTestMillis
private int iDownloadReTestMillis
-
bDownloadTestActive
private boolean bDownloadTestActive
-
bTagFirstPriority
private boolean bTagFirstPriority
-
bAlreadyInitialized
private static boolean bAlreadyInitialized
-
debugMenuItem
private TableContextMenuItem debugMenuItem
-
swt_ui
private StartStopRulesDefaultPlugin.UIAdapter swt_ui
-
listenersFP
private CopyOnWriteList listenersFP
-
pauseChangeFlagChecker
public static boolean pauseChangeFlagChecker
-
fp_tag
private Tag fp_tag
-
numReservedSeedingSlots
private volatile int numReservedSeedingSlots
-
reservedSlots
private java.util.LinkedList<RankCalculatorSlotReserver> reservedSlots
-
reservedSlotsAllocated
private java.util.Set<DefaultRankCalculator> reservedSlotsAllocated
-
slotStatus
private java.lang.String slotStatus
-
immediateProcessingScheduled
private volatile boolean immediateProcessingScheduled
-
changeCheckCount
private long changeCheckCount
-
changeCheckTotalMS
private long changeCheckTotalMS
-
changeCheckMaxMS
private long changeCheckMaxMS
-
processCount
private long processCount
-
processTotalMS
private long processTotalMS
-
processMaxMS
private long processMaxMS
-
processLastComplete
private long processLastComplete
-
processTotalGap
private long processTotalGap
-
processTotalRecalcs
private long processTotalRecalcs
-
processTotalZeroRecalcs
private long processTotalZeroRecalcs
-
dlr_current_active
private DefaultRankCalculator dlr_current_active
-
dlr_max_rate_time
private long dlr_max_rate_time
-
processMergeCount
private long processMergeCount
Request that the startstop rules process. Used when it's known that something has changed that will effect torrent's state/position/rank.
-
-
Method Detail
-
load
public static void load(PluginInterface plugin_interface)
-
initialize
public void initialize(PluginInterface _plugin_interface)
Description copied from interface:Plugin
This method is called when the Plugin is loaded by the client- Specified by:
initialize
in interfacePlugin
- Parameters:
_plugin_interface
- the interface that the plugin must use to communicate with the client
-
getRankCalculator
public static DefaultRankCalculator getRankCalculator(Download dl)
-
getTagManager
public TagManager getTagManager()
-
hasTagDLLimits
public boolean hasTagDLLimits()
-
recalcAllSeedingRanks
private void recalcAllSeedingRanks()
-
configurationSaved
public void configurationSaved()
- Specified by:
configurationSaved
in interfaceCOConfigurationListener
-
reloadConfigParams
private void reloadConfigParams()
-
calcMaxSeeders
private int calcMaxSeeders(int iDLs)
-
getMaxActive
protected int getMaxActive()
-
process
protected void process()
-
processDownloadingRules
private void processDownloadingRules(java.util.List<DefaultRankCalculator> downloads)
-
getMaxDownloads
private int getMaxDownloads()
-
handleInCompleteDownload
private void handleInCompleteDownload(DefaultRankCalculator dlData, StartStopRulesDefaultPlugin.ProcessVars vars, StartStopRulesDefaultPlugin.ProcessTagVars[] tagVars, StartStopRulesDefaultPlugin.TotalsStats totals)
- Parameters:
dlData
-vars
-totals
-
-
handleCompletedDownload
private void handleCompletedDownload(DefaultRankCalculator[] dlDataArray, DefaultRankCalculator dlData, StartStopRulesDefaultPlugin.ProcessVars vars, StartStopRulesDefaultPlugin.TotalsStats totals)
Process Completed (Seeding) downloads, starting and stopping as needed- Parameters:
dlDataArray
- All download data (rank objects) we handledlData
- Current download data (rank object) we are processingvars
- Running calculationstotals
- Summary values used in logic
-
boolDebug
private java.lang.String boolDebug(boolean b)
-
printDebugChanges
private void printDebugChanges(java.lang.String sPrefixFirstLine, java.lang.String[] oldEntries, java.lang.String[] newEntries, java.lang.String sDebugLine, java.lang.String sPrefix, boolean bAlwaysPrintNoChangeLine, DefaultRankCalculator dlData)
-
requestProcessCycle
public void requestProcessCycle(DefaultRankCalculator rankToRecalc)
-
getTagFP
protected boolean getTagFP()
-
setFPTagStatus
protected void setFPTagStatus(DownloadManager dm, boolean is_fp)
-
getSlotStatus
protected java.lang.String getSlotStatus()
-
generate
public void generate(IndentWriter writer)
- Specified by:
generate
in interfaceAEDiagnosticsEvidenceGenerator
-
addListener
public void addListener(StartStopRulesFPListener listener)
-
removeListener
public void removeListener(StartStopRulesFPListener listener)
-
getFPListeners
public java.util.List getFPListeners()
-
-