Christine Poerschke created SOLR-11389:
------------------------------------------
Summary: call registerReporter after
Solr(Shard|Cluster)Reporter.setCore[Container]
Key: SOLR-11389
URL: https://issues.apache.org/jira/browse/SOLR-11389
Project: Solr
Issue Type: Task
Components: metrics
Reporter: Christine Poerschke
Assignee: Christine Poerschke
Priority: Minor
Currently
[SolrMetricManager.loadReporter|https://github.com/apache/lucene-solr/blob/releases/lucene-solr/7.0.0/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java#L823-L844]
does four things:
* creates a new {{SolrMetricReporter}} instance (object)
* calls {{reporter.init(pluginInfo);}} on the object
* calls {{registerReporter(registry, pluginInfo.name, tag, reporter);}} for the
object
* {{return reporter;}} returns the object
For the returned object the {{SolrMetricManager.loadShardReporters}} and
{{SolrMetricManager.loadClusterReporters}} callers of
SolrMetricManager.loadReporter then call the
{{((SolrShardReporter)reporter).setCore(core);}} or
{{((SolrClusterReporter)reporter).setCoreContainer(cc);}} method. This means
that {{registerReporter}} happened before the SolrShardReporter and
SolrClusterReporter objects were fully set up. _(I have not yet fully
investigated if this might be unintentional-and-not-required or
intentional-and-required.)_
The changes proposed in this ticket can be summarised as follows:
* SolrMetricReporter.java
{code}
- public SolrMetricReporter loadReporter(...) throws Exception {
+ public void loadReporter(...) throws Exception {
...
try {
- reporter.init(pluginInfo);
+ if (reporter instanceof SolrShardReporter) {
+ ((SolrShardReporter)reporter).init(pluginInfo, solrCore);
+ } else if (reporter instanceof SolrClusterReporter) {
+ ((SolrClusterReporter)reporter).init(pluginInfo, coreContainer);
+ } else {
+ reporter.init(pluginInfo);
+ }
} catch (IllegalStateException e) {
throw new IllegalArgumentException("reporter init failed: " +
pluginInfo, e);
}
registerReporter(registry, pluginInfo.name, tag, reporter);
- return reporter;
}
{code}
* SolrShardReporter.java
{code}
+ @Override
+ public void init(PluginInfo pluginInfo) {
+ throw new
UnsupportedOperationException(getClass().getCanonicalName()+".init(PluginInfo)
is not supported, use init(PluginInfo,SolrCore) instead.");
+ }
- public void setCore(SolrCore core) {
+ public void init(PluginInfo pluginInfo, SolrCore core) {
+ super.init(pluginInfo);
...
}
{code}
* SolrClusterReporter.java
{code}
+ @Override
+ public void init(PluginInfo pluginInfo) {
+ throw new
UnsupportedOperationException(getClass().getCanonicalName()+".init(PluginInfo)
is not supported, use init(PluginInfo,CoreContainer) instead.");
+ }
- public void setCoreContainer(CoreContainer cc) {
+ public void init(PluginInfo pluginInfo, CoreContainer cc) {
+ super.init(pluginInfo);
...
}
{code}
Context and motivation for the proposed changes is to support (in SOLR-11291)
the factoring out of an abstract SolrCoreReporter class, allowing folks to
create new reporters that 'know' the SolrCore they are reporting on.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]