You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@karaf.apache.org by "Daniel Estermann (JIRA)" <ji...@apache.org> on 2019/03/06 14:19:00 UTC

[jira] [Created] (KARAF-6183) FeaturesProcessorImpl improvement for bundle override

Daniel Estermann created KARAF-6183:
---------------------------------------

             Summary: FeaturesProcessorImpl improvement for bundle override
                 Key: KARAF-6183
                 URL: https://issues.apache.org/jira/browse/KARAF-6183
             Project: Karaf
          Issue Type: Improvement
          Components: karaf
    Affects Versions: 4.2.3
            Reporter: Daniel Estermann
             Fix For: 4.2.4


Say we have the following override.properties:

{{mvn:com.seeburger.portal/portal-backend-sdk/2.69.0-SNAPSHOT;range="[0,99999)" mvn:com.seeburger.portal/portal-backend-sdk/2.69.0-SNAPSHOT/jar/karaf-migration;range="[0,99999)"}}

which are supposed to do the following replacements:

{{portal-backend-sdk/2.68.3}} → {{portal-backend-sdk/2.69.0-SNAPSHOT}}

and

{{portal-backend-sdk/2.68.3/jar/karaf-migration}} → {{portal-backend-sdk/2.69.0-SNAPSHOT/jar/karaf-migration}}

But the method [FeaturesProcessorImpl.staticOverrideBundle(Bundle)|https://github.com/apache/karaf/blob/master/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesProcessorImpl.java#L225] replaces {{portal-backend-sdk/2.68.3/jar/karaf-migration}} with {{portal-backend-sdk/2.69.0-SNAPSHOT}}, i.e. a classified artifact gets replaced with an artifact without classifier. This happens because the implementation of [LocationPattern|https://github.com/apache/karaf/blob/master/features/core/src/main/java/org/apache/karaf/features/LocationPattern.java#L151] allows matching of classified URI by a non-classified pattern. The LocationPatternTest indicates that this is an intentional behavior: see line [112|https://github.com/apache/karaf/blob/master/features/core/src/test/java/org/apache/karaf/features/internal/service/LocationPatternTest.java#L112], [115|https://github.com/apache/karaf/blob/master/features/core/src/test/java/org/apache/karaf/features/internal/service/LocationPatternTest.java#L115], [116|https://github.com/apache/karaf/blob/master/features/core/src/test/java/org/apache/karaf/features/internal/service/LocationPatternTest.java#L116].

I can understand why {{LocationPattern}} is implemented like that. But then my guess is that {{FeaturesProcessorImpl}} is incorrect. There is a comment which shows the anticipation of such misbehavior: {{TOCHECK: last rule wins - no break!!!}} Last rule indeed doesn't work in this case. I think what is crucial here, is that we shouldn't rely on the order of overrides, but rather on their quality. I.e. not the first/last match is appropriate, but the best one. I propose to collect candidates to match and then determine the best one using simply the length as criterion.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)