db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dag H. Wanvik (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-3347) ERROR XSDB3: Container information cannot change once written
Date Fri, 11 Apr 2008 01:00:06 GMT

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

Dag H. Wanvik commented on DERBY-3347:
--------------------------------------

I don't know this code area very well, so caveats apply ;)

- Patch 1: Analysis that some read/writes use FileChannel to access
  first page while others use the RandomAccessFile methods directly
  (and hence no guarantee for serializability) seems correct to
  me. Refactoring to remedy that looks good.

  The cleanup on use/initialization of FileChannel is good, too.

  RAFContainer4#write has lost a check for getCommittedDropState(). Is
  this intentional?

  Naming: FileContainer#readHeader doesn't do any reading any longer,
  since it no longer calls getEmbryonicPage. This is slightly
  confusing.

  BTW: (not introduced by this patch, but I noticed so I thought I'd
  mention it) RAFContainer4 (in contrast to RAFContainer) allocates an
  encryption buffer for every page write. Guess it needs to since the
  write method is not synchronized (and can thus not use the dedicated
  buffer safely). Since such objects can be large, maybe a pool would be good?


- Patch 2:
  Although after patch 1, writeRAFHeader always uses FileChannel I/O
  now, I agree there is a chance for the race you suggest. The patch
  is simple and looks good to me. 
  +1

Good detective work, Knut!



> 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-1a.diff, d3347-1a.stat, d3347-2a.diff, d3347-preview.diff,
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