[
https://issues.apache.org/jira/browse/ASTERIXDB-1938?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16045230#comment-16045230
]
Chen Luo commented on ASTERIXDB-1938:
-------------------------------------
BTW, this bug seems strange to me that we shouldn't flush an empty memory
component (if it's empty, we simply flip its state without actual flushing it).
So why this bug could happen?
> AppendOnlyLinkedMetadataPageManager.put() is called after close(). HYR0012 is
> thrown
> ------------------------------------------------------------------------------------
>
> Key: ASTERIXDB-1938
> URL: https://issues.apache.org/jira/browse/ASTERIXDB-1938
> Project: Apache AsterixDB
> Issue Type: Bug
> Components: Storage
> Reporter: Dmitry Lychagin
> Assignee: Chen Luo
>
> We're getting this exception:
> rg.apache.hyracks.api.exceptions.HyracksDataException: HYR0012: Invalid
> attempt to write to a flushed append only metadata page
> at
> org.apache.hyracks.api.exceptions.HyracksDataException.create(HyracksDataException.java:49)
> at
> org.apache.hyracks.storage.am.common.freepage.AppendOnlyLinkedMetadataPageManager.put(AppendOnlyLinkedMetadataPageManager.java:311)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.DiskComponentMetadata.put(DiskComponentMetadata.java:38)
> at
> org.apache.asterix.common.ioopcallbacks.AbstractLSMIOOperationCallback.putLSNIntoMetadata(AbstractLSMIOOperationCallback.java:105)
> at
> org.apache.asterix.common.ioopcallbacks.AbstractLSMIOOperationCallback.afterOperation(AbstractLSMIOOperationCallback.java:188)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.LSMHarness.flush(LSMHarness.java:503)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.LSMTreeIndexAccessor.flush(LSMTreeIndexAccessor.java:121)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:42)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:30)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> However at that time the AppendOnlyLinkedMetadataPageManager is already
> closed.
> The stack trace for the close() method invocation is the following:
> at
> org.apache.hyracks.storage.am.common.freepage.AppendOnlyLinkedMetadataPageManager.close(AppendOnlyLinkedMetadataPageManager.java:216)
> at
> org.apache.hyracks.storage.am.common.impls.AbstractTreeIndex.deactivate(AbstractTreeIndex.java:163)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMDiskComponentBulkLoader.cleanupArtifacts(AbstractLSMDiskComponentBulkLoader.java:170)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMDiskComponentBulkLoader.end(AbstractLSMDiskComponentBulkLoader.java:158)
> at
> org.apache.hyracks.storage.am.lsm.btree.impls.LSMBTree.flush(LSMBTree.java:357)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.LSMHarness.flush(LSMHarness.java:502)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.LSMTreeIndexAccessor.flush(LSMTreeIndexAccessor.java:121)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:42)
> at
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:30)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> So AppendOnlyLinkedMetadataPageManager.close() is called from LSMHarness:502
> (flush), then the next line (LSMHarness:503) calls the callback which tries
> to write data into the closed page manager. At that point its
> 'confiscatedPage' is 'null' and therefore HYR0012 is thrown
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)