[ https://issues.apache.org/jira/browse/DERBY-4072?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kathey Marsden updated DERBY-4072: ---------------------------------- Attachment: derby-4072_diff.txt sample.derby.log Attached is a proposed path to improve the error logging when an error gaining write access to the log files causes the database status to change to read only (derby-4072_diff.txt) Attached also is a sample derby.log showing the new warning. I confirmed that for a totally read only database we just get the READ ONLY boot message and these warnings don't show up. I am running test now. Sorry for originally accidentally attaching this to DERBY-4077. Can't seem to keep my Jira issues straight today. > shutdown with incorrect permission on log files shows > java.lang.NullPointerException at > org.apache.derby.impl.store.raw.log.LogToFile.flush(LogToFile.java:3964). > Should give bettter message. > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ > > Key: DERBY-4072 > URL: https://issues.apache.org/jira/browse/DERBY-4072 > Project: Derby > Issue Type: Bug > Components: Store > Affects Versions: 10.1.3.1, 10.2.2.0, 10.3.3.0, 10.4.2.0, 10.5.0.0 > Reporter: Kathey Marsden > Assignee: Kathey Marsden > Priority: Minor > Attachments: ConnectAndShutdown.java, derby-4072_diff.txt, > InsertALot.java, MakeDB.java, sample.derby.log > > > I recently saw case where a user was seeing the following error in the > derby.log when trying to shutdown their database. > New exception raised during cleanup null > java.lang.NullPointerException > at > org.apache.derby.impl.store.raw.log.LogToFile.flush(LogToFile.java:3964) > at > org.apache.derby.impl.store.raw.log.LogToFile.flush(LogToFile.java:1781) > at > org.apache.derby.impl.store.raw.data.BaseDataFileFactory.flush(BaseDataFileFa > at > org.apache.derby.impl.store.raw.data.CachedPage.writePage(CachedPage.java:761 > at > org.apache.derby.impl.store.raw.data.CachedPage.clean(CachedPage.java:610) > at > org.apache.derby.impl.services.cache.ConcurrentCache.cleanAndUnkeepEntry(Conc > at > org.apache.derby.impl.services.cache.ConcurrentCache.cleanCache(ConcurrentCac > at > org.apache.derby.impl.services.cache.ConcurrentCache.cleanAll(ConcurrentCache > at > org.apache.derby.impl.services.cache.ConcurrentCache.shutdown(ConcurrentCache > at > org.apache.derby.impl.store.raw.data.BaseDataFileFactory.stop(BaseDataFileFac > at > org.apache.derby.impl.services.monitor.TopService.stop(TopService.java:405) > at > org.apache.derby.impl.services.monitor.TopService.shutdown(TopService.java:34 > at > org.apache.derby.impl.services.monitor.BaseMonitor.shutdown(BaseMonitor.java: > at > org.apache.derby.impl.db.DatabaseContextImpl.cleanupOnError(DatabaseContextIm > at > org.apache.derby.iapi.services.context.ContextManager.cleanupOnError(ContextM > at > org.apache.derby.impl.jdbc.TransactionResourceImpl.cleanupOnError(Transaction > at > org.apache.derby.impl.jdbc.EmbedConnection.<init>(EmbedConnection.java:584) > at > org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Driver40.java:68) > at > org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:238) > at > org.apache.derby.jdbc.AutoloadedDriver.connect(AutoloadedDriver.java:119) > at java.sql.DriverManager.getConnection(DriverManager.java:316) > at java.sql.DriverManager.getConnection(DriverManager.java:273) > It ended up that some of the log files did not have proper write permissions > because some operation on the database had been performed by root. They had > subsequently deleted their db.lck file so the database did not boot READ ONLY > as it would if the root owned db.lck file still existed and the symptom was > that they got this error on shutdown. > Clearly this was user error, but it would have been good if we gave a better > error message. To reproduce on Linux: > As a user with umask 0022, run the program > java MakeDB > this will make the databases wombat and create a table. > su root > with umask 0022, run the program to insert data and remove the db.lck file: > java InsertALot > rm wombat/db.lck > go back to the original user > run the program: > java ConnectAndShutdown > The application gets the normal shutdown exception but if you look in > derby.log you will see the exception. > java.lang.NullPointerException > at > org.apache.derby.impl.store.raw.log.LogToFile.flush(LogToFile.java:3964) > ... > I will attach the files. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.