public MirroredSolrRequest deserialize()

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);
    }