|
27 | 27 | import org.elasticsearch.ExceptionsHelper;
|
28 | 28 | import org.elasticsearch.action.ActionListener;
|
29 | 29 | import org.elasticsearch.action.ActionRequest;
|
30 |
| -import org.elasticsearch.action.DocumentRequest; |
31 | 30 | import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
|
32 | 31 | import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
|
33 | 32 | import org.elasticsearch.action.admin.indices.create.TransportCreateIndexAction;
|
|
41 | 40 | import org.elasticsearch.cluster.ClusterService;
|
42 | 41 | import org.elasticsearch.cluster.ClusterState;
|
43 | 42 | import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
44 |
| -import org.elasticsearch.cluster.metadata.IndexMetaData; |
45 | 43 | import org.elasticsearch.cluster.metadata.MappingMetaData;
|
46 | 44 | import org.elasticsearch.cluster.metadata.MetaData;
|
47 | 45 | import org.elasticsearch.cluster.routing.GroupShardsIterator;
|
48 | 46 | import org.elasticsearch.cluster.routing.ShardIterator;
|
49 | 47 | import org.elasticsearch.common.inject.Inject;
|
50 | 48 | import org.elasticsearch.common.settings.Settings;
|
51 | 49 | import org.elasticsearch.common.util.concurrent.AtomicArray;
|
52 |
| -import org.elasticsearch.index.Index; |
53 | 50 | import org.elasticsearch.index.shard.ShardId;
|
54 | 51 | import org.elasticsearch.indices.IndexAlreadyExistsException;
|
55 |
| -import org.elasticsearch.indices.IndexClosedException; |
56 | 52 | import org.elasticsearch.rest.RestStatus;
|
57 | 53 | import org.elasticsearch.threadpool.ThreadPool;
|
58 | 54 | import org.elasticsearch.transport.TransportService;
|
@@ -100,15 +96,26 @@ protected void doExecute(final BulkRequest bulkRequest, final ActionListener<Bul
|
100 | 96 | if (autoCreateIndex.needToCheck()) {
|
101 | 97 | final Set<String> indices = Sets.newHashSet();
|
102 | 98 | for (ActionRequest request : bulkRequest.requests) {
|
103 |
| - if (request instanceof DocumentRequest) { |
104 |
| - DocumentRequest req = (DocumentRequest) request; |
105 |
| - if (!indices.contains(req.index())) { |
106 |
| - indices.add(req.index()); |
| 99 | + if (request instanceof IndexRequest) { |
| 100 | + IndexRequest indexRequest = (IndexRequest) request; |
| 101 | + if (!indices.contains(indexRequest.index())) { |
| 102 | + indices.add(indexRequest.index()); |
| 103 | + } |
| 104 | + } else if (request instanceof DeleteRequest) { |
| 105 | + DeleteRequest deleteRequest = (DeleteRequest) request; |
| 106 | + if (!indices.contains(deleteRequest.index())) { |
| 107 | + indices.add(deleteRequest.index()); |
| 108 | + } |
| 109 | + } else if (request instanceof UpdateRequest) { |
| 110 | + UpdateRequest updateRequest = (UpdateRequest) request; |
| 111 | + if (!indices.contains(updateRequest.index())) { |
| 112 | + indices.add(updateRequest.index()); |
107 | 113 | }
|
108 | 114 | } else {
|
109 | 115 | throw new ElasticsearchException("Parsed unknown request in bulk actions: " + request.getClass().getSimpleName());
|
110 | 116 | }
|
111 | 117 | }
|
| 118 | + |
112 | 119 | final AtomicInteger counter = new AtomicInteger(indices.size());
|
113 | 120 | ClusterState state = clusterService.state();
|
114 | 121 | for (final String index : indices) {
|
@@ -197,33 +204,30 @@ private void executeBulk(final BulkRequest bulkRequest, final long startTime, fi
|
197 | 204 | MetaData metaData = clusterState.metaData();
|
198 | 205 | for (int i = 0; i < bulkRequest.requests.size(); i++) {
|
199 | 206 | ActionRequest request = bulkRequest.requests.get(i);
|
200 |
| - if (request instanceof DocumentRequest) { |
201 |
| - DocumentRequest req = (DocumentRequest) request; |
202 |
| - |
203 |
| - if (addFailureIfIndexIsClosed(req, bulkRequest, responses, i, concreteIndices, metaData)) { |
204 |
| - continue; |
| 207 | + if (request instanceof IndexRequest) { |
| 208 | + IndexRequest indexRequest = (IndexRequest) request; |
| 209 | + String concreteIndex = concreteIndices.resolveIfAbsent(indexRequest.index(), indexRequest.indicesOptions()); |
| 210 | + MappingMetaData mappingMd = null; |
| 211 | + if (metaData.hasIndex(concreteIndex)) { |
| 212 | + mappingMd = metaData.index(concreteIndex).mappingOrDefault(indexRequest.type()); |
205 | 213 | }
|
206 |
| - |
207 |
| - String concreteIndex = concreteIndices.resolveIfAbsent(req.index(), req.indicesOptions()); |
208 |
| - if (request instanceof IndexRequest) { |
209 |
| - IndexRequest indexRequest = (IndexRequest) request; |
210 |
| - MappingMetaData mappingMd = null; |
211 |
| - if (metaData.hasIndex(concreteIndex)) { |
212 |
| - mappingMd = metaData.index(concreteIndex).mappingOrDefault(indexRequest.type()); |
213 |
| - } |
214 |
| - try { |
215 |
| - indexRequest.process(metaData, mappingMd, allowIdGeneration, concreteIndex); |
216 |
| - } catch (ElasticsearchParseException e) { |
217 |
| - BulkItemResponse.Failure failure = new BulkItemResponse.Failure(concreteIndex, indexRequest.type(), indexRequest.id(), e); |
218 |
| - BulkItemResponse bulkItemResponse = new BulkItemResponse(i, "index", failure); |
219 |
| - responses.set(i, bulkItemResponse); |
220 |
| - // make sure the request gets never processed again |
221 |
| - bulkRequest.requests.set(i, null); |
222 |
| - } |
223 |
| - } else { |
224 |
| - concreteIndices.resolveIfAbsent(req.index(), req.indicesOptions()); |
225 |
| - req.routing(clusterState.metaData().resolveIndexRouting(req.routing(), req.index())); |
| 214 | + try { |
| 215 | + indexRequest.process(metaData, mappingMd, allowIdGeneration, concreteIndex); |
| 216 | + } catch (ElasticsearchParseException e) { |
| 217 | + BulkItemResponse.Failure failure = new BulkItemResponse.Failure(concreteIndex, indexRequest.type(), indexRequest.id(), e); |
| 218 | + BulkItemResponse bulkItemResponse = new BulkItemResponse(i, "index", failure); |
| 219 | + responses.set(i, bulkItemResponse); |
| 220 | + // make sure the request gets never processed again |
| 221 | + bulkRequest.requests.set(i, null); |
226 | 222 | }
|
| 223 | + } else if (request instanceof DeleteRequest) { |
| 224 | + DeleteRequest deleteRequest = (DeleteRequest) request; |
| 225 | + concreteIndices.resolveIfAbsent(deleteRequest.index(), deleteRequest.indicesOptions()); |
| 226 | + deleteRequest.routing(clusterState.metaData().resolveIndexRouting(deleteRequest.routing(), deleteRequest.index())); |
| 227 | + } else if (request instanceof UpdateRequest) { |
| 228 | + UpdateRequest updateRequest = (UpdateRequest) request; |
| 229 | + concreteIndices.resolveIfAbsent(updateRequest.index(), updateRequest.indicesOptions()); |
| 230 | + updateRequest.routing(clusterState.metaData().resolveIndexRouting(updateRequest.routing(), updateRequest.index())); |
227 | 231 | }
|
228 | 232 | }
|
229 | 233 |
|
@@ -339,35 +343,8 @@ private void finishHim() {
|
339 | 343 | }
|
340 | 344 | }
|
341 | 345 |
|
342 |
| - private boolean addFailureIfIndexIsClosed(DocumentRequest request, BulkRequest bulkRequest, AtomicArray<BulkItemResponse> responses, int idx, |
343 |
| - final ConcreteIndices concreteIndices, |
344 |
| - final MetaData metaData) { |
345 |
| - String concreteIndex = concreteIndices.getConcreteIndex(request.index()); |
346 |
| - boolean isClosed = false; |
347 |
| - if (concreteIndex == null) { |
348 |
| - try { |
349 |
| - concreteIndex = concreteIndices.resolveIfAbsent(request.index(), request.indicesOptions()); |
350 |
| - } catch (IndexClosedException ice) { |
351 |
| - isClosed = true; |
352 |
| - } |
353 |
| - } |
354 |
| - if (!isClosed) { |
355 |
| - IndexMetaData indexMetaData = metaData.index(concreteIndex); |
356 |
| - isClosed = indexMetaData.getState() == IndexMetaData.State.CLOSE; |
357 |
| - } |
358 |
| - if (isClosed) { |
359 |
| - BulkItemResponse.Failure failure = new BulkItemResponse.Failure(request.index(), request.type(), request.id(), |
360 |
| - new IndexClosedException(new Index(metaData.index(request.index()).getIndex()))); |
361 |
| - BulkItemResponse bulkItemResponse = new BulkItemResponse(idx, "index", failure); |
362 |
| - responses.set(idx, bulkItemResponse); |
363 |
| - // make sure the request gets never processed again |
364 |
| - bulkRequest.requests.set(idx, null); |
365 |
| - } |
366 |
| - return isClosed; |
367 |
| - } |
368 |
| - |
369 |
| - |
370 | 346 | private static class ConcreteIndices {
|
| 347 | + |
371 | 348 | private final Map<String, String> indices = new HashMap<>();
|
372 | 349 | private final MetaData metaData;
|
373 | 350 |
|
|
0 commit comments