db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-3347) ERROR XSDB3: Container information cannot change once written
Date Wed, 09 Apr 2008 09:25:24 GMT

    [ https://issues.apache.org/jira/browse/DERBY-3347?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12587104#action_12587104
] 

Knut Anders Hatlen commented on DERBY-3347:
-------------------------------------------

Another related problem:

Before DERBY-801, there would be only one thread reading/writing the same data file at a time.
After DERBY-801, there could be many threads accessing the same data file concurrently, but
this should be OK since they would access different pages (read/write to the same page will
be serialized by BasePage.setExclusive()). There is however no mechanism, as far as I can
see, that prevents concurrent updates of the container information in page 0 and normal page
updates that touch page 0. So I think it is possible that updates to the container information
section of page 0 are lost because concurrent updates of AllocPage 0 overwrite the new information
with the old value. We probably need to find a way to prevent AllocPage 0 from being cleaned
while the container is being cleaned (that is, RAFContainer4.writePage(pageId=0) and RAFContainer.writeRAFHeader()
must be serialized somehow).

> ERROR XSDB3: Container information cannot change once written
> -------------------------------------------------------------
>
>                 Key: DERBY-3347
>                 URL: https://issues.apache.org/jira/browse/DERBY-3347
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.3.1.4, 10.3.2.1
>         Environment: Windows 2003 Server
> Sun Java 1.6.0_03
>            Reporter: Bogdan Calmac
>            Assignee: Knut Anders Hatlen
>            Priority: Critical
>         Attachments: d3347-preview.diff
>
>
> We are using derby as an embedded DB for our data collection server. During an endurance
test when we do around 270 inserts and 9 updates per second, for about a week, I ocasionally
see the error below in the deby log (and nothing else beside this).
> This is a vanilla installation, we run derby embedded with no extra configuration.  I
can confirm that there is no memory problem, the heap usage seems constant over time.
> Can somebody provide some more information regarding the effects of this error? By looking
at the stacktrace, it looks like a checkpoint operation is aborted due to some inconsistency
in the internal data structure. If the error does not repeat immediately, does it mean that
the next checkpoint is successful and there is no data loss? 
> I can't provide a test case for that, the error happens after about 1-2 day of running
our software. I will rerun the test with the debug jars to capture the line numbers in the
stacktrace.  Also, I'm starting another test with 10.2.2.0, to see if this problem was introduced
in the latest version.
> There are another two bugs referring to this error, (https://issues.apache.org/jira/browse/DERBY-2284
and https://issues.apache.org/jira/browse/DERBY-3087) but they seem to happen in response
to some client action. This use case is a bit different, the client keeps inserting and updating
records for several days in a steady manner and at some point the error pops up.
> And lastly, here is the exception:
> Checkpoint Daemon caught standard exception
> ------------  BEGIN ERROR STACK -------------
> ERROR XSDB3: Container information cannot change once written: was 0, now 80
> 	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
> 	at org.apache.derby.impl.store.raw.data.AllocPage.WriteContainerInfo(Unknown Source)
> 	at org.apache.derby.impl.store.raw.data.FileContainer.writeHeader(Unknown Source)
> 	at org.apache.derby.impl.store.raw.data.RAFContainer.writeRAFHeader(Unknown Source)
> 	at org.apache.derby.impl.store.raw.data.RAFContainer.clean(Unknown Source)
> 	at org.apache.derby.impl.services.cache.CachedItem.clean(Unknown Source)
> 	at org.apache.derby.impl.services.cache.Clock.cleanCache(Unknown Source)
> 	at org.apache.derby.impl.services.cache.Clock.cleanAll(Unknown Source)
> 	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.checkpoint(Unknown Source)
> 	at org.apache.derby.impl.store.raw.log.LogToFile.checkpointWithTran(Unknown Source)
> 	at org.apache.derby.impl.store.raw.log.LogToFile.checkpoint(Unknown Source)
> 	at org.apache.derby.impl.store.raw.RawStore.checkpoint(Unknown Source)
> 	at org.apache.derby.impl.store.raw.log.LogToFile.performWork(Unknown Source)
> 	at org.apache.derby.impl.services.daemon.BasicDaemon.serviceClient(Unknown Source)
> 	at org.apache.derby.impl.services.daemon.BasicDaemon.work(Unknown Source)
> 	at org.apache.derby.impl.services.daemon.BasicDaemon.run(Unknown Source)
> 	at java.lang.Thread.run(Thread.java:619)
> ------------  END ERROR STACK -------------

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message