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)