This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch 
4172-use-domain-storage-interfaces-instead-of-crudstorage-in-inosqlstorage
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit f716bd5596e80dfb5495e59f7e704772d8eea1d4
Author: Philipp Zehnder <[email protected]>
AuthorDate: Thu Feb 12 21:36:12 2026 +0100

    refactor(#4172): introduce IExtensionsServiceStorage and migrate 
getExtensionsServiceStorage to typed interface
---
 .../health/monitoring/ServiceHealthCheck.java      |  4 +--
 .../monitoring/ServiceRegistrationManager.java     |  6 ++--
 .../loadbalance/impl/ExtensibleLoadManager.java    |  4 +--
 .../rest/impl/admin/MigrationResource.java         |  4 +--
 .../impl/admin/ServiceRegistrationResource.java    |  4 +--
 .../svcdiscovery/SpServiceDiscoveryCore.java       |  6 ++--
 .../storage/api/IExtensionsServiceStorage.java     | 23 +++++++++++++++
 .../streampipes/storage/api/INoSqlStorage.java     |  3 +-
 .../storage/couchdb/CouchDbStorageManager.java     | 10 +++----
 .../couchdb/impl/ExtensionsServiceStorageImpl.java | 33 ++++++++++++++++++++++
 10 files changed, 75 insertions(+), 22 deletions(-)

diff --git 
a/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceHealthCheck.java
 
b/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceHealthCheck.java
index e252efd755..f0ba8fd055 100644
--- 
a/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceHealthCheck.java
+++ 
b/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceHealthCheck.java
@@ -24,7 +24,7 @@ import org.apache.streampipes.loadbalance.LoadManager;
 import org.apache.streampipes.manager.execution.ExtensionServiceExecutions;
 import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration;
 import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceStatus;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
 
 import org.apache.http.HttpStatus;
 import org.slf4j.Logger;
@@ -43,7 +43,7 @@ public class ServiceHealthCheck implements Runnable {
 
   private final List<SpServiceRegistration> needDeletedServices = new 
ArrayList<>();
 
-  public ServiceHealthCheck(CRUDStorage<SpServiceRegistration> storage) {
+  public ServiceHealthCheck(IExtensionsServiceStorage storage) {
     this.serviceRegistrationManager = new ServiceRegistrationManager(storage);
     this.maxUnhealthyDurationBeforeRemovalMs = Environments.getEnvironment()
         .getUnhealthyTimeBeforeServiceDeletionInMillis().getValueOrDefault();
diff --git 
a/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceRegistrationManager.java
 
b/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceRegistrationManager.java
index e3fb6271e1..cab8ebc374 100644
--- 
a/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceRegistrationManager.java
+++ 
b/streampipes-health-monitoring/src/main/java/org/apache/streampipes/health/monitoring/ServiceRegistrationManager.java
@@ -19,7 +19,7 @@ package org.apache.streampipes.health.monitoring;
 
 import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration;
 import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceStatus;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,9 +30,9 @@ public class ServiceRegistrationManager {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(ServiceRegistrationManager.class);
 
-  private final CRUDStorage<SpServiceRegistration> storage;
+  private final IExtensionsServiceStorage storage;
 
-  public ServiceRegistrationManager(CRUDStorage<SpServiceRegistration> 
storage) {
+  public ServiceRegistrationManager(IExtensionsServiceStorage storage) {
     this.storage = storage;
   }
 
diff --git 
a/streampipes-load-balancer/src/main/java/org/apache/streampipes/loadbalance/impl/ExtensibleLoadManager.java
 
b/streampipes-load-balancer/src/main/java/org/apache/streampipes/loadbalance/impl/ExtensibleLoadManager.java
index 6801057b52..ab295a80f1 100644
--- 
a/streampipes-load-balancer/src/main/java/org/apache/streampipes/loadbalance/impl/ExtensibleLoadManager.java
+++ 
b/streampipes-load-balancer/src/main/java/org/apache/streampipes/loadbalance/impl/ExtensibleLoadManager.java
@@ -23,7 +23,7 @@ import org.apache.streampipes.loadbalance.PipelineMigrator;
 import org.apache.streampipes.loadbalance.unit.ResourceUnitStatsScanner;
 import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration;
 import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceStatus;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 import java.util.List;
@@ -47,7 +47,7 @@ public class ExtensibleLoadManager implements LoadBalancer {
   }
 
   public void doLoadShedding() {
-    CRUDStorage<SpServiceRegistration> storage =  
StorageDispatcher.INSTANCE.getNoSqlStore().getExtensionsServiceStorage();
+    IExtensionsServiceStorage storage = 
StorageDispatcher.INSTANCE.getNoSqlStore().getExtensionsServiceStorage();
     List<SpServiceRegistration> services = storage.findAll().stream().filter(s 
-> s.getStatus() == SpServiceStatus.HEALTHY)
             .toList();
 
diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/MigrationResource.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/MigrationResource.java
index 437eeef73f..78fe94e32c 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/MigrationResource.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/MigrationResource.java
@@ -30,10 +30,10 @@ import 
org.apache.streampipes.model.migration.ModelMigratorConfig;
 import 
org.apache.streampipes.rest.core.base.impl.AbstractAuthGuardedRestResource;
 import org.apache.streampipes.rest.security.AuthConstants;
 import org.apache.streampipes.rest.shared.exception.SpMessageException;
-import org.apache.streampipes.storage.api.CRUDStorage;
 import org.apache.streampipes.storage.api.IAdapterStorage;
 import org.apache.streampipes.storage.api.IDataProcessorStorage;
 import org.apache.streampipes.storage.api.IDataSinkStorage;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
 import org.apache.streampipes.storage.api.IPipelineStorage;
 
 import io.swagger.v3.oas.annotations.Operation;
@@ -61,7 +61,7 @@ public class MigrationResource extends 
AbstractAuthGuardedRestResource {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(MigrationResource.class);
 
-  private final CRUDStorage<SpServiceRegistration> extensionsServiceStorage =
+  private final IExtensionsServiceStorage extensionsServiceStorage =
       getNoSqlStorage().getExtensionsServiceStorage();
   private final IAdapterStorage adapterDescriptionStorage = 
getNoSqlStorage().getAdapterDescriptionStorage();
   private final IAdapterStorage adapterStorage = 
getNoSqlStorage().getAdapterInstanceStorage();
diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/ServiceRegistrationResource.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/ServiceRegistrationResource.java
index fc243d5d56..a7dc91431e 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/ServiceRegistrationResource.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/ServiceRegistrationResource.java
@@ -24,7 +24,7 @@ import org.apache.streampipes.model.message.Notifications;
 import 
org.apache.streampipes.rest.core.base.impl.AbstractAuthGuardedRestResource;
 import org.apache.streampipes.rest.security.AuthConstants;
 import org.apache.streampipes.rest.shared.exception.SpMessageException;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
 
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
@@ -44,7 +44,7 @@ import java.util.List;
 @PreAuthorize(AuthConstants.IS_ADMIN_ROLE)
 public class ServiceRegistrationResource extends 
AbstractAuthGuardedRestResource {
 
-  private final CRUDStorage<SpServiceRegistration> extensionsServiceStorage =
+  private final IExtensionsServiceStorage extensionsServiceStorage =
       getNoSqlStorage().getExtensionsServiceStorage();
 
   @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
diff --git 
a/streampipes-service-discovery/src/main/java/org/apache/streampipes/svcdiscovery/SpServiceDiscoveryCore.java
 
b/streampipes-service-discovery/src/main/java/org/apache/streampipes/svcdiscovery/SpServiceDiscoveryCore.java
index 651be518bd..8f303d07b0 100644
--- 
a/streampipes-service-discovery/src/main/java/org/apache/streampipes/svcdiscovery/SpServiceDiscoveryCore.java
+++ 
b/streampipes-service-discovery/src/main/java/org/apache/streampipes/svcdiscovery/SpServiceDiscoveryCore.java
@@ -22,7 +22,7 @@ import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistratio
 import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceStatus;
 import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceTag;
 import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceTagPrefix;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
 import org.apache.streampipes.svcdiscovery.api.ISpServiceDiscovery;
 
 import org.slf4j.Logger;
@@ -39,9 +39,9 @@ public class SpServiceDiscoveryCore implements 
ISpServiceDiscovery {
   private static final Logger LOG = 
LoggerFactory.getLogger(SpServiceDiscoveryCore.class);
   private static final int MAX_RETRIES = 3;
 
-  private final CRUDStorage<SpServiceRegistration> serviceStorage;
+  private final IExtensionsServiceStorage serviceStorage;
 
-  public SpServiceDiscoveryCore(CRUDStorage<SpServiceRegistration> 
serviceStorage) {
+  public SpServiceDiscoveryCore(IExtensionsServiceStorage serviceStorage) {
     this.serviceStorage = serviceStorage;
   }
 
diff --git 
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IExtensionsServiceStorage.java
 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IExtensionsServiceStorage.java
new file mode 100644
index 0000000000..8717775902
--- /dev/null
+++ 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IExtensionsServiceStorage.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.streampipes.storage.api;
+
+import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration;
+
+public interface IExtensionsServiceStorage extends 
CRUDStorage<SpServiceRegistration> {
+}
diff --git 
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
index e4b9fd3129..984b23f7b0 100644
--- 
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
+++ 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
@@ -22,7 +22,6 @@ import org.apache.streampipes.model.client.user.Privilege;
 import org.apache.streampipes.model.client.user.Role;
 import 
org.apache.streampipes.model.connect.ConnectTransformationScriptTemplate;
 import 
org.apache.streampipes.model.extensions.configuration.SpServiceConfiguration;
-import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration;
 import org.apache.streampipes.model.opcua.Certificate;
 import org.apache.streampipes.model.template.CompactPipelineTemplate;
 
@@ -70,7 +69,7 @@ public interface INoSqlStorage {
 
   IUserActivationTokenStorage getUserActivationTokenStorage();
 
-  CRUDStorage<SpServiceRegistration> getExtensionsServiceStorage();
+  IExtensionsServiceStorage getExtensionsServiceStorage();
 
   CRUDStorage<SpServiceConfiguration> 
getExtensionsServiceConfigurationStorage();
 
diff --git 
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
index e9081505a5..2f02099f5a 100644
--- 
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
+++ 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
@@ -23,7 +23,6 @@ import org.apache.streampipes.model.client.user.Role;
 import 
org.apache.streampipes.model.connect.ConnectTransformationScriptTemplate;
 import org.apache.streampipes.model.datalake.DataLakeMeasure;
 import 
org.apache.streampipes.model.extensions.configuration.SpServiceConfiguration;
-import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration;
 import org.apache.streampipes.model.opcua.Certificate;
 import org.apache.streampipes.model.template.CompactPipelineTemplate;
 import org.apache.streampipes.storage.api.CRUDStorage;
@@ -34,6 +33,7 @@ import 
org.apache.streampipes.storage.api.IDataExplorerWidgetStorage;
 import org.apache.streampipes.storage.api.IDataProcessorStorage;
 import org.apache.streampipes.storage.api.IDataSinkStorage;
 import org.apache.streampipes.storage.api.IDataStreamStorage;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
 import org.apache.streampipes.storage.api.IFileMetadataStorage;
 import org.apache.streampipes.storage.api.IGenericStorage;
 import org.apache.streampipes.storage.api.IImageStorage;
@@ -60,6 +60,7 @@ import 
org.apache.streampipes.storage.couchdb.impl.DataSinkStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.DataStreamStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.DefaultCrudStorage;
 import org.apache.streampipes.storage.couchdb.impl.DefaultViewCrudStorage;
+import 
org.apache.streampipes.storage.couchdb.impl.ExtensionsServiceStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.GenericStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.FileMetadataStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.ImageStorageImpl;
@@ -186,11 +187,8 @@ public class CouchDbStorageManager implements 
INoSqlStorage {
   }
 
   @Override
-  public CRUDStorage<SpServiceRegistration> getExtensionsServiceStorage() {
-    return new DefaultCrudStorage<>(
-        () -> Utils.getCouchDbGsonClient("extensions-services"),
-        SpServiceRegistration.class
-    );
+  public IExtensionsServiceStorage getExtensionsServiceStorage() {
+    return new ExtensionsServiceStorageImpl();
   }
 
   @Override
diff --git 
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/ExtensionsServiceStorageImpl.java
 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/ExtensionsServiceStorageImpl.java
new file mode 100644
index 0000000000..1be5402091
--- /dev/null
+++ 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/ExtensionsServiceStorageImpl.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.streampipes.storage.couchdb.impl;
+
+import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration;
+import org.apache.streampipes.storage.api.IExtensionsServiceStorage;
+import org.apache.streampipes.storage.couchdb.utils.Utils;
+
+public class ExtensionsServiceStorageImpl extends 
DefaultCrudStorage<SpServiceRegistration>
+    implements IExtensionsServiceStorage {
+
+  public ExtensionsServiceStorageImpl() {
+    super(
+        () -> Utils.getCouchDbGsonClient("extensions-services"),
+        SpServiceRegistration.class
+    );
+  }
+}

Reply via email to