[ 
https://issues.apache.org/jira/browse/DERBY-7150?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Liam Sharp closed DERBY-7150.
-----------------------------
    Resolution: Not A Bug

> derby.log locked after database shutdown preventing deletion
> ------------------------------------------------------------
>
>                 Key: DERBY-7150
>                 URL: https://issues.apache.org/jira/browse/DERBY-7150
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.16.1.1
>         Environment: Windows
>            Reporter: Liam Sharp
>            Priority: Major
>
> On Windows I'm unable to delete derby.log after shutting down the database.
>  
> I've created a demo maven project 
> [here|https://github.com/screamingfrog/hello-world-cli/tree/derby-locking-logfile],
>  that if run on Windows, produces the following:
>  
> {{2023-02-03 13:16:58,070 [main] INFO  - derby.system.home will be set to: 
> C:\Users\Administrator\derby-test}}
> {{2023-02-03 13:16:58,073 [main] INFO  - Folder exists, deleting}}
> {{2023-02-03 13:16:58,073 [main] INFO  - Initalising driver}}
> {{2023-02-03 13:16:58,189 [main] INFO  - Creating connection 
> jdbc:derby:EmbeddedDBAudit;create=true}}
> {{2023-02-03 13:16:58,955 [main] INFO  - Shutting down connection 
> jdbc:derby:EmbeddedDBAudit;shutdown=true}}
> {{2023-02-03 13:16:58,978 [main] WARN  - Failed to delete file 
> C:\Users\Administrator\derby-test\derby.log}}
>  
> Code inline is here:
>  
> {{{}package com.github.screamingfrog;{}}}{{{}import java.io.File;{}}}
> {{import java.sql.DriverManager;}}
> {{{}import java.sql.SQLException;{}}}{{{}import 
> org.apache.logging.log4j.LogManager;{}}}
> {{{}import org.apache.logging.log4j.Logger;{}}}{{{}public class App {}}}
> {{{}}{{    private static final Logger LOGGER = 
> LogManager.getLogger(App.class);}}
> {{    }}
> {{    private static final String DRIVER = 
> "org.apache.derby.jdbc.EmbeddedDriver";}}{{    private static final String 
> CONNECTION_URL = "jdbc:derby:EmbeddedDBAudit";}}
> {{    private static final String CREATE_CONNECTION_URL = CONNECTION_URL + 
> ";create=true";}}
> {{    private static final String SHUTDOWN_CONNECTION_URL = CONNECTION_URL + 
> ";shutdown=true";}}{{    private static File derbySystemFolder;}}{{    public 
> static void main(}}
> {{        String[] args) }}
> {{    {}}
> {{        try }}
> {{        {}}
> {{            initDerbyHomeAndDriver();}}
> {{            createConnection();}}
> {{            shutdownConnectionAndCleanup();}}
> {{        }}}
> {{        catch (SQLException e) }}
> {{        {}}
> {{            LOGGER.error("SQLException: " + e, e);}}
> {{        }}}
> {{    }}}{{    private static void initDerbyHomeAndDriver() }}
> {{    {}}
> {{        setDerbyHome();}}
> {{        initDerbyDriverInstance();}}
> {{    }}}{{    private static void createConnection() throws SQLException }}
> {{    {}}
> {{        LOGGER.info("Creating connection " + CREATE_CONNECTION_URL);}}
> {{        DriverManager.getConnection(CREATE_CONNECTION_URL);}}
> {{    }}}{{    private static void shutdownConnectionAndCleanup() }}
> {{    {}}
> {{        LOGGER.info("Shutting down connection " + 
> SHUTDOWN_CONNECTION_URL);}}
> {{        try }}
> {{        {}}
> {{            DriverManager.getConnection(SHUTDOWN_CONNECTION_URL);}}
> {{        }}}
> {{        catch (SQLException e) }}
> {{        {}}
> {{            if (!e.getSQLState().equals("08006"))}}
> {{            {}}
> {{                LOGGER.error("Failed to shutdown database " + e, e);}}
> {{            }}}
> {{        }}}{{        deleteFolder(derbySystemFolder);}}
> {{    }}}{{    private static void setDerbyHome() }}
> {{    {}}
> {{        derbySystemFolder = new File (System.getProperty("user.home") + 
> File.separator + "derby-test");}}
> {{        LOGGER.info("derby.system.home will be set to: " + 
> derbySystemFolder);}}
> {{        }}
> {{        if (derbySystemFolder.exists()) }}
> {{        {}}
> {{            LOGGER.info("Folder exists, deleting");}}
> {{            deleteFolder(derbySystemFolder);}}
> {{        }}}
> {{        System.setProperty("derby.system.home", 
> derbySystemFolder.getAbsolutePath());}}
> {{    }}}{{    private static void initDerbyDriverInstance() }}
> {{    {}}
> {{        LOGGER.info("Initalising driver");}}
> {{        try }}
> {{        {}}
> {{            Class.forName(DRIVER).newInstance();}}
> {{        }}}
> {{        catch (ClassNotFoundException | InstantiationException | 
> IllegalAccessException e) }}
> {{        {}}
> {{            LOGGER.error("Failed to init " + DRIVER + " " + e, e);}}
> {{        }}}
> {{    }}}{{    private static void deleteFolder(}}
> {{        final File folder) }}
> {{    {}}
> {{        LOGGER.debug("Deleting folder " + folder);}}
> {{        File[] files = folder.listFiles();}}
> {{        if (files != null) }}
> {{        {}}
> {{            for (File f : files) }}
> {{            {}}
> {{                if (f.isDirectory()) }}
> {{                {}}
> {{                    deleteFolder(f);}}
> {{                } }}
> {{                else }}
> {{                {}}
> {{                    LOGGER.debug("Deleting file " + f);}}
> {{                    if (! f.delete())}}
> {{                    {}}
> {{                        LOGGER.warn("Failed to delete file " + f);}}
> {{                    }}}
> {{                }}}
> {{            }}}
> {{        }}}
> {{        folder.delete();}}
> {{    }   }}
> {{}}}
>  
> Looks like this might be a long standing issue as I found this 
> [StackOverflow|https://stackoverflow.com/questions/47582819/unable-to-delete-derby-system-directory-for-embedded-database]
>  from 2017. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to