Avoid referencing gerrit specific Executor.
WorkQueue.Executor is a thin layer on top of ScheduledThreadPoolExecutor. Since it is a class, rather than an implementation, it is impossible to inject a wrapper around an existing implementation. This change is one step towards enabling this. Change-Id: Id6b1d0fd10b5f8549cbc76a4867b3afb750aca02
This commit is contained in:
@@ -28,7 +28,6 @@ import com.google.gerrit.server.DynamicOptions;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gerrit.server.RequestCleanup;
|
||||
import com.google.gerrit.server.git.ProjectRunnable;
|
||||
import com.google.gerrit.server.git.WorkQueue;
|
||||
import com.google.gerrit.server.git.WorkQueue.CancelableRunnable;
|
||||
import com.google.gerrit.server.permissions.GlobalPermission;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||
@@ -50,6 +49,7 @@ import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import org.apache.sshd.common.SshException;
|
||||
import org.apache.sshd.server.Command;
|
||||
@@ -85,7 +85,7 @@ public abstract class BaseCommand implements Command {
|
||||
|
||||
@Inject private RequestCleanup cleanup;
|
||||
|
||||
@Inject @CommandExecutor private WorkQueue.Executor executor;
|
||||
@Inject @CommandExecutor private ScheduledThreadPoolExecutor executor;
|
||||
|
||||
@Inject private PermissionBackend permissionBackend;
|
||||
@Inject private CurrentUser user;
|
||||
|
||||
@@ -16,11 +16,11 @@ package com.google.gerrit.sshd;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
import com.google.gerrit.server.git.WorkQueue.Executor;
|
||||
import com.google.inject.BindingAnnotation;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
|
||||
/** Marker on {@link Executor} used by SSH threads. */
|
||||
/** Marker on {@link ScheduledThreadPoolExecutor} used by SSH threads. */
|
||||
@Retention(RUNTIME)
|
||||
@BindingAnnotation
|
||||
public @interface CommandExecutor {}
|
||||
|
||||
@@ -16,11 +16,11 @@ package com.google.gerrit.sshd;
|
||||
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.git.QueueProvider;
|
||||
import com.google.gerrit.server.git.WorkQueue;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
|
||||
class CommandExecutorProvider implements Provider<WorkQueue.Executor> {
|
||||
class CommandExecutorProvider implements Provider<ScheduledThreadPoolExecutor> {
|
||||
|
||||
private final QueueProvider queues;
|
||||
private final CurrentUser user;
|
||||
@@ -32,7 +32,7 @@ class CommandExecutorProvider implements Provider<WorkQueue.Executor> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorkQueue.Executor get() {
|
||||
public ScheduledThreadPoolExecutor get() {
|
||||
return queues.getQueue(user.getCapabilities().getQueueType());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.google.gerrit.server.config.ThreadSettingsConfig;
|
||||
import com.google.gerrit.server.git.QueueProvider;
|
||||
import com.google.gerrit.server.git.WorkQueue;
|
||||
import com.google.inject.Inject;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
|
||||
@@ -26,8 +27,8 @@ public class CommandExecutorQueueProvider implements QueueProvider {
|
||||
|
||||
private int poolSize;
|
||||
private final int batchThreads;
|
||||
private final WorkQueue.Executor interactiveExecutor;
|
||||
private final WorkQueue.Executor batchExecutor;
|
||||
private final ScheduledThreadPoolExecutor interactiveExecutor;
|
||||
private final ScheduledThreadPoolExecutor batchExecutor;
|
||||
|
||||
@Inject
|
||||
public CommandExecutorQueueProvider(
|
||||
@@ -51,7 +52,7 @@ public class CommandExecutorQueueProvider implements QueueProvider {
|
||||
setThreadFactory(interactiveExecutor);
|
||||
}
|
||||
|
||||
private void setThreadFactory(WorkQueue.Executor executor) {
|
||||
private void setThreadFactory(ScheduledThreadPoolExecutor executor) {
|
||||
final ThreadFactory parent = executor.getThreadFactory();
|
||||
executor.setThreadFactory(
|
||||
new ThreadFactory() {
|
||||
@@ -65,7 +66,7 @@ public class CommandExecutorQueueProvider implements QueueProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorkQueue.Executor getQueue(QueueType type) {
|
||||
public ScheduledThreadPoolExecutor getQueue(QueueType type) {
|
||||
switch (type) {
|
||||
case INTERACTIVE:
|
||||
return interactiveExecutor;
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.google.gerrit.server.config.GerritRequestModule;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.git.AsyncReceiveCommits;
|
||||
import com.google.gerrit.server.git.QueueProvider;
|
||||
import com.google.gerrit.server.git.WorkQueue;
|
||||
import com.google.gerrit.server.plugins.ModuleGenerator;
|
||||
import com.google.gerrit.server.plugins.ReloadPluginListener;
|
||||
import com.google.gerrit.server.plugins.StartPluginListener;
|
||||
@@ -39,6 +38,7 @@ import com.google.inject.servlet.RequestScoped;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import org.apache.sshd.server.CommandFactory;
|
||||
import org.apache.sshd.server.auth.gss.GSSAuthenticator;
|
||||
import org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator;
|
||||
@@ -77,7 +77,7 @@ public class SshModule extends LifecycleModule {
|
||||
.toInstance(new DispatchCommandProvider(Commands.CMD_ROOT));
|
||||
bind(CommandFactoryProvider.class);
|
||||
bind(CommandFactory.class).toProvider(CommandFactoryProvider.class);
|
||||
bind(WorkQueue.Executor.class)
|
||||
bind(ScheduledThreadPoolExecutor.class)
|
||||
.annotatedWith(StreamCommandExecutor.class)
|
||||
.toProvider(StreamCommandExecutorProvider.class)
|
||||
.in(SINGLETON);
|
||||
@@ -126,7 +126,7 @@ public class SshModule extends LifecycleModule {
|
||||
.toProvider(SshRemotePeerProvider.class)
|
||||
.in(SshScope.REQUEST);
|
||||
|
||||
bind(WorkQueue.Executor.class)
|
||||
bind(ScheduledThreadPoolExecutor.class)
|
||||
.annotatedWith(CommandExecutor.class)
|
||||
.toProvider(CommandExecutorProvider.class)
|
||||
.in(SshScope.REQUEST);
|
||||
|
||||
@@ -16,11 +16,11 @@ package com.google.gerrit.sshd;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
import com.google.gerrit.server.git.WorkQueue.Executor;
|
||||
import com.google.inject.BindingAnnotation;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
|
||||
/** Marker on {@link Executor} used by delayed event streaming. */
|
||||
/** Marker on {@link ScheduledThreadPoolExecutor} used by delayed event streaming. */
|
||||
@Retention(RUNTIME)
|
||||
@BindingAnnotation
|
||||
public @interface StreamCommandExecutor {}
|
||||
|
||||
@@ -18,10 +18,11 @@ import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.git.WorkQueue;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
|
||||
class StreamCommandExecutorProvider implements Provider<WorkQueue.Executor> {
|
||||
class StreamCommandExecutorProvider implements Provider<ScheduledThreadPoolExecutor> {
|
||||
private final int poolSize;
|
||||
private final WorkQueue queues;
|
||||
|
||||
@@ -33,8 +34,8 @@ class StreamCommandExecutorProvider implements Provider<WorkQueue.Executor> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorkQueue.Executor get() {
|
||||
final WorkQueue.Executor executor;
|
||||
public ScheduledThreadPoolExecutor get() {
|
||||
final ScheduledThreadPoolExecutor executor;
|
||||
|
||||
executor = queues.createQueue(poolSize, "SSH-Stream-Worker");
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import org.apache.sshd.server.Environment;
|
||||
import org.kohsuke.args4j.Option;
|
||||
|
||||
@@ -108,7 +109,7 @@ final class ShowQueue extends SshCommand {
|
||||
if (groupByQueue) {
|
||||
ListMultimap<String, TaskInfo> byQueue = byQueue(tasks);
|
||||
for (String queueName : byQueue.keySet()) {
|
||||
WorkQueue.Executor e = workQueue.getExecutor(queueName);
|
||||
ScheduledThreadPoolExecutor e = workQueue.getExecutor(queueName);
|
||||
stdout.print(String.format("Queue: %s\n", queueName));
|
||||
print(byQueue.get(queueName), now, viewAll, e.getCorePoolSize());
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import com.google.gerrit.server.events.Event;
|
||||
import com.google.gerrit.server.events.EventTypes;
|
||||
import com.google.gerrit.server.events.ProjectNameKeySerializer;
|
||||
import com.google.gerrit.server.events.SupplierSerializer;
|
||||
import com.google.gerrit.server.git.WorkQueue;
|
||||
import com.google.gerrit.server.git.WorkQueue.CancelableRunnable;
|
||||
import com.google.gerrit.sshd.BaseCommand;
|
||||
import com.google.gerrit.sshd.CommandMetaData;
|
||||
@@ -43,6 +42,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import org.apache.sshd.server.Environment;
|
||||
import org.kohsuke.args4j.Option;
|
||||
import org.slf4j.Logger;
|
||||
@@ -71,7 +71,7 @@ final class StreamEvents extends BaseCommand {
|
||||
|
||||
@Inject private DynamicSet<UserScopedEventListener> eventListeners;
|
||||
|
||||
@Inject @StreamCommandExecutor private WorkQueue.Executor pool;
|
||||
@Inject @StreamCommandExecutor private ScheduledThreadPoolExecutor pool;
|
||||
|
||||
/** Queue of events to stream to the connected user. */
|
||||
private final LinkedBlockingQueue<Event> queue = new LinkedBlockingQueue<>(MAX_EVENTS);
|
||||
|
||||
Reference in New Issue
Block a user