Github user rvesse commented on a diff in the pull request:

    https://github.com/apache/jena/pull/459#discussion_r209539897
  
    --- Diff: 
jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
 ---
    @@ -288,28 +294,77 @@ protected void execDeleteItem(HttpAction action) {
             if ( ! action.getDataAccessPointRegistry().isRegistered(name) )
                 ServletOps.errorNotFound("No such dataset registered: "+name);
     
    +        // This acts as a lock. 
             systemDSG.begin(ReadWrite.WRITE) ;
             boolean committed = false ;
    +
             try {
                 // Here, go offline.
                 // Need to reference count operations when they drop to zero
                 // or a timer goes off, we delete the dataset.
     
                 DataAccessPoint ref = 
action.getDataAccessPointRegistry().get(name) ;
    +            
                 // Redo check inside transaction.
                 if ( ref == null )
                     ServletOps.errorNotFound("No such dataset registered: 
"+name);
    +            
    +            String filename = name.startsWith("/") ? name.substring(1) : 
name;
    +            List<String> configurationFiles = 
FusekiSystem.existingConfigurationFile(filename);
    +            if  ( configurationFiles.size() != 1 ) {
    +                // This should not happen.
    +                action.log.warn(format("[%d] There are %d configuration 
files, not one.", action.id, configurationFiles.size()));
    +                ServletOps.errorOccurred(
    +                    format(
    +                        "There are %d configuration files, not one. Delete 
not performed; clearup of the filesystem needed.",
    +                        action.id, configurationFiles.size()));
    +            }
    +            
    +            String cfgPathname = configurationFiles.get(0);
    +            
    +            // Delete configuration file.
    +            // Once deleted, server restart will not have the database. 
    +            FileOps.deleteSilent(cfgPathname);
     
    -            // Make it invisible to the outside.
    +            // Get before removing.
    +            DataService dataService = ref.getDataService();
    +            
    +            // Make it invisible in this running server.
                 action.getDataAccessPointRegistry().remove(name);
    -            // Delete configuration file.
    -            // Should be only one, undo damage if multiple.
    -            String filename = name.startsWith("/") ? name.substring(1) : 
name;
    -            
FusekiSystem.existingConfigurationFile(filename).stream().forEach(FileOps::deleteSilent);
    -            // Leave the database in place. if it is in /databases/, 
recreating the
    -            // configuration will make the database reappear. This is 
intentional.
    -            // Deleting a large database by accident is a major mistake.
     
    +            // Delete the database for real only when it is in the server 
"run/databases"
    +            // area. Don't delete databases that reside elsewhere. We do 
delete the
    +            // configuration file, so the databases will not be associated 
with the server
    +            // anymore.
    --- End diff --
    
    Where is the code that actually enforces the above comment?  I don't see 
any check against the location of the database in the subsequent code


---

Reply via email to