Hi all,

I've installed bundle "org.apache.sling.commons.scheduler:2.7.4" on Karaf
4.3.0, and I get exception from activation:
- The activate method has thrown an exception
- IllegalArgumentException: A metric named
commons.scheduler.oldest.running.job.millis already exists

The class in case is org.apache.sling.commons.scheduler.impl.GaugesSupport.

It seems like gauges registered/created at the:
@Activate
protected void activate(final BundleContext ctx)

are not removed at the deactivate method:
@Deactivate
void deactivate()

class has member variable named gaugeRegistrations, that I do not see use
of it, but I guess it has its use.

As a "be sure not sorry" way, I've updated createGauge method with :

    @SuppressWarnings("rawtypes")
    private void createGauge(final ConfigHolder configHolder,
            final String tpName,
            final String filterName,
            final String gaugeName) {
        final Gauge gauge = new Gauge() {
            @Override
            public Long getValue() {
                if (!active) {
                    return -1L; // disabled case
                }
                return getOldestRunningJobMillis(configHolder, tpName,
filterName);
            }
        };
        logger.debug("createGauge: registering gauge : " + gaugeName);
        try {
            this.metricRegistry.register(gaugeName, gauge);
        } catch (IllegalArgumentException e) {
            this.metricRegistry.remove(gaugeName);
            logger.warn("createGauge: re-registering gauge : " + gaugeName);
            this.metricRegistry.register(gaugeName, gauge);
        }
        logger.info("createGauge: registered gauge : " + gaugeName);
        registeredGaugeNameList.add(gaugeName);
    }

more important is update to method

@SuppressWarnings("rawtypes")
    private void unregisterGauges() {

that already gets called by the deactivate method, I've added this code at
the end of the method:
        for (String registeredGaugeName : registeredGaugeNameList) {
            metricRegistry.remove(registeredGaugeName);
        }

( registeredGaugeNameList is list of names collected at the createGauge
method ).

With this code changes, code works as expected and no exception is not
throws.

What is open is -- I do not know if it is correct to remove gauge from
metricRegistery or it should reuse existing one ...


2019-09-30T00:05:55,226 | INFO  | features-3-thread-1 | FeaturesServiceImpl
             | 11 - org.apache.karaf.features.core - 4.3.0.SNAPSHOT |
org.apache.sling.commons.scheduler/2.7.4
2019-09-30T00:05:55,282 | ERROR | features-3-thread-1 | scheduler
             | 71 - org.apache.sling.commons.scheduler - 2.7.4 | bundle
org.apache.sling.commons.scheduler:2.7.4
(71)[org.apache.sling.commons.scheduler.impl.GaugesSupport(15)] : The
activate method has thrown an exception
java.lang.IllegalArgumentException: A metric named
commons.scheduler.oldest.running.job.millis already exists
at com.codahale.metrics.MetricRegistry.register(MetricRegistry.java:91)
~[?:?]
at
org.apache.sling.commons.scheduler.impl.GaugesSupport.createGauge(GaugesSupport.java:230)
~[?:?]
at
org.apache.sling.commons.scheduler.impl.GaugesSupport.registerGauges(GaugesSupport.java:198)
~[?:?]
at
org.apache.sling.commons.scheduler.impl.GaugesSupport.activate(GaugesSupport.java:149)
~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[?:1.8.0_222]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[?:1.8.0_222]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[?:1.8.0_222]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_222]
at
org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:228)
~[?:?]
at
org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41)
~[?:?]
at
org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:664)
~[?:?]
at
org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:510)
~[?:?]
at
org.apache.felix.scr.impl.inject.methods.ActivateMethod.invoke(ActivateMethod.java:317)
~[?:?]
at
org.apache.felix.scr.impl.inject.methods.ActivateMethod.invoke(ActivateMethod.java:307)
~[?:?]
at
org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:340)
~[?:?]
at
org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:114)
~[?:?]
at
org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:982)
~[?:?]
at
org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:955)
~[?:?]
at
org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:765)
~[?:?]
at
org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1045)
~[?:?]
at
org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:999)
~[?:?]
at
org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1216)
~[?:?]
at
org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1137)
~[?:?]
at
org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:944)
~[?:?]
at
org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:880)
~[?:?]
at
org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1168)
~[?:?]
at
org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:125)
~[?:?]
at
org.apache.felix.framework.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990)
~[?:?]
at
org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:838)
~[?:?]
at
org.apache.felix.framework.EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
~[?:?]
at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4595) ~[?:?]
at org.apache.felix.framework.Felix.registerService(Felix.java:3587) ~[?:?]
at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
~[?:?]
at
org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:906)
~[?:?]
at
org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:892)
~[?:?]
at
org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:128)
~[?:?]
at
org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:959)
~[?:?]
at
org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:732)
~[?:?]
at
org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:666)
~[?:?]
at
org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:432)
~[?:?]
at
org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:665)
~[?:?]
at
org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:338)
~[?:?]
at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:382)
~[?:?]
at org.apache.felix.scr.impl.Activator.access$200(Activator.java:49) ~[?:?]
at
org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:264)
~[?:?]
at
org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196)
~[?:?]
at
org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169)
~[?:?]
at
org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49)
~[?:?]
at
org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482)
~[osgi.core-6.0.0.jar:?]
at
org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415)
~[osgi.core-6.0.0.jar:?]
at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)
~[osgi.core-6.0.0.jar:?]
at
org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444)
~[osgi.core-6.0.0.jar:?]
at
org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
~[?:?]
at
org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
~[?:?]
at
org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516)
~[?:?]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4579) ~[?:?]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2174) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984) ~[?:?]
at
org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165)
~[?:?]
at
org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1153)
~[?:?]
at
org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1033)
~[?:?]
at
org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1062)
~[?:?]
at
org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:998)
~[?:?]
at
org.apache.karaf.features.internal.service.FeaturesServiceImpl$$Lambda$88.000000007466C1E0.call(Unknown
Source) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_222]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[?:1.8.0_222]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[?:1.8.0_222]
at java.lang.Thread.run(Thread.java:819) [?:1.8.0_222]
2019-09-30T00:05:55,341 | INFO  | features-3-thread-1 | ServletWebElement
             | 107 - org.ops4j.pax.web.pax-web-extender-whiteboard - 7.2.11
| Ignoring servlet [195] without valid alias or url patterns property.

If you find this change usable, please use it.


Kind Regards,
Miroslav



-- 
Miroslav Beranič
MIBESIS
[email protected]
https://www.mibesis.si

Reply via email to