]> git.basschouten.com Git - openhab-addons.git/commitdiff
[mapdb] Make serialization asynchronous (#14900)
authorJ-N-K <github@klug.nrw>
Mon, 1 May 2023 07:10:28 +0000 (09:10 +0200)
committerGitHub <noreply@github.com>
Mon, 1 May 2023 07:10:28 +0000 (09:10 +0200)
* [mapdb] Make serialization asynchronous

---------

Signed-off-by: Jan N. Klug <github@klug.nrw>
bundles/org.openhab.persistence.mapdb/src/main/java/org/openhab/persistence/mapdb/internal/MapDbPersistenceService.java
itests/org.openhab.persistence.mapdb.tests/src/main/java/org/openhab/persistence/mapdb/MapDbPersistenceServiceOSGiTest.java

index bbcac51847f6a464f832bed0784f05731724f392..336e4039cef5435c917f1fe2374ee74d4d241f7b 100644 (file)
@@ -73,7 +73,9 @@ public class MapDbPersistenceService implements QueryablePersistenceService {
 
     private final ExecutorService threadPool = ThreadPoolManager.getPool(getClass().getSimpleName());
 
-    /** holds the local instance of the MapDB database */
+    /**
+     * holds the local instance of the MapDB database
+     */
 
     private @NonNullByDefault({}) DB db;
     private @NonNullByDefault({}) Map<String, String> map;
@@ -182,12 +184,12 @@ public class MapDbPersistenceService implements QueryablePersistenceService {
         mItem.setName(localAlias);
         mItem.setState(state);
         mItem.setTimestamp(new Date());
-        String json = serialize(mItem);
-        map.put(localAlias, json);
-        commit();
-        if (logger.isDebugEnabled()) {
+        threadPool.submit(() -> {
+            String json = serialize(mItem);
+            map.put(localAlias, json);
+            db.commit();
             logger.debug("Stored '{}' with state '{}' as '{}' in MapDB database", localAlias, state, json);
-        }
+        });
     }
 
     @Override
@@ -217,10 +219,6 @@ public class MapDbPersistenceService implements QueryablePersistenceService {
         return Optional.of(item);
     }
 
-    private void commit() {
-        threadPool.submit(() -> db.commit());
-    }
-
     private static <T> Stream<T> streamOptional(Optional<T> opt) {
         return opt.isPresent() ? Stream.of(opt.get()) : Stream.empty();
     }
index 175bb21cf6ed9d25954265b8bceab4a6a5c8f52b..7f4d946000ec7c6993a58b04c653e39522f54b54 100644 (file)
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.stream.Stream;
 
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeEach;
@@ -62,7 +63,9 @@ public class MapDbPersistenceServiceOSGiTest extends JavaOSGiTest {
     private static void removeDirRecursive(final String dir) throws IOException {
         final Path path = Paths.get(dir);
         if (Files.exists(path)) {
-            Files.walk(path).map(Path::toFile).sorted().forEach(File::delete);
+            try (Stream<Path> stream = Files.walk(path)) {
+                stream.map(Path::toFile).sorted().forEach(File::delete);
+            }
         }
     }
 
@@ -79,12 +82,12 @@ public class MapDbPersistenceServiceOSGiTest extends JavaOSGiTest {
 
         persistenceService.store(item);
 
-        assertThat(persistenceService.getItemInfo(), hasItem(hasProperty("name", equalTo(name))));
+        waitForAssert(() -> assertThat(persistenceService.getItemInfo(), hasItem(hasProperty("name", equalTo(name)))));
 
         persistenceService.store(item, alias);
 
-        assertThat(persistenceService.getItemInfo(),
-                hasItems(hasProperty("name", equalTo(name)), hasProperty("name", equalTo(alias))));
+        waitForAssert(() -> assertThat(persistenceService.getItemInfo(),
+                hasItems(hasProperty("name", equalTo(name)), hasProperty("name", equalTo(alias)))));
     }
 
     @Test
@@ -102,8 +105,8 @@ public class MapDbPersistenceServiceOSGiTest extends JavaOSGiTest {
 
         persistenceService.store(item);
 
-        assertThat(persistenceService.query(filter),
-                contains(allOf(hasProperty("name", equalTo(name)), hasProperty("state", equalTo(state)))));
+        waitForAssert(() -> assertThat(persistenceService.query(filter),
+                contains(allOf(hasProperty("name", equalTo(name)), hasProperty("state", equalTo(state))))));
     }
 
     @Test
@@ -127,7 +130,7 @@ public class MapDbPersistenceServiceOSGiTest extends JavaOSGiTest {
         persistenceService.store(item, alias);
 
         assertThat(persistenceService.query(filterByName), is(emptyIterable()));
-        assertThat(persistenceService.query(filterByAlias),
-                contains(allOf(hasProperty("name", equalTo(alias)), hasProperty("state", equalTo(state)))));
+        waitForAssert(() -> assertThat(persistenceService.query(filterByAlias),
+                contains(allOf(hasProperty("name", equalTo(alias)), hasProperty("state", equalTo(state))))));
     }
 }