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:38:49 UTC
[lucene-solr] 11/36: Support generic limits (eg. boolean, enum,
etc).
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 56309ce5a5aad0144faa56e9cb7d84abefdaae3d
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Tue Jul 16 12:05:59 2019 +0200
Support generic limits (eg. boolean, enum, etc).
---
.../apache/solr/managed/DefaultResourceManager.java | 4 ++--
.../apache/solr/managed/ManagedMetricProducer.java | 8 ++++----
.../org/apache/solr/managed/ManagedResource.java | 8 ++++----
.../org/apache/solr/managed/ResourceManager.java | 4 ++--
.../apache/solr/managed/ResourceManagerPool.java | 20 ++++++++++++--------
.../solr/managed/plugins/CacheManagerPlugin.java | 21 +++++++++++++++------
6 files changed, 39 insertions(+), 26 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/managed/DefaultResourceManager.java b/solr/core/src/java/org/apache/solr/managed/DefaultResourceManager.java
index e6005c8..5e708b7 100644
--- a/solr/core/src/java/org/apache/solr/managed/DefaultResourceManager.java
+++ b/solr/core/src/java/org/apache/solr/managed/DefaultResourceManager.java
@@ -93,7 +93,7 @@ public class DefaultResourceManager extends ResourceManager {
}
@Override
- public void createPool(String name, String type, Map<String, Float> poolLimits, Map<String, Object> params) throws Exception {
+ public void createPool(String name, String type, Map<String, Object> poolLimits, Map<String, Object> params) throws Exception {
ensureNotClosed();
if (resourcePools.containsKey(name)) {
throw new IllegalArgumentException("Pool '" + name + "' already exists.");
@@ -110,7 +110,7 @@ public class DefaultResourceManager extends ResourceManager {
}
@Override
- public void modifyPoolLimits(String name, Map<String, Float> poolLimits) throws Exception {
+ public void modifyPoolLimits(String name, Map<String, Object> poolLimits) throws Exception {
ensureNotClosed();
ResourceManagerPool pool = resourcePools.get(name);
if (pool == null) {
diff --git a/solr/core/src/java/org/apache/solr/managed/ManagedMetricProducer.java b/solr/core/src/java/org/apache/solr/managed/ManagedMetricProducer.java
index 7885d0f..00167ab6 100644
--- a/solr/core/src/java/org/apache/solr/managed/ManagedMetricProducer.java
+++ b/solr/core/src/java/org/apache/solr/managed/ManagedMetricProducer.java
@@ -29,18 +29,18 @@ import org.apache.solr.core.SolrInfoBean;
public interface ManagedMetricProducer extends SolrInfoBean, ManagedResource {
@Override
- default Map<String, Float> getMonitoredValues(Collection<String> tags) {
+ default Map<String, Object> getMonitoredValues(Collection<String> tags) {
Map<String, Object> metrics = getMetricsSnapshot();
if (metrics == null) {
return Collections.emptyMap();
}
- Map<String, Float> result = new HashMap<>();
+ Map<String, Object> result = new HashMap<>();
tags.forEach(tag -> {
Object value = metrics.get(tag);
- if (value == null || !(value instanceof Number)) {
+ if (value == null) {
return;
}
- result.put(tag, ((Number)value).floatValue());
+ result.put(tag, value);
});
return result;
}
diff --git a/solr/core/src/java/org/apache/solr/managed/ManagedResource.java b/solr/core/src/java/org/apache/solr/managed/ManagedResource.java
index 0f18028..261d857 100644
--- a/solr/core/src/java/org/apache/solr/managed/ManagedResource.java
+++ b/solr/core/src/java/org/apache/solr/managed/ManagedResource.java
@@ -44,7 +44,7 @@ public interface ManagedResource {
* Set values of managed limits.
* @param limits map of limit names and values
*/
- default void setManagedLimits(Map<String, Float> limits) {
+ default void setManagedLimits(Map<String, Object> limits) {
if (limits == null) {
return;
}
@@ -63,18 +63,18 @@ public interface ManagedResource {
* @param key limit name
* @param value limit value
*/
- void setManagedLimit(String key, float value) throws Exception;
+ void setManagedLimit(String key, Object value) throws Exception;
/**
* Returns current values of managed limits.
* @return map where keys are controlled tags and values are current limits
*/
- Map<String, Float> getManagedLimits();
+ Map<String, Object> getManagedLimits();
/**
* Returns monitored values that are used for calculating optimal settings of managed limits.
* @param tags monitored tags
* @return map of tags to current values.
*/
- Map<String, Float> getMonitoredValues(Collection<String> tags) throws Exception;
+ Map<String, Object> getMonitoredValues(Collection<String> tags) throws Exception;
}
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 867e3f9..41dd690 100644
--- a/solr/core/src/java/org/apache/solr/managed/ResourceManager.java
+++ b/solr/core/src/java/org/apache/solr/managed/ResourceManager.java
@@ -88,14 +88,14 @@ public abstract class ResourceManager implements SolrCloseable, PluginInfoInitia
* @param poolLimits pool limits
* @param params other parameters. These are also used for creating a {@link ResourceManagerPlugin}
*/
- public abstract void createPool(String name, String type, Map<String, Float> poolLimits, Map<String, Object> params) throws Exception;
+ public abstract void createPool(String name, String type, Map<String, Object> poolLimits, Map<String, Object> params) throws Exception;
/**
* Modify pool limits.
* @param name existing pool name
* @param poolLimits new pool limits
*/
- public abstract void modifyPoolLimits(String name, Map<String, Float> poolLimits) throws Exception;
+ public abstract void modifyPoolLimits(String name, Map<String, Object> poolLimits) throws Exception;
/**
* Remove pool. This also stops the management of resources registered with that pool.
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 bfb1b8c..79ecbb0 100644
--- a/solr/core/src/java/org/apache/solr/managed/ResourceManagerPool.java
+++ b/solr/core/src/java/org/apache/solr/managed/ResourceManagerPool.java
@@ -39,7 +39,7 @@ public class ResourceManagerPool implements Runnable, Closeable {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final Map<String, ManagedResource> resources = new ConcurrentHashMap<>();
- private Map<String, Float> poolLimits;
+ private Map<String, Object> poolLimits;
private final String type;
private final String name;
private final ResourceManagerPlugin resourceManagerPlugin;
@@ -58,7 +58,7 @@ public class ResourceManagerPool implements Runnable, Closeable {
* @param params parameters for the {@link ResourceManagerPlugin}
* @throws Exception
*/
- public ResourceManagerPool(String name, String type, ResourceManagerPluginFactory factory, Map<String, Float> poolLimits, Map<String, Object> params) throws Exception {
+ public ResourceManagerPool(String name, String type, ResourceManagerPluginFactory factory, Map<String, Object> poolLimits, Map<String, Object> params) throws Exception {
this.name = name;
this.type = type;
this.resourceManagerPlugin = factory.create(type, params);
@@ -94,11 +94,11 @@ public class ResourceManagerPool implements Runnable, Closeable {
* Get the current monitored values from all resources. Result is a map with resource names as keys,
* and tag/value maps as values.
*/
- public Map<String, Map<String, Float>> getCurrentValues() throws InterruptedException {
+ public Map<String, Map<String, Object>> getCurrentValues() throws InterruptedException {
updateLock.lockInterruptibly();
try {
// collect current values
- Map<String, Map<String, Float>> currentValues = new HashMap<>();
+ Map<String, Map<String, Object>> currentValues = new HashMap<>();
for (ManagedResource resource : resources.values()) {
try {
currentValues.put(resource.getResourceName(), resource.getMonitoredValues(resourceManagerPlugin.getMonitoredTags()));
@@ -109,11 +109,15 @@ public class ResourceManagerPool implements Runnable, Closeable {
// calculate totals
Map<String, Float> newTotalValues = new HashMap<>();
currentValues.values().forEach(map -> map.forEach((k, v) -> {
+ // only calculate totals for numbers
+ if (!(v instanceof Number)) {
+ return;
+ }
Float total = newTotalValues.get(k);
if (total == null) {
- newTotalValues.put(k, v);
+ newTotalValues.put(k, ((Number)v).floatValue());
} else {
- newTotalValues.put(k, total + v);
+ newTotalValues.put(k, total + ((Number)v).floatValue());
}
}));
totalValues = newTotalValues;
@@ -136,14 +140,14 @@ public class ResourceManagerPool implements Runnable, Closeable {
}
}
- public Map<String, Float> getPoolLimits() {
+ public Map<String, Object> getPoolLimits() {
return poolLimits;
}
/**
* Pool limits are defined using controlled tags.
*/
- public void setPoolLimits(Map<String, Float> poolLimits) {
+ public void setPoolLimits(Map<String, Object> poolLimits) {
this.poolLimits = new HashMap(poolLimits);
}
diff --git a/solr/core/src/java/org/apache/solr/managed/plugins/CacheManagerPlugin.java b/solr/core/src/java/org/apache/solr/managed/plugins/CacheManagerPlugin.java
index 8783334..5adf7ef 100644
--- a/solr/core/src/java/org/apache/solr/managed/plugins/CacheManagerPlugin.java
+++ b/solr/core/src/java/org/apache/solr/managed/plugins/CacheManagerPlugin.java
@@ -80,11 +80,16 @@ public class CacheManagerPlugin extends AbstractResourceManagerPlugin {
@Override
public void manage(ResourceManagerPool pool) throws Exception {
- Map<String, Map<String, Float>> currentValues = pool.getCurrentValues();
+ Map<String, Map<String, Object>> currentValues = pool.getCurrentValues();
Map<String, Float> totalValues = pool.getTotalValues();
// pool limits are defined using controlled tags
- pool.getPoolLimits().forEach((poolLimitName, poolLimitValue) -> {
- if (poolLimitValue == null || poolLimitValue <= 0) {
+ pool.getPoolLimits().forEach((poolLimitName, value) -> {
+ // only numeric limits are supported
+ if (value == null || !(value instanceof Number)) {
+ return;
+ }
+ float poolLimitValue = ((Number)value).floatValue();
+ if (poolLimitValue <= 0) {
return;
}
String monitoredTag = controlledToMonitored.get(poolLimitName);
@@ -105,9 +110,13 @@ public class CacheManagerPlugin extends AbstractResourceManagerPlugin {
float changeRatio = poolLimitValue / totalValue;
// modify current limits by the changeRatio
pool.getResources().forEach((name, resource) -> {
- Map<String, Float> resourceLimits = resource.getManagedLimits();
- Float currentResourceLimit = resourceLimits.get(poolLimitName);
- if (currentResourceLimit == null || currentResourceLimit <= 0) {
+ Map<String, Object> resourceLimits = resource.getManagedLimits();
+ Object limit = resourceLimits.get(poolLimitName);
+ if (limit == null || !(limit instanceof Number)) {
+ return;
+ }
+ float currentResourceLimit = ((Number)limit).floatValue();
+ if (currentResourceLimit <= 0) {
return;
}
float newLimit = currentResourceLimit * changeRatio;