summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustaf Lundh <gustaflh@axis.com>2016-09-23 14:51:44 +0200
committerHugo Arès <hugo.ares@ericsson.com>2016-09-23 15:44:53 +0200
commite698965e20dd7e04ede98888e2fcf2d3b4bd08b1 (patch)
tree2d1d5c79112bb13aad3a7da337ba64cb3201b4a4
parent52653bf97123a47500c6bd0138a657a59d3e8d4f (diff)
Catch exceptions from StreamEvents JSON Serialization
Sometimes GSONs JSON serialization method would fail, allowing the exception to travel up to the event dispatcher and deregister the listening user, without any logs identicating an issue. The user would still be connected over SSH, not knowing something went wrong. Catch the exception, log it, and allow the stream-event to continue serving events. Change-Id: I4b1d4db6934566f1213ebc2e416dd95c1b0b07e6
-rw-r--r--gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java18
1 files changed, 15 insertions, 3 deletions
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java
index 0cfe4a72c7..f8070747b4 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/StreamEvents.java
@@ -40,6 +40,8 @@ import com.google.inject.Inject;
import org.apache.sshd.server.Environment;
import org.kohsuke.args4j.Option;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.PrintWriter;
@@ -51,6 +53,9 @@ import java.util.concurrent.LinkedBlockingQueue;
@RequiresCapability(GlobalCapability.STREAM_EVENTS)
@CommandMetaData(name = "stream-events", description = "Monitor events occurring in real time")
final class StreamEvents extends BaseCommand {
+ private static final Logger log =
+ LoggerFactory.getLogger(StreamEvents.class);
+
/** Maximum number of events that may be queued up for each connection. */
private static final int MAX_EVENTS = 128;
@@ -262,9 +267,16 @@ final class StreamEvents extends BaseCommand {
}
private void write(final Object message) {
- final String msg = gson.toJson(message) + "\n";
- synchronized (stdout) {
- stdout.print(msg);
+ String msg = null;
+ try {
+ msg = gson.toJson(message) + "\n";
+ } catch (Exception e) {
+ log.warn("Could not deserialize the msg: ", e);
+ }
+ if (msg != null) {
+ synchronized (stdout) {
+ stdout.print(msg);
+ }
}
}