From b67f008eb8829d33e827eebc6f28829299e64963 Mon Sep 17 00:00:00 2001 From: theli Date: Tue, 30 Aug 2005 06:45:49 +0000 Subject: [PATCH] *) Trying to solve "Too many open files bug" git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@601 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- source/de/anomic/kelondro/kelondroFileRA.java | 9 +- .../de/anomic/kelondro/kelondroNIOFileRA.java | 15 +++- source/de/anomic/kelondro/kelondroStack.java | 89 +++++++++++-------- source/de/anomic/kelondro/kelondroTree.java | 27 +++--- 4 files changed, 87 insertions(+), 53 deletions(-) diff --git a/source/de/anomic/kelondro/kelondroFileRA.java b/source/de/anomic/kelondro/kelondroFileRA.java index 6323fc803..5f987d3f2 100644 --- a/source/de/anomic/kelondro/kelondroFileRA.java +++ b/source/de/anomic/kelondro/kelondroFileRA.java @@ -85,9 +85,16 @@ public class kelondroFileRA extends kelondroAbstractRA implements kelondroRA { public void close() throws IOException { RAFile.close(); + RAFile = null; } - + protected void finalize() throws Throwable { + if (RAFile != null) { + this.close(); + } + super.finalize(); + } + // some static tools public static void writeProperties(File f, Properties props, String comment) throws IOException { File fp = f.getParentFile(); diff --git a/source/de/anomic/kelondro/kelondroNIOFileRA.java b/source/de/anomic/kelondro/kelondroNIOFileRA.java index 0066033c2..c6ae1b354 100644 --- a/source/de/anomic/kelondro/kelondroNIOFileRA.java +++ b/source/de/anomic/kelondro/kelondroNIOFileRA.java @@ -205,8 +205,19 @@ public class kelondroNIOFileRA extends kelondroAbstractRA implements kelondroRA bufferTail.force(); System.out.println("wrote " + name + " tail"); } - RAChannel.close(); - RAFile.close(); + RAChannel.close(); + RAChannel = null; + RAFile.close(); + RAFile = null; + } + + protected void finalize() throws Throwable { + if (RAChannel != null) { + try {RAChannel.close();}catch(Exception e){} + } + if (RAFile != null) { + try {RAFile.close();}catch(Exception e){} + } } diff --git a/source/de/anomic/kelondro/kelondroStack.java b/source/de/anomic/kelondro/kelondroStack.java index 6860026d3..f6881f422 100644 --- a/source/de/anomic/kelondro/kelondroStack.java +++ b/source/de/anomic/kelondro/kelondroStack.java @@ -264,34 +264,39 @@ public class kelondroStack extends kelondroRecords { } public int imp(File file, String separator) throws IOException { - // imports a value-separated file, returns number of records that have been read - RandomAccessFile f = new RandomAccessFile(file,"r"); - String s; - StringTokenizer st; - int recs = 0; - byte[][] buffer = new byte[columns()][]; - int c; - int line = 0; - while ((s = f.readLine()) != null) { - s = s.trim(); - line++; - if ((s.length() > 0) && (!(s.startsWith("#")))) { - st = new StringTokenizer(s, separator); - // buffer the entry - c = 0; - while ((c < columns()) && (st.hasMoreTokens())) { - buffer[c++] = st.nextToken().trim().getBytes(); - } - if ((st.hasMoreTokens()) || (c != columns())) { - System.err.println("inapropriate number of entries in line " + line); - } else { - push(buffer); - recs++; - } - - } - } - return recs; + // imports a value-separated file, returns number of records that have been read + RandomAccessFile f = null; + try { + f = new RandomAccessFile(file,"r"); + String s; + StringTokenizer st; + int recs = 0; + byte[][] buffer = new byte[columns()][]; + int c; + int line = 0; + while ((s = f.readLine()) != null) { + s = s.trim(); + line++; + if ((s.length() > 0) && (!(s.startsWith("#")))) { + st = new StringTokenizer(s, separator); + // buffer the entry + c = 0; + while ((c < columns()) && (st.hasMoreTokens())) { + buffer[c++] = st.nextToken().trim().getBytes(); + } + if ((st.hasMoreTokens()) || (c != columns())) { + System.err.println("inapropriate number of entries in line " + line); + } else { + push(buffer); + recs++; + } + + } + } + return recs; + } finally { + if (f!=null) try{f.close();}catch(Exception e){} + } } public String hp(Handle h) { @@ -349,17 +354,23 @@ public class kelondroStack extends kelondroRecords { ret = (i + " records imported").getBytes(); } else if (args[0].equals("-s")) { String db = args[2]; - BufferedReader f = new BufferedReader(new FileReader(args[1])); - String m; - while (true) { - m = f.readLine(); - if (m == null) break; - if ((m.length() > 1) && (!m.startsWith("#"))) { - m = m + " " + db; - cmd(line2args(m)); - } - } - ret = null; + BufferedReader f = null; + try { + f = new BufferedReader(new FileReader(args[1])); + + String m; + while (true) { + m = f.readLine(); + if (m == null) break; + if ((m.length() > 1) && (!m.startsWith("#"))) { + m = m + " " + db; + cmd(line2args(m)); + } + } + ret = null; + } finally { + if (f != null) try {f.close();}catch(Exception e) {} + } } else if (args[0].equals("-g")) { kelondroStack fm = new kelondroStack(new File(args[2]), 0x100000); byte[][] ret2 = fm.pop(Integer.parseInt(args[1])); diff --git a/source/de/anomic/kelondro/kelondroTree.java b/source/de/anomic/kelondro/kelondroTree.java index ac7bd6fea..3224560ed 100644 --- a/source/de/anomic/kelondro/kelondroTree.java +++ b/source/de/anomic/kelondro/kelondroTree.java @@ -1216,17 +1216,22 @@ public class kelondroTree extends kelondroRecords implements Comparator { ret = (i + " records imported").getBytes(); } else if (args[0].equals("-s")) { String db = args[2]; - BufferedReader f = new BufferedReader(new FileReader(args[1])); - String m; - while (true) { - m = f.readLine(); - if (m == null) break; - if ((m.length() > 1) && (!m.startsWith("#"))) { - m = m + " " + db; - cmd(line2args(m)); - } - } - ret = null; + BufferedReader f = null; + try { + f = new BufferedReader(new FileReader(args[1])); + String m; + while (true) { + m = f.readLine(); + if (m == null) break; + if ((m.length() > 1) && (!m.startsWith("#"))) { + m = m + " " + db; + cmd(line2args(m)); + } + } + ret = null; + } finally { + if (f != null) try {f.close();}catch(Exception e){} + } } else if (args[0].equals("-g")) { kelondroTree fm = new kelondroTree(new File(args[1]), 0x100000); byte[][] ret2 = fm.get(args[2].getBytes());