Unverified Commit e0d7921d authored by Mahesh Kumar Gangula's avatar Mahesh Kumar Gangula Committed by GitHub
Browse files

Merge pull request #283 from amitpriyadarshi/release-3.0.0

Merge branch 'release-2.10.0' into release-3.0.0
parents 7f1c2b74 102cb666
schema-updates 3.9.0-prod-fix 4.1.0_fixes AmiableAnil-patch-1 Gcloud_copy Gcloud_fix Remove_unwantedCode_Gcloud_fix actors-test bulk-upload-comptenecy-mapping bulk-upload-excelsheet bulk-upload-test_excel bulk_upload code-cleanup csp-migration dependabot/maven/platform-core/platform-telemetry/ch.qos.logback-logback-core-1.2.9 dependabot/maven/search-api/search-core/org.apache.httpcomponents-httpclient-4.5.13 ft-spike knowlg-friday knowlg-oneclick local-setup-fix local-setup-kube m-4.2.0 master master-data new_objecttype org-target-enhancement patch-1 patch-2 patch-3 poc_bulk_upload qs-schema rahul_bulk_upload_postgres release-3.0.0 release-3.0.1 release-3.1.0 release-3.2.0 release-3.3.0 release-3.4.0 release-3.5.0 release-3.6.0 release-3.6.0.1 release-3.7.0 release-3.8.0 release-3.9.0 release-4.0.0 release-4.1.0 release-4.10.0 release-4.10.1 release-4.2.0 release-4.3.0 release-4.4.0 release-4.5.0 release-4.6.0 release-4.7.0 release-4.7.0-debug release-4.8.0 release-4.8.0-debug release-4.9.0 release-4.9.1 release-5.0.0 release-5.0.1 release-5.1.0 release-5.1.0-content release-5.2.0 release-5.3.0 revert-718-visiblity-private-api revert-719-assessment-private-read-api revert-720-visiblity-public-search-api revert-721-visiblity-private-search-api review-4.1.0 s-debug schema-update-4.0 release-5.2.0_RC2 release-5.2.0_RC1 release-5.1.0_RC1 release-5.0.0_RC2 release-5.0.0_RC1 release-4.10.0_RC2 release-4.10.0_RC1 release-4.9.1_RC1 release-4.9.0_RC8 release-4.9.0_RC7 release-4.9.0_RC6 release-4.9.0_RC5 release-4.9.0_RC4 release-4.9.0_RC3 release-4.9.0_RC2 release-4.9.0_RC1 release-4.8.0_RC5 release-4.8.0_RC4 release-4.8.0_RC3 release-4.8.0_RC2 release-4.8.0_RC1 release-4.7.0_RC6 release-4.7.0_RC5 release-4.7.0_RC4 release-4.7.0_RC3 release-4.7.0_RC2 release-4.7.0_RC1 release-4.6.0_RC2 release-4.6.0_RC1 release-4.5.0_RC2 release-4.5.0_RC1 release-4.4.0_RC6 release-4.4.0_RC5 release-4.4.0_RC4 release-4.4.0_RC3 release-4.4.0_RC2 release-4.4.0_RC1 release-4.3.0_RC10 release-4.3.0_RC9 release-4.3.0_RC8 release-4.3.0_RC7 release-4.3.0_RC6 release-4.3.0_RC5 release-4.3.0_RC4 release-4.3.0_RC3 release-4.3.0_RC2 release-4.3.0_RC1 release-4.2.0_RC13 release-4.2.0_RC12 release-4.2.0_RC11 release-4.2.0_RC10 release-4.2.0_RC9 release-4.2.0_RC8 release-4.2.0_RC7 release-4.2.0_RC6 release-4.2.0_RC5 release-4.2.0_RC4 release-4.2.0_RC3 release-4.2.0_RC2 release-4.2.0_RC1 release-4.1.0_RC13 release-4.1.0_RC12 release-4.1.0_RC11 release-4.1.0_RC10 release-4.1.0_RC9 release-4.1.0_RC8 release-4.1.0_RC7 release-4.1.0_RC6 release-4.1.0_RC5 release-4.1.0_RC4 release-4.1.0_RC3 release-4.1.0_RC2 release-4.1.0_RC1 release-4.0.0_RC9 release-4.0.0_RC8 release-4.0.0_RC7 release-4.0.0_RC6 release-4.0.0_RC5 release-4.0.0_RC4 release-4.0.0_RC3 release-4.0.0_RC2 release-4.0.0_RC1 release-3.9.0_RC12 release-3.9.0_RC11 release-3.9.0_RC10 release-3.9.0_RC9 release-3.9.0_RC8 release-3.9.0_RC7 release-3.9.0_RC6 release-3.9.0_RC5 release-3.9.0_RC4 release-3.9.0_RC3 release-3.9.0_RC2 release-3.9.0_RC1 release-3.8.0_RC9 release-3.8.0_RC8 release-3.8.0_RC7 release-3.8.0_RC6 release-3.8.0_RC5 release-3.8.0_RC4 release-3.8.0_RC3 release-3.8.0_RC2 release-3.8.0_RC1 release-3.7.0_RC1 release-3.6.0_RC5 release-3.6.0_RC4 release-3.6.0_RC3 release-3.6.0_RC2 release-3.6.0_RC1 release-3.5.0 release-3.5.0_RC2 release-3.5.0_RC1 release-3.4.0 release-3.4.0_RC2 release-3.4.0_RC1 release-3.3.0_RC10 release-3.3.0_RC9 release-3.3.0_RC8 release-3.3.0_RC7 release-3.3.0_RC6 release-3.3.0_RC5 release-3.3.0_RC4 release-3.3.0_RC3 release-3.3.0_RC2 release-3.3.0_RC1 release-3.2.0_RC9 release-3.2.0_RC8 release-3.2.0_RC7 release-3.2.0_RC6 release-3.2.0_RC5 release-3.2.0_RC4 release-3.2.0_RC3 release-3.2.0_RC2 release-3.2.0_RC1 release-3.1.0 release-3.1.0_RC8 release-3.1.0_RC7 release-3.1.0_RC6 release-3.1.0_RC5 release-3.1.0_RC4 release-3.1.0_RC3 release-3.1.0_RC2 release-3.1.0_RC1 release-3.0.1_RC3 release-3.0.1_RC2 release-3.0.1_RC1 release-3.0.0 release-3.0.0_RC11 release-3.0.0_RC10 release-3.0.0_RC9 release-3.0.0_RC8 release-3.0.0_RC7 release-3.0.0_RC6 release-3.0.0_RC5 release-3.0.0_RC4 release-3.0.0_RC3 release-3.0.0_RC2 release-3.0.0_RC1
No related merge requests found
Showing with 87 additions and 45 deletions
+87 -45
package org.sunbird.graph.dac.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.neo4j.driver.v1.Value;
import org.neo4j.graphdb.Node;
......@@ -230,8 +231,18 @@ public class Relation implements Serializable {
this.endNodeId = endNodeId;
}
// TODO: In 3.0 if metadata is empty set it with new HashMap and return (to handle NPE.
// public Map<String, Object> getMetadata() {
// if (MapUtils.isEmpty(metadata))
// metadata = new HashMap<String, Object>();
// return metadata;
// }
public Map<String, Object> getMetadata() {
return metadata;
if (!MapUtils.isEmpty(metadata))
return metadata;
else
return new HashMap<String, Object>();
}
public void setMetadata(Map<String, Object> metadata) {
......
......@@ -2,6 +2,7 @@ package org.sunbird.actors;
import akka.dispatch.Futures;
import akka.dispatch.Mapper;
import akka.dispatch.Recover;
import akka.util.Timeout;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
......@@ -36,43 +37,54 @@ public class SearchActor extends SearchBaseActor {
public Future<Response> onReceive(Request request) throws Throwable {
String operation = request.getOperation();
SearchProcessor processor = new SearchProcessor();
if (StringUtils.equalsIgnoreCase("INDEX_SEARCH", operation)) {
SearchDTO searchDTO = getSearchDTO(request);
Future<Map<String, Object>> searchResult = processor.processSearch(searchDTO, true);
return searchResult.map(new Mapper<Map<String, Object>, Response>() {
@Override
public Response apply(Map<String, Object> lstResult) {
String mode = (String) request.getRequest().get(SearchConstants.mode);
if (StringUtils.isNotBlank(mode) && StringUtils.equalsIgnoreCase("collection", mode)) {
return OK(getCollectionsResult(lstResult, processor, request));
} else {
return OK(lstResult);
try{
if (StringUtils.equalsIgnoreCase("INDEX_SEARCH", operation)) {
SearchDTO searchDTO = getSearchDTO(request);
Future<Map<String, Object>> searchResult = processor.processSearch(searchDTO, true);
return searchResult.map(new Mapper<Map<String, Object>, Response>() {
@Override
public Response apply(Map<String, Object> lstResult) {
String mode = (String) request.getRequest().get(SearchConstants.mode);
if (StringUtils.isNotBlank(mode) && StringUtils.equalsIgnoreCase("collection", mode)) {
return OK(getCollectionsResult(lstResult, processor, request));
} else {
return OK(lstResult);
}
}
}, getContext().dispatcher()).recoverWith(new Recover<Future<Response>>() {
@Override
public Future<Response> recover(Throwable failure) throws Throwable {
TelemetryManager.error("Unable to process the request:: Request: " + JsonUtils.serialize(request), failure);
return ERROR(request.getOperation(), failure);
}
}, getContext().dispatcher());
} else if (StringUtils.equalsIgnoreCase("COUNT", operation)) {
Map<String, Object> countResult = processor.processCount(getSearchDTO(request));
if (null != countResult.get("count")) {
Integer count = (Integer) countResult.get("count");
return Futures.successful(OK("count", count));
} else {
return Futures.successful(ERROR("", "count is empty or null", ResponseCode.SERVER_ERROR, "", null));
}
}, getContext().dispatcher());
} else if (StringUtils.equalsIgnoreCase("COUNT", operation)) {
Map<String, Object> countResult = processor.processCount(getSearchDTO(request));
if (null != countResult.get("count")) {
Integer count = (Integer) countResult.get("count");
return Futures.successful(OK("count", count));
} else if (StringUtils.equalsIgnoreCase("METRICS", operation)) {
Future<Map<String, Object>> searchResult = processor.processSearch(getSearchDTO(request), false);
return searchResult.map(new Mapper<Map<String, Object>, Response>() {
@Override
public Response apply(Map<String, Object> lstResult) {
return OK(getCompositeSearchResponse(lstResult));
}
}, getContext().dispatcher());
} else if (StringUtils.equalsIgnoreCase("GROUP_SEARCH_RESULT_BY_OBJECTTYPE", operation)) {
Map<String, Object> searchResponse = (Map<String, Object>) request.get("searchResult");
return Futures.successful(OK(getCompositeSearchResponse(searchResponse)));
} else {
return Futures.successful(ERROR("", "count is empty or null", ResponseCode.SERVER_ERROR, "", null));
TelemetryManager.log("Unsupported operation: " + operation);
throw new ClientException(SearchConstants.ERR_INVALID_OPERATION,
"Unsupported operation: " + operation);
}
} else if (StringUtils.equalsIgnoreCase("METRICS", operation)) {
Future<Map<String, Object>> searchResult = processor.processSearch(getSearchDTO(request), false);
return searchResult.map(new Mapper<Map<String, Object>, Response>() {
@Override
public Response apply(Map<String, Object> lstResult) {
return OK(getCompositeSearchResponse(lstResult));
}
}, getContext().dispatcher());
} else if (StringUtils.equalsIgnoreCase("GROUP_SEARCH_RESULT_BY_OBJECTTYPE", operation)) {
Map<String, Object> searchResponse = (Map<String, Object>) request.get("searchResult");
return Futures.successful(OK(getCompositeSearchResponse(searchResponse)));
} else {
TelemetryManager.log("Unsupported operation: " + operation);
throw new ClientException(SearchConstants.ERR_INVALID_OPERATION,
"Unsupported operation: " + operation);
} catch (Exception e) {
TelemetryManager.info("Error while processing the request: REQUEST::" + JsonUtils.serialize(request));
return ERROR(operation, e);
}
}
......@@ -443,6 +455,7 @@ public class SearchActor extends SearchBaseActor {
break;
}
default: {
TelemetryManager.error("Invalid filters, Unsupported operation:: " + filterEntry.getKey() + ":: filters::" + filters);
throw new Exception("Unsupported operation");
}
}
......
......@@ -3,8 +3,9 @@ package org.sunbird.actors;
import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.dispatch.Futures;
import akka.dispatch.Recover;
import akka.pattern.Patterns;
import org.elasticsearch.action.search.SearchPhaseExecutionException;
import org.sunbird.common.JsonUtils;
import org.sunbird.common.dto.Request;
import org.sunbird.common.dto.Response;
import org.sunbird.common.dto.ResponseParams;
......@@ -36,7 +37,13 @@ public abstract class SearchBaseActor extends AbstractActor {
private Future<Response> internalOnReceive(Request request) {
try {
return onReceive(request);
return onReceive(request).recoverWith(new Recover<Future<Response>>() {
@Override
public Future<Response> recover(Throwable failure) throws Throwable {
TelemetryManager.error("Unable to process the request:: Request: " + JsonUtils.serialize(request), failure);
return ERROR(request.getOperation(), failure);
}
}, getContext().dispatcher());
} catch (Throwable e) {
return ERROR(request.getOperation(), e);
}
......@@ -67,10 +74,10 @@ public abstract class SearchBaseActor extends AbstractActor {
params.setErr(mwException.getErrCode());
response.put("messages", mwException.getMessage());
} else {
e.printStackTrace();
TelemetryManager.error("Error while processing", e);
params.setErr("ERR_SYSTEM_EXCEPTION");
}
System.out.println("Exception occurred - class :" + e.getClass().getName() + " with message :" + e.getMessage());
TelemetryManager.error("Exception occurred - class :" + e.getClass().getName() + " with message :" , e);
params.setErrmsg(setErrMessage(e));
response.setParams(params);
setResponseCode(response, e);
......@@ -152,9 +159,12 @@ public abstract class SearchBaseActor extends AbstractActor {
protected String setErrMessage(Throwable e){
if (e instanceof MiddlewareException)
return e.getMessage();
else if (e instanceof SearchPhaseExecutionException)
return e.getCause().getMessage();
else
return "Something went wrong in server while processing the request";
else {
if (e.getSuppressed().length > 0) {
return e.getSuppressed()[0].getMessage();
} else {
return e.getMessage();
}
}
}
}
......@@ -9,7 +9,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.RestClientBuilder;
import org.sunbird.search.util.SearchConstants;
import org.sunbird.telemetry.logger.TelemetryManager;
import org.elasticsearch.action.ActionListener;
......@@ -102,8 +104,14 @@ public class ElasticSearchUtil {
for (String host : hostPort.keySet()) {
httpHosts.add(new HttpHost(host, hostPort.get(host)));
}
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(httpHosts.toArray(new HttpHost[httpHosts.size()])));
RestClientBuilder builder = RestClient.builder(httpHosts.toArray(new HttpHost[httpHosts.size()]))
.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setConnectionRequestTimeout(-1);
}
});
RestHighLevelClient client = new RestHighLevelClient(builder);
if (null != client)
esClient.put(indexName, client);
}
......
......@@ -24,7 +24,7 @@ public class DefinitionUtil {
String version = objectTypeSchemaMap.get(objectType.toLowerCase()).getOrDefault("version", "1.0");
ISchemaValidator schemaValidator = SchemaValidatorFactory.getInstance(schemaName, version);
if(schemaValidator.getConfig().hasPath("searchProps")){
metadata.putAll(schemaValidator.getConfig().getObject("searchProps"));
metadata.putAll(schemaValidator.getConfig().getObject("searchProps").unwrapped());
}
return metadata;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment