Skip to content

Commit

Permalink
List all PITs API
Browse files Browse the repository at this point in the history
Signed-off-by: Bharathwaj G <[email protected]>
  • Loading branch information
bharath-techie committed Jun 21, 2022
1 parent 0b3a32c commit 4d8345e
Show file tree
Hide file tree
Showing 11 changed files with 550 additions and 40 deletions.
24 changes: 4 additions & 20 deletions server/src/main/java/org/opensearch/action/ActionModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -231,18 +231,7 @@
import org.opensearch.action.ingest.SimulatePipelineTransportAction;
import org.opensearch.action.main.MainAction;
import org.opensearch.action.main.TransportMainAction;
import org.opensearch.action.search.ClearScrollAction;
import org.opensearch.action.search.CreatePitAction;
import org.opensearch.action.search.DeletePitAction;
import org.opensearch.action.search.MultiSearchAction;
import org.opensearch.action.search.SearchAction;
import org.opensearch.action.search.SearchScrollAction;
import org.opensearch.action.search.TransportClearScrollAction;
import org.opensearch.action.search.TransportCreatePitAction;
import org.opensearch.action.search.TransportDeletePitAction;
import org.opensearch.action.search.TransportMultiSearchAction;
import org.opensearch.action.search.TransportSearchAction;
import org.opensearch.action.search.TransportSearchScrollAction;
import org.opensearch.action.search.*;
import org.opensearch.action.support.ActionFilters;
import org.opensearch.action.support.AutoCreateIndex;
import org.opensearch.action.support.DestructiveOperations;
Expand Down Expand Up @@ -398,14 +387,7 @@
import org.opensearch.rest.action.ingest.RestGetPipelineAction;
import org.opensearch.rest.action.ingest.RestPutPipelineAction;
import org.opensearch.rest.action.ingest.RestSimulatePipelineAction;
import org.opensearch.rest.action.search.RestClearScrollAction;
import org.opensearch.rest.action.search.RestCountAction;
import org.opensearch.rest.action.search.RestCreatePitAction;
import org.opensearch.rest.action.search.RestDeletePitAction;
import org.opensearch.rest.action.search.RestExplainAction;
import org.opensearch.rest.action.search.RestMultiSearchAction;
import org.opensearch.rest.action.search.RestSearchAction;
import org.opensearch.rest.action.search.RestSearchScrollAction;
import org.opensearch.rest.action.search.*;
import org.opensearch.tasks.Task;
import org.opensearch.threadpool.ThreadPool;
import org.opensearch.usage.UsageService;
Expand Down Expand Up @@ -664,6 +646,7 @@ public <Request extends ActionRequest, Response extends ActionResponse> void reg
actions.register(FindDanglingIndexAction.INSTANCE, TransportFindDanglingIndexAction.class);
actions.register(CreatePitAction.INSTANCE, TransportCreatePitAction.class);
actions.register(DeletePitAction.INSTANCE, TransportDeletePitAction.class);
actions.register(GetAllPitsAction.INSTANCE, TransportGetAllPitsAction.class);

return unmodifiableMap(actions.getRegistry());
}
Expand Down Expand Up @@ -840,6 +823,7 @@ public void initRestHandlers(Supplier<DiscoveryNodes> nodesInCluster) {
// Point in time API
registerHandler.accept(new RestCreatePitAction());
registerHandler.accept(new RestDeletePitAction());
registerHandler.accept(new RestGetAllPitsAction());

for (ActionPlugin plugin : actionPlugins) {
for (RestHandler handler : plugin.getRestHandlers(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,36 @@
package org.opensearch.action.search;public class GetAllPitNodeRequest {
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.search;

import org.opensearch.action.support.nodes.BaseNodeRequest;
import org.opensearch.common.inject.Inject;
import org.opensearch.common.io.stream.StreamInput;
import org.opensearch.common.io.stream.StreamOutput;

import java.io.IOException;

public class GetAllPitNodeRequest extends BaseNodeRequest {
GetAllPitNodesRequest request;

@Inject
public GetAllPitNodeRequest(GetAllPitNodesRequest request) {
this.request = request;
}

public GetAllPitNodeRequest(StreamInput in) throws IOException {
super(in);
request = new GetAllPitNodesRequest(in);
}

@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
request.writeTo(out);
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,68 @@
package org.opensearch.action.search;public class GetAllPitNodeResponse {
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.search;

import org.opensearch.action.support.nodes.BaseNodeResponse;
import org.opensearch.cluster.node.DiscoveryNode;
import org.opensearch.common.inject.Inject;
import org.opensearch.common.io.stream.StreamInput;
import org.opensearch.common.io.stream.StreamOutput;
import org.opensearch.common.xcontent.ToXContentFragment;
import org.opensearch.common.xcontent.XContentBuilder;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

/**
* Response which holds information about all PIT contexts in a node
*/
public class GetAllPitNodeResponse extends BaseNodeResponse implements ToXContentFragment {

private List<ListPitInfo> pitsInfo;

@Inject
public GetAllPitNodeResponse(StreamInput in, List<ListPitInfo> pitsInfo) throws IOException {
super(in);
this.pitsInfo = pitsInfo;
}

public GetAllPitNodeResponse(DiscoveryNode node, List<ListPitInfo> pitsInfo) {
super(node);
this.pitsInfo = pitsInfo;
}

public GetAllPitNodeResponse(StreamInput in) throws IOException {
super(in);
this.pitsInfo = Collections.unmodifiableList(in.readList(ListPitInfo::new));
}

public List<ListPitInfo> getPitsInfo() {
return pitsInfo;
}

@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
out.writeList(pitsInfo);
}

@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.startArray("pitsInfo");
for (ListPitInfo pit : pitsInfo) {
pit.toXContent(builder, params);
}
builder.endArray();
builder.endObject();
return builder;
}

}
Original file line number Diff line number Diff line change
@@ -1,2 +1,36 @@
package org.opensearch.action.search;public class GetAllPitNodesRequest {
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.search;

import org.opensearch.action.support.nodes.BaseNodesRequest;
import org.opensearch.cluster.node.DiscoveryNode;
import org.opensearch.common.inject.Inject;
import org.opensearch.common.io.stream.StreamInput;
import org.opensearch.common.io.stream.StreamOutput;

import java.io.IOException;

/**
* Request to get all active PIT IDs in set of nodes
*/
public class GetAllPitNodesRequest extends BaseNodesRequest<GetAllPitNodesRequest> {
@Inject
public GetAllPitNodesRequest(DiscoveryNode... concreteNodes) {
super(concreteNodes);
}

public GetAllPitNodesRequest(StreamInput in) throws IOException {
super(in);
}

@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,74 @@
package org.opensearch.action.search;public class GetAllPitNodesResponse {
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.search;

import org.opensearch.action.FailedNodeException;
import org.opensearch.action.support.nodes.BaseNodesResponse;
import org.opensearch.cluster.ClusterName;
import org.opensearch.common.inject.Inject;
import org.opensearch.common.io.stream.StreamInput;
import org.opensearch.common.io.stream.StreamOutput;
import org.opensearch.common.xcontent.ToXContentObject;
import org.opensearch.common.xcontent.XContentBuilder;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class GetAllPitNodesResponse extends BaseNodesResponse<GetAllPitNodeResponse> implements ToXContentObject {
List<ListPitInfo> pitsInfo = new ArrayList<>();

@Inject
public GetAllPitNodesResponse(StreamInput in) throws IOException {
super(in);
}

public GetAllPitNodesResponse(
ClusterName clusterName,
List<GetAllPitNodeResponse> getAllPitNodeRespons,
List<FailedNodeException> failures
) {
super(clusterName, getAllPitNodeRespons, failures);
Set<String> uniquePitIds = new HashSet<>();
pitsInfo.addAll(
getAllPitNodeRespons.stream()
.flatMap(p -> p.getPitsInfo().stream().filter(t -> uniquePitIds.add(t.getPitId())))
.collect(Collectors.toList())
);
}

@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.startArray("pitsInfo");
for (ListPitInfo pit : pitsInfo) {
pit.toXContent(builder, params);
}
builder.endArray();
builder.endObject();
return builder;
}

@Override
public List<GetAllPitNodeResponse> readNodesFrom(StreamInput in) throws IOException {
return in.readList(GetAllPitNodeResponse::new);
}

@Override
public void writeNodesTo(StreamOutput out, List<GetAllPitNodeResponse> nodes) throws IOException {
out.writeList(nodes);
}

public List<ListPitInfo> getPITIDs() {
return new ArrayList<>(pitsInfo);
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,23 @@
package org.opensearch.action.search;public class GetAllPitsAction {
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.search;

import org.opensearch.action.ActionType;

/**
* Action type for listing all PIT reader contexts
*/
public class GetAllPitsAction extends ActionType<GetAllPitNodesResponse> {
public static final GetAllPitsAction INSTANCE = new GetAllPitsAction();
public static final String NAME = "indices:data/readall/pit";

private GetAllPitsAction() {
super(NAME, GetAllPitNodesResponse::new);
}
}
Original file line number Diff line number Diff line change
@@ -1,2 +1,58 @@
package org.opensearch.action.search;public class ListPitInfo {
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.search;

import org.opensearch.common.io.stream.StreamInput;
import org.opensearch.common.io.stream.StreamOutput;
import org.opensearch.common.io.stream.Writeable;
import org.opensearch.common.xcontent.ToXContentFragment;
import org.opensearch.common.xcontent.XContentBuilder;

import java.io.IOException;

/**
* This holds information about pit reader context such as pit id and creation time
*/
public class ListPitInfo implements ToXContentFragment, Writeable {
private final String pitId;
private final long creationTime;

public ListPitInfo(String pitId, long creationTime) {
this.pitId = pitId;
this.creationTime = creationTime;
}

public ListPitInfo(StreamInput in) throws IOException {
this.pitId = in.readString();
this.creationTime = in.readLong();
}

@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.field("pitId", pitId);
builder.field("creationTime", creationTime);
builder.endObject();
return builder;
}

public String getPitId() {
return pitId;
}

public long getCreationTime() {
return creationTime;
}

@Override
public void writeTo(StreamOutput out) throws IOException {
out.writeString(pitId);
out.writeLong(creationTime);
}
}
Loading

0 comments on commit 4d8345e

Please sign in to comment.