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

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit ed40acfe53a45c3d332d54ca3a0d4eb789746c44
Author: Andy Seaborne <[email protected]>
AuthorDate: Wed Jul 16 12:48:23 2025 +0100

    GH-3318: Log duplicate database entries
---
 .../apache/jena/fuseki/mod/admin/FMod_Admin.java   | 24 +++++++++++++++++-----
 .../mod/admin/TestAdminAddDatasetTemplate.java     |  2 +-
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/admin/FMod_Admin.java
 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/admin/FMod_Admin.java
index 518aa62608..a4f45325d7 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/admin/FMod_Admin.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/mod/admin/FMod_Admin.java
@@ -22,7 +22,10 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.List;
 import java.util.Set;
+import java.util.StringJoiner;
+import java.util.stream.Collectors;
 
+import org.apache.commons.collections4.SetUtils;
 import org.apache.jena.atlas.logging.FmtLog;
 import org.apache.jena.cmd.ArgDecl;
 import org.apache.jena.cmd.ArgModuleGeneral;
@@ -145,21 +148,32 @@ public class FMod_Admin implements FusekiModule {
         String configDir = FusekiServerCtl.dirConfiguration.toString();
         List<DataAccessPoint> directoryDatabases = 
FusekiConfig.readConfigurationDirectory(configDir);
 
+        // Check there are no collisions between the command line 
(datasetNames)
+        // and existing configurations.
         if ( directoryDatabases.isEmpty() && datasetNames.isEmpty() )
             FmtLog.info(LOG, "No databases: dir=%s", configDir);
         else {
+            if ( ! datasetNames.isEmpty() ) {
+                // Check no clashes of command line and configuration
+                Set<String> directoryDatabasesNames = 
directoryDatabases.stream().map(dap->dap.getName()).collect(Collectors.toSet());
+                Set<String> both = SetUtils.intersection(datasetNames, 
directoryDatabasesNames);
+                if ( ! both.isEmpty() ) {
+                    StringJoiner sj = new StringJoiner(", ");
+                    both.forEach(sj::add);
+                    String dups = sj.toString();
+                    //both.forEach(dbName -> FmtLog.error(LOG, "Duplicate 
database '%s' (command line and existing configuration)", dbName));
+                    throw new FusekiConfigException("Duplicate database 
entries for "+dups);
+                }
+            }
+            // Now log information
             datasetNames.forEach(n->FmtLog.info(Fuseki.configLog, "Database: 
%s", n));
             directoryDatabases.forEach(dap -> FmtLog.info(Fuseki.configLog, 
"Database: %s", dap.getName()));
         }
 
         directoryDatabases.forEach(db -> {
             String dbName = db.getName();
-            if ( datasetNames.contains(dbName) ) {
-                FmtLog.warn(LOG, "Database '%s' already added to the Fuseki 
server builder", dbName);
-                // ?? builder.remove(dbName);
-            }
+            // Names have been checked for uniqueness.
             builder.add(dbName, db.getDataService());
-            // ** builder.add(DataAccessPoint);
         });
 
         // Modify the server to include the admin operations.
diff --git 
a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/mod/admin/TestAdminAddDatasetTemplate.java
 
b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/mod/admin/TestAdminAddDatasetTemplate.java
index a566dd9995..3f8a06f375 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/mod/admin/TestAdminAddDatasetTemplate.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/mod/admin/TestAdminAddDatasetTemplate.java
@@ -113,7 +113,7 @@ public class TestAdminAddDatasetTemplate extends 
FusekiServerPerTestClass {
         badAddDataserverRequest("//bad_10");
     }
 
-    //@Test 
+    @Test
     public void noOverwriteExistingConfigFile() {
         withServer(server->{
             try {

Reply via email to