Dmitry Lychagin created ASTERIXDB-1938:
------------------------------------------

             Summary: 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


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)

Reply via email to