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(); + } }