Skip to content

Commit f977099

Browse files
authored
FELIX-6812: Fix ConfigInstaller to use listConfigurations instead of getConfiguration (#458)
Replace getConfiguration() calls with listConfigurations() in ConfigInstaller.configurationEvent() method to avoid unintentionally creating new configurations. The getConfiguration() method creates a configuration if it doesn't exist, which is not the desired behavior when simply checking for existing configurations. Changes: - Use listConfigurations("(service.pid=" + pid + ")") instead of getConfiguration(pid, "?") - Add proper null and length checks for configuration arrays - Update corresponding test mocks to reflect the corrected API usage This prevents unwanted configuration creation during configuration event handling.
1 parent f624ba3 commit f977099

2 files changed

Lines changed: 18 additions & 9 deletions

File tree

fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,15 @@ public void doConfigurationEvent(ConfigurationEvent configurationEvent)
237237
{
238238
try
239239
{
240-
Configuration config = getConfigurationAdmin().getConfiguration(
241-
configurationEvent.getPid(),
242-
"?");
240+
Configuration[] configurations = getConfigurationAdmin().listConfigurations("(service.pid=" + configurationEvent.getPid() + ")");
241+
if (null == configurations) {
242+
return;
243+
}
244+
if (configurations.length < 1) {
245+
return;
246+
}
247+
Configuration config = configurations[0];
248+
243249
Dictionary<?,?> dict = config.getProperties();
244250
String fileName = dict != null ? (String) dict.get( DirectoryWatcher.FILENAME ) : null;
245251
File file = fileName != null ? fromConfigKey(fileName) : null;

fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,10 @@ public void testCreateConfigAndObserveCMDeleted() throws Exception
245245
EasyMock.expect(mockBundleContext.getProperty((String) EasyMock.anyObject()))
246246
.andReturn(null)
247247
.anyTimes();
248-
EasyMock.expect(mockConfigurationAdmin.listConfigurations((String) EasyMock.anyObject()))
248+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(felix.fileinstall.filename=file:" + file + ")"))
249249
.andReturn(null);
250-
EasyMock.expect(mockConfigurationAdmin.getConfiguration(pid, "?"))
251-
.andReturn(mockConfiguration);
250+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(service.pid=" + pid + ")"))
251+
.andReturn(new Configuration[] { mockConfiguration });
252252

253253
ServiceReference<ConfigurationAdmin> sr = EasyMock.createMock(ServiceReference.class);
254254
EasyMock.expect(mockConfiguration.updateIfDifferent(EasyMock.capture(props))).andReturn(true);
@@ -327,8 +327,8 @@ public void testUseExistingConfigWithFileinstallFilenameAndObserveCMDeleted() th
327327
EasyMock.expect(mockBundleContext.getProperty((String) EasyMock.anyObject()))
328328
.andReturn(null)
329329
.anyTimes();
330-
EasyMock.expect(mockConfigurationAdmin.listConfigurations((String) EasyMock.anyObject()))
331-
.andReturn(null);
330+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(service.pid=" + pid + ")"))
331+
.andReturn(new Configuration[] { mockConfiguration });
332332
EasyMock.expect(mockConfigurationAdmin.getConfiguration(pid, "?"))
333333
.andReturn(mockConfiguration);
334334
EasyMock.expect(mockConfiguration.getPid())
@@ -386,14 +386,17 @@ public void testDoConfigurationEventSavesUpdatedConfigurationWhenUsingCachingPer
386386
.andReturn(cachingPersistenceConfiguration)
387387
.anyTimes();
388388

389+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(service.pid=" + pid + ")"))
390+
.andReturn(new Configuration[] { cachingPersistenceConfiguration });
391+
389392
EasyMock.expect(mockConfigurationAdmin.getConfiguration(pid, null))
390393
.andReturn(cachingPersistenceConfiguration)
391394
.anyTimes();
392395

393396
final Configuration newConfiguration = EasyMock.createMock(Configuration.class);
394397
EasyMock.expect(newConfiguration.getAttributes()).andReturn(Collections.emptySet()).times(2);
395398

396-
EasyMock.expect(mockConfigurationAdmin.listConfigurations((String) EasyMock.anyObject()))
399+
EasyMock.expect(mockConfigurationAdmin.listConfigurations("(felix.fileinstall.filename=file:" + file + ")"))
397400
.andReturn(new Configuration[] { newConfiguration });
398401

399402
EasyMock.expect(newConfiguration.getProperties())

0 commit comments

Comments
 (0)