Anders Morken (JIRA) wrote:
     [ http://issues.apache.org/jira/browse/DERBY-801?page=all ]

Anders Morken updated DERBY-801:
--------------------------------

    Attachment: DERBY-801-6.patch

DERBY-801-6.patch remedies the noise from the iosInProgress sanity checking by checking the committed drop state before croaking.

I've run jdbcapi/LobLengthTest.junit 100 times in a row now without seeing any problems, and I used to see the problem once every four or five runs without this patch.

 RAFContainer4.java |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletion(-)



Thanks for continuing to improve the fix for this problem,  Anders.

I'm not sure checking for the committed drop state in the readPage method is something we want to do - flushing the cache into a black hole is one thing, trying to read data that is supposed to be gone is another - I think I'd want to know if we had some logic that permitted reading from a dropped container. =)

I doubt reading from a commit dropped container happen through the readPage() call in parallel to drops. Locks/Latches/flags should make sure that does not occur. I think only time we may read from the dropped container may be during recovery, if there is a crash just before stub was created for the dropped container, if container marked commit dropped , then I think only header is read , but that info is read by reading directly few bytes from the first page.


I've sort of got a feeling that maybe we are masking a problem here - should anyone (even the cache?) write to a dropped container?

Pages are discarded from cache before the container is stubbed.  See
(removeContainer.pageCache.discard(identity .

Maybe we should remove pages destined for a dying container from the cache when the
container is dropped? =)

I agree with removing/closing container does not seem to be the right thing to do when I/O is in progress. Having said that, I am also wondering if it is a over-kill to add more synchronization for this case. May be catching for ClosedChannelException is good enough .

One more thing I alos noticed going through the code again is DEBUG_PRINT("RAFContainer4"," .. statements. As Knut mentioned , they of no use. No one looks at them unless a test fails. If those cases should not happen , then throwing an ASSERT failure is better, otherwise please remove those PRINT statements.


Thanks
-suresh


Reply via email to