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")); + } }