Author: tomekr
Date: Thu May 31 13:55:26 2018
New Revision: 1832615
URL: http://svn.apache.org/viewvc?rev=1832615&view=rev
Log:
OAK-7520: AzureArchiveManager#copyBlob() hangs indefinitely
Modified:
jackrabbit/oak/trunk/oak-segment-azure/pom.xml
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManager.java
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java
Modified: jackrabbit/oak/trunk/oak-segment-azure/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/pom.xml?rev=1832615&r1=1832614&r2=1832615&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-azure/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-segment-azure/pom.xml Thu May 31 13:55:26 2018
@@ -145,6 +145,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>oak-store-spi</artifactId>
<version>${project.version}</version>
@@ -168,6 +173,16 @@
<version>2.1.0</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jul-to-slf4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified:
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManager.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManager.java?rev=1832615&r1=1832614&r2=1832615&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManager.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManager.java
Thu May 31 13:55:26 2018
@@ -232,8 +232,15 @@ public class AzureArchiveManager impleme
String blobName = getName(blob);
CloudBlockBlob newBlob = newParent.getBlockBlobReference(blobName);
newBlob.startCopy(blob.getUri());
- while (newBlob.getCopyState().getStatus() == CopyStatus.PENDING) {
- Thread.sleep(100);
+
+ boolean isStatusPending = true;
+ while (isStatusPending) {
+ newBlob.downloadAttributes();
+ if (newBlob.getCopyState().getStatus() == CopyStatus.PENDING) {
+ Thread.sleep(100);
+ } else {
+ isStatusPending = false;
+ }
}
CopyStatus finalStatus = newBlob.getCopyState().getStatus();
Modified:
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java?rev=1832615&r1=1832614&r2=1832615&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java
Thu May 31 13:55:26 2018
@@ -18,14 +18,24 @@ package org.apache.jackrabbit.oak.segmen
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
+import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveManager;
import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter;
import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveWriter;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
+import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.InvalidKeyException;
@@ -71,4 +81,23 @@ public class AzureArchiveManagerTest {
assertEquals(uuids.subList(0, 5), newArrayList(recovered.keySet()));
}
+ @Test
+ public void testUncleanStop() throws URISyntaxException, IOException,
InvalidFileStoreVersionException, CommitFailedException, StorageException {
+ AzurePersistence p = new
AzurePersistence(container.getDirectoryReference("oak"));
+ FileStore fs = FileStoreBuilder.fileStoreBuilder(new
File("target")).withCustomPersistence(p).build();
+ SegmentNodeStore segmentNodeStore =
SegmentNodeStoreBuilders.builder(fs).build();
+ NodeBuilder builder = segmentNodeStore.getRoot().builder();
+ builder.setProperty("foo", "bar");
+ segmentNodeStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+ fs.close();
+
+ container.getBlockBlobReference("oak/data00000a.tar/closed").delete();
+
container.getBlockBlobReference("oak/data00000a.tar/data00000a.tar.brf").delete();
+
container.getBlockBlobReference("oak/data00000a.tar/data00000a.tar.gph").delete();
+
+ fs = FileStoreBuilder.fileStoreBuilder(new
File("target")).withCustomPersistence(p).build();
+ segmentNodeStore = SegmentNodeStoreBuilders.builder(fs).build();
+ assertEquals("bar", segmentNodeStore.getRoot().getString("foo"));
+ fs.close();
+ }
}