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 {
