You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2018/11/14 21:25:35 UTC
[tika] branch master updated: TIKA-2776 -- tika-server in legacy
mode should ignore oom.
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 <ta...@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"));
+ }
}