Author: orbiter
Date: 2008-02-28 00:12:43 +0100 (Thu, 28 Feb 2008)
New Revision: 4519
Modified:
trunk/source/de/anomic/http/httpc.java
trunk/source/de/anomic/http/httpdByteCountInputStream.java
trunk/source/de/anomic/kelondro/kelondroSortStore.java
trunk/source/de/anomic/plasma/crawler/plasmaCrawlQueues.java
trunk/source/de/anomic/server/serverCore.java
trunk/source/de/anomic/server/serverFileUtils.java
trunk/source/de/anomic/tools/crypt.java
trunk/source/de/anomic/tools/cryptbig.java
trunk/source/de/anomic/tools/gzip.java
trunk/source/de/anomic/yacy/yacyClient.java
Log:
- fixed a bug in remote search that prevented that any results had been
generated (!)
- added a great number of printStackTrace and new exceptions that shall be used
to find the cause
for a bug in yacy client-server communication which causes the interruption
of data transfer
which then causes the parser bug for the seed strings.
- tried to fix the communication bug on server-side (copy functions)
Be aware that the log may be full of errors and bugs - there should not be more
bugs but there is more to see
Modified: trunk/source/de/anomic/http/httpc.java
===================================================================
--- trunk/source/de/anomic/http/httpc.java 2008-02-27 20:09:22 UTC (rev
4518)
+++ trunk/source/de/anomic/http/httpc.java 2008-02-27 23:12:43 UTC (rev
4519)
@@ -400,6 +400,7 @@
this.socket.setSoTimeout(timeout); // waiting time for read
// get the connection
this.socket.connect(address, timeout);
+ this.socket.setSoTimeout(timeout); // waiting time for read
if (incomingByteCountAccounting != null) {
this.clientInputByteCount = new
httpdByteCountInputStream(this.socket.getInputStream(),incomingByteCountAccounting);
@@ -411,7 +412,7 @@
// getting input and output streams
this.clientInput = new
PushbackInputStream((this.clientInputByteCount!=null)?
this.clientInputByteCount:
- this.socket.getInputStream());
+ this.socket.getInputStream());
this.clientOutput = this.socket.getOutputStream();
// if we reached this point, we should have a connection
@@ -422,7 +423,7 @@
} catch (IOException e) {
// There was an error while connecting the socket, probably a
SocketTimeoutException
// we have to close the httpc, otherwise it would stay in
activeConnections forever
- serverLog.logFine("HTTPC", "Couldn't open socket to: " +
this.adressed_host + ":" + this.adressed_port);
+ serverLog.logFine("HTTPC", "Couldn't open socket to " +
this.adressed_host + ":" + this.adressed_port + ": " + e.getMessage());
close();
// TODO do we need to hand it over to the caller?
@@ -979,6 +980,8 @@
// read connection body and return body
serverByteBuffer sbb = new serverByteBuffer();
res.writeContent(sbb, null);
+ if ((res.responseHeader.contentLength() > 0) &&
(res.responseHeader.contentLength() != sbb.length()))
+ throw new IOException("content length and loaded resource length
from http://" + realhost + ":" + port + path + " does not match.
HEADER.Content-Length = " + res.responseHeader.contentLength() + ",
resource.length =" + sbb.length());
con.close();
return sbb.getBytes();
}
@@ -1244,7 +1247,7 @@
}
// reads in the http header, right now, right here
- byte[] b = serverCore.receive(httpc.this.clientInput,
terminalMaxLength, false);
+ byte[] b = serverCore.receive(httpc.this.clientInput,
terminalMaxLength, true);
if (b == null) {
// the server has meanwhile disconnected
this.statusCode = 503;
@@ -1263,7 +1266,7 @@
if ((this.statusCode==500)&&(this.statusText.equals("status line
parse error"))) {
// flush in anything that comes without parsing
- while ((b != null) && (b.length != 0)) b =
serverCore.receive(httpc.this.clientInput, terminalMaxLength, false);
+ while ((b != null) && (b.length != 0)) b =
serverCore.receive(httpc.this.clientInput, terminalMaxLength, true);
return; // in bad mood
}
@@ -1271,13 +1274,13 @@
if (this.statusCode == 400) {
// bad request
// flush in anything that comes without parsing
- while ((b = serverCore.receive(httpc.this.clientInput,
terminalMaxLength, false)).length != 0) {}
+ while ((b = serverCore.receive(httpc.this.clientInput,
terminalMaxLength, true)).length != 0) {}
return; // in bad mood
}
// at this point we should have a valid response. read in the
header properties
String key = "";
- while ((b = serverCore.receive(httpc.this.clientInput,
terminalMaxLength, false)) != null) {
+ while ((b = serverCore.receive(httpc.this.clientInput,
terminalMaxLength, true)) != null) {
if (b.length == 0) break;
buffer = new String(b);
buffer=buffer.trim();
@@ -1362,7 +1365,7 @@
return new GZIPInputStream(httpc.this.clientInput);
} else if (this.responseHeader.contentLength() != -1) {
// use a httpContentLengthInputStream to read until the end of
the response body is reached
- return new
httpContentLengthInputStream(httpc.this.clientInput,this.responseHeader.contentLength());
+ return new
httpContentLengthInputStream(httpc.this.clientInput,
this.responseHeader.contentLength());
}
// no Content-Lenght was set. In this case we can read until EOF
return httpc.this.clientInput;
@@ -1429,13 +1432,17 @@
} else {
throw new IllegalArgumentException("Invalid procOS object
type '" + procOS.getClass().getName() + "'");
}
- } catch (IOException e) {}
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
if (bufferOS != null) {
try {
bufferOS.flush();
bufferOS.close();
- } catch (IOException e) {}
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
if (file.length() == 0) file.delete();
}
}
@@ -1453,13 +1460,16 @@
if (System.currentTimeMillis() - lastIO > 30000) break;
this.wait(300);
continue io;
- } catch (InterruptedException e) {} // may happen without EOF
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } // may happen without EOF
lastIO = System.currentTimeMillis();
c += l;
if (procOS != null) procOS.write(buffer, 0, l);
if (bufferOS != null) bufferOS.write(buffer, 0, l);
} catch (IOException e) {
- //System.out.println("*** DEBUG: writeX/IOStream terminated
with IOException, processed " + c + " bytes.");
+ System.out.println("*** DEBUG: writeX/IOStream terminated with
IOException, processed " + c + " bytes. cause: " + e.getMessage());
+ e.printStackTrace();
break;
}
@@ -1484,13 +1494,15 @@
if (System.currentTimeMillis() - lastIO > 30000) break;
this.wait(300);
continue io;
- } catch (InterruptedException e) {} // may happen without
EOF
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } // may happen without EOF
lastIO = System.currentTimeMillis();
c += l;
if (procOS != null) procOS.write(buffer, 0, l);
if (bufferOSWriter != null) bufferOSWriter.write(buffer,
0, l);
} catch (IOException e) {
- //System.out.println("*** DEBUG: writeX/ReaderWriter
terminated with IOException, processed " + c + " bytes.");
+ System.out.println("*** DEBUG: writeX/ReaderWriter
terminated with IOException, processed " + c + " bytes. cause: " +
e.getMessage());
break;
}
Modified: trunk/source/de/anomic/http/httpdByteCountInputStream.java
===================================================================
--- trunk/source/de/anomic/http/httpdByteCountInputStream.java 2008-02-27
20:09:22 UTC (rev 4518)
+++ trunk/source/de/anomic/http/httpdByteCountInputStream.java 2008-02-27
23:12:43 UTC (rev 4519)
@@ -91,9 +91,14 @@
}
public int read(byte[] b, int off, int len) throws IOException {
+ try {
int readCount = super.read(b, off, len);
if (readCount > 0) this.byteCount += readCount;
return readCount;
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new IOException(e.getMessage() + "; b.length = " + b.length
+ ", off = " + off + ", len = " + len);
+ }
}
public int read() throws IOException {
Modified: trunk/source/de/anomic/kelondro/kelondroSortStore.java
===================================================================
--- trunk/source/de/anomic/kelondro/kelondroSortStore.java 2008-02-27
20:09:22 UTC (rev 4518)
+++ trunk/source/de/anomic/kelondro/kelondroSortStore.java 2008-02-27
23:12:43 UTC (rev 4519)
@@ -100,7 +100,7 @@
return this.offstack;
}
if (size() < count) throw new RuntimeException("list(" + count + ")
exceeded avaiable number of elements (" + size() + ")");
- while (this.onstack.size() < count) {
+ while (this.offstack.size() < count) {
Long w = this.onstack.firstKey();
E element = this.onstack.remove(w);
stackElement se = new stackElement(element, w);
Modified: trunk/source/de/anomic/plasma/crawler/plasmaCrawlQueues.java
===================================================================
--- trunk/source/de/anomic/plasma/crawler/plasmaCrawlQueues.java
2008-02-27 20:09:22 UTC (rev 4518)
+++ trunk/source/de/anomic/plasma/crawler/plasmaCrawlQueues.java
2008-02-27 23:12:43 UTC (rev 4519)
@@ -178,8 +178,6 @@
log.logFine("CoreCrawl: online caution, omitting processing");
return false;
}
- // if the server is busy, we do crawling more slowly
- //if (!(cacheManager.idle())) try
{Thread.currentThread().sleep(2000);} catch (InterruptedException e) {}
// if crawling was paused we have to wait until we wer notified to
continue
Object[] status = (Object[])
sb.crawlJobsStatus.get(plasmaSwitchboard.CRAWLJOB_LOCAL_CRAWL);
Modified: trunk/source/de/anomic/server/serverCore.java
===================================================================
--- trunk/source/de/anomic/server/serverCore.java 2008-02-27 20:09:22 UTC
(rev 4518)
+++ trunk/source/de/anomic/server/serverCore.java 2008-02-27 23:12:43 UTC
(rev 4519)
@@ -601,7 +601,7 @@
}
public byte[] readLine() {
- return receive(this.in, serverCore.this.commandMaxLength, false);
+ return receive(this.in, serverCore.this.commandMaxLength, true);
}
/**
Modified: trunk/source/de/anomic/server/serverFileUtils.java
===================================================================
--- trunk/source/de/anomic/server/serverFileUtils.java 2008-02-27 20:09:22 UTC
(rev 4518)
+++ trunk/source/de/anomic/server/serverFileUtils.java 2008-02-27 23:12:43 UTC
(rev 4519)
@@ -72,7 +72,7 @@
public final class serverFileUtils {
- private static final int DEFAULT_BUFFER_SIZE = 4096;
+ private static final int DEFAULT_BUFFER_SIZE = 512;
public static long copy(InputStream source, OutputStream dest) throws
IOException {
return copy(source,dest, -1);
@@ -95,13 +95,13 @@
int chunkSize = (int) ((count > 0) ? Math.min(count,
DEFAULT_BUFFER_SIZE) : DEFAULT_BUFFER_SIZE);
int c; long total = 0;
- while ((c = source.read(buffer,0,chunkSize)) > 0) {
+ while ((c = source.read(buffer, 0, chunkSize)) > 0) {
dest.write(buffer, 0, c);
dest.flush();
total += c;
if (count > 0) {
- chunkSize = (int)Math.min(count-total,DEFAULT_BUFFER_SIZE);
+ chunkSize = (int) Math.min(count-total, DEFAULT_BUFFER_SIZE);
if (chunkSize == 0) break;
}
@@ -111,7 +111,7 @@
return total;
}
- public static int copy (File source, String inputCharset, Writer dest)
throws IOException {
+ public static int copy(File source, String inputCharset, Writer dest)
throws IOException {
InputStream fis = null;
try {
fis = new FileInputStream(source);
@@ -121,18 +121,18 @@
}
}
- public static int copy (InputStream source, Writer dest, String
inputCharset) throws IOException {
+ public static int copy(InputStream source, Writer dest, String
inputCharset) throws IOException {
InputStreamReader reader = new InputStreamReader(source,inputCharset);
return copy(reader,dest);
}
- public static int copy (String source, Writer dest) throws IOException {
+ public static int copy(String source, Writer dest) throws IOException {
dest.write(source);
dest.flush();
return source.length();
}
- public static int copy (Reader source, Writer dest) throws IOException {
+ public static int copy(Reader source, Writer dest) throws IOException {
char[] buffer = new char[4096];
int count = 0;
int n = 0;
@@ -188,7 +188,7 @@
fis = new FileInputStream(source);
long skipped = fis.skip(start);
if (skipped != start) throw new IllegalStateException("Unable to
skip '" + start + "' bytes. Only '" + skipped + "' bytes skipped.");
- copy(fis, dest,-1);
+ copy(fis, dest, -1);
} finally {
if (fis != null) try { fis.close(); } catch (Exception e) {}
}
@@ -305,11 +305,13 @@
}
public static void write(String source, Writer dest) throws IOException {
- copy(source,dest);
+ dest.write(source);
+ dest.flush();
}
public static void write(byte[] source, OutputStream dest) throws
IOException {
- copy(new ByteArrayInputStream(source), dest, -1);
+ dest.write(source, 0, source.length);
+ dest.flush();
}
public static void write(byte[] source, File dest) throws IOException {
@@ -327,6 +329,7 @@
// support of gzipped data (requested by roland)
if ((source.length > 1) && (((source[1] << 8) | source[0]) ==
GZIPInputStream.GZIP_MAGIC)) {
+ System.out.println("DEBUG: uncompressGZipArray - uncompressing
source");
try {
ByteArrayInputStream byteInput = new
ByteArrayInputStream(source);
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
Modified: trunk/source/de/anomic/tools/crypt.java
===================================================================
--- trunk/source/de/anomic/tools/crypt.java 2008-02-27 20:09:22 UTC (rev
4518)
+++ trunk/source/de/anomic/tools/crypt.java 2008-02-27 23:12:43 UTC (rev
4519)
@@ -119,15 +119,31 @@
}
public static String simpleDecode(String encoded, String key) {
- if (encoded == null || encoded.length() < 3) { return null; }
- if (encoded.charAt(1) != '|') { return encoded; } // not encoded
- switch (encoded.charAt(0)) {
- case 'b' : return
kelondroBase64Order.enhancedCoder.decodeString(encoded.substring(2),
"de.anomic.tools.crypt.simpleDecode()");
- case 'z' : return
gzip.gunzipString(kelondroBase64Order.enhancedCoder.decode(encoded.substring(2),
"de.anomic.tools.crypt.simpleDecode()"));
- case 'p' : return encoded.substring(2);
- default : return null;
+ if (encoded == null || encoded.length() < 3) {
+ return null;
+ }
+ if (encoded.charAt(1) != '|') {
+ return encoded;
+ } // not encoded
+ switch (encoded.charAt(0)) {
+ case 'b': {
+ return
kelondroBase64Order.enhancedCoder.decodeString(encoded.substring(2),
"de.anomic.tools.crypt.simpleDecode()");
+ }
+ case 'z':
+ try {
+ return
gzip.gunzipString(kelondroBase64Order.enhancedCoder.decode(encoded.substring(2),
"de.anomic.tools.crypt.simpleDecode()"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ case 'p': {
+ return encoded.substring(2);
+ }
+ default: {
+ return null;
+ }
+ }
}
- }
public static void main(String[] args) {
String
teststring="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
Modified: trunk/source/de/anomic/tools/cryptbig.java
===================================================================
--- trunk/source/de/anomic/tools/cryptbig.java 2008-02-27 20:09:22 UTC (rev
4518)
+++ trunk/source/de/anomic/tools/cryptbig.java 2008-02-27 23:12:43 UTC (rev
4519)
@@ -395,7 +395,7 @@
return salt + ((gzFlag) ? "1" : "0") +
kelondroBase64Order.enhancedCoder.encode(enc);
}
- public static String descrambleString(String key, String s) {
+ public static String descrambleString(String key, String s) throws
IOException {
String salt = s.substring(0, 8);
boolean gzFlag = (s.charAt(8) == '1');
s = s.substring(9);
@@ -434,7 +434,7 @@
return null;
}
- public static String simpleDecode(String encoded, String key) {
+ public static String simpleDecode(String encoded, String key) throws
IOException {
if ((encoded == null) || (encoded.length() < 3)) return null;
if (encoded.charAt(1) != '|') return encoded; // not encoded
char method = encoded.charAt(0);
@@ -620,7 +620,12 @@
// 'descramble' string
if (s.length != 3) {help(); System.exit(-1);}
long t = System.currentTimeMillis();
- System.out.println(descrambleString(s[1], s[2]));
+ try {
+ System.out.println(descrambleString(s[1], s[2]));
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
System.out.println("Calculation time: " +
(System.currentTimeMillis() - t) + " milliseconds");
System.exit(0);
}
Modified: trunk/source/de/anomic/tools/gzip.java
===================================================================
--- trunk/source/de/anomic/tools/gzip.java 2008-02-27 20:09:22 UTC (rev
4518)
+++ trunk/source/de/anomic/tools/gzip.java 2008-02-27 23:12:43 UTC (rev
4519)
@@ -107,19 +107,13 @@
}
}
- public static String gunzipString(byte[] in) {
- try {
+ public static String gunzipString(byte[] in) throws IOException {
InputStream fin = new GZIPInputStream(new
ByteArrayInputStream(in));
ByteArrayOutputStream fout = new ByteArrayOutputStream();
copy(fout, fin, 128);
fin.close();
fout.close();
return new String(fout.toByteArray(), "UTF-8");
- } catch (IOException e) {
- //System.err.println("ERROR: IO trouble ");
- logger.logWarning("ERROR: IO trouble ",e);
- return null;
- }
}
private static void copy(OutputStream out, InputStream in, int bufferSize)
throws IOException {
Modified: trunk/source/de/anomic/yacy/yacyClient.java
===================================================================
--- trunk/source/de/anomic/yacy/yacyClient.java 2008-02-27 20:09:22 UTC (rev
4518)
+++ trunk/source/de/anomic/yacy/yacyClient.java 2008-02-27 23:12:43 UTC (rev
4519)
@@ -233,9 +233,15 @@
yacyCore.log.logInfo("hello/client: rejected contacting seed;
too large (" + seedStr.length() + " > " + yacySeed.maxsize + ")");
} else {
//System.out.println("DEBUG yacyClient.publishMySeed seedStr =
" + seedStr);
- if
(yacyCore.peerActions.peerArrival(yacySeed.genRemoteSeed(seedStr,
post.get("key", ""), true), (i == 1))) count++;
+ yacySeed remoteSeed = yacySeed.genRemoteSeed(seedStr,
post.get("key", ""), true);
+ if (remoteSeed == null) {
+ yacyCore.log.logWarning("hello/client: bad seed string
from peer " + otherHash + ", address = " + address + ", count = " + (i-1) + "
seedStr = " + seedStr);
+ } else {
+ if (yacyCore.peerActions.peerArrival(remoteSeed, (i ==
1))) count++;
+ }
}
}
+
return count;
}
_______________________________________________
YaCy-svn mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/yacy-svn