diff --git a/src/main/java/org/elasticsearch/cloud/azure/AzureStorageService.java b/src/main/java/org/elasticsearch/cloud/azure/AzureStorageService.java index 27a0ec04bf5..80d948c259a 100644 --- a/src/main/java/org/elasticsearch/cloud/azure/AzureStorageService.java +++ b/src/main/java/org/elasticsearch/cloud/azure/AzureStorageService.java @@ -59,4 +59,6 @@ public interface AzureStorageService { OutputStream getOutputStream(String container, String blob) throws URISyntaxException, StorageException; ImmutableMap listBlobsByPrefix(String container, String keyPath, String prefix) throws URISyntaxException, StorageException, ServiceException; + + void moveBlob(String container, String sourceBlob, String targetBlob) throws URISyntaxException, StorageException; } diff --git a/src/main/java/org/elasticsearch/cloud/azure/AzureStorageServiceImpl.java b/src/main/java/org/elasticsearch/cloud/azure/AzureStorageServiceImpl.java index e2ae77a1974..1254f8bc785 100644 --- a/src/main/java/org/elasticsearch/cloud/azure/AzureStorageServiceImpl.java +++ b/src/main/java/org/elasticsearch/cloud/azure/AzureStorageServiceImpl.java @@ -214,6 +214,19 @@ public class AzureStorageServiceImpl extends AbstractLifecycleComponent done", container, sourceBlob, targetBlob); + } + } + @Override protected void doStart() throws ElasticsearchException { logger.debug("starting azure storage client instance"); diff --git a/src/main/java/org/elasticsearch/cloud/azure/blobstore/AzureBlobContainer.java b/src/main/java/org/elasticsearch/cloud/azure/blobstore/AzureBlobContainer.java index ed238c06664..dd032591eb8 100644 --- a/src/main/java/org/elasticsearch/cloud/azure/blobstore/AzureBlobContainer.java +++ b/src/main/java/org/elasticsearch/cloud/azure/blobstore/AzureBlobContainer.java @@ -118,6 +118,24 @@ public class AzureBlobContainer extends AbstractBlobContainer { } } + @Override + public void move(String sourceBlobName, String targetBlobName) throws IOException { + try { + String source = keyPath + sourceBlobName; + String target = keyPath + targetBlobName; + + logger.debug("moving blob [{}] to [{}] in container {{}}", source, target, blobStore.container()); + + blobStore.client().moveBlob(blobStore.container(), source, target); + } catch (URISyntaxException e) { + logger.warn("can not move blob [{}] to [{}] in container {{}}: {}", sourceBlobName, targetBlobName, blobStore.container(), e.getMessage()); + throw new IOException(e); + } catch (StorageException e) { + logger.warn("can not move blob [{}] to [{}] in container {{}}: {}", sourceBlobName, targetBlobName, blobStore.container(), e.getMessage()); + throw new IOException(e); + } + } + @Override public ImmutableMap listBlobs() throws IOException { return listBlobsByPrefix(null); diff --git a/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceMock.java b/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceMock.java index 67fdc6b7d28..257a0c4728a 100644 --- a/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceMock.java +++ b/src/test/java/org/elasticsearch/repositories/azure/AzureStorageServiceMock.java @@ -99,6 +99,17 @@ public class AzureStorageServiceMock extends AbstractLifecycleComponent