Skip to content

Commit

Permalink
SOLR-14914: Avoid NPE when loader is null but info isn't.
Browse files Browse the repository at this point in the history
  • Loading branch information
sigram committed Oct 14, 2020
1 parent e4350c0 commit f7f7878
Showing 1 changed file with 48 additions and 28 deletions.
76 changes: 48 additions & 28 deletions solr/core/src/java/org/apache/solr/metrics/MetricSuppliers.java
Original file line number Diff line number Diff line change
Expand Up @@ -191,17 +191,21 @@ private static final Reservoir getReservoir(SolrResourceLoader loader, PluginInf
return new SlidingWindowReservoir(size);
} else { // custom reservoir
Reservoir reservoir;
try {
reservoir = loader.newInstance(clazz, Reservoir.class);
if (reservoir instanceof PluginInfoInitialized) {
((PluginInfoInitialized)reservoir).init(info);
} else {
SolrPluginUtils.invokeSetters(reservoir, info.initArgs, true);
}
return reservoir;
} catch (Exception e) {
log.warn("Error initializing custom Reservoir implementation (will use default): {}", info, e);
if (loader == null) {
return new ExponentiallyDecayingReservoir(size, alpha, clk);
} else {
try {
reservoir = loader.newInstance(clazz, Reservoir.class);
if (reservoir instanceof PluginInfoInitialized) {
((PluginInfoInitialized)reservoir).init(info);
} else {
SolrPluginUtils.invokeSetters(reservoir, info.initArgs, true);
}
return reservoir;
} catch (Exception e) {
log.warn("Error initializing custom Reservoir implementation (will use default): {}", info, e);
return new ExponentiallyDecayingReservoir(size, alpha, clk);
}
}
}
}
Expand Down Expand Up @@ -280,11 +284,15 @@ public static MetricRegistry.MetricSupplier<Counter> counterSupplier(SolrResourc
return NoOpCounterSupplier.INSTANCE;
}
MetricRegistry.MetricSupplier<Counter> supplier;
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Counter supplier (will use default): {}", info, e);
if (loader == null) {
supplier = new DefaultCounterSupplier();
} else {
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Counter supplier (will use default): {}", info, e);
supplier = new DefaultCounterSupplier();
}
}
if (supplier instanceof PluginInfoInitialized) {
((PluginInfoInitialized)supplier).init(info);
Expand All @@ -309,11 +317,15 @@ public static MetricRegistry.MetricSupplier<Meter> meterSupplier(SolrResourceLoa
if (MetricsConfig.NOOP_IMPL_CLASS.equals(info.className)) {
return NoOpMeterSupplier.INSTANCE;
}
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Meter supplier (will use default): {}",info, e);
if (loader == null) {
supplier = new DefaultMeterSupplier();
} else {
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Meter supplier (will use default): {}",info, e);
supplier = new DefaultMeterSupplier();
}
}
}
if (supplier instanceof PluginInfoInitialized) {
Expand All @@ -339,11 +351,15 @@ public static MetricRegistry.MetricSupplier<Timer> timerSupplier(SolrResourceLoa
if (MetricsConfig.NOOP_IMPL_CLASS.equals(info.className)) {
return NoOpTimerSupplier.INSTANCE;
}
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Timer supplier (will use default): {}", info, e);
supplier = new DefaultTimerSupplier(loader);
if (loader == null) {
supplier = new DefaultTimerSupplier(null);
} else {
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Timer supplier (will use default): {}", info, e);
supplier = new DefaultTimerSupplier(loader);
}
}
}
if (supplier instanceof PluginInfoInitialized) {
Expand All @@ -368,11 +384,15 @@ public static MetricRegistry.MetricSupplier<Histogram> histogramSupplier(SolrRes
if (MetricsConfig.NOOP_IMPL_CLASS.equals(info.className)) {
return NoOpHistogramSupplier.INSTANCE;
}
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Histogram supplier (will use default): {}", info, e);
supplier = new DefaultHistogramSupplier(loader);
if (loader == null) {
supplier = new DefaultHistogramSupplier(null);
} else {
try {
supplier = loader.newInstance(info.className, MetricRegistry.MetricSupplier.class);
} catch (Exception e) {
log.warn("Error creating custom Histogram supplier (will use default): {}", info, e);
supplier = new DefaultHistogramSupplier(loader);
}
}
}
if (supplier instanceof PluginInfoInitialized) {
Expand Down

0 comments on commit f7f7878

Please sign in to comment.