package org.fastcatsearch.http.action.management.collections; import java.io.Writer; import java.util.List; import org.fastcatsearch.cluster.Node; import org.fastcatsearch.cluster.NodeService; import org.fastcatsearch.control.ResultFuture; import org.fastcatsearch.http.ActionAuthority; import org.fastcatsearch.http.ActionAuthorityLevel; import org.fastcatsearch.http.ActionMapping; import org.fastcatsearch.http.action.ActionRequest; import org.fastcatsearch.http.action.ActionResponse; import org.fastcatsearch.http.action.AuthAction; import org.fastcatsearch.ir.IRService; import org.fastcatsearch.ir.config.CollectionContext; import org.fastcatsearch.job.management.GetCollectionIndexDataJob; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.util.ResponseWriter; import org.fastcatsearch.vo.CollectionIndexData; import org.fastcatsearch.vo.CollectionIndexData.RowData; @ActionMapping(value = "/management/collections/index-data", authority = ActionAuthority.Collections, authorityLevel = ActionAuthorityLevel.READABLE) public class GetCollectionIndexDataAction extends AuthAction { @Override public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception { String collectionId = request.getParameter("collectionId"); int start = Integer.parseInt(request.getParameter("start", "0")); int end = Integer.parseInt(request.getParameter("end", "0")); String pkValue = request.getParameter("pkValue"); Writer writer = response.getWriter(); ResponseWriter resultWriter = getDefaultResponseWriter(writer); IRService irService = ServiceManager.getInstance().getService(IRService.class); CollectionContext collectionContext = irService.collectionContext(collectionId); String indexNodeId = collectionContext.collectionConfig().getIndexNode(); NodeService nodeService = ServiceManager.getInstance().getService(NodeService.class); Node indexNode = nodeService.getNodeById(indexNodeId); GetCollectionIndexDataJob job = new GetCollectionIndexDataJob(collectionId, start, end, pkValue); ResultFuture resultFuture = nodeService.sendRequest(indexNode, job); CollectionIndexData data = null; if (resultFuture != null) { Object obj = resultFuture.take(); if (obj instanceof CollectionIndexData) { data = (CollectionIndexData) obj; } } resultWriter.object() .key("collectionId").value(collectionId); if (data == null) { resultWriter.key("documentSize").value(0) .key("fieldList").array().endArray() .key("indexData").array().endArray(); } else { List<RowData> indexDataList = data.getIndexData(); List<Boolean> isDeletedList = data.getIsDeletedList(); resultWriter.key("documentSize").value(data.getDocumentSize()); resultWriter.key("fieldList").array(); for(String fieldId : data.getFieldList()) { resultWriter.value(fieldId); } resultWriter.endArray(); resultWriter.key("indexData").array(); for(int i = 0; i < indexDataList.size(); i++) { RowData rowData = indexDataList.get(i); resultWriter.object(); resultWriter.key("segmentId").value(rowData.getSegmentId()); resultWriter.key("row").object(); String[][] fieldData = rowData.getFieldData(); for(int k = 0; k < fieldData.length; k++) { resultWriter.key(fieldData[k][0]).value(fieldData[k][1]); } resultWriter.key("isDeleted").value(isDeletedList.get(i)); resultWriter.endObject(); resultWriter.endObject(); } resultWriter.endArray(); } resultWriter.endObject(); resultWriter.done(); } }