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 Suresh Thalamati <su...@gmail.com> on 2006/04/06 23:54:37 UTC

Re: How to start and stop Derby from within a test

Olav Sandstaa wrote:
> Rick Hillegas <Ri...@Sun.COM> wrote:
> 

> java.sql.SQLException: Java exception: 'access denied (java.io.FilePermission /export/home/tmp/derbyjdbc4/DerbyNetClient/TestConnectionMethods/wombat/log/logmirror.ctrl read): java.security.AccessControlException'.
> 	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:321)
> 	at java.security.AccessController.checkPermission(AccessController.java:546)
> 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
> 	at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
> 	at java.io.File.exists(File.java:731)
> 	at org.apache.derby.impl.store.raw.log.LogToFile.boot(LogToFile.java:2940)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1996)
> 	at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:290)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:542)
> 	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:418)
> 	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.bootLogFactory(BaseDataFileFactory.java:1762)
> 	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.setRawStoreFactory(BaseDataFileFactory.java:1218)
> 	at org.apache.derby.impl.store.raw.RawStore.boot(RawStore.java:250)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1996)
> 	at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:290)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:542)
> 	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:418)
> 	at org.apache.derby.impl.store.access.RAMAccessManager.boot(RAMAccessManager.java:987)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1996)
> 	at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:290)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:542)
> 	at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:418)
> 	at org.apache.derby.impl.db.BasicDatabase.bootStore(BasicDatabase.java:738)
> 	at org.apache.derby.impl.db.BasicDatabase.boot(BasicDatabase.java:178)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1996)
> 	at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:290)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(BaseMonitor.java:1831)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(BaseMonitor.java:1697)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(BaseMonitor.java:1577)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(BaseMonitor.java:990)
> 	at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Monitor.java:541)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:1586)
> 	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(EmbedConnection.java:216)
> 	at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(EmbedConnection30.java:72)
> 	at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(EmbedConnection40.java:48)
> 	at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Driver40.java:62)
> 	at org.apache.derby.jdbc.InternalDriver.connect(InternalDriver.java:199)
> 	at org.apache.derby.impl.drda.Database.makeConnection(Database.java:231)
> 	at org.apache.derby.impl.drda.DRDAConnThread.getConnFromDatabaseName(DRDAConnThread.java:1147)
> 	at org.apache.derby.impl.drda.DRDAConnThread.verifyUserIdPassword(DRDAConnThread.java:1125)
> 	at org.apache.derby.impl.drda.DRDAConnThread.parseSECCHK(DRDAConnThread.java:2709)
> 	at org.apache.derby.impl.drda.DRDAConnThread.parseDRDAConnection(DRDAConnThread.java:987)
> 	at org.apache.derby.impl.drda.DRDAConnThread.processCommands(DRDAConnThread.java:830)
> 	at org.apache.derby.impl.drda.DRDAConnThread.run(DRDAConnThread.java:236)
> 
> The security exception is raised when Derby tries to get access to the
> log/logmirror.ctrl file during the second startup of the database. I
> would have expected that since this file was created earlier during
> the initial startup of the test, the test should already have the
> required security permissions to access it during the second startup?
> 
> Anyway, the best solution to this problem would be to be able to reuse
> functionality that already might exist in the test framework. Any
> suggestions are appreciated.
> 
> Regards,
> Olav
> 

By looking at the stack it looks like log/logmirror.ctrl  is not 
getting accessed in the privileged block at  line 2940 in LogToFile.java.
if (checkpointInstant == LogCounter.INVALID_LOG_INSTANT &&					 
getMirrorControlFileName().exists())

Not sure how you got checkpointInstant to be INVALID , may be your 
test program might have exited before a first valid checkpoint. Any 
one fixing this bugs should make sure that is the case.

In any case  call to exists should have been 
privExists(getMirrorControlFileName()).


Please file a Jira entry  with information on how to reproduce this bug.


Thanks
-suresh



Re: How to start and stop Derby from within a test

Posted by Olav Sandstaa <Ol...@Sun.COM>.
Suresh Thalamati <su...@gmail.com> wrote:
> By looking at the stack it looks like log/logmirror.ctrl  is not 
> getting accessed in the privileged block at  line 2940 in LogToFile.java.
> if (checkpointInstant == LogCounter.INVALID_LOG_INSTANT &&					 
> getMirrorControlFileName().exists())

Thanks for looking into this and explaining why this security exception occured. 
 
> Not sure how you got checkpointInstant to be INVALID , may be your 
> test program might have exited before a first valid checkpoint. Any 
> one fixing this bugs should make sure that is the case.

That might very well be the case. It occured early in on of the JDBC4
tests. The database had just been started and only a few operations
had been performed against it before I stopped it in probably not a
clean way.
 
> In any case  call to exists should have been 
> privExists(getMirrorControlFileName()).
> 
> 
> Please file a Jira entry  with information on how to reproduce this bug.

Thanks for filing the Jira. I will try to make a small test program
for reproducing the problem. After replacing the code I was using for
stopping the database with TestUtil.getConnection as proposed by Deepa
the security exception disappeared. I will try to reproduce it in a
small test.

..olav