diff options
author | Gustaf Lundh <gustaflh@axis.com> | 2016-09-23 14:51:44 +0200 |
---|---|---|
committer | Hugo Arès <hugo.ares@ericsson.com> | 2016-09-23 15:44:53 +0200 |
commit | e698965e20dd7e04ede98888e2fcf2d3b4bd08b1 (patch) | |
tree | 2d1d5c79112bb13aad3a7da337ba64cb3201b4a4 | |
parent | 52653bf97123a47500c6bd0138a657a59d3e8d4f (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.java | 18 |
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); + } } } |