*) better handling of server shutdown

See: e.g. http://www.yacy-forum.de/viewtopic.php?p=25234

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@2470 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
theli 18 years ago
parent 7df572756a
commit b4acbdaa97

@ -106,7 +106,7 @@ public final class plasmaRankingDistribution {
if ((sourcePath.exists()) && (sourcePath.isDirectory())) return sourcePath.list().length; else return 0; if ((sourcePath.exists()) && (sourcePath.isDirectory())) return sourcePath.list().length; else return 0;
} }
public boolean transferRanking(int count) { public boolean transferRanking(int count) throws InterruptedException {
if (method == METHOD_NONE) { if (method == METHOD_NONE) {
log.logFine("no ranking distribution: no transfer method given"); log.logFine("no ranking distribution: no transfer method given");
@ -140,6 +140,10 @@ public final class plasmaRankingDistribution {
File crfile = null; File crfile = null;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
// check for interruption
if (Thread.currentThread().isInterrupted()) throw new InterruptedException("Shutdown in progress");
// getting the next file to transfer
crfile = new File(sourcePath, outfiles[i]); crfile = new File(sourcePath, outfiles[i]);
if ((method == METHOD_ANYSENIOR) || (method == METHOD_ANYPRINCIPAL)) { if ((method == METHOD_ANYSENIOR) || (method == METHOD_ANYPRINCIPAL)) {
@ -161,9 +165,13 @@ public final class plasmaRankingDistribution {
return false; return false;
} }
private boolean transferRankingAnySeed(File crfile, int trycount) { private boolean transferRankingAnySeed(File crfile, int trycount) throws InterruptedException {
yacySeed target = null; yacySeed target = null;
for (int j = 0; j < trycount; j++) { for (int j = 0; j < trycount; j++) {
// check for interruption
if (Thread.currentThread().isInterrupted()) throw new InterruptedException("Shutdown in progress");
// get next target
target = yacyCore.seedDB.anySeedVersion(yacyVersion.YACY_ACCEPTS_RANKING_TRANSMISSION); target = yacyCore.seedDB.anySeedVersion(yacyVersion.YACY_ACCEPTS_RANKING_TRANSMISSION);
if (target == null) continue; if (target == null) continue;
@ -173,10 +181,14 @@ public final class plasmaRankingDistribution {
return false; return false;
} }
private boolean transferRankingAddress(File crfile) { private boolean transferRankingAddress(File crfile) throws InterruptedException {
// try all addresses // try all addresses
for (int i = 0; i < address.length; i++) { for (int i = 0; i < this.address.length; i++) {
if (transferRankingAddress(crfile, address[i])) return true; // check for interruption
if (Thread.currentThread().isInterrupted()) throw new InterruptedException("Shutdown in progress");
// try to transfer ranking address using the next address
if (transferRankingAddress(crfile, this.address[i])) return true;
} }
return false; return false;
} }

@ -542,7 +542,7 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
// clean up profiles // clean up profiles
this.log.logConfig("Cleaning Profiles"); this.log.logConfig("Cleaning Profiles");
cleanProfiles(); try { cleanProfiles(); } catch (InterruptedException e) { /* Ignore this here */ }
// init ranking transmission // init ranking transmission
/* /*
@ -769,13 +769,17 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
initProfiles(); initProfiles();
} }
public boolean cleanProfiles() { public boolean cleanProfiles() throws InterruptedException {
if ((sbQueue.size() > 0) || (cacheLoader.size() > 0) || (urlPool.noticeURL.stackSize() > 0)) return false; if ((sbQueue.size() > 0) || (cacheLoader.size() > 0) || (urlPool.noticeURL.stackSize() > 0)) return false;
final Iterator iter = profiles.profiles(true); final Iterator iter = profiles.profiles(true);
plasmaCrawlProfile.entry entry; plasmaCrawlProfile.entry entry;
boolean hasDoneSomething = false; boolean hasDoneSomething = false;
try { try {
while (iter.hasNext()) { while (iter.hasNext()) {
// check for interruption
if (Thread.currentThread().isInterrupted()) throw new InterruptedException("Shutdown in progress");
// getting next profile
entry = (plasmaCrawlProfile.entry) iter.next(); entry = (plasmaCrawlProfile.entry) iter.next();
if (!((entry.name().equals("proxy")) || (entry.name().equals("remote")))) { if (!((entry.name().equals("proxy")) || (entry.name().equals("remote")))) {
iter.remove(); iter.remove();
@ -1085,10 +1089,11 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
} }
public boolean cleanupJob() { public boolean cleanupJob() {
try {
boolean hasDoneSomething = false; boolean hasDoneSomething = false;
// do transmission of cr-files // do transmission of cr-files
checkInterruption();
int count = rankingOwnDistribution.size() / 100; int count = rankingOwnDistribution.size() / 100;
if (count == 0) count = 1; if (count == 0) count = 1;
if (count > 5) count = 5; if (count > 5) count = 5;
@ -1096,6 +1101,7 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
rankingOtherDistribution.transferRanking(1); rankingOtherDistribution.transferRanking(1);
// clean up error stack // clean up error stack
checkInterruption();
if ((urlPool.errorURL.stackSize() > 1000)) { if ((urlPool.errorURL.stackSize() > 1000)) {
log.logFine("Cleaning Error-URLs report stack, " + urlPool.errorURL.stackSize() + " entries on stack"); log.logFine("Cleaning Error-URLs report stack, " + urlPool.errorURL.stackSize() + " entries on stack");
urlPool.errorURL.clearStack(); urlPool.errorURL.clearStack();
@ -1103,6 +1109,7 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
} }
// clean up loadedURL stack // clean up loadedURL stack
for (int i = 1; i <= 6; i++) { for (int i = 1; i <= 6; i++) {
checkInterruption();
if (urlPool.loadedURL.getStackSize(i) > 1000) { if (urlPool.loadedURL.getStackSize(i) > 1000) {
log.logFine("Cleaning Loaded-URLs report stack, " + urlPool.loadedURL.getStackSize(i) + " entries on stack " + i); log.logFine("Cleaning Loaded-URLs report stack, " + urlPool.loadedURL.getStackSize(i) + " entries on stack " + i);
urlPool.loadedURL.clearStack(i); urlPool.loadedURL.clearStack(i);
@ -1110,15 +1117,21 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
} }
} }
// clean up profiles // clean up profiles
checkInterruption();
if (cleanProfiles()) hasDoneSomething = true; if (cleanProfiles()) hasDoneSomething = true;
// clean up news // clean up news
checkInterruption();
try { try {
log.logFine("Cleaning Incoming News, " + yacyCore.newsPool.size(yacyNewsPool.INCOMING_DB) + " entries on stack"); log.logFine("Cleaning Incoming News, " + yacyCore.newsPool.size(yacyNewsPool.INCOMING_DB) + " entries on stack");
if (yacyCore.newsPool.automaticProcess() > 0) hasDoneSomething = true; if (yacyCore.newsPool.automaticProcess() > 0) hasDoneSomething = true;
} catch (IOException e) {} } catch (IOException e) {}
return hasDoneSomething; return hasDoneSomething;
} catch (InterruptedException e) {
this.log.logInfo("cleanupJob: Shutdown detected");
return false;
}
} }
/** /**

@ -160,17 +160,21 @@ public class yacyNewsPool {
return switchQueue(dbKey).size(); return switchQueue(dbKey).size();
} }
public int automaticProcess() throws IOException { public int automaticProcess() throws IOException, InterruptedException {
// processes news in the incoming-db // processes news in the incoming-db
// returns number of processes // returns number of processes
yacyNewsRecord record; yacyNewsRecord record;
int pc = 0; int pc = 0;
synchronized (incomingNews) { synchronized (this.incomingNews) {
for (int i = incomingNews.size() - 1; i >= 0; i--) { for (int i = this.incomingNews.size() - 1; i >= 0; i--) {
record = incomingNews.top(i); // check for interruption
if (Thread.currentThread().isInterrupted()) throw new InterruptedException("Shutdown in progress");
// get next news record
record = this.incomingNews.top(i);
if ((i > 500) || (automaticProcessP(record))) { if ((i > 500) || (automaticProcessP(record))) {
incomingNews.pop(i); this.incomingNews.pop(i);
processedNews.push(record); this.processedNews.push(record);
//newsDB.remove(id); //newsDB.remove(id);
pc++; pc++;
} }

Loading…
Cancel
Save