You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ju...@apache.org on 2011/01/31 10:37:30 UTC

svn commit: r1065537 - in /tika/trunk/tika-core/src/main/java/org/apache/tika/fork: ForkClient.java ForkParser.java ForkServer.java

Author: jukka
Date: Mon Jan 31 09:37:29 2011
New Revision: 1065537

URL: http://svn.apache.org/viewvc?rev=1065537&view=rev
Log:
TIKA-416: Out-of-process text extraction

Add a ping feature for checking if a forked process is still alive.

Modified:
    tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkClient.java
    tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
    tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkServer.java

Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkClient.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkClient.java?rev=1065537&r1=1065536&r2=1065537&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkClient.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkClient.java Mon Jan 31 09:37:29 2011
@@ -79,6 +79,26 @@ class ForkClient {
         }
     }
 
+    public synchronized boolean ping() {
+        try {
+            output.writeByte(ForkServer.PING);
+            output.flush();
+            while (true) {
+                consumeErrorStream();
+                int type = input.read();
+                if (type == ForkServer.PING) {
+                    consumeErrorStream();
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+        } catch (IOException e) {
+            return false;
+        }
+    }
+
+
     public synchronized Throwable call(String method, Object... args)
             throws IOException {
         List<ForkResource> r = new ArrayList<ForkResource>(resources);

Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java?rev=1065537&r1=1065536&r2=1065537&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java Mon Jan 31 09:37:29 2011
@@ -155,7 +155,7 @@ public class ForkParser implements Parse
     private synchronized ForkClient acquireClient()
             throws IOException {
         ForkClient client = pool.poll();
-        if (client == null) {
+        if (client == null || !client.ping()) {
             client = new ForkClient(loader, parser, java);
         }
         return client;

Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkServer.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkServer.java?rev=1065537&r1=1065536&r2=1065537&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkServer.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/fork/ForkServer.java Mon Jan 31 09:37:29 2011
@@ -110,6 +110,8 @@ class ForkServer implements Runnable, Ch
                 int request = input.read();
                 if (request == -1) {
                     break;
+                } else if (request == PING) {
+                    output.writeByte(PING);
                 } else if (request == CALL) {
                     call(loader, object);
                 } else {