-
Notifications
You must be signed in to change notification settings - Fork 24.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Mapping API: Delete Mapping (with data), closes #373.
- Loading branch information
Showing
25 changed files
with
791 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
117 changes: 117 additions & 0 deletions
117
...main/java/org/elasticsearch/action/admin/indices/mapping/delete/DeleteMappingRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
/* | ||
* Licensed to Elastic Search and Shay Banon under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. Elastic Search licenses this | ||
* file to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
|
||
package org.elasticsearch.action.admin.indices.mapping.delete; | ||
|
||
import org.elasticsearch.action.ActionRequestValidationException; | ||
import org.elasticsearch.action.support.master.MasterNodeOperationRequest; | ||
import org.elasticsearch.common.io.stream.StreamInput; | ||
import org.elasticsearch.common.io.stream.StreamOutput; | ||
|
||
import java.io.IOException; | ||
|
||
import static org.elasticsearch.action.Actions.*; | ||
|
||
/** | ||
* @author kimchy (shay.banon) | ||
*/ | ||
public class DeleteMappingRequest extends MasterNodeOperationRequest { | ||
|
||
private String[] indices; | ||
|
||
private String mappingType; | ||
|
||
DeleteMappingRequest() { | ||
} | ||
|
||
/** | ||
* Constructs a new put mapping request against one or more indices. If nothing is set then | ||
* it will be executed against all indices. | ||
*/ | ||
public DeleteMappingRequest(String... indices) { | ||
this.indices = indices; | ||
} | ||
|
||
@Override public ActionRequestValidationException validate() { | ||
ActionRequestValidationException validationException = null; | ||
if (mappingType == null) { | ||
validationException = addValidationError("mapping type is missing", validationException); | ||
} | ||
return validationException; | ||
} | ||
|
||
/** | ||
* Sets the indices this put mapping operation will execute on. | ||
*/ | ||
public DeleteMappingRequest indices(String[] indices) { | ||
this.indices = indices; | ||
return this; | ||
} | ||
|
||
/** | ||
* The indices the mappings will be put. | ||
*/ | ||
public String[] indices() { | ||
return indices; | ||
} | ||
|
||
/** | ||
* The mapping type. | ||
*/ | ||
public String type() { | ||
return mappingType; | ||
} | ||
|
||
/** | ||
* The type of the mappings to remove. | ||
*/ | ||
public DeleteMappingRequest type(String mappingType) { | ||
this.mappingType = mappingType; | ||
return this; | ||
} | ||
|
||
@Override public void readFrom(StreamInput in) throws IOException { | ||
super.readFrom(in); | ||
indices = new String[in.readVInt()]; | ||
for (int i = 0; i < indices.length; i++) { | ||
indices[i] = in.readUTF(); | ||
} | ||
if (in.readBoolean()) { | ||
mappingType = in.readUTF(); | ||
} | ||
} | ||
|
||
@Override public void writeTo(StreamOutput out) throws IOException { | ||
super.writeTo(out); | ||
if (indices == null) { | ||
out.writeVInt(0); | ||
} else { | ||
out.writeVInt(indices.length); | ||
for (String index : indices) { | ||
out.writeUTF(index); | ||
} | ||
} | ||
if (mappingType == null) { | ||
out.writeBoolean(false); | ||
} else { | ||
out.writeBoolean(true); | ||
out.writeUTF(mappingType); | ||
} | ||
} | ||
} |
45 changes: 45 additions & 0 deletions
45
...ain/java/org/elasticsearch/action/admin/indices/mapping/delete/DeleteMappingResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
* Licensed to Elastic Search and Shay Banon under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. Elastic Search licenses this | ||
* file to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
|
||
package org.elasticsearch.action.admin.indices.mapping.delete; | ||
|
||
import org.elasticsearch.action.ActionResponse; | ||
import org.elasticsearch.common.io.stream.StreamInput; | ||
import org.elasticsearch.common.io.stream.StreamOutput; | ||
import org.elasticsearch.common.io.stream.Streamable; | ||
|
||
import java.io.IOException; | ||
|
||
/** | ||
* The response of remove mapping operation. | ||
* | ||
* @author kimchy (shay.banon) | ||
*/ | ||
public class DeleteMappingResponse implements ActionResponse, Streamable { | ||
|
||
DeleteMappingResponse() { | ||
|
||
} | ||
|
||
@Override public void readFrom(StreamInput in) throws IOException { | ||
} | ||
|
||
@Override public void writeTo(StreamOutput out) throws IOException { | ||
} | ||
} |
116 changes: 116 additions & 0 deletions
116
...a/org/elasticsearch/action/admin/indices/mapping/delete/TransportDeleteMappingAction.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/* | ||
* Licensed to Elastic Search and Shay Banon under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. Elastic Search licenses this | ||
* file to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
|
||
package org.elasticsearch.action.admin.indices.mapping.delete; | ||
|
||
import org.elasticsearch.ElasticSearchException; | ||
import org.elasticsearch.action.ActionListener; | ||
import org.elasticsearch.action.TransportActions; | ||
import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse; | ||
import org.elasticsearch.action.deletebyquery.TransportDeleteByQueryAction; | ||
import org.elasticsearch.action.support.master.TransportMasterNodeOperationAction; | ||
import org.elasticsearch.client.Requests; | ||
import org.elasticsearch.cluster.ClusterService; | ||
import org.elasticsearch.cluster.ClusterState; | ||
import org.elasticsearch.cluster.block.ClusterBlockLevel; | ||
import org.elasticsearch.cluster.metadata.MetaDataMappingService; | ||
import org.elasticsearch.common.inject.Inject; | ||
import org.elasticsearch.common.settings.Settings; | ||
import org.elasticsearch.index.mapper.TypeFieldMapper; | ||
import org.elasticsearch.index.query.xcontent.FilterBuilders; | ||
import org.elasticsearch.index.query.xcontent.QueryBuilders; | ||
import org.elasticsearch.threadpool.ThreadPool; | ||
import org.elasticsearch.transport.TransportService; | ||
|
||
import java.util.concurrent.CountDownLatch; | ||
import java.util.concurrent.atomic.AtomicReference; | ||
|
||
/** | ||
* Delete mapping action. | ||
* | ||
* @author kimchy (shay.banon) | ||
*/ | ||
public class TransportDeleteMappingAction extends TransportMasterNodeOperationAction<DeleteMappingRequest, DeleteMappingResponse> { | ||
|
||
private final MetaDataMappingService metaDataMappingService; | ||
|
||
private final TransportDeleteByQueryAction deleteByQueryAction; | ||
|
||
@Inject public TransportDeleteMappingAction(Settings settings, TransportService transportService, ClusterService clusterService, | ||
ThreadPool threadPool, MetaDataMappingService metaDataMappingService, TransportDeleteByQueryAction deleteByQueryAction) { | ||
super(settings, transportService, clusterService, threadPool); | ||
this.metaDataMappingService = metaDataMappingService; | ||
this.deleteByQueryAction = deleteByQueryAction; | ||
} | ||
|
||
|
||
@Override protected String transportAction() { | ||
return TransportActions.Admin.Indices.Mapping.DELETE; | ||
} | ||
|
||
@Override protected DeleteMappingRequest newRequest() { | ||
return new DeleteMappingRequest(); | ||
} | ||
|
||
@Override protected DeleteMappingResponse newResponse() { | ||
return new DeleteMappingResponse(); | ||
} | ||
|
||
@Override protected void checkBlock(DeleteMappingRequest request, ClusterState state) { | ||
// update to concrete indices | ||
request.indices(state.metaData().concreteIndices(request.indices())); | ||
|
||
for (String index : request.indices()) { | ||
state.blocks().indexBlockedRaiseException(ClusterBlockLevel.METADATA, index); | ||
} | ||
} | ||
|
||
@Override protected DeleteMappingResponse masterOperation(final DeleteMappingRequest request, final ClusterState state) throws ElasticSearchException { | ||
|
||
final AtomicReference<Throwable> failureRef = new AtomicReference<Throwable>(); | ||
final CountDownLatch latch = new CountDownLatch(1); | ||
deleteByQueryAction.execute(Requests.deleteByQueryRequest(request.indices()).query(QueryBuilders.filtered(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(TypeFieldMapper.NAME, request.type()))), new ActionListener<DeleteByQueryResponse>() { | ||
@Override public void onResponse(DeleteByQueryResponse deleteByQueryResponse) { | ||
metaDataMappingService.removeMapping(new MetaDataMappingService.RemoveRequest(request.indices(), request.type())); | ||
latch.countDown(); | ||
} | ||
|
||
@Override public void onFailure(Throwable e) { | ||
failureRef.set(e); | ||
latch.countDown(); | ||
} | ||
}); | ||
|
||
try { | ||
latch.await(); | ||
} catch (InterruptedException e) { | ||
failureRef.set(e); | ||
} | ||
|
||
if (failureRef.get() != null) { | ||
if (failureRef.get() instanceof ElasticSearchException) { | ||
throw (ElasticSearchException) failureRef.get(); | ||
} else { | ||
throw new ElasticSearchException(failureRef.get().getMessage(), failureRef.get()); | ||
} | ||
} | ||
|
||
return new DeleteMappingResponse(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.