abdullah alamoudi has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1930

Change subject: [ASTERIXDB-1990][ASTERIXDB-1991][STO] Log deletion failure
......................................................................

[ASTERIXDB-1990][ASTERIXDB-1991][STO] Log deletion failure

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Instead of failing operations due to file deletion
  exceptions, we will log the failure in merges and
  re-attempt deletions on index deletion.
  index deletion will only fail after 5 consicutive
  failed attempts.

Change-Id: I843de8b26c181205e43f4eabe22a7c43f3ebfcbc
---
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
M 
hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/btree/AbstractBTreeOperatorTest.java
M 
hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorDescriptor.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
M 
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
10 files changed, 87 insertions(+), 32 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/30/1930/1

diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
index e4a6ca8..7cb50fe 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
@@ -251,7 +251,8 @@
                 metadataProvider.getSplitProviderAndConstraints(dataset);
         IIndexDataflowHelperFactory indexHelperFactory = new 
IndexDataflowHelperFactory(
                 
metadataProvider.getStorageComponentProvider().getStorageManager(), 
splitsAndConstraint.first);
-        IndexDropOperatorDescriptor primaryBtreeDrop = new 
IndexDropOperatorDescriptor(specPrimary, indexHelperFactory);
+        IndexDropOperatorDescriptor primaryBtreeDrop =
+                new IndexDropOperatorDescriptor(specPrimary, 
indexHelperFactory, 5);
         
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(specPrimary,
 primaryBtreeDrop,
                 splitsAndConstraint.second);
         specPrimary.addRoot(primaryBtreeDrop);
@@ -266,7 +267,7 @@
                 metadataProvider.getSplitProviderAndConstraints(dataset, 
indexName);
         IIndexDataflowHelperFactory indexHelperFactory = new 
IndexDataflowHelperFactory(
                 
metadataProvider.getStorageComponentProvider().getStorageManager(), 
splitsAndConstraint.first);
-        IndexDropOperatorDescriptor btreeDrop = new 
IndexDropOperatorDescriptor(spec, indexHelperFactory);
+        IndexDropOperatorDescriptor btreeDrop = new 
IndexDropOperatorDescriptor(spec, indexHelperFactory, 5);
         
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, 
btreeDrop,
                 splitsAndConstraint.second);
         spec.addRoot(btreeDrop);
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
index 5bb0aa9..f19c01a 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
@@ -70,8 +70,8 @@
 import org.apache.hyracks.storage.am.common.api.IIndexBuilderFactory;
 import org.apache.hyracks.storage.am.common.build.IndexBuilderFactory;
 import 
org.apache.hyracks.storage.am.common.dataflow.IIndexDataflowHelperFactory;
-import 
org.apache.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory;
+import 
org.apache.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMMergePolicyFactory;
 import org.apache.hyracks.storage.common.IResourceFactory;
 import org.apache.hyracks.storage.common.IStorageManager;
@@ -203,8 +203,8 @@
                 mergePolicyFactory, mergePolicyProperties);
         IIndexBuilderFactory indexBuilderFactory = new 
IndexBuilderFactory(storageComponentProvider.getStorageManager(),
                 secondaryFileSplitProvider, resourceFactory, 
!dataset.isTemp());
-        IIndexDataflowHelperFactory dataflowHelperFactory =
-                new 
IndexDataflowHelperFactory(storageComponentProvider.getStorageManager(), 
secondaryFileSplitProvider);
+        IIndexDataflowHelperFactory dataflowHelperFactory = new 
IndexDataflowHelperFactory(
+                storageComponentProvider.getStorageManager(), 
secondaryFileSplitProvider);
         ExternalFilesIndexCreateOperatorDescriptor externalFilesOp = new 
ExternalFilesIndexCreateOperatorDescriptor(
                 spec, indexBuilderFactory, dataflowHelperFactory, 
externalFilesSnapshot);
         
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, 
externalFilesOp,
@@ -221,8 +221,8 @@
         Pair<IFileSplitProvider, AlgebricksPartitionConstraint> 
secondarySplitsAndConstraint = metadataProvider
                 .getSplitProviderAndConstraints(dataset, 
IndexingConstants.getFilesIndexName(dataset.getDatasetName()));
         IFileSplitProvider secondaryFileSplitProvider = 
secondarySplitsAndConstraint.first;
-        IIndexDataflowHelperFactory dataflowHelperFactory =
-                new 
IndexDataflowHelperFactory(storageComponentProvider.getStorageManager(), 
secondaryFileSplitProvider);
+        IIndexDataflowHelperFactory dataflowHelperFactory = new 
IndexDataflowHelperFactory(
+                storageComponentProvider.getStorageManager(), 
secondaryFileSplitProvider);
         ExternalFilesIndexModificationOperatorDescriptor externalFilesOp =
                 new ExternalFilesIndexModificationOperatorDescriptor(spec, 
dataflowHelperFactory,
                         externalFilesSnapshot);
@@ -387,7 +387,7 @@
                 metadataProvider.getSplitProviderAndConstraints(dataset, 
indexName);
         IIndexDataflowHelperFactory dataflowHelperFactory = new 
IndexDataflowHelperFactory(
                 
metadataProvider.getStorageComponentProvider().getStorageManager(), 
splitsAndConstraint.first);
-        IndexDropOperatorDescriptor btreeDrop = new 
IndexDropOperatorDescriptor(spec, dataflowHelperFactory);
+        IndexDropOperatorDescriptor btreeDrop = new 
IndexDropOperatorDescriptor(spec, dataflowHelperFactory, 5);
         
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, 
btreeDrop,
                 splitsAndConstraint.second);
         spec.addRoot(btreeDrop);
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
index 2dcab4f..95d42fc 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
@@ -73,8 +73,8 @@
         IIndexDataflowHelperFactory dataflowHelperFactory = new 
IndexDataflowHelperFactory(
                 
metadataProvider.getStorageComponentProvider().getStorageManager(), 
splitsAndConstraint.first);
         // The index drop operation should be persistent regardless of temp 
datasets or permanent dataset.
-        IndexDropOperatorDescriptor btreeDrop = new 
IndexDropOperatorDescriptor(spec, dataflowHelperFactory,
-                failSilently);
+        IndexDropOperatorDescriptor btreeDrop =
+                new IndexDropOperatorDescriptor(spec, dataflowHelperFactory, 
failSilently, 5);
         
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, 
btreeDrop,
                 splitsAndConstraint.second);
         spec.addRoot(btreeDrop);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/btree/AbstractBTreeOperatorTest.java
 
b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/btree/AbstractBTreeOperatorTest.java
index 04226df..bc34ed5 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/btree/AbstractBTreeOperatorTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/btree/AbstractBTreeOperatorTest.java
@@ -56,8 +56,8 @@
 import org.apache.hyracks.storage.am.common.build.IndexBuilderFactory;
 import 
org.apache.hyracks.storage.am.common.dataflow.IIndexDataflowHelperFactory;
 import 
org.apache.hyracks.storage.am.common.dataflow.IndexCreateOperatorDescriptor;
-import 
org.apache.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory;
+import 
org.apache.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.dataflow.TreeIndexBulkLoadOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.dataflow.TreeIndexInsertUpdateDeleteOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.freepage.AppendOnlyLinkedMetadataPageManagerFactory;
@@ -258,7 +258,7 @@
 
     protected void destroyPrimaryIndex() throws Exception {
         JobSpecification spec = new JobSpecification();
-        IndexDropOperatorDescriptor primaryDropOp = new 
IndexDropOperatorDescriptor(spec, primaryHelperFactory);
+        IndexDropOperatorDescriptor primaryDropOp = new 
IndexDropOperatorDescriptor(spec, primaryHelperFactory, 0);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, 
primaryDropOp, NC1_ID);
         spec.addRoot(primaryDropOp);
         runTest(spec);
@@ -266,7 +266,7 @@
 
     protected void destroySecondaryIndex() throws Exception {
         JobSpecification spec = new JobSpecification();
-        IndexDropOperatorDescriptor secondaryDropOp = new 
IndexDropOperatorDescriptor(spec, secondaryHelperFactory);
+        IndexDropOperatorDescriptor secondaryDropOp = new 
IndexDropOperatorDescriptor(spec, secondaryHelperFactory, 0);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, 
secondaryDropOp, NC1_ID);
         spec.addRoot(secondaryDropOp);
         runTest(spec);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
 
b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
index c44544a..fbb23f8 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/am/rtree/AbstractRTreeOperatorTest.java
@@ -57,8 +57,8 @@
 import org.apache.hyracks.storage.am.common.build.IndexBuilderFactory;
 import 
org.apache.hyracks.storage.am.common.dataflow.IIndexDataflowHelperFactory;
 import 
org.apache.hyracks.storage.am.common.dataflow.IndexCreateOperatorDescriptor;
-import 
org.apache.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory;
+import 
org.apache.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.dataflow.TreeIndexBulkLoadOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.dataflow.TreeIndexInsertUpdateDeleteOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.freepage.AppendOnlyLinkedMetadataPageManagerFactory;
@@ -397,7 +397,7 @@
 
     protected void destroyPrimaryIndex() throws Exception {
         JobSpecification spec = new JobSpecification();
-        IndexDropOperatorDescriptor primaryDropOp = new 
IndexDropOperatorDescriptor(spec, primaryHelperFactory);
+        IndexDropOperatorDescriptor primaryDropOp = new 
IndexDropOperatorDescriptor(spec, primaryHelperFactory, 0);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, 
primaryDropOp, NC1_ID);
         spec.addRoot(primaryDropOp);
         runTest(spec);
@@ -405,7 +405,7 @@
 
     protected void destroySecondaryIndex() throws Exception {
         JobSpecification spec = new JobSpecification();
-        IndexDropOperatorDescriptor secondaryDropOp = new 
IndexDropOperatorDescriptor(spec, secondaryHelperFactory);
+        IndexDropOperatorDescriptor secondaryDropOp = new 
IndexDropOperatorDescriptor(spec, secondaryHelperFactory, 0);
         PartitionConstraintHelper.addAbsoluteLocationConstraint(spec, 
secondaryDropOp, NC1_ID);
         spec.addRoot(secondaryDropOp);
         runTest(spec);
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
index be10b27..ee95b94 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
@@ -19,6 +19,7 @@
 package org.apache.hyracks.storage.am.common.api;
 
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.FileReference;
 import org.apache.hyracks.storage.common.IIndex;
 import org.apache.hyracks.storage.common.LocalResource;
 
@@ -55,4 +56,9 @@
      * @throws HyracksDataException
      */
     LocalResource getResource() throws HyracksDataException;
+
+    /**
+     * @return the file reference associated with the index
+     */
+    FileReference getResourceRef();
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
index 1e959e1..1c54237 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
@@ -55,12 +55,12 @@
     public void open() throws HyracksDataException {
         //Get local resource file
         synchronized (lcManager) {
-            index = lcManager.get(resourceRef.getRelativePath());
+            index = lcManager.get(getResourceRef().getRelativePath());
             if (index == null) {
                 LocalResource lr = readIndex();
                 lcManager.register(lr.getPath(), index);
             }
-            lcManager.open(resourceRef.getRelativePath());
+            lcManager.open(getResourceRef().getRelativePath());
         }
     }
 
@@ -79,34 +79,39 @@
     @Override
     public void close() throws HyracksDataException {
         synchronized (lcManager) {
-            lcManager.close(resourceRef.getRelativePath());
+            lcManager.close(getResourceRef().getRelativePath());
         }
     }
 
     @Override
     public void destroy() throws HyracksDataException {
         synchronized (lcManager) {
-            index = lcManager.get(resourceRef.getRelativePath());
+            index = lcManager.get(getResourceRef().getRelativePath());
             if (index != null) {
-                lcManager.unregister(resourceRef.getRelativePath());
+                lcManager.unregister(getResourceRef().getRelativePath());
             } else {
                 readIndex();
             }
 
             if (getResourceId() != -1) {
-                localResourceRepository.delete(resourceRef.getRelativePath());
+                
localResourceRepository.delete(getResourceRef().getRelativePath());
             }
             index.destroy();
         }
     }
 
     private long getResourceId() throws HyracksDataException {
-        LocalResource lr = 
localResourceRepository.get(resourceRef.getRelativePath());
+        LocalResource lr = 
localResourceRepository.get(getResourceRef().getRelativePath());
         return lr == null ? -1 : lr.getId();
     }
 
     @Override
     public LocalResource getResource() throws HyracksDataException {
-        return localResourceRepository.get(resourceRef.getRelativePath());
+        return localResourceRepository.get(getResourceRef().getRelativePath());
+    }
+
+    @Override
+    public FileReference getResourceRef() {
+        return resourceRef;
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorDescriptor.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorDescriptor.java
index 18c7107..6f0354d 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorDescriptor.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorDescriptor.java
@@ -31,22 +31,24 @@
     private static final long serialVersionUID = 1L;
     private final IIndexDataflowHelperFactory dataflowHelperFactory;
     private final boolean failSilently;
+    private final int reAttempts;
 
     public IndexDropOperatorDescriptor(IOperatorDescriptorRegistry spec,
-            IIndexDataflowHelperFactory dataflowHelperFactory) {
-        this(spec, dataflowHelperFactory, false);
+            IIndexDataflowHelperFactory dataflowHelperFactory, int reAttempts) 
{
+        this(spec, dataflowHelperFactory, false, reAttempts);
     }
 
     public IndexDropOperatorDescriptor(IOperatorDescriptorRegistry spec,
-            IIndexDataflowHelperFactory dataflowHelperFactory, boolean 
failSilently) {
+            IIndexDataflowHelperFactory dataflowHelperFactory, boolean 
failSilently, int reAttempts) {
         super(spec, 0, 0);
         this.dataflowHelperFactory = dataflowHelperFactory;
         this.failSilently = failSilently;
+        this.reAttempts = reAttempts;
     }
 
     @Override
     public IOperatorNodePushable createPushRuntime(IHyracksTaskContext ctx,
             IRecordDescriptorProvider recordDescProvider, int partition, int 
nPartitions) throws HyracksDataException {
-        return new IndexDropOperatorNodePushable(dataflowHelperFactory, 
failSilently, ctx, partition);
+        return new IndexDropOperatorNodePushable(dataflowHelperFactory, 
failSilently, ctx, partition, reAttempts);
     }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
index 7c2021b..17639de 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
@@ -19,21 +19,29 @@
 
 package org.apache.hyracks.storage.am.common.dataflow;
 
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
 import org.apache.hyracks.api.comm.IFrameWriter;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.util.IoUtil;
 import org.apache.hyracks.dataflow.std.base.AbstractOperatorNodePushable;
 import org.apache.hyracks.storage.am.common.api.IIndexDataflowHelper;
 
 public class IndexDropOperatorNodePushable extends 
AbstractOperatorNodePushable {
+    private static final Logger LOGGER = 
Logger.getLogger(IndexDropOperatorNodePushable.class.getName());
     private final IIndexDataflowHelper indexHelper;
     private final boolean failSliently;
+    private final int reAttempts;
 
     public IndexDropOperatorNodePushable(IIndexDataflowHelperFactory 
indexHelperFactory, boolean failSilently,
-            IHyracksTaskContext ctx, int partition) throws 
HyracksDataException {
+            IHyracksTaskContext ctx, int partition, int reAttempts) throws 
HyracksDataException {
         this.indexHelper = 
indexHelperFactory.create(ctx.getJobletContext().getServiceContext(), 
partition);
         this.failSliently = failSilently;
+        this.reAttempts = reAttempts;
     }
 
     @Override
@@ -55,12 +63,42 @@
         try {
             indexHelper.destroy();
         } catch (HyracksDataException e) {
+            int attempt = 0;
+            while (attempt < reAttempts) {
+                attempt++;
+                LOGGER.log(Level.WARNING, "Drop index failed.. we will perfrom 
re-attempt number " + attempt, e);
+                if (reAttempt(e)) {
+                    return;
+                }
+            }
             if (!failSliently) {
                 throw e;
             }
         }
     }
 
+    private boolean reAttempt(HyracksDataException hde) throws 
HyracksDataException {
+        if (hde.getComponent().equals(ErrorCode.HYRACKS) && hde.getErrorCode() 
== ErrorCode.CANNOT_DELETE_FILE) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ie) {
+                Thread.currentThread().interrupt();
+            }
+            try {
+                if (indexHelper.getResourceRef().getFile().exists()) {
+                    IoUtil.delete(indexHelper.getResourceRef());
+                }
+            } catch (Exception e) {
+                hde.addSuppressed(e);
+                return false;
+            }
+            return true;
+        } else {
+            LOGGER.log(Level.WARNING, "Unrecoverable failure... skipping 
re-attempt");
+            return false;
+        }
+    }
+
     @Override
     public void setOutputFrameWriter(int index, IFrameWriter writer, 
RecordDescriptor recordDesc) {
     }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
index b1005bd..5e4ecfb 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
@@ -346,12 +346,15 @@
                         lsmIndex.scheduleReplication(null, 
inactiveDiskComponentsToBeDeleted, false,
                                 ReplicationOperation.DELETE, opType);
                     }
-
                     for (ILSMComponent c : inactiveDiskComponentsToBeDeleted) {
-                        ((AbstractLSMDiskComponent) c).destroy();
+                        try {
+                            ((AbstractLSMDiskComponent) c).destroy();
+                        } catch (HyracksDataException e) {
+                            LOGGER.log(Level.WARNING, "Failure destroying 
merged component", e);
+                        }
                     }
                 } catch (Throwable e) {
-                    e.printStackTrace();
+                    LOGGER.log(Level.WARNING, "Failure scheduling replication 
and destroying merged component", e);
                     throw e;
                 }
             }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1930
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I843de8b26c181205e43f4eabe22a7c43f3ebfcbc
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>

Reply via email to