Kathey Marsden created DERBY-5766:
-------------------------------------
Summary: BaseDataFileFactory.boot() should log the exception that
causes it to boot the database read only
Key: DERBY-5766
URL: https://issues.apache.org/jira/browse/DERBY-5766
Project: Derby
Issue Type: Bug
Components: Store
Affects Versions: 10.9.0.0
Reporter: Kathey Marsden
In BaseDataFileFactory.boot() there is code that tries to write to the lock
file. If it cannot, and gets an IOException it assumes the database is read
only. I think that we should log that the database is booting read only and
why and if it is not specifically a permission error log the exception stack
trace.
fileLockOnDB = fileLock.getRandomAccessFile( "rw");
fileLock.limitAccessToOwner();
// write it out for future reference
fileLockOnDB.writeUTF(myUUID.toString());
fileLockOnDB.sync();
fileLockOnDB.seek(0);
// check the UUID
UUID checkUUID = uuidFactory.recreateUUID(fileLockOnDB.readUTF());
if (!checkUUID.equals(myUUID))
{
throw StandardException.newException(
SQLState.DATA_MULTIPLE_JBMS_ON_DB, databaseDirectory);
}
}
catch (IOException ioe)
{
// probably a read only db, don't do anything more
readOnly = true;
try
{
if (fileLockOnDB != null)
fileLockOnDB.close();
}
catch (IOException ioe2)
{ /* did the best I could */ }
fileLockOnDB = null;
return;
}
I think this code can be exercised by creating a database and exiting without
shutdown. Then change permission on the db.lck and dbex.lck files. It occurs
often in the field when multiple users with incompatible permissions/umasks
access the derby database.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira