From 68a8d414a00f9345f8270a0487d91239400e9448 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Fri, 11 May 2012 15:21:11 -0700 Subject: [PATCH] Allow seeing plugins without the PluginLoader lock This enables `gerrit plugin ls` or a future web UI to show plugins that are known to the loader without waiting for current loading or unloading activity. Change-Id: I7eca30aaa407ba57b8690603c7b370a9495c216d --- .../com/google/gerrit/server/plugins/PluginLoader.java | 9 ++++----- .../com/google/gerrit/sshd/commands/PluginLsCommand.java | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java index 16cd78c139..577a7bb984 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java @@ -15,7 +15,6 @@ package com.google.gerrit.server.plugins; import com.google.common.base.Strings; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.gerrit.lifecycle.LifecycleListener; @@ -60,7 +59,7 @@ public class PluginLoader implements LifecycleListener { private final File pluginsDir; private final File tmpDir; private final PluginGuiceEnvironment env; - private final Map running; + private final ConcurrentMap running; private final Map broken; private final ReferenceQueue cleanupQueue; private final ConcurrentMap cleanupHandles; @@ -73,7 +72,7 @@ public class PluginLoader implements LifecycleListener { pluginsDir = sitePaths.plugins_dir; tmpDir = sitePaths.tmp_dir; env = pe; - running = Maps.newHashMap(); + running = Maps.newConcurrentMap(); broken = Maps.newHashMap(); cleanupQueue = new ReferenceQueue(); cleanupHandles = Maps.newConcurrentMap(); @@ -88,8 +87,8 @@ public class PluginLoader implements LifecycleListener { } } - public synchronized List getPlugins() { - return Lists.newArrayList(running.values()); + public Iterable getPlugins() { + return running.values(); } public void installPluginFromStream(String name, InputStream in) diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java index 6044151ddc..644cf13881 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PluginLsCommand.java @@ -15,6 +15,7 @@ package com.google.gerrit.sshd.commands; import com.google.common.base.Strings; +import com.google.common.collect.Lists; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.server.plugins.Plugin; import com.google.gerrit.server.plugins.PluginLoader; @@ -33,7 +34,7 @@ final class PluginLsCommand extends SshCommand { @Override protected void run() { - List running = loader.getPlugins(); + List running = Lists.newArrayList(loader.getPlugins()); Collections.sort(running, new Comparator() { @Override public int compare(Plugin a, Plugin b) {