This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/master by this push:
     new 8d9061d  TIKA-2776 -- tika-server in legacy mode should ignore oom.
8d9061d is described below

commit 8d9061d281f7f46ecae8b902e27c49777ec43919
Author: TALLISON <talli...@apache.org>
AuthorDate: Wed Nov 14 16:25:18 2018 -0500

    TIKA-2776 -- tika-server in legacy mode should ignore oom.
---
 .../java/org/apache/tika/server/ServerStatus.java  |  18 +-
 .../java/org/apache/tika/server/TikaServerCli.java |   5 +-
 .../tika/server/TikaServerIntegrationTest.java     | 195 ++++++++++-----------
 3 files changed, 109 insertions(+), 109 deletions(-)

diff --git a/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java 
b/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java
index ac5fed4..f7843fb 100644
--- a/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java
+++ b/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java
@@ -66,6 +66,7 @@ public class ServerStatus {
         byte getByte() { return (byte) shutdownCode;}
 
     }
+
     public enum TASK {
         PARSE,
         DETECT,
@@ -75,9 +76,17 @@ public class ServerStatus {
 
     private AtomicLong counter = new AtomicLong(0);
     private Map<Long, TaskStatus> tasks = new HashMap<>();
-
+    private final boolean isLegacy;
     private STATUS status = STATUS.OPERATING;
 
+    public ServerStatus() {
+        isLegacy = false;
+    }
+
+    public ServerStatus(boolean isLegacy) {
+        this.isLegacy = isLegacy;
+    }
+
     public synchronized long start(TASK task, String fileName) {
         long taskId = counter.incrementAndGet();
         tasks.put(taskId, new TaskStatus(task, Instant.now(), fileName));
@@ -115,7 +124,14 @@ public class ServerStatus {
         return counter.get();
     }
 
+    /**
+     *
+     * @return true if this is legacy, otherwise whether or not status == 
OPERATING.
+     */
     public synchronized boolean isOperating() {
+        if (isLegacy) {
+            return true;
+        }
         return status == STATUS.OPERATING;
     }
 
diff --git 
a/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java 
b/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java
index 0cdce50..970acd2 100644
--- a/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java
+++ b/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java
@@ -256,9 +256,10 @@ public class TikaServerCli {
                 inputStreamFactory = new DefaultInputStreamFactory();
             }
 
-            ServerStatus serverStatus = new ServerStatus();
+            ServerStatus serverStatus;
             //if this is a child process
             if (line.hasOption("child")) {
+                serverStatus = new ServerStatus();
                 //redirect!!!
                 PrintStream out = System.out;
                 InputStream in = System.in;
@@ -277,6 +278,8 @@ public class TikaServerCli {
                         out, maxFiles, serverTimeouts));
 
                 serverThread.start();
+            } else {
+                serverStatus = new ServerStatus(true);
             }
             TikaResource.init(tika, digester, inputStreamFactory, 
serverStatus);
             JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
diff --git 
a/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
 
b/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
index 0d8a128..b1eef59 100644
--- 
a/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
+++ 
b/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
@@ -125,24 +125,49 @@ public class TikaServerIntegrationTest extends TikaTest {
             }
         };
         serverThread.start();
-        awaitServerStartup();
+        try {
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
 
-        Response response = WebClient
-                .create(endPoint + META_PATH)
-                .accept("application/json")
-                .put(ClassLoader
-                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
-        Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
-        List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(12, metadataList.size());
-        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
-        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
 
-        //assertEquals("a38e6c7b38541af87148dee9634cb811", 
metadataList.get(10).get("X-TIKA:digest:MD5"));
+    }
 
-        serverThread.interrupt();
+    @Test
+    public void testOOMInLegacyMode() throws Exception {
 
+        Thread serverThread = new Thread() {
+            @Override
+            public void run() {
+                TikaServerCli.main(
+                        new String[]{
+                                "-p", INTEGRATION_TEST_PORT,
+                        });
+            }
+        };
+        serverThread.start();
+        awaitServerStartup();
 
+        Response response = null;
+        try {
+            response = WebClient
+                    .create(endPoint + META_PATH)
+                    .accept("application/json")
+                    .put(ClassLoader
+                            .getSystemResourceAsStream(TEST_OOM));
+        } catch (Exception e) {
+            //oom may or may not cause an exception depending
+            //on the timing
+        }
+        //give some time for the server to crash/kill itself
+        Thread.sleep(2000);
+
+        try {
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
     }
 
     @Test
@@ -175,20 +200,11 @@ public class TikaServerIntegrationTest extends TikaTest {
         }
         //give some time for the server to crash/kill itself
         Thread.sleep(2000);
-        awaitServerStartup();
-
-        response = WebClient
-                .create(endPoint + META_PATH)
-                .accept("application/json")
-                .put(ClassLoader
-                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
-        Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
-        List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(12, metadataList.size());
-        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
-        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
-
-        serverThread.interrupt();
+        try {
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
     }
 
     @Test
@@ -218,24 +234,11 @@ public class TikaServerIntegrationTest extends TikaTest {
         }
         //give some time for the server to crash/kill itself
         Thread.sleep(2000);
-
-        awaitServerStartup();
-
-        response = WebClient
-                .create(endPoint + META_PATH)
-                .accept("application/json")
-                .put(ClassLoader
-                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
-
-        Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
-        List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(12, metadataList.size());
-        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
-        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
-
-        serverThread.interrupt();
-
-
+        try {
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
     }
 
     @Test
@@ -264,22 +267,11 @@ public class TikaServerIntegrationTest extends TikaTest {
         } catch (Exception e) {
             //potential exception depending on timing
         }
-        awaitServerStartup();
-
-        response = WebClient
-                .create(endPoint + META_PATH)
-                .accept("application/json")
-                .put(ClassLoader
-                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
-        Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
-        List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(12, metadataList.size());
-        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
-        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
-
-        serverThread.interrupt();
-
-
+        try {
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
     }
 
     @Test
@@ -308,22 +300,11 @@ public class TikaServerIntegrationTest extends TikaTest {
         } catch (Exception e) {
             //catchable exception when server shuts down.
         }
-        awaitServerStartup();
-
-        response = WebClient
-                .create(endPoint + META_PATH)
-                .accept("application/json")
-                .put(ClassLoader
-                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
-        Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
-        List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(12, metadataList.size());
-        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
-        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
-
-        serverThread.interrupt();
-
-
+        try {
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
     }
 
     @Test
@@ -367,29 +348,22 @@ public class TikaServerIntegrationTest extends TikaTest {
             }
         };
         serverThread.start();
-        awaitServerStartup();
+        try {
+            awaitServerStartup();
 
-        Response response = WebClient
+            Response response = WebClient
                 .create(endPoint + META_PATH)
                 .accept("application/json")
                 .put(ClassLoader
                         .getSystemResourceAsStream(TEST_STDOUT_STDERR));
-        Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
-        List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(1, metadataList.size());
-        assertContains("quick brown fox", 
metadataList.get(0).get("X-TIKA:content"));
-
-        response = WebClient
-                .create(endPoint + META_PATH)
-                .accept("application/json")
-                .put(ClassLoader
-                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
-        reader = new InputStreamReader((InputStream) response.getEntity(), 
UTF_8);
-        metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(12, metadataList.size());
-        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
-        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
-        serverThread.interrupt();
+            Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
+            List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
+            assertEquals(1, metadataList.size());
+            assertContains("quick brown fox", 
metadataList.get(0).get("X-TIKA:content"));
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
     }
 
     @Test
@@ -421,18 +395,13 @@ public class TikaServerIntegrationTest extends TikaTest {
         assertEquals(1, metadataList.size());
         assertContains("quick brown fox", 
metadataList.get(0).get("X-TIKA:content"));
 
-        response = WebClient
-                .create(endPoint + META_PATH)
-                .accept("application/json")
-                .put(ClassLoader
-                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
-        reader = new InputStreamReader((InputStream) response.getEntity(), 
UTF_8);
-        metadataList = JsonMetadataList.fromJson(reader);
-        assertEquals(12, metadataList.size());
-        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
-        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
-        serverThread.interrupt();
+        try {
+            testBaseline();
+        } finally {
+            serverThread.interrupt();
+        }
     }
+
     private void awaitServerStartup() throws Exception {
 
         Instant started = Instant.now();
@@ -506,5 +475,17 @@ public class TikaServerIntegrationTest extends TikaTest {
 
     }
 
-
+    private void testBaseline() throws Exception {
+        awaitServerStartup();
+        Response response = WebClient
+                .create(endPoint + META_PATH)
+                .accept("application/json")
+                .put(ClassLoader
+                        .getSystemResourceAsStream(TEST_RECURSIVE_DOC));
+        Reader reader = new InputStreamReader((InputStream) 
response.getEntity(), UTF_8);
+        List<Metadata> metadataList = JsonMetadataList.fromJson(reader);
+        assertEquals(12, metadataList.size());
+        assertEquals("Microsoft Office Word", 
metadataList.get(0).get(OfficeOpenXMLExtended.APPLICATION));
+        assertContains("plundered our seas", 
metadataList.get(6).get("X-TIKA:content"));
+    }
 }

Reply via email to