* reenable DHT if yet enough memory is available

* reset treshold on reconfiguratoin
(thanks to sixcooler)

* display status message in web interface

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6562 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
lotus 2010-01-10 19:04:43 +00:00
parent 0752634b8b
commit eac2daf2e8
4 changed files with 45 additions and 12 deletions

View File

@ -93,6 +93,13 @@
</dd>
#(/warningDiskSpaceLow)#
#(warningMemoryLow)#::
<dt class="hintIcon"><img src="env/grafics/bad.png" width="32" height="32" alt="bad"/></dt>
<dd class="hint">Free memory is lower than #[minSpace]#. DHT has been disabled. Please fix
it as soon as possible and restart YaCy.
</dd>
#(/warningMemoryLow)#
<!-- hints -->
#(hintVersionAvailable)#::

View File

@ -133,13 +133,20 @@ public class Status {
prop.put("unrestrictedLocalAccess", 1);
}
// free disk space
if ((adminaccess) && (!sb.observer.getDisksOK()))
{
final String minFree = Formatter.bytesToString(sb.observer.getMinFreeDiskSpace());
prop.put("warningDiskSpaceLow", "1");
prop.put("warningDiskSpaceLow_minSpace", minFree);
}
// resource observer status
if (adminaccess) {
if (!sb.observer.getDisksOK()){
final String minFree = Formatter.bytesToString(sb.observer.getMinFreeDiskSpace());
prop.put("warningDiskSpaceLow", "1");
prop.put("warningDiskSpaceLow_minSpace", minFree);
}
if (!sb.observer.getMemoryOK()){
final String minFree = Formatter.bytesToString(sb.observer.getMinFreeMemory() * 1024L);
prop.put("warningMemoryLow", "1");
prop.put("warningMemoryLow_minSpace", minFree);
}
}
// version information

View File

@ -56,6 +56,7 @@ public final class ResourceObserver {
private int checkMemoryUsageCount;
private int disksFree;
private int memoryFree;
private boolean disabledDHT = false;
/**
* The ResourceObserver checks the resources
@ -106,7 +107,7 @@ public final class ResourceObserver {
* checks the resources and pauses crawls if necessary
*/
public void resourceObserverJob() {
MemoryControl.setDHTkbytes(sb.getConfigLong(SwitchboardConstants.MEMORY_ACCEPTDHT, 0));
MemoryControl.setDHTkbytes(getMinFreeMemory());
checkDiskUsageCount++;
checkMemoryUsageCount++;
@ -136,11 +137,19 @@ public final class ResourceObserver {
log.logInfo("disabling index receive");
sb.setConfig(SwitchboardConstants.INDEX_RECEIVE_ALLOW, false);
sb.peers.mySeed().setFlagAcceptRemoteIndex(false);
disabledDHT = true;
}
}
else {
if (DiskSpace.isUsable())
if (DiskSpace.isUsable()) {
if(disabledDHT) { // we were wrong!
log.logInfo("enabling index receive");
sb.setConfig(SwitchboardConstants.INDEX_RECEIVE_ALLOW, true);
sb.peers.mySeed().setFlagAcceptRemoteIndex(true);
disabledDHT = false;
}
log.logInfo("run completed; everything in order");
}
else
log.logInfo("The observer is out of order: " + DiskSpace.getErrorMessage());
}
@ -161,19 +170,26 @@ public final class ResourceObserver {
}
/**
* @return amount of space (MiB) that should be kept free
* @return amount of space (bytes) that should be kept free
*/
public long getMinFreeDiskSpace () {
return sb.getConfigLong(SwitchboardConstants.DISK_FREE, 3000) /* MiB */ * 1024L * 1024L;
}
/**
* @return amount of space (MiB) that should at least be kept free
* @return amount of space (bytes) that should at least be kept free
*/
public long getMinFreeDiskSpace_hardlimit () {
return sb.getConfigLong(SwitchboardConstants.DISK_FREE_HARDLIMIT, 100) /* MiB */ * 1024L * 1024L;
}
/**
* @return amount of space (KiB) that should at least be free
*/
public long getMinFreeMemory() {
return sb.getConfigLong(SwitchboardConstants.MEMORY_ACCEPTDHT, 0);
}
/**
* returns the amount of disk space available
* @return <ul>

View File

@ -182,10 +182,12 @@ public class MemoryControl {
public static void setDHTallowed() {
allowDHT = true;
DHTtresholdCount = 0;
}
public static void setDHTkbytes(final long kbytes) {
DHTkbytes = kbytes;
DHTtresholdCount = 0;
}
private static void checkDHTrule(final long available) {
@ -202,7 +204,8 @@ public class MemoryControl {
log.logInfo("checkDHTrule: below treshold; tresholdCount: " + DHTtresholdCount + "; allowDHT: " + allowDHT);
}
//allowDHT = ((available >> 10) < DHTkbytes) ? false : true; // stupid
else if (!allowDHT && (available >> 10) > (DHTkbytes * 2L)) // we were wrong!
setDHTallowed();
}
/**