Jeroen Daanen created FELIX-5467:
------------------------------------
Summary: MultiPropertyFilterIndex is unusable when a service
property contains a lot of values
Key: FELIX-5467
URL: https://issues.apache.org/jira/browse/FELIX-5467
Project: Felix
Issue Type: Improvement
Components: Dependency Manager
Affects Versions: org.apache.felix.dependencymanager-r8
Reporter: Jeroen Daanen
Attachments: MultiPropertyFilterIndex.java, Property.java
Upon addition of a service, the MultiPropertyFilterIndex creates a set of keys
using the keys and values of the service reference properties. If the value is
an array of values it creates keys for each possible permutation of those
values so that the service reference can be retrieved if in the service
dependency filter multiple values are specified (e.g.
{{(&(objectClass=SomeClass)(&(a=x)(a=n)(a=y)(b=y)(c=z)))}}). If there are a lot
of values for a key this results in a huge memory consumption, making it
impossible to use.
Now, in my application I always specify just one value in the service filter
(e.g. there is a service which has multiple values for property "a" but I only
specify one: {{(&(objectClass=SomeClass)(&(a=x)(b=y)(c=z)))}}) so I don't need
those permutations, but because my property has a lot of values (>10) I cannot
use the MultiPropertyFilterIndex causing a significant performance loss.
I would like to suggest to add the possibility to leave out creating the
permutation of values for a service property if you specify so in your filter
properties. For instance by preceding the property configuration with '#', e.g.
{{-Dorg.apache.felix.dependencymanager.filterindex=\*aspect\*;\*adapter\*;objectClass;objectClass,#a,b,c}}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)