Author: adietish
Date: 2011-09-27 14:03:33 -0400 (Tue, 27 Sep 2011)
New Revision: 35077
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.openshift.core/src/org/jboss/ide/eclipse/as/openshift/core/ApplicationLogReader.java
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderIntegrationTest.java
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderTest.java
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/LogReaderRunnable.java
Log:
[JBIDE-9773] correcting ApplicationLogReader implementation and adding new tests
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.openshift.core/src/org/jboss/ide/eclipse/as/openshift/core/ApplicationLogReader.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.openshift.core/src/org/jboss/ide/eclipse/as/openshift/core/ApplicationLogReader.java 2011-09-27
17:59:41 UTC (rev 35076)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.openshift.core/src/org/jboss/ide/eclipse/as/openshift/core/ApplicationLogReader.java 2011-09-27
18:03:33 UTC (rev 35077)
@@ -30,7 +30,7 @@
private static final long STATUS_REQUEST_DELAY = 4 * 1024;
private IOpenshiftService service;
- private StringReader logReader;
+ private Reader logReader;
private Application application;
private InternalUser user;
private String currentStatus;
@@ -45,37 +45,25 @@
public int read(char[] cbuf, int off, int len) throws IOException {
int charactersRead = -1;
try {
- do {
- charactersRead = readStatus(cbuf, off, len);
- } while (charactersRead == -1);
- } catch (InterruptedException e) {
- // do nothing
- }
- return charactersRead;
- }
-
- protected int readStatus(char[] cbuf, int off, int len) throws IOException,
- InterruptedException {
- int charactersRead = -1;
- if (logReader == null) {
- String status = requestStatus();
- if (status == null) {
- Thread.sleep(STATUS_REQUEST_DELAY);
- return -1;
+ while (charactersRead == -1) {
+ if (logReader == null) {
+ this.logReader = createLogReader(requestStatus());
+ }
+ charactersRead = logReader.read(cbuf, off, len);
+ if (charactersRead == -1) {
+ this.logReader = null;
+ }
+ System.err.println("charactersRead = " + charactersRead);
}
- this.currentStatus = status;
- this.logReader = createLogReader(status);
- }
-
- charactersRead = logReader.read(cbuf, off, len);
- if (charactersRead == -1) {
- this.logReader = null;
+ return charactersRead;
+ } catch (OpenshiftException e) {
+ throw new IOException(e);
+ } catch (InterruptedException e) {
return -1;
}
- return charactersRead;
}
- protected StringReader createLogReader(String status) throws IOException {
+ private Reader createLogReader(String status) throws InterruptedException, IOException
{
String log = getLog(status);
return new StringReader(log);
}
@@ -89,17 +77,18 @@
return status.substring(logStart);
}
- protected String requestStatus() throws IOException {
- try {
- String status = service.getStatus(application.getName(), application.getCartridge(),
user);
- if (isSameStatus(status, currentStatus)) {
+ protected String requestStatus() throws InterruptedException, OpenshiftException {
+ String status = null;
+ while (status == null) {
+ status = service.getStatus(application.getName(), application.getCartridge(), user);
+ if (isSameStatus(currentStatus, status)) {
+ Thread.sleep(STATUS_REQUEST_DELAY);
status = null;
+ continue;
}
- return status;
-
- } catch (OpenshiftException e) {
- throw new IOException(e);
}
+ this.currentStatus = status;
+ return status;
}
private boolean isSameStatus(String thisStatus, String otherStatus) {
Modified:
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderIntegrationTest.java
===================================================================
---
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderIntegrationTest.java 2011-09-27
17:59:41 UTC (rev 35076)
+++
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderIntegrationTest.java 2011-09-27
18:03:33 UTC (rev 35077)
@@ -90,7 +90,7 @@
try {
application = user.createTestApplication();
ApplicationLogReader logReader = application.getLogReader();
- LogReaderRunnable logReaderRunnable = new LogReaderRunnable(logReader);
+ LogReaderRunnable logReaderRunnable = new LogReaderRunnable(logReader, 10 * 1024);
executor = Executors.newSingleThreadExecutor();
executor.submit(logReaderRunnable);
@@ -101,6 +101,8 @@
application.restart();
String newLog = logReaderRunnable.waitUntilNoNewLogentries();
+ assertNotNull(newLog);
+ assertTrue(newLog.length() > 0);
assertFalse(log.equals(newLog));
} finally {
if (executor != null) {
Modified:
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderTest.java
===================================================================
---
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderTest.java 2011-09-27
17:59:41 UTC (rev 35076)
+++
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/ApplicationLogReaderTest.java 2011-09-27
18:03:33 UTC (rev 35077)
@@ -35,54 +35,7 @@
@Before
public void setUp() {
- this.application = new Application("fakeApplication", ICartridge.JBOSSAS_7,
null,
- new NoopOpenshiftServiceFake()) {
-
- private String log = INITIAL_LOG;
-
- private static final String INITIAL_LOG =
- "11:31:36,289 INFO [org.jboss.as.ee] (Controller Boot Thread) Activating EE
subsystem"
- +"11:31:36,340 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service
thread 1-1) Starting Coyote HTTP/1.1 on http--127.1.9.1-8080"
- +"11:31:36,440 INFO [org.jboss.as.connector] (MSC service thread 1-4)
Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final)"
- +"11:31:36,471 INFO [org.jboss.as.connector.subsystems.datasources] (MSC
service thread 1-1) Bound data source [java:jboss/datasources/ExampleDS]"
- +"11:31:36,966 INFO [org.jboss.as.deployment] (MSC service thread 1-3)
Started FileSystemDeploymentService for directory
/var/lib/libra/b8ea642ed6aa4dd0af2a4fe94c0ff07c/1317137507620/jbossas-7.0/standalone/deployments"
- +"11:31:36,982 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS
7.0.1.Final \"Zap\" started in 2796ms - Started 82 of 107 services (22 services
are passive or on-demand)"
- +"11:31:37,004 INFO [org.jboss.as.server.deployment] (MSC service thread
1-2) Starting deployment of \"ROOT.war\""
- +"11:31:37,084 INFO [org.jboss.as.jpa] (MSC service thread 1-4) added
javax.persistence.api dependency to ROOT.war"
- +"11:31:37,403 INFO [org.jboss.web] (MSC service thread 1-3) registering web
context: "
- +"11:31:37,445 INFO [org.jboss.as.server.controller]
(DeploymentScanner-threads - 2) Deployed \"ROOT.war\"";
-
- private static final String LOG_CONTINUATION =
- "11:32:13,187 INFO [org.apache.catalina.core.AprLifecycleListener] (MSC
service thread 1-3) The Apache Tomcat Native library which allows optimal performance in
production environments was not found on the java.library.path:
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib"
- +"11:32:13,295 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service
thread 1-1) Starting Coyote HTTP/1.1 on http--127.1.9.1-8080"
- +"11:32:13,344 INFO [org.jboss.as.connector] (MSC service thread 1-1)
Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final)"
- +"11:32:13,383 INFO [org.jboss.as.connector.subsystems.datasources] (MSC
service thread 1-2) Bound data source [java:jboss/datasources/ExampleDS]"
- +"11:32:13,746 INFO [org.jboss.as.deployment] (MSC service thread 1-2)
Started FileSystemDeploymentService for directory
/var/lib/libra/b8ea642ed6aa4dd0af2a4fe94c0ff07c/1317137507620/jbossas-7.0/standalone/deployments"
- +"11:32:13,764 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS
7.0.1.Final \"Zap\" started in 2736ms - Started 82 of 107 services (22 services
are passive or on-demand)"
- +"11:32:13,772 INFO [org.jboss.as.server.deployment] (MSC service thread
1-4) Starting deployment of \"ROOT.war\""
- +"11:32:13,868 INFO [org.jboss.as.jpa] (MSC service thread 1-1) added
javax.persistence.api dependency to ROOT.war"
- +"11:32:14,176 INFO [org.jboss.web] (MSC service thread 1-2) registering web
context: "
- +"11:32:14,207 INFO [org.jboss.as.server.controller]
(DeploymentScanner-threads - 2) Deployed \"ROOT.war\"";
-
-
- @Override
- public ApplicationLogReader getLogReader() throws OpenshiftException {
- return new ApplicationLogReader(this, getUser(), getService()) {
-
- @Override
- protected int readStatus(char[] cbuf, int off, int len) throws IOException,
InterruptedException {
- System.arraycopy(log.toCharArray(), 0, cbuf, off, len);
- return len;
- }
-
- };
- }
-
- @Override
- public void restart() throws OpenshiftException {
- log = LOG_CONTINUATION;
- }
- };
+ this.application = new ApplicationLogFake();
}
@Test
@@ -90,7 +43,7 @@
ExecutorService executor = null;
try {
ApplicationLogReader logReader = application.getLogReader();
- LogReaderRunnable logReaderRunnable = new LogReaderRunnable(logReader);
+ LogReaderRunnable logReaderRunnable = new LogReaderRunnable(logReader, 1 * 1024);
executor = Executors.newSingleThreadExecutor();
executor.submit(logReaderRunnable);
@@ -101,6 +54,8 @@
application.restart();
String newLog = logReaderRunnable.waitUntilNoNewLogentries();
+ assertNotNull(newLog);
+ assertTrue(newLog.length() > 0);
assertFalse(log.equals(newLog));
} finally {
if (executor != null) {
@@ -109,5 +64,71 @@
}
}
+ private static class ApplicationLogFake extends Application {
+ private String log = INITIAL_LOG;
+ private int logPos = 0;
+
+ private static final String INITIAL_LOG =
+ "tailing
/var/lib/libra/f36a4acf8a73450cb98637ed4483ea02/1317146294966//jbossas-7.0/standalone/log/server.log"
+ + "------ Tail of 1317146294966 application server.log ------"
+ + "11:31:36,289 INFO [org.jboss.as.ee] (Controller Boot Thread) Activating EE
subsystem"
+ + "11:31:36,340 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service
thread 1-1) Starting Coyote HTTP/1.1 on http--127.1.9.1-8080"
+ + "11:31:36,440 INFO [org.jboss.as.connector] (MSC service thread 1-4)
Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final)"
+ + "11:31:36,471 INFO [org.jboss.as.connector.subsystems.datasources] (MSC
service thread 1-1) Bound data source [java:jboss/datasources/ExampleDS]"
+ + "11:31:36,966 INFO [org.jboss.as.deployment] (MSC service thread 1-3)
Started FileSystemDeploymentService for directory
/var/lib/libra/b8ea642ed6aa4dd0af2a4fe94c0ff07c/1317137507620/jbossas-7.0/standalone/deployments"
+ + "11:31:36,982 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS
7.0.1.Final \"Zap\" started in 2796ms - Started 82 of 107 services (22 services
are passive or on-demand)"
+ + "11:31:37,004 INFO [org.jboss.as.server.deployment] (MSC service thread
1-2) Starting deployment of \"ROOT.war\""
+ + "11:31:37,084 INFO [org.jboss.as.jpa] (MSC service thread 1-4) added
javax.persistence.api dependency to ROOT.war"
+ + "11:31:37,403 INFO [org.jboss.web] (MSC service thread 1-3) registering web
context: "
+ + "11:31:37,445 INFO [org.jboss.as.server.controller]
(DeploymentScanner-threads - 2) Deployed \"ROOT.war\"";
+
+ private static final String LOG_CONTINUATION =
+ "11:32:13,187 INFO [org.apache.catalina.core.AprLifecycleListener] (MSC service
thread 1-3) The Apache Tomcat Native library which allows optimal performance in
production environments was not found on the java.library.path:
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib"
+ + "11:32:13,295 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service
thread 1-1) Starting Coyote HTTP/1.1 on http--127.1.9.1-8080"
+ + "11:32:13,344 INFO [org.jboss.as.connector] (MSC service thread 1-1)
Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final)"
+ + "11:32:13,383 INFO [org.jboss.as.connector.subsystems.datasources] (MSC
service thread 1-2) Bound data source [java:jboss/datasources/ExampleDS]"
+ + "11:32:13,746 INFO [org.jboss.as.deployment] (MSC service thread 1-2)
Started FileSystemDeploymentService for directory
/var/lib/libra/b8ea642ed6aa4dd0af2a4fe94c0ff07c/1317137507620/jbossas-7.0/standalone/deployments"
+ + "11:32:13,764 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS
7.0.1.Final \"Zap\" started in 2736ms - Started 82 of 107 services (22 services
are passive or on-demand)"
+ + "11:32:13,772 INFO [org.jboss.as.server.deployment] (MSC service thread
1-4) Starting deployment of \"ROOT.war\""
+ + "11:32:13,868 INFO [org.jboss.as.jpa] (MSC service thread 1-1) added
javax.persistence.api dependency to ROOT.war"
+ + "11:32:14,176 INFO [org.jboss.web] (MSC service thread 1-2) registering web
context: "
+ + "11:32:14,207 INFO [org.jboss.as.server.controller]
(DeploymentScanner-threads - 2) Deployed \"ROOT.war\"";
+
+ private ApplicationLogFake() {
+ super("fakeApplication", ICartridge.JBOSSAS_7, null, new
NoopOpenshiftServiceFake());
+ }
+
+ @Override
+ public ApplicationLogReader getLogReader() throws OpenshiftException {
+ return new ApplicationLogReader(this, getUser(), getService()) {
+
+ @Override
+ public int read(char[] cbuf, int off, int len) throws IOException {
+ System.err.println(log.substring(0, 50));
+ System.err.println("off = " + off);
+ System.err.println("len = " + len);
+ if (logPos > log.length()) {
+ return -1;
+ }
+
+ if ((logPos + len) > log.length()) {
+ len = log.length() - logPos - 1;
+ }
+
+ System.arraycopy(log.toCharArray(), logPos, cbuf, off, len);
+ logPos++;
+ return len;
+ }
+
+ };
+ }
+
+ @Override
+ public void restart() throws OpenshiftException {
+ System.err.println("restarting!!!!");
+ log = LOG_CONTINUATION;
+ this.logPos = 0;
+ }
+ };
}
Modified:
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/LogReaderRunnable.java
===================================================================
---
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/LogReaderRunnable.java 2011-09-27
17:59:41 UTC (rev 35076)
+++
trunk/as/tests/org.jboss.ide.eclipse.as.openshift.test/src/org/jboss/ide/eclipse/as/openshift/test/internal/core/LogReaderRunnable.java 2011-09-27
18:03:33 UTC (rev 35077)
@@ -20,14 +20,14 @@
public class LogReaderRunnable implements Runnable {
- private static final long TIMEOUT = 10; // 10 seconds
-
private ApplicationLogReader logReader;
private BlockingQueue<Character> logQueue;
+ private long timeout;
- public LogReaderRunnable(ApplicationLogReader logReader) {
+ public LogReaderRunnable(ApplicationLogReader logReader, long timeout) {
this.logReader = logReader;
this.logQueue = new LinkedBlockingDeque<Character>();
+ this.timeout = timeout;
}
@Override
@@ -42,7 +42,7 @@
}
private boolean waitForNewLogentries(StringBuilder builder) throws InterruptedException
{
- Character character = logQueue.poll(TIMEOUT, TimeUnit.SECONDS);
+ Character character = logQueue.poll(timeout, TimeUnit.MILLISECONDS);
boolean isNewEntry = character != null;
if (isNewEntry) {
builder.append(character);