[ 
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.

Reply via email to