You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Liam Sharp (Jira)" <ji...@apache.org> on 2023/02/03 13:28:00 UTC

[jira] [Created] (DERBY-7150) derby.log locked after database shutdown preventing deletion

Liam Sharp created DERBY-7150:
---------------------------------

             Summary: 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


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)