- respecting httpdMaxBusySessions (refusing new connections if limit is hit)

- comments in serverBusyThread converted to JavaDoc
- better debug output for npe-case in diskUsage


git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@5274 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
danielr 17 years ago
parent 94e43ece41
commit f095137238

@ -26,46 +26,77 @@ package de.anomic.server;
public interface serverBusyThread extends serverThread {
/**
* sets a sleep time before execution of the job-loop
* @param milliseconds
*/
public void setStartupSleep(long milliseconds);
// sets a sleep time before execution of the job-loop
/**
* sets a sleep time for pauses between two jobs if the job returns false (idle)
* @param milliseconds
* @return
*/
public long setIdleSleep(long milliseconds);
// sets a sleep time for pauses between two jobs if the job returns false (idle)
/**
* sets a sleep time for pauses between two jobs if the job returns true (busy)
* @param milliseconds
* @return
*/
public long setBusySleep(long milliseconds);
// sets a sleep time for pauses between two jobs if the job returns true (busy)
/**
* sets minimum required amount of memory for the job execution
* @param freeBytes
*/
public void setMemPreReqisite(long freeBytes);
// sets minimum required amount of memory for the job execution
/**
* defines if the thread should obey the intermission command
* @param obey
*/
public void setObeyIntermission(boolean obey);
// defines if the thread should obey the intermission command
/**
* @return the total number of cycles of job execution with idle-result
*/
public long getIdleCycles();
// returns the total number of cycles of job execution with idle-result
/**
* @return the total number of cycles of job execution with busy-result
*/
public long getBusyCycles();
// returns the total number of cycles of job execution with busy-result
/**
* @return the total number of cycles where a job execution was omitted
* because of memory shortage
*/
public long getOutOfMemoryCycles();
// returns the total number of cycles where
// a job execution was omitted because of memory shortage
/**
* @return the total time that this thread has slept so far
*/
public long getSleepTime();
// returns the total time that this thread has slept so far
/**
* the thread is forced to pause for a specific time
* if the thread is busy meanwhile, the pause is ommitted
* @param pause
*/
public void intermission(long pause);
// the thread is forced to pause for a specific time
// if the thread is busy meanwhile, the pause is ommitted
/**
* performes one job procedure; this loopes until terminate() is called
* @return true if it has done something, false if it is idle and does not expect to work on more for a longer time
*/
public boolean job() throws Exception;
// performes one job procedure; this loopes until terminate() is called
// job returns true if it has done something
// it returns false if it is idle and does not expect to work on more for a longer time
/**
* is called when an outOfMemoryCycle is performed
* this method should try to free some memory, so that the job can be executed
*/
public void freemem();
// is called when an outOfMemoryCycle is performed
// this method should try to free some memory, so that the job can be executed
public void notifyThread();
}

@ -207,7 +207,7 @@ public final class serverCore extends serverAbstractBusyThread implements server
this.sslSocketFactory = initSSLFactory();
// init session parameter
maxBusySessions = Integer.valueOf(switchboard.getConfig("httpdMaxBusySessions","100")).intValue();
maxBusySessions = Math.max(1, Integer.valueOf(switchboard.getConfig("httpdMaxBusySessions","100")).intValue());
busySessions = new ConcurrentHashMap<Session, Object>();
// init servercore
@ -323,7 +323,7 @@ public final class serverCore extends serverAbstractBusyThread implements server
// idleThreadCheck();
this.switchboard.handleBusyState(this.busySessions.size());
if (log.isFinest()) this.log.logFinest("* waiting for connections, " + this.busySessions.size() + " sessions running");
announceThreadBlockApply();
// wait for new connection
@ -331,6 +331,14 @@ public final class serverCore extends serverAbstractBusyThread implements server
announceThreadBlockRelease();
if(this.busySessions.size() >= this.maxBusySessions)
{
// immediatly close connection if too much sessions are still running
if (log.isFinest()) this.log.logFinest("* connections exceeding limit, closing new incoming connection from "+ controlSocket.getRemoteSocketAddress());
controlSocket.close();
return false;
}
final String cIP = clientAddress(controlSocket);
//System.out.println("server bfHosts=" + bfHost.toString());
if (bfHost.get(cIP) != null) {
@ -645,11 +653,28 @@ public final class serverCore extends serverAbstractBusyThread implements server
} catch (final IOException e) {
e.printStackTrace();
}
if (busySessions != null) busySessions.remove(this);
if (busySessions != null)
{
busySessions.remove(this);
if(log.isFinest()) log.logFinest("* removed session "+ this.controlSocket.getRemoteSocketAddress() + this.request);
}
}
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#finalize()
*/
protected void finalize() {
if (busySessions != null && busySessions.contains(this))
{
busySessions.remove(this);
if(log.isFinest()) log.logFinest("* removed session "+ this.controlSocket.getRemoteSocketAddress() + this.request);
}
}
private void listen() {
try {

@ -260,7 +260,7 @@ public class diskUsage {
} else if (dir != null) {
checkVolumesInUseUnix (dir);
} else {
log.logSevere("directory is null: " + dir);
log.logSevere("directory is null: " + element);
}
} else {
try {

Loading…
Cancel
Save