Merge "Use subscribe pattern to avoid eager stream-events materialization"
This commit is contained in:
commit
b3e6f9bb58
@ -26,6 +26,14 @@ link:access-control.html#capability_streamEvents[the 'Stream Events' global capa
|
|||||||
== SCRIPTING
|
== SCRIPTING
|
||||||
This command is intended to be used in scripts.
|
This command is intended to be used in scripts.
|
||||||
|
|
||||||
|
== OPTIONS
|
||||||
|
--subscribe|-s::
|
||||||
|
Type of the event to subscribe to. Multiple --subscribe options
|
||||||
|
may be specified to subscribe to multiple events. When this option
|
||||||
|
is provided, only subscribed events are emitted and all other
|
||||||
|
events are ignored. When this option is omitted, all events are
|
||||||
|
emitted.
|
||||||
|
|
||||||
== EXAMPLES
|
== EXAMPLES
|
||||||
|
|
||||||
====
|
====
|
||||||
@ -34,6 +42,13 @@ This command is intended to be used in scripts.
|
|||||||
{"type":"comment-added",change:{"project":"tools/gerrit", ...}, ...}
|
{"type":"comment-added",change:{"project":"tools/gerrit", ...}, ...}
|
||||||
====
|
====
|
||||||
|
|
||||||
|
Only subscribe to specific event types:
|
||||||
|
|
||||||
|
====
|
||||||
|
$ ssh -p 29418 review.example.com gerrit stream-events \
|
||||||
|
-s draft-published -s patchset-created -s ref-replicated
|
||||||
|
====
|
||||||
|
|
||||||
== SCHEMA
|
== SCHEMA
|
||||||
The JSON messages consist of nested objects referencing the *change*,
|
The JSON messages consist of nested objects referencing the *change*,
|
||||||
*patchSet*, *account* involved, and other attributes as appropriate.
|
*patchSet*, *account* involved, and other attributes as appropriate.
|
||||||
|
@ -38,10 +38,13 @@ import com.google.gson.JsonSerializer;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.apache.sshd.server.Environment;
|
import org.apache.sshd.server.Environment;
|
||||||
|
import org.kohsuke.args4j.Option;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
@ -55,6 +58,10 @@ final class StreamEvents extends BaseCommand {
|
|||||||
/** Number of events to write before yielding off the thread. */
|
/** Number of events to write before yielding off the thread. */
|
||||||
private static final int BATCH_SIZE = 32;
|
private static final int BATCH_SIZE = 32;
|
||||||
|
|
||||||
|
@Option(name = "--subscribe", aliases = {"-s"}, metaVar = "SUBSCRIBE",
|
||||||
|
usage = "subscribe to specific stream-events")
|
||||||
|
private List<String> subscribedToEvents = new ArrayList<>();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private IdentifiedUser currentUser;
|
private IdentifiedUser currentUser;
|
||||||
|
|
||||||
@ -87,8 +94,11 @@ final class StreamEvents extends BaseCommand {
|
|||||||
private final EventListener listener = new EventListener() {
|
private final EventListener listener = new EventListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onEvent(final Event event) {
|
public void onEvent(final Event event) {
|
||||||
|
if (subscribedToEvents.isEmpty()
|
||||||
|
|| subscribedToEvents.contains(event.getType())) {
|
||||||
offer(event);
|
offer(event);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final CancelableRunnable writer = new CancelableRunnable() {
|
private final CancelableRunnable writer = new CancelableRunnable() {
|
||||||
|
Loading…
Reference in New Issue
Block a user