You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2019/12/18 16:39:08 UTC
[lucene-solr] 30/36: Broken, interim check-in.
This is an automated email from the ASF dual-hosted git repository.
ab pushed a commit to branch jira/solr-13579
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 9bd5ebb67a52b3bb84735719e2b54ccfcdf1f6c6
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Tue Nov 19 12:09:10 2019 +0100
Broken, interim check-in.
---
.../solr/managed/DefaultResourceManagerPool.java | 11 ++--------
.../org/apache/solr/managed/ManagedComponent.java | 14 +++++++-----
.../apache/solr/managed/ManagedComponentId.java | 24 +++++++++++++++------
.../org/apache/solr/managed/ManagedContext.java | 25 +++++++++++++++++++---
.../org/apache/solr/managed/ResourceManager.java | 4 ++--
.../apache/solr/managed/ResourceManagerPlugin.java | 2 +-
.../apache/solr/managed/ResourceManagerPool.java | 6 ------
.../java/org/apache/solr/search/CaffeineCache.java | 14 +++++++-----
.../solr/managed/types/TestCacheManagerPlugin.java | 9 ++++++++
9 files changed, 71 insertions(+), 38 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/managed/DefaultResourceManagerPool.java b/solr/core/src/java/org/apache/solr/managed/DefaultResourceManagerPool.java
index 07eb5bf..98771b8 100644
--- a/solr/core/src/java/org/apache/solr/managed/DefaultResourceManagerPool.java
+++ b/solr/core/src/java/org/apache/solr/managed/DefaultResourceManagerPool.java
@@ -44,7 +44,6 @@ public class DefaultResourceManagerPool implements ResourceManagerPool {
private final ResourceManagerPlugin resourceManagerPlugin;
private final Map<String, Object> args;
private final ManagedContext poolContext = new ManagedContext();
- private Map<String, Map<String, Object>> currentValues = null;
private final ReentrantLock updateLock = new ReentrantLock();
int scheduleDelaySeconds;
ScheduledFuture<?> scheduledFuture;
@@ -119,15 +118,14 @@ public class DefaultResourceManagerPool implements ResourceManagerPool {
updateLock.lockInterruptibly();
try {
// collect the current values
- Map<String, Map<String, Object>> newCurrentValues = new HashMap<>();
+ Map<String, Map<String, Object>> currentValues = new HashMap<>();
for (ManagedComponent managedComponent : components.values()) {
try {
- newCurrentValues.put(managedComponent.getManagedComponentId().toString(), resourceManagerPlugin.getMonitoredValues(managedComponent));
+ currentValues.put(managedComponent.getManagedComponentId().toString(), resourceManagerPlugin.getMonitoredValues(managedComponent));
} catch (Exception e) {
log.warn("Error getting managed values from " + managedComponent.getManagedComponentId(), e);
}
}
- this.currentValues = newCurrentValues;
return Collections.unmodifiableMap(currentValues);
} finally {
updateLock.unlock();
@@ -135,11 +133,6 @@ public class DefaultResourceManagerPool implements ResourceManagerPool {
}
@Override
- public Map<String, Object> getTotalValues() throws InterruptedException {
- return Collections.unmodifiableMap(resourceManagerPlugin.aggregateTotalValues(currentValues));
- }
-
- @Override
public Map<String, Object> getPoolLimits() {
return poolLimits;
}
diff --git a/solr/core/src/java/org/apache/solr/managed/ManagedComponent.java b/solr/core/src/java/org/apache/solr/managed/ManagedComponent.java
index cf75af3..d8e6692 100644
--- a/solr/core/src/java/org/apache/solr/managed/ManagedComponent.java
+++ b/solr/core/src/java/org/apache/solr/managed/ManagedComponent.java
@@ -16,19 +16,23 @@
*/
package org.apache.solr.managed;
+import org.apache.solr.core.SolrInfoBean;
+
/**
* A managed component.
*/
-public interface ManagedComponent {
+public interface ManagedComponent extends SolrInfoBean {
/**
- * Unique name of this component. By convention id-s form a dot-separated hierarchy that
- * follows the naming of metric registries and metric names.
+ * Unique name of this component. By convention id-s form a colon-separated hierarchy.
*/
ManagedComponentId getManagedComponentId();
/**
- * Component context used for managing additional component state.
- * @return component's context
+ * Component context used for managing additional component state for the purpose of resource management.
*/
ManagedContext getManagedContext();
+
+ default void close() throws Exception {
+ SolrInfoBean.super.close();
+ }
}
diff --git a/solr/core/src/java/org/apache/solr/managed/ManagedComponentId.java b/solr/core/src/java/org/apache/solr/managed/ManagedComponentId.java
index bd09080..7b5d908 100644
--- a/solr/core/src/java/org/apache/solr/managed/ManagedComponentId.java
+++ b/solr/core/src/java/org/apache/solr/managed/ManagedComponentId.java
@@ -23,11 +23,13 @@ import java.util.Arrays;
* Hierarchical component id.
*/
public class ManagedComponentId {
+ private final String type;
private final String name;
private final String[] path;
private final String id;
- public ManagedComponentId(String name, String... path) {
+ public ManagedComponentId(String type, String name, String... path) {
+ this.type = type;
this.name = name;
this.path = path;
StringBuilder sb = new StringBuilder();
@@ -46,6 +48,10 @@ public class ManagedComponentId {
id = sb.toString();
}
+ public String getType() {
+ return type;
+ }
+
public String getName() {
return name;
}
@@ -63,12 +69,16 @@ public class ManagedComponentId {
return null;
}
String[] parts = fullName.split(":");
- if (parts.length > 1) {
- String name = parts[parts.length - 1];
- String[] path = Arrays.copyOfRange(parts, 0, parts.length - 1);
- return new ManagedComponentId(name, path);
+ if (parts.length < 2) {
+ throw new RuntimeException("at least 2 parts (type and name) must be present: " + fullName);
+ }
+ if (parts.length > 2) {
+ String type = parts[parts.length - 1];
+ String name = parts[parts.length - 2];
+ String[] path = Arrays.copyOfRange(parts, 0, parts.length - 2);
+ return new ManagedComponentId(type, name, path);
} else {
- return new ManagedComponentId(parts[0]);
+ return new ManagedComponentId(parts[0], parts[1]);
}
}
-}
+}
\ No newline at end of file
diff --git a/solr/core/src/java/org/apache/solr/managed/ManagedContext.java b/solr/core/src/java/org/apache/solr/managed/ManagedContext.java
index 74919ee..3cf6839 100644
--- a/solr/core/src/java/org/apache/solr/managed/ManagedContext.java
+++ b/solr/core/src/java/org/apache/solr/managed/ManagedContext.java
@@ -16,11 +16,30 @@
*/
package org.apache.solr.managed;
-import java.util.concurrent.ConcurrentHashMap;
-
/**
*
*/
-public class ManagedContext extends ConcurrentHashMap<String, Object> {
+public class ManagedContext {
+ private final ResourceManager resourceManager;
+ private final String poolName;
+ private final ManagedComponent component;
+
+ public ManagedContext(ResourceManager resourceManager, String poolName, ManagedComponent component) {
+ this.resourceManager = resourceManager;
+ this.poolName = poolName;
+ this.component = component;
+ this.resourceManager.registerComponent(poolName, component);
+ }
+
+ public ResourceManager getResourceManager() {
+ return resourceManager;
+ }
+
+ public String getPoolName() {
+ return poolName;
+ }
+ public void unregister() {
+ resourceManager.unregisterComponent(poolName, component.getManagedComponentId());
+ }
}
diff --git a/solr/core/src/java/org/apache/solr/managed/ResourceManager.java b/solr/core/src/java/org/apache/solr/managed/ResourceManager.java
index 24a6e44..364a99d 100644
--- a/solr/core/src/java/org/apache/solr/managed/ResourceManager.java
+++ b/solr/core/src/java/org/apache/solr/managed/ResourceManager.java
@@ -198,7 +198,7 @@ public abstract class ResourceManager implements SolrCloseable, PluginInfoInitia
* @param pool existing pool name.
* @param managedComponents components to add
*/
- public void registerComponents(String pool, Collection<ManagedComponent> managedComponents) throws Exception {
+ public void registerComponents(String pool, Collection<ManagedComponent> managedComponents) {
ensureActive();
for (ManagedComponent managedComponent : managedComponents) {
registerComponent(pool, managedComponent);
@@ -212,7 +212,7 @@ public abstract class ResourceManager implements SolrCloseable, PluginInfoInitia
* used in the selected pool. The component must not be already managed by
* another pool of the same type.
*/
- public abstract void registerComponent(String pool, ManagedComponent managedComponent) throws Exception;
+ public abstract void registerComponent(String pool, ManagedComponent managedComponent);
/**
* Remove a managed component from a pool.
diff --git a/solr/core/src/java/org/apache/solr/managed/ResourceManagerPlugin.java b/solr/core/src/java/org/apache/solr/managed/ResourceManagerPlugin.java
index 1fbeaf0..dc6a5b6 100644
--- a/solr/core/src/java/org/apache/solr/managed/ResourceManagerPlugin.java
+++ b/solr/core/src/java/org/apache/solr/managed/ResourceManagerPlugin.java
@@ -69,7 +69,7 @@ public interface ResourceManagerPlugin<T extends ManagedComponent> {
void manage(ResourceManagerPool pool) throws Exception;
/**
- * Aggregated current monitored values.
+ * Return aggregated current monitored values.
* <p>Default implementation of this method simply sums up all non-negative numeric values across
* components and ignores any non-numeric values.</p>
*/
diff --git a/solr/core/src/java/org/apache/solr/managed/ResourceManagerPool.java b/solr/core/src/java/org/apache/solr/managed/ResourceManagerPool.java
index 2bf4db7..9f2b4ff 100644
--- a/solr/core/src/java/org/apache/solr/managed/ResourceManagerPool.java
+++ b/solr/core/src/java/org/apache/solr/managed/ResourceManagerPool.java
@@ -38,12 +38,6 @@ public interface ResourceManagerPool extends Runnable, Closeable {
*/
Map<String, Map<String, Object>> getCurrentValues() throws InterruptedException;
- /**
- * This returns cumulative monitored values of all components.
- * <p>NOTE: you MUST call {@link #getCurrentValues()} first!</p>
- */
- Map<String, Object> getTotalValues() throws InterruptedException;
-
/** Get current pool limits. */
Map<String, Object> getPoolLimits();
diff --git a/solr/core/src/java/org/apache/solr/search/CaffeineCache.java b/solr/core/src/java/org/apache/solr/search/CaffeineCache.java
index 32837f6..ea1db54 100644
--- a/solr/core/src/java/org/apache/solr/search/CaffeineCache.java
+++ b/solr/core/src/java/org/apache/solr/search/CaffeineCache.java
@@ -23,8 +23,6 @@ import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ForkJoinPool;
@@ -39,6 +37,8 @@ import org.apache.lucene.util.RamUsageEstimator;
import org.apache.solr.common.SolrException;
import org.apache.solr.managed.ManagedComponentId;
import org.apache.solr.managed.ManagedContext;
+import org.apache.solr.managed.ResourceManagerPluginFactory;
+import org.apache.solr.managed.types.CacheManagerPlugin;
import org.apache.solr.metrics.MetricsMap;
import org.apache.solr.metrics.SolrMetricsContext;
import org.slf4j.Logger;
@@ -88,10 +88,12 @@ public class CaffeineCache<K, V> extends SolrCacheBase implements SolrCache<K, V
private int maxIdleTimeSec;
private boolean cleanupThread;
- private Set<String> metricNames = ConcurrentHashMap.newKeySet();
private MetricsMap cacheMap;
private SolrMetricsContext solrMetricsContext;
+ private ManagedContext managedContext;
+ private ManagedComponentId managedComponentId;
+
private long initialRamBytes = 0;
private final LongAdder ramBytes = new LongAdder();
@@ -387,15 +389,17 @@ public class CaffeineCache<K, V> extends SolrCacheBase implements SolrCache<K, V
}
});
solrMetricsContext.gauge(cacheMap, true, scope, getCategory().toString());
+ managedComponentId = new ManagedComponentId(CacheManagerPlugin.TYPE, solrMetricsContext.getTag(), solrMetricsContext.getRegistryName(), getCategory().toString(), scope);
+ managedContext = new ManagedContext()
}
@Override
public ManagedComponentId getManagedComponentId() {
- return null;
+ return managedComponentId;
}
@Override
public ManagedContext getManagedContext() {
- return null;
+ return managedContext;
}
}
diff --git a/solr/core/src/test/org/apache/solr/managed/types/TestCacheManagerPlugin.java b/solr/core/src/test/org/apache/solr/managed/types/TestCacheManagerPlugin.java
new file mode 100644
index 0000000..dab094f
--- /dev/null
+++ b/solr/core/src/test/org/apache/solr/managed/types/TestCacheManagerPlugin.java
@@ -0,0 +1,9 @@
+package org.apache.solr.managed.types;
+
+import org.apache.solr.cloud.SolrCloudTestCase;
+
+/**
+ *
+ */
+public class TestCacheManagerPlugin extends SolrCloudTestCase {
+}