[ 
https://issues.apache.org/jira/browse/JENA-1481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16576511#comment-16576511
 ] 

ASF GitHub Bot commented on JENA-1481:
--------------------------------------

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

    https://github.com/apache/jena/pull/458#discussion_r209313461
  
    --- Diff: 
jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
 ---
    @@ -288,28 +294,89 @@ 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.
    +            DatasetGraph database = ref.getDataService().getDataset();
    +            // 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.
     
    +            // JENA-1481 & JENA-1586 : Delete the database.
    +            // 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.
    +
    +            boolean tryToRemoveFiles = true;
    +            
    +            // Text databases.
    +            // Close the in-JVM objects for Lucene index and databases. 
    +            // Do not delete files; at least for the lucene index, they 
are likely outside the run/databases. 
    +            if ( database instanceof DatasetGraphText ) {
    +                DatasetGraphText dbtext = (DatasetGraphText)database;
    +                database = dbtext.getBase();
    +                dbtext.getTextIndex().close();
    +                tryToRemoveFiles = false ;
    +            }
    +
    +            boolean isTDB1 = 
org.apache.jena.tdb.sys.TDBInternal.isTDB1(database);
    +            boolean isTDB2 = 
org.apache.jena.tdb2.sys.TDBInternal.isTDB2(database);
    +            
    +            if ( ( isTDB1 || isTDB2 ) ) {
    +                // JENA-1586: Remove database from the process.
    +                if ( isTDB1 )
    +                    org.apache.jena.tdb.sys.TDBInternal.expel(database);
    +                if ( isTDB2 )
    +                    org.apache.jena.tdb2.sys.TDBInternal.expel(database);
    +            
    +                // JENA-1481: Really delete files.
    +                // Find the database files (may not be any - e.g. 
in-memory).
    +                Path pDatabase = 
FusekiSystem.dirDatabases.resolve(filename);
    +                if ( tryToRemoveFiles && Files.exists(pDatabase)) {
    +                    try { 
    +                        if ( Files.isSymbolicLink(pDatabase)) {
    +                            action.log.info(format("[%d] Database is a 
symbolic link, not removing files", action.id, pDatabase)) ;
    +                        } else {
    +                            IO.deleteAll(pDatabase);
    +                            action.log.info(format("[%d] Deleted database 
files %s", action.id, pDatabase)) ;
    +                        }
    +                    } catch (RuntimeIOException e) {
    +                        e.printStackTrace();
    --- End diff --
    
    Yes, done.


> Deleting dataset in Fuseki does not delete dataset permanently
> --------------------------------------------------------------
>
>                 Key: JENA-1481
>                 URL: https://issues.apache.org/jira/browse/JENA-1481
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: Fuseki
>         Environment: Linux & Windows
>            Reporter: Prakash Sagadevan
>            Priority: Major
>         Attachments: image-2018-02-08-17-34-35-843.png, 
> image-2018-02-08-17-54-05-560.png, image-2018-02-08-17-54-22-860.png, 
> image-2018-02-08-17-54-40-174.png, image-2018-02-08-17-54-53-762.png, 
> image-2018-02-08-17-55-05-360.png, image-2018-02-08-17-55-21-173.png
>
>
> In Apache Jena fuskei 3.6.0, I have created a persistent dataset called 
> "Sample". 
> Following are the steps performed to created a "Sample" dataset
>  # Fuseki Version !image-2018-02-08-17-54-05-560.png!
>  # Create a persistent dataset !image-2018-02-08-17-54-22-860.png!
>  # Checking Fuskei TDB Location. 
>  ## Once after the new dataset created, the configuration turtle file 
> (Sample.ttl) and database folder (Sample) is created. 
> !image-2018-02-08-17-54-40-174.png!
>  # Remove the "Sample" dataset
>  ## Click Remove button !image-2018-02-08-17-54-53-762.png!
>  ## Confirmation !image-2018-02-08-17-55-05-360.png!  
>  # Check the Fuskei TDB Location.  !image-2018-02-08-17-55-21-173.png!
> It seems that latest *Apache Jena fuskei 3.6.0* application deletes only the 
> configuration turtle file not the database folder in both Windows and Linux 
> environment.
> *Note:* *Apache Jena fuskei 3.4.0* application could not delete both 
> configuration turtle file and database. so the dataset will be present when 
> fuseki restarted.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to