* This check is redundant, if the container doesn't exist subsequent operations will fail anyway. Since we are not running this exists check during verification I don't think there's much point to having it in snapshot initialization. * This PR is mainly motivated by the fact that this forces more permissions to be available in shared environments
This commit is contained in:
parent
2319fe74c3
commit
6e7a0e1b2a
|
@ -77,10 +77,6 @@ public class AzureBlobStore implements BlobStore {
|
||||||
public void close() {
|
public void close() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean containerExist() throws URISyntaxException, StorageException {
|
|
||||||
return service.doesContainerExist(clientName, container);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean blobExists(String blob) throws URISyntaxException, StorageException {
|
public boolean blobExists(String blob) throws URISyntaxException, StorageException {
|
||||||
return service.blobExists(clientName, container, blob);
|
return service.blobExists(clientName, container, blob);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,11 +20,9 @@
|
||||||
package org.elasticsearch.repositories.azure;
|
package org.elasticsearch.repositories.azure;
|
||||||
|
|
||||||
import com.microsoft.azure.storage.LocationMode;
|
import com.microsoft.azure.storage.LocationMode;
|
||||||
import com.microsoft.azure.storage.StorageException;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.apache.logging.log4j.message.ParameterizedMessage;
|
import org.apache.logging.log4j.message.ParameterizedMessage;
|
||||||
import org.elasticsearch.cluster.metadata.MetaData;
|
|
||||||
import org.elasticsearch.cluster.metadata.RepositoryMetaData;
|
import org.elasticsearch.cluster.metadata.RepositoryMetaData;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.blobstore.BlobPath;
|
import org.elasticsearch.common.blobstore.BlobPath;
|
||||||
|
@ -34,14 +32,9 @@ import org.elasticsearch.common.settings.Setting.Property;
|
||||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||||
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
|
||||||
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
||||||
import org.elasticsearch.snapshots.SnapshotCreationException;
|
|
||||||
import org.elasticsearch.snapshots.SnapshotId;
|
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
@ -140,20 +133,6 @@ public class AzureRepository extends BlobStoreRepository {
|
||||||
return chunkSize;
|
return chunkSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initializeSnapshot(SnapshotId snapshotId, List<IndexId> indices, MetaData clusterMetadata) {
|
|
||||||
try {
|
|
||||||
final AzureBlobStore blobStore = (AzureBlobStore) blobStore();
|
|
||||||
if (blobStore.containerExist() == false) {
|
|
||||||
throw new IllegalArgumentException("The bucket [" + blobStore + "] does not exist. Please create it before "
|
|
||||||
+ " creating an azure snapshot repository backed by it.");
|
|
||||||
}
|
|
||||||
} catch (URISyntaxException | StorageException e) {
|
|
||||||
throw new SnapshotCreationException(metadata.name(), snapshotId, e);
|
|
||||||
}
|
|
||||||
super.initializeSnapshot(snapshotId, indices, clusterMetadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isReadOnly() {
|
public boolean isReadOnly() {
|
||||||
return readonly;
|
return readonly;
|
||||||
|
|
|
@ -141,12 +141,6 @@ public class AzureStorageService {
|
||||||
return prevSettings;
|
return prevSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean doesContainerExist(String account, String container) throws URISyntaxException, StorageException {
|
|
||||||
final Tuple<CloudBlobClient, Supplier<OperationContext>> client = client(account);
|
|
||||||
final CloudBlobContainer blobContainer = client.v1().getContainerReference(container);
|
|
||||||
return SocketAccess.doPrivilegedException(() -> blobContainer.exists(null, null, client.v2().get()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract the blob name from a URI like https://myservice.azure.net/container/path/to/myfile
|
* Extract the blob name from a URI like https://myservice.azure.net/container/path/to/myfile
|
||||||
* It should remove the container part (first part of the path) and gives path/to/myfile
|
* It should remove the container part (first part of the path) and gives path/to/myfile
|
||||||
|
|
|
@ -55,11 +55,6 @@ public class AzureStorageServiceMock extends AzureStorageService {
|
||||||
super(Settings.EMPTY);
|
super(Settings.EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean doesContainerExist(String account, String container) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean blobExists(String account, String container, String blob) {
|
public boolean blobExists(String account, String container, String blob) {
|
||||||
return blobs.containsKey(blob);
|
return blobs.containsKey(blob);
|
||||||
|
|
Loading…
Reference in New Issue