diff --git a/htroot/IndexControl_p.java b/htroot/IndexControl_p.java index 61d6c766e..2c5d10b58 100644 --- a/htroot/IndexControl_p.java +++ b/htroot/IndexControl_p.java @@ -126,6 +126,7 @@ public class IndexControl_p { int i = 0; urlx = new String[index.size()]; while (en.hasMoreElements()) urlx[i++] = ((plasmaWordIndexEntry) en.nextElement()).getUrlHash(); + index.close(); } catch (IOException e) { urlx = new String[0]; } @@ -199,6 +200,7 @@ public class IndexControl_p { indexes[0] = switchboard.wordIndex.getEntity(keyhash, true); result = yacyClient.transferIndex(yacyCore.seedDB.getConnected(post.get("hostHash", "")), indexes, switchboard.loadedURL); prop.put("result", (result == null) ? ("Successfully transferred " + indexes[0].size() + " words in " + ((System.currentTimeMillis() - starttime) / 1000) + " seconds") : result); + try {indexes[0].close();} catch (IOException e) {} } if (post.containsKey("keyhashsimilar")) { @@ -206,7 +208,7 @@ public class IndexControl_p { String result = "Sequential List of Word-Hashes:
"; String hash; int i = 0; - while (hashIt.hasNext()) { + while ((hashIt.hasNext()) && (i < 256)) { hash = (String) hashIt.next(); result += ""; String hash; int i = 0; - while (hashIt.hasNext()) { + while ((hashIt.hasNext()) && (i < 256)) { hash = (String) hashIt.next(); result += "for every resolveable and deleted URL reference, delete the same reference at every other word where the reference exists (very extensive, but prevents further unresolved references)" + ""; } + index.close(); return result; } catch (IOException e) { return ""; diff --git a/source/de/anomic/plasma/plasmaSwitchboard.java b/source/de/anomic/plasma/plasmaSwitchboard.java index cab092994..20dd633f3 100644 --- a/source/de/anomic/plasma/plasmaSwitchboard.java +++ b/source/de/anomic/plasma/plasmaSwitchboard.java @@ -1422,7 +1422,12 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser ee.printStackTrace(); return -1; } - } + } else { + // simply close the indexEntities + for (int i = 0; i < indexEntities.length; i++) try { + indexEntities[i].close(); + } catch (IOException ee) {} + } return indexCount; } else { log.logError("Index distribution failed. Too less peers (" + hc + ") received the index, not deleted locally."); @@ -1514,17 +1519,18 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser indexEntities[i].close(); } else { // delete complete file - if (!(indexEntities[i].deleteComplete())) { + if (indexEntities[i].deleteComplete()) { + indexEntities[i].close(); + } else { indexEntities[i].close(); // have another try... if (!(plasmaWordIndexEntity.wordHash2path(plasmaPath, indexEntities[i].wordHash()).delete())) { success = false; log.logError("Could not delete whole Index for word " + indexEntities[i].wordHash()); } - } else { - indexEntities[i].close(); } } + indexEntities[i] = null; } return success; } diff --git a/source/de/anomic/plasma/plasmaWordIndexCache.java b/source/de/anomic/plasma/plasmaWordIndexCache.java index 183a39b0e..8e9792212 100644 --- a/source/de/anomic/plasma/plasmaWordIndexCache.java +++ b/source/de/anomic/plasma/plasmaWordIndexCache.java @@ -56,7 +56,8 @@ public final class plasmaWordIndexCache implements plasmaWordIndexInterface { private static final String oldSingletonFileName = "indexSingletons0.db"; private static final String newSingletonFileName = "indexAssortment001.db"; private static final String indexAssortmentClusterPath = "ACLUSTER"; - private static final int assortmentLimit = 8; + private static final int assortmentLimit = 20; + private static final int ramcacheLimit = 60; // class variables @@ -353,15 +354,15 @@ public final class plasmaWordIndexCache implements plasmaWordIndexInterface { } // print statistics - //for (int k = 0; k < clusterCandidate.length; k++) - // log.logDebug("FLUSH-LIST " + (k + 1) + ": " + clusterCandidate[k].size() + " entries"); + for (int k = 0; k < clusterCandidate.length; k++) + log.logDebug("FLUSH-LIST " + (k + 1) + ": " + clusterCandidate[k].size() + " entries"); Map.Entry entry; int candidateCounter; count = 0; // flush high-scores that accumultated too much - for (int cluster = clusterCandidate.length; cluster >= 50; cluster--) { + for (int cluster = clusterCandidate.length; cluster >= ramcacheLimit; cluster--) { candidateCounter = 0; i = clusterCandidate[cluster - 1].entrySet().iterator(); while (i.hasNext()) { @@ -384,8 +385,8 @@ public final class plasmaWordIndexCache implements plasmaWordIndexInterface { entry = (Map.Entry) i.next(); key = (String) entry.getValue(); createTime = (Long) entry.getKey(); - if ((createTime != null) && ((System.currentTimeMillis() - createTime.longValue()) > (cluster * 30000))) { - //log.logDebug("flushing singleton-key " + key + ", count=" + count + ", cachesize=" + cache.size() + ", singleton-size=" + singletons.size()); + if ((createTime != null) && ((System.currentTimeMillis() - createTime.longValue()) > (20000 + (cluster * 5000)))) { + //log.logDebug("flushing key " + key + ", count=" + count + ", cachesize=" + cache.size() + ", singleton-size=" + singletons.size()); count += java.lang.Math.abs(flushFromMem(key, true)); candidateCounter += cluster; } @@ -395,10 +396,10 @@ public final class plasmaWordIndexCache implements plasmaWordIndexInterface { // stop flushing if cache is shrinked enough // avoid as possible to flush high-scores - if (cache.size() < this.maxWords) return count; + if (cache.size() < this.maxWords - 100) return count; // flush high-scores - for (int cluster = java.lang.Math.min(clusterCandidate.length, 50); cluster > assortmentLimit; cluster--) { + for (int cluster = java.lang.Math.min(clusterCandidate.length, ramcacheLimit); cluster > assortmentLimit; cluster--) { candidateCounter = 0; i = clusterCandidate[cluster - 1].entrySet().iterator(); while (i.hasNext()) { @@ -410,7 +411,7 @@ public final class plasmaWordIndexCache implements plasmaWordIndexInterface { candidateCounter += cluster; log.logDebug("flushed high-cluster below limit #" + cluster + ", key=" + key + ", count=" + count + ", cachesize=" + cache.size()); } - if (cache.size() < this.maxWords) return count; + if (cache.size() < this.maxWords - 100) return count; } }