diff options
| author | Michael Peter Christen <mc@yacy.net> | 2025-11-19 01:35:05 +0100 |
|---|---|---|
| committer | Michael Peter Christen <mc@yacy.net> | 2025-11-19 01:35:05 +0100 |
| commit | 05d0f6804032b84b5d46e266d9b0619c2ed51b9e (patch) | |
| tree | e8ab49c8703833e962fb0aedfa92e21315784fe0 | |
| parent | ff15a744b272f5713d9c7e11dca1416e9f250c6a (diff) | |
fixed some critical errors in kelondro
7 files changed, 14 insertions, 8 deletions
diff --git a/source/net/yacy/kelondro/blob/BEncodedHeap.java b/source/net/yacy/kelondro/blob/BEncodedHeap.java index 60cec4dce..5c1669a85 100644 --- a/source/net/yacy/kelondro/blob/BEncodedHeap.java +++ b/source/net/yacy/kelondro/blob/BEncodedHeap.java @@ -321,6 +321,7 @@ public class BEncodedHeap implements MapStore { return null; } final Map<String, byte[]> map = b2m(b); + if (map == null) return null; return map.get(key); } diff --git a/source/net/yacy/kelondro/data/word/WordReferenceFactory.java b/source/net/yacy/kelondro/data/word/WordReferenceFactory.java index a7db4c03a..bb8223e09 100644 --- a/source/net/yacy/kelondro/data/word/WordReferenceFactory.java +++ b/source/net/yacy/kelondro/data/word/WordReferenceFactory.java @@ -123,7 +123,7 @@ public class WordReferenceFactory implements ReferenceFactory<WordReference>, Se public static final SortedMap<String, Set<String>> decompressIndex(ByteBuffer ci, final String peerhash) { SortedMap<String, Set<String>> target = Collections.synchronizedSortedMap(new TreeMap<String, Set<String>>()); // target is a mapping from url-hashes to a string of peer-hashes - if (ci.byteAt(0) != '{' || ci.byteAt(ci.length() - 1) != '}') return target; + if (ci.isEmpty() || ci.byteAt(0) != '{' || ci.byteAt(ci.length() - 1) != '}') return target; //System.out.println("DEBUG-DECOMPRESS: input is " + ci.toString()); ci = ci.trim(1, ci.length() - 2); String dom, url; diff --git a/source/net/yacy/kelondro/index/OnDemandOpenFileIndex.java b/source/net/yacy/kelondro/index/OnDemandOpenFileIndex.java index 9ea6b1abd..7be27b7cb 100644 --- a/source/net/yacy/kelondro/index/OnDemandOpenFileIndex.java +++ b/source/net/yacy/kelondro/index/OnDemandOpenFileIndex.java @@ -122,8 +122,8 @@ public class OnDemandOpenFileIndex implements Index, Iterable<Row.Entry> { final Index index = this.getIndex(); if (index == null) return; try { - index.clear(); - this.sizecache = 0; + index.clear(); + this.sizecache = 0; } catch (final IOException e) { throw e; } finally { @@ -139,6 +139,7 @@ public class OnDemandOpenFileIndex implements Index, Iterable<Row.Entry> { @Override public synchronized void deleteOnExit() { final Index index = this.getIndex(); + if (index == null) return; index.deleteOnExit(); index.close(); } diff --git a/source/net/yacy/kelondro/index/RAMIndex.java b/source/net/yacy/kelondro/index/RAMIndex.java index 0913d87e1..8009edf49 100644 --- a/source/net/yacy/kelondro/index/RAMIndex.java +++ b/source/net/yacy/kelondro/index/RAMIndex.java @@ -120,7 +120,7 @@ public final class RAMIndex implements Index, Iterable<Row.Entry> { final byte[] b0 = this.index0.smallestKey(); if (b0 == null) return null; if (this.index1 == null) return b0; - final byte[] b1 = this.index0.smallestKey(); + final byte[] b1 = this.index1.smallestKey(); if (b1 == null || this.rowdef.objectOrder.compare(b1, b0) > 0) return b0; return b1; } @@ -130,7 +130,7 @@ public final class RAMIndex implements Index, Iterable<Row.Entry> { final byte[] b0 = this.index0.largestKey(); if (b0 == null) return null; if (this.index1 == null) return b0; - final byte[] b1 = this.index0.largestKey(); + final byte[] b1 = this.index1.largestKey(); if (b1 == null || this.rowdef.objectOrder.compare(b0, b1) > 0) return b0; return b1; } diff --git a/source/net/yacy/kelondro/logging/GuiHandler.java b/source/net/yacy/kelondro/logging/GuiHandler.java index 69119cdc6..c1366e31d 100644 --- a/source/net/yacy/kelondro/logging/GuiHandler.java +++ b/source/net/yacy/kelondro/logging/GuiHandler.java @@ -90,7 +90,7 @@ public class GuiHandler extends Handler { }
@Override
- public final void publish(final LogRecord record) {
+ public final synchronized void publish(final LogRecord record) {
if (!this.isLoggable(record)) return;
final int ix = (GuiHandler.start + GuiHandler.count) % GuiHandler.buffer.length;
GuiHandler.buffer[ix] = this.getFormatter().format(record);
diff --git a/source/net/yacy/kelondro/table/Relations.java b/source/net/yacy/kelondro/table/Relations.java index da2116c48..f91e2b7b7 100644 --- a/source/net/yacy/kelondro/table/Relations.java +++ b/source/net/yacy/kelondro/table/Relations.java @@ -51,6 +51,7 @@ public class Relations { final boolean useTailCache, final boolean exceed134217727) { this.baseDir = location; + this.relations = new HashMap<>(); this.useTailCache = useTailCache; this.exceed134217727 = exceed134217727; } @@ -86,7 +87,7 @@ public class Relations { final Index relation = this.relations.get(name); if (relation != null) return; // try to find the relation as stored on file - final String[] list = this.baseDir.list(); + final String[] list = this.baseDir.exists() && this.baseDir.isDirectory() ? this.baseDir.list() : new String[0]; final String targetfilename = filename(name, keysize, payloadsize); for (int i = 0; i < list.length; i++) { if (list[i].startsWith(name)) { diff --git a/source/net/yacy/kelondro/workflow/WorkflowProcessor.java b/source/net/yacy/kelondro/workflow/WorkflowProcessor.java index 95915993d..b1bdf0bef 100644 --- a/source/net/yacy/kelondro/workflow/WorkflowProcessor.java +++ b/source/net/yacy/kelondro/workflow/WorkflowProcessor.java @@ -180,7 +180,8 @@ public class WorkflowProcessor<J extends WorkflowJob> { return; } // execute concurrent in thread - while (this.input != null) { + int failcount = 0; // to prevent endless loops + while (this.input != null && failcount < 10) { try { this.input.put(in); if (this.input.size() > this.executorRunning.get() && this.executorRunning.get() < this.maxpoolsize) synchronized (executor) { @@ -191,6 +192,8 @@ public class WorkflowProcessor<J extends WorkflowJob> { } break; } catch (final Throwable e) { + failcount++; + ConcurrentLog.logException(e); try {Thread.sleep(10);} catch (final InterruptedException ee) {} } } |
