in crossdc-commons/src/main/java/org/apache/solr/crossdc/common/MirroredSolrRequestSerializer.java [58:145]
public MirroredSolrRequest deserialize(String topic, byte[] data) {
Map requestMap;
try (JavaBinCodec codec = new JavaBinCodec()) {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
try {
requestMap = (Map) codec.unmarshal(bais);
if (log.isTraceEnabled()) {
log.trace("Deserialized class={} solrRequest={}", requestMap.getClass().getName(),
requestMap);
}
} catch (Exception e) {
log.error("Exception unmarshalling JavaBin", e);
throw new RuntimeException(e);
}
} catch (IOException e) {
log.error("Error in deserialize", e);
throw new RuntimeException(e);
}
MirroredSolrRequest.Type type = MirroredSolrRequest.Type.get((String) requestMap.get("type"));
SolrRequest request;
int attempt = Integer.parseInt(String.valueOf(requestMap.getOrDefault("attempt", "-1")));
long submitTimeNanos = Long.parseLong(String.valueOf(requestMap.getOrDefault("submitTimeNanos", "-1")));
ModifiableSolrParams params;
if (requestMap.get("params") != null) {
params = ModifiableSolrParams.of(new MapSolrParams((Map<String, String>) requestMap.get("params")));
} else {
params = new ModifiableSolrParams();
}
if (type == MirroredSolrRequest.Type.UPDATE) {
request = new UpdateRequest();
UpdateRequest updateRequest = (UpdateRequest) request;
List docs = (List) requestMap.get("docs");
if (docs != null) {
updateRequest.add(docs);
} else {
updateRequest.add("id", "1"); // TODO huh?
updateRequest.getDocumentsMap().clear();
}
List deletes = (List) requestMap.get("deletes");
if (deletes != null) {
updateRequest.deleteById(deletes);
}
List deletesQuery = (List) requestMap.get("deleteQuery");
if (deletesQuery != null) {
for (Object delQuery : deletesQuery) {
updateRequest.deleteByQuery((String) delQuery);
}
}
updateRequest.setParams(params);
} else if (type == MirroredSolrRequest.Type.ADMIN) {
CollectionParams.CollectionAction action = CollectionParams.CollectionAction.get(params.get(CoreAdminParams.ACTION));
if (action == null) {
throw new RuntimeException("Missing 'action' parameter! " + requestMap);
}
request = new MirroredSolrRequest.MirroredAdminRequest(action, params);
log.debug("-- admin req={}", ((MirroredSolrRequest.MirroredAdminRequest) request).jsonStr());
} else if (type == MirroredSolrRequest.Type.CONFIGSET) {
List<ContentStream> contentStreams = null;
String m = (String) requestMap.get("method");
SolrRequest.METHOD method = SolrRequest.METHOD.valueOf(m);
List<String> csNames = new ArrayList<>();
List<Map<String, Object>> streamsList = (List<Map<String, Object>>) requestMap.get("contentStreams");
if (streamsList != null) {
contentStreams = new ArrayList<>();
for (Map<String, Object> streamMap : streamsList) {
String contentType = (String) streamMap.get("contentType");
String name = (String) streamMap.get("name");
csNames.add(name);
String sourceInfo = (String) streamMap.get("sourceInfo");
byte[] content = (byte[]) streamMap.get("content");
MirroredSolrRequest.ExposedByteArrayContentStream ecs = new MirroredSolrRequest.ExposedByteArrayContentStream(content, sourceInfo, contentType);
ecs.setName(name);
contentStreams.add(ecs);
}
}
request = new MirroredSolrRequest.MirroredConfigSetRequest(method, params, contentStreams);
log.debug("-- configSet method={}, req={}, streams={}", request.getMethod(), request.getParams(), csNames);
} else {
throw new RuntimeException("Unknown request type: " + requestMap);
}
return new MirroredSolrRequest(type, attempt, request, submitTimeNanos);
}