Search in sources :

Example 91 with NamedList

use of org.apache.solr.common.util.NamedList in project lucene-solr by apache.

the class ThreadDumpHandler method handleRequestBody.

@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws IOException {
    SimpleOrderedMap<Object> system = new SimpleOrderedMap<>();
    rsp.add("system", system);
    ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();
    // Thread Count
    SimpleOrderedMap<Object> nl = new SimpleOrderedMap<>();
    nl.add("current", tmbean.getThreadCount());
    nl.add("peak", tmbean.getPeakThreadCount());
    nl.add("daemon", tmbean.getDaemonThreadCount());
    system.add("threadCount", nl);
    // Deadlocks
    ThreadInfo[] tinfos;
    long[] tids = tmbean.findMonitorDeadlockedThreads();
    if (tids != null) {
        tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
        NamedList<SimpleOrderedMap<Object>> lst = new NamedList<>();
        for (ThreadInfo ti : tinfos) {
            if (ti != null) {
                lst.add("thread", getThreadInfo(ti, tmbean));
            }
        }
        system.add("deadlocks", lst);
    }
    // Now show all the threads....
    tids = tmbean.getAllThreadIds();
    tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
    NamedList<SimpleOrderedMap<Object>> lst = new NamedList<>();
    for (ThreadInfo ti : tinfos) {
        if (ti != null) {
            lst.add("thread", getThreadInfo(ti, tmbean));
        }
    }
    system.add("threadDump", lst);
    rsp.setHttpCaching(false);
}
Also used : ThreadMXBean(java.lang.management.ThreadMXBean) ThreadInfo(java.lang.management.ThreadInfo) NamedList(org.apache.solr.common.util.NamedList) SimpleOrderedMap(org.apache.solr.common.util.SimpleOrderedMap)

Example 92 with NamedList

use of org.apache.solr.common.util.NamedList in project lucene-solr by apache.

the class DebugComponent method process.

@SuppressWarnings("unchecked")
@Override
public void process(ResponseBuilder rb) throws IOException {
    if (rb.isDebug()) {
        DocList results = null;
        //some internal grouping requests won't have results value set
        if (rb.getResults() != null) {
            results = rb.getResults().docList;
        }
        NamedList stdinfo = SolrPluginUtils.doStandardDebug(rb.req, rb.getQueryString(), rb.wrap(rb.getQuery()), results, rb.isDebugQuery(), rb.isDebugResults());
        NamedList info = rb.getDebugInfo();
        if (info == null) {
            rb.setDebugInfo(stdinfo);
            info = stdinfo;
        } else {
            info.addAll(stdinfo);
        }
        FacetDebugInfo fdebug = (FacetDebugInfo) (rb.req.getContext().get("FacetDebugInfo"));
        if (fdebug != null) {
            info.add("facet-trace", fdebug.getFacetDebugInfo());
        }
        fdebug = (FacetDebugInfo) (rb.req.getContext().get("FacetDebugInfo-nonJson"));
        if (fdebug != null) {
            info.add("facet-debug", fdebug.getFacetDebugInfo());
        }
        if (rb.req.getJSON() != null) {
            info.add(JSON, rb.req.getJSON());
        }
        if (rb.isDebugQuery() && rb.getQparser() != null) {
            rb.getQparser().addDebugInfo(rb.getDebugInfo());
        }
        if (null != rb.getDebugInfo()) {
            if (rb.isDebugQuery() && null != rb.getFilters()) {
                info.add("filter_queries", rb.req.getParams().getParams(FQ));
                List<String> fqs = new ArrayList<>(rb.getFilters().size());
                for (Query fq : rb.getFilters()) {
                    fqs.add(QueryParsing.toString(fq, rb.req.getSchema()));
                }
                info.add("parsed_filter_queries", fqs);
            }
            // Add this directly here?
            rb.rsp.add("debug", rb.getDebugInfo());
        }
    }
}
Also used : FacetDebugInfo(org.apache.solr.search.facet.FacetDebugInfo) Query(org.apache.lucene.search.Query) NamedList(org.apache.solr.common.util.NamedList) ArrayList(java.util.ArrayList) DocList(org.apache.solr.search.DocList)

Example 93 with NamedList

use of org.apache.solr.common.util.NamedList in project lucene-solr by apache.

the class RebalanceLeaders method execute.

void execute() throws KeeperException, InterruptedException {
    req.getParams().required().check(COLLECTION_PROP);
    String collectionName = req.getParams().get(COLLECTION_PROP);
    if (StringUtils.isBlank(collectionName)) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, String.format(Locale.ROOT, "The " + COLLECTION_PROP + " is required for the Rebalance Leaders command."));
    }
    coreContainer.getZkController().getZkStateReader().forceUpdateCollection(collectionName);
    ClusterState clusterState = coreContainer.getZkController().getClusterState();
    DocCollection dc = clusterState.getCollection(collectionName);
    if (dc == null) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Collection '" + collectionName + "' does not exist, no action taken.");
    }
    Map<String, String> currentRequests = new HashMap<>();
    int max = req.getParams().getInt(MAX_AT_ONCE_PROP, Integer.MAX_VALUE);
    if (max <= 0)
        max = Integer.MAX_VALUE;
    int maxWaitSecs = req.getParams().getInt(MAX_WAIT_SECONDS_PROP, 60);
    NamedList<Object> results = new NamedList<>();
    boolean keepGoing = true;
    for (Slice slice : dc.getSlices()) {
        ensurePreferredIsLeader(results, slice, currentRequests);
        if (currentRequests.size() == max) {
            log.info("Queued " + max + " leader reassignments, waiting for some to complete.");
            keepGoing = waitForLeaderChange(currentRequests, maxWaitSecs, false, results);
            if (keepGoing == false) {
                // If we've waited longer than specified, don't continue to wait!
                break;
            }
        }
    }
    if (keepGoing == true) {
        keepGoing = waitForLeaderChange(currentRequests, maxWaitSecs, true, results);
    }
    if (keepGoing == true) {
        log.info("All leader reassignments completed.");
    } else {
        log.warn("Exceeded specified timeout of ." + maxWaitSecs + "' all leaders may not have been reassigned");
    }
    rsp.getValues().addAll(results);
}
Also used : ClusterState(org.apache.solr.common.cloud.ClusterState) HashMap(java.util.HashMap) NamedList(org.apache.solr.common.util.NamedList) Slice(org.apache.solr.common.cloud.Slice) DocCollection(org.apache.solr.common.cloud.DocCollection) SolrException(org.apache.solr.common.SolrException)

Example 94 with NamedList

use of org.apache.solr.common.util.NamedList in project lucene-solr by apache.

the class RebalanceLeaders method ensurePreferredIsLeader.

private void ensurePreferredIsLeader(NamedList<Object> results, Slice slice, Map<String, String> currentRequests) throws KeeperException, InterruptedException {
    final String inactivePreferreds = "inactivePreferreds";
    final String alreadyLeaders = "alreadyLeaders";
    String collectionName = req.getParams().get(COLLECTION_PROP);
    for (Replica replica : slice.getReplicas()) {
        // Tell the replica to become the leader if we're the preferred leader AND active AND not the leader already
        if (replica.getBool(SliceMutator.PREFERRED_LEADER_PROP, false) == false) {
            continue;
        }
        // OK, we are the preferred leader, are we the actual leader?
        if (replica.getBool(LEADER_PROP, false)) {
            //We're a preferred leader, but we're _also_ the leader, don't need to do anything.
            NamedList<Object> noops = (NamedList<Object>) results.get(alreadyLeaders);
            if (noops == null) {
                noops = new NamedList<>();
                results.add(alreadyLeaders, noops);
            }
            NamedList<Object> res = new NamedList<>();
            res.add("status", "success");
            res.add("msg", "Already leader");
            res.add("shard", slice.getName());
            res.add("nodeName", replica.getNodeName());
            noops.add(replica.getName(), res);
            // already the leader, do nothing.
            return;
        }
        // We're the preferred leader, but someone else is leader. Only become leader if we're active.
        if (replica.getState() != Replica.State.ACTIVE) {
            NamedList<Object> inactives = (NamedList<Object>) results.get(inactivePreferreds);
            if (inactives == null) {
                inactives = new NamedList<>();
                results.add(inactivePreferreds, inactives);
            }
            NamedList<Object> res = new NamedList<>();
            res.add("status", "skipped");
            res.add("msg", "Node is a referredLeader, but it's inactive. Skipping");
            res.add("shard", slice.getName());
            res.add("nodeName", replica.getNodeName());
            inactives.add(replica.getName(), res);
            // Don't try to become the leader if we're not active!
            return;
        }
        // Replica is the preferred leader but not the actual leader, do something about that.
        // "Something" is
        // 1> if the preferred leader isn't first in line, tell it to re-queue itself.
        // 2> tell the actual leader to re-queue itself.
        ZkStateReader zkStateReader = coreContainer.getZkController().getZkStateReader();
        List<String> electionNodes = OverseerTaskProcessor.getSortedElectionNodes(zkStateReader.getZkClient(), ZkStateReader.getShardLeadersElectPath(collectionName, slice.getName()));
        if (electionNodes.size() < 2) {
            // if there's only one node in the queue, should already be leader and we shouldn't be here anyway.
            log.info("Rebalancing leaders and slice " + slice.getName() + " has less than two elements in the leader " + "election queue, but replica " + replica.getName() + " doesn't think it's the leader.");
            return;
        }
        // Ok, the sorting for election nodes is a bit strange. If the sequence numbers are the same, then the whole
        // string is used, but that sorts nodes with the same sequence number by their session IDs from ZK.
        // While this is determinate, it's not quite what we need, so re-queue nodes that aren't us and are
        // watching the leader node..
        String firstWatcher = electionNodes.get(1);
        if (LeaderElector.getNodeName(firstWatcher).equals(replica.getName()) == false) {
            makeReplicaFirstWatcher(collectionName, slice, replica);
        }
        String coreName = slice.getReplica(LeaderElector.getNodeName(electionNodes.get(0))).getStr(CORE_NAME_PROP);
        rejoinElection(collectionName, slice, electionNodes.get(0), coreName, false);
        waitForNodeChange(collectionName, slice, electionNodes.get(0));
        // Done with this slice, skip the rest of the replicas.
        return;
    }
}
Also used : ZkStateReader(org.apache.solr.common.cloud.ZkStateReader) NamedList(org.apache.solr.common.util.NamedList) Replica(org.apache.solr.common.cloud.Replica)

Example 95 with NamedList

use of org.apache.solr.common.util.NamedList in project lucene-solr by apache.

the class SolrInfoMBeanHandler method handleRequestBody.

@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
    NamedList<NamedList<NamedList<Object>>> cats = getMBeanInfo(req);
    if (req.getParams().getBool("diff", false)) {
        ContentStream body = null;
        try {
            body = req.getContentStreams().iterator().next();
        } catch (Exception ex) {
            throw new SolrException(ErrorCode.BAD_REQUEST, "missing content-stream for diff");
        }
        String content = IOUtils.toString(body.getReader());
        NamedList<NamedList<NamedList<Object>>> ref = fromXML(content);
        // Normalize the output 
        SolrQueryResponse wrap = new SolrQueryResponse();
        wrap.add("solr-mbeans", cats);
        cats = (NamedList<NamedList<NamedList<Object>>>) BinaryResponseWriter.getParsedResponse(req, wrap).get("solr-mbeans");
        // Get rid of irrelevant things
        ref = normalize(ref);
        cats = normalize(cats);
        // Only the changes
        boolean showAll = req.getParams().getBool("all", false);
        rsp.add("solr-mbeans", getDiff(ref, cats, showAll));
    } else {
        rsp.add("solr-mbeans", cats);
    }
    // never cache, no matter what init config looks like
    rsp.setHttpCaching(false);
}
Also used : ContentStream(org.apache.solr.common.util.ContentStream) SolrQueryResponse(org.apache.solr.response.SolrQueryResponse) NamedList(org.apache.solr.common.util.NamedList) SolrException(org.apache.solr.common.SolrException) SolrException(org.apache.solr.common.SolrException)

Aggregations

NamedList (org.apache.solr.common.util.NamedList)440 Test (org.junit.Test)125 ArrayList (java.util.ArrayList)111 Map (java.util.Map)83 ModifiableSolrParams (org.apache.solr.common.params.ModifiableSolrParams)83 SolrException (org.apache.solr.common.SolrException)80 SimpleOrderedMap (org.apache.solr.common.util.SimpleOrderedMap)79 List (java.util.List)76 HashMap (java.util.HashMap)65 SolrQueryResponse (org.apache.solr.response.SolrQueryResponse)55 IOException (java.io.IOException)53 SolrDocumentList (org.apache.solr.common.SolrDocumentList)45 QueryRequest (org.apache.solr.client.solrj.request.QueryRequest)35 SolrQueryRequest (org.apache.solr.request.SolrQueryRequest)35 SolrParams (org.apache.solr.common.params.SolrParams)31 LocalSolrQueryRequest (org.apache.solr.request.LocalSolrQueryRequest)31 QueryResponse (org.apache.solr.client.solrj.response.QueryResponse)30 SolrCore (org.apache.solr.core.SolrCore)30 HttpSolrClient (org.apache.solr.client.solrj.impl.HttpSolrClient)27 SolrIndexSearcher (org.apache.solr.search.SolrIndexSearcher)27