Openfire Error using embedded db

I came in this morning to see the following error:

Database setup or configuration error: Please verify your database settings and check the logs/error.log file for detailed error messages.

java.lang.IllegalArgumentException: java.sql.SQLException: ConnectionManager.getConnection() failed to obtain a connection after 11 retries. The exception from the last attempt is as follows: java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@c69e02e3[file =C:\Program Files (x86)\Openfire\embedded-db\openfire.lck, exists=trError stariutng the server.Pe lease check the log files for more information.,

locked=false, valid=false, ] method: checkHeartbeat read: 2017-07-06 12:35:34 heartbeat - read: -9572 ms.

at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:700)

at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:423)

at org.jivesoftware.openfire.XMPPServer.(XMPPServer.java:163)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at java.lang.Class.newInstance(Unknown Source)

at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:105)

at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:56)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:65)

at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:101)

at com.install4j.runtime.launcher.WinLauncher.main(WinLauncher.java:26)

Caused by: java.sql.SQLException: ConnectionManager.getConnection() failed to obtain a connection after 11 retries. The exception from the last attempt is as follows: java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@c69e02e3[file =C:\Program Files (x86)\Openfire\embedded-db\openfire.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2017-07-06 12:35:34 heartbeat - read: -9572 ms.

at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager .java:156)

at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:690)

… 16 more

Server halted

This is thrown when a user tries to connect to the server. Any ideas what is happening here?

Presumably something else has a lock on that file (or the permissions on the directory have changed etc) - and if it’s windows, it can be a hard lock.

You could perhaps get this issue if Openfire is launched twice (for what ever reason).

If it was me, I’d use some windows diagnostic tools to find out which process owns the lock on the file named there - that might give more info about what is going on.

e.g. Process Explorer can list the processes locking a file.

I closed Openfire and deleted the C:\Program Files (x86)\Openfire\embedded-db\openfire.lck file and relaunched and it seems to be working now.

The lock file must have ended up in a bad state somehow.

Thank you!