[
https://issues.apache.org/jira/browse/DERBY-3655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12634983#action_12634983
]
Knut Anders Hatlen commented on DERBY-3655:
-------------------------------------------
Thanks for doing the research, Kathey. So the problem seen from the users'
perspective is that they can't necessarily delete the database until
finalization has been performed after the database shutdown if they have
accessed lobs.
I don't know what's the best way to fix this, but I would strongly oppose
forcing gc and finalization as part of the normal commit/rollback logic as it
is not guaranteed to have any effect and may have a significant performance
impact. Doing it as part of the database shutdown wouldn't be that problematic,
but I feel that we should try to avoid explicit gc if we could.
One thought is that LOBStreamControl could use a cache (instance of
CacheManager) of open file descriptors used for temporary lobs, kind of like
the container cache. If the file descriptor is in the cache when
LOBStreamControl needs it, it can just fetch it. Otherwise, the cache would
have to reopen the temporary file and return the new file descriptor. When a
[BC]lob object is finalized, it invalidates the cache entry and closes the file
descriptor. If the [BC]lob object is gc'ed but not finalized when the database
is shut down (as in the problem case in this issue), we'll still have a
reference to the file descriptor in the file descriptor cache, and we can close
it as part of the database shutdown.
Just a half-baked idea for now, but I think it should work, with the additional
benefit of reducing the peak in the number of open file descriptors we can get
when we open many lobs in the same transaction without explicitly freeing them,
and also reducing the reliance on gc to free up resources for us.
> errror in nightly regression test:
> LobStreamsTest:encryptedjunit.framework.AssertionFailedError:
> f:\jartest\JarResults.2008-04-29\ibm16_suites.All\system\singleUse\oneuse1e\tmp\lob6165.tmp
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-3655
> URL: https://issues.apache.org/jira/browse/DERBY-3655
> Project: Derby
> Issue Type: Bug
> Components: Regression Test Failure
> Affects Versions: 10.3.3.0, 10.4.2.0
> Environment: OS: Windows, Test: v10_4 branch insane jars, ibm16 jvm
> OS: Windows, Test: v10_3 branch insane jars, ibm142 jvm
> Reporter: Mike Matrigali
> Assignee: Kathey Marsden
>
> There was 1 failure:
> 1) LobStreamsTest:encryptedjunit.framework.AssertionFailedError:
> f:\jartest\JarResults.2008-04-29\ibm16_suites.All\system\singleUse\oneuse1e\tmp\lob6165.tmp
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDir(DropDatabaseSetup.java:130)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDir(DropDatabaseSetup.java:128)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.access$000(DropDatabaseSetup.java:35)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup$1.run(DropDatabaseSetup.java:105)
> at
> java.security.AccessController.doPrivileged(AccessController.java:202)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDirectory(DropDatabaseSetup.java:102)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDirectory(DropDatabaseSetup.java:98)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDatabase(DropDatabaseSetup.java:91)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.tearDown(DropDatabaseSetup.java:77)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:20)
> at junit.extensions.TestSetup.run(TestSetup.java:23)
> at
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> at junit.extensions.TestSetup.run(TestSetup.java:23)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.