mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-25 09:28:27 +00:00
Batch deletes get a response for every delete request, not just those that actually hit an existing blob. The fact that we only responded for existing blobs leads to a degenerate response that throws a parse exception if a batch delete only contains non-existant blobs.
This commit is contained in:
parent
9cdabbd363
commit
d19c8db4e4
@ -26,6 +26,8 @@ import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpHandler;
|
||||
import fixture.gcs.FakeOAuth2HttpHandler;
|
||||
import fixture.gcs.GoogleCloudStorageHttpHandler;
|
||||
import org.elasticsearch.action.ActionRunnable;
|
||||
import org.elasticsearch.action.support.PlainActionFuture;
|
||||
import org.elasticsearch.cluster.metadata.RepositoryMetaData;
|
||||
import org.elasticsearch.cluster.service.ClusterService;
|
||||
import org.elasticsearch.common.SuppressForbidden;
|
||||
@ -37,7 +39,9 @@ import org.elasticsearch.common.unit.ByteSizeValue;
|
||||
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
|
||||
import org.elasticsearch.env.Environment;
|
||||
import org.elasticsearch.plugins.Plugin;
|
||||
import org.elasticsearch.repositories.RepositoriesService;
|
||||
import org.elasticsearch.repositories.Repository;
|
||||
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
||||
import org.elasticsearch.repositories.blobstore.ESMockAPIBasedRepositoryIntegTestCase;
|
||||
import org.threeten.bp.Duration;
|
||||
|
||||
@ -102,6 +106,15 @@ public class GoogleCloudStorageBlobStoreRepositoryTests extends ESMockAPIBasedRe
|
||||
return settings.build();
|
||||
}
|
||||
|
||||
public void testDeleteSingleItem() {
|
||||
final String repoName = createRepository(randomName());
|
||||
final RepositoriesService repositoriesService = internalCluster().getMasterNodeInstance(RepositoriesService.class);
|
||||
final BlobStoreRepository repository = (BlobStoreRepository) repositoriesService.repository(repoName);
|
||||
PlainActionFuture.get(f -> repository.threadPool().generic().execute(ActionRunnable.run(f, () ->
|
||||
repository.blobStore().blobContainer(repository.basePath()).deleteBlobsIgnoringIfNotExists(Collections.singletonList("foo"))
|
||||
)));
|
||||
}
|
||||
|
||||
public void testChunkSize() {
|
||||
// default chunk size
|
||||
RepositoryMetaData repositoryMetaData = new RepositoryMetaData("repo", GoogleCloudStorageRepository.TYPE, Settings.EMPTY);
|
||||
|
@ -167,11 +167,9 @@ public class GoogleCloudStorageHttpHandler implements HttpHandler {
|
||||
} else if (line.startsWith("DELETE")) {
|
||||
final String name = line.substring(line.indexOf(uri) + uri.length(), line.lastIndexOf(" HTTP"));
|
||||
if (Strings.hasText(name)) {
|
||||
String blobName = URLDecoder.decode(name, UTF_8.name());
|
||||
if (blobs.entrySet().removeIf(blob -> blob.getKey().equals(blobName))) {
|
||||
batch.append("HTTP/1.1 204 NO_CONTENT").append('\n');
|
||||
batch.append('\n');
|
||||
}
|
||||
blobs.remove(URLDecoder.decode(name, UTF_8.name()));
|
||||
batch.append("HTTP/1.1 204 NO_CONTENT").append('\n');
|
||||
batch.append('\n');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user