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
This commit is contained in:
		@@ -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<String, Plugin> running;
 | 
			
		||||
  private final ConcurrentMap<String, Plugin> running;
 | 
			
		||||
  private final Map<String, FileSnapshot> broken;
 | 
			
		||||
  private final ReferenceQueue<ClassLoader> cleanupQueue;
 | 
			
		||||
  private final ConcurrentMap<CleanupHandle, Boolean> 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<ClassLoader>();
 | 
			
		||||
    cleanupHandles = Maps.newConcurrentMap();
 | 
			
		||||
@@ -88,8 +87,8 @@ public class PluginLoader implements LifecycleListener {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public synchronized List<Plugin> getPlugins() {
 | 
			
		||||
    return Lists.newArrayList(running.values());
 | 
			
		||||
  public Iterable<Plugin> getPlugins() {
 | 
			
		||||
    return running.values();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void installPluginFromStream(String name, InputStream in)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user