Search in sources :

Example 21 with SolrParams

use of org.apache.solr.common.params.SolrParams in project lucene-solr by apache.

the class ReplicationHandler method handleRequestBody.

@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
    rsp.setHttpCaching(false);
    final SolrParams solrParams = req.getParams();
    String command = solrParams.get(COMMAND);
    if (command == null) {
        rsp.add(STATUS, OK_STATUS);
        rsp.add("message", "No command");
        return;
    }
    // It gives the current 'replicateable' index version
    if (command.equals(CMD_INDEX_VERSION)) {
        // make a copy so it won't change
        IndexCommit commitPoint = indexCommitPoint;
        if (commitPoint == null) {
            // if this handler is 'lazy', we may not have tracked the last commit
            // because our commit listener is registered on inform
            commitPoint = core.getDeletionPolicy().getLatestCommit();
        }
        if (commitPoint != null && replicationEnabled.get()) {
            //
            // There is a race condition here.  The commit point may be changed / deleted by the time
            // we get around to reserving it.  This is a very small window though, and should not result
            // in a catastrophic failure, but will result in the client getting an empty file list for
            // the CMD_GET_FILE_LIST command.
            //
            core.getDeletionPolicy().setReserveDuration(commitPoint.getGeneration(), reserveCommitDuration);
            rsp.add(CMD_INDEX_VERSION, IndexDeletionPolicyWrapper.getCommitTimestamp(commitPoint));
            rsp.add(GENERATION, commitPoint.getGeneration());
        } else {
            // This happens when replication is not configured to happen after startup and no commit/optimize
            // has happened yet.
            rsp.add(CMD_INDEX_VERSION, 0L);
            rsp.add(GENERATION, 0L);
        }
    } else if (command.equals(CMD_GET_FILE)) {
        getFileStream(solrParams, rsp);
    } else if (command.equals(CMD_GET_FILE_LIST)) {
        getFileList(solrParams, rsp);
    } else if (command.equalsIgnoreCase(CMD_BACKUP)) {
        doSnapShoot(new ModifiableSolrParams(solrParams), rsp, req);
        rsp.add(STATUS, OK_STATUS);
    } else if (command.equalsIgnoreCase(CMD_RESTORE)) {
        restore(new ModifiableSolrParams(solrParams), rsp, req);
        rsp.add(STATUS, OK_STATUS);
    } else if (command.equalsIgnoreCase(CMD_RESTORE_STATUS)) {
        rsp.add(CMD_RESTORE_STATUS, getRestoreStatus());
    } else if (command.equalsIgnoreCase(CMD_DELETE_BACKUP)) {
        deleteSnapshot(new ModifiableSolrParams(solrParams));
        rsp.add(STATUS, OK_STATUS);
    } else if (command.equalsIgnoreCase(CMD_FETCH_INDEX)) {
        String masterUrl = solrParams.get(MASTER_URL);
        if (!isSlave && masterUrl == null) {
            rsp.add(STATUS, ERR_STATUS);
            rsp.add("message", "No slave configured or no 'masterUrl' Specified");
            return;
        }
        final SolrParams paramsCopy = new ModifiableSolrParams(solrParams);
        Thread fetchThread = new Thread(() -> doFetch(paramsCopy, false), "explicit-fetchindex-cmd");
        fetchThread.setDaemon(false);
        fetchThread.start();
        if (solrParams.getBool(WAIT, false)) {
            fetchThread.join();
        }
        rsp.add(STATUS, OK_STATUS);
    } else if (command.equalsIgnoreCase(CMD_DISABLE_POLL)) {
        if (pollingIndexFetcher != null) {
            disablePoll();
            rsp.add(STATUS, OK_STATUS);
        } else {
            rsp.add(STATUS, ERR_STATUS);
            rsp.add("message", "No slave configured");
        }
    } else if (command.equalsIgnoreCase(CMD_ENABLE_POLL)) {
        if (pollingIndexFetcher != null) {
            enablePoll();
            rsp.add(STATUS, OK_STATUS);
        } else {
            rsp.add(STATUS, ERR_STATUS);
            rsp.add("message", "No slave configured");
        }
    } else if (command.equalsIgnoreCase(CMD_ABORT_FETCH)) {
        if (abortFetch()) {
            rsp.add(STATUS, OK_STATUS);
        } else {
            rsp.add(STATUS, ERR_STATUS);
            rsp.add("message", "No slave configured");
        }
    } else if (command.equals(CMD_SHOW_COMMITS)) {
        rsp.add(CMD_SHOW_COMMITS, getCommits());
    } else if (command.equals(CMD_DETAILS)) {
        rsp.add(CMD_DETAILS, getReplicationDetails(solrParams.getBool("slave", true)));
    } else if (CMD_ENABLE_REPL.equalsIgnoreCase(command)) {
        replicationEnabled.set(true);
        rsp.add(STATUS, OK_STATUS);
    } else if (CMD_DISABLE_REPL.equalsIgnoreCase(command)) {
        replicationEnabled.set(false);
        rsp.add(STATUS, OK_STATUS);
    }
}
Also used : SolrParams(org.apache.solr.common.params.SolrParams) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) IndexCommit(org.apache.lucene.index.IndexCommit) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams)

Example 22 with SolrParams

use of org.apache.solr.common.params.SolrParams in project lucene-solr by apache.

the class PingRequestHandler method handleRequestBody.

@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
    SolrParams params = req.getParams();
    // in this case, we want to default distrib to false so
    // we only ping the single node
    Boolean distrib = params.getBool(DISTRIB);
    if (distrib == null) {
        ModifiableSolrParams mparams = new ModifiableSolrParams(params);
        mparams.set(DISTRIB, false);
        req.setParams(mparams);
    }
    String actionParam = params.get("action");
    ACTIONS action = null;
    if (actionParam == null) {
        action = ACTIONS.PING;
    } else {
        try {
            action = ACTIONS.valueOf(actionParam.toUpperCase(Locale.ROOT));
        } catch (IllegalArgumentException iae) {
            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown action: " + actionParam);
        }
    }
    switch(action) {
        case PING:
            if (isPingDisabled()) {
                SolrException e = new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE, "Service disabled");
                rsp.setException(e);
                return;
            }
            handlePing(req, rsp);
            break;
        case ENABLE:
            handleEnable(true);
            break;
        case DISABLE:
            handleEnable(false);
            break;
        case STATUS:
            if (healthcheck == null) {
                SolrException e = new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE, "healthcheck not configured");
                rsp.setException(e);
            } else {
                rsp.add("status", isPingDisabled() ? "disabled" : "enabled");
            }
    }
}
Also used : ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) SolrParams(org.apache.solr.common.params.SolrParams) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) SolrException(org.apache.solr.common.SolrException)

Example 23 with SolrParams

use of org.apache.solr.common.params.SolrParams in project lucene-solr by apache.

the class ConfigSetsHandler method handleRequestBody.

@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
    if (coreContainer == null) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Core container instance missing");
    }
    // Make sure that the core is ZKAware
    if (!coreContainer.isZooKeeperAware()) {
        throw new SolrException(ErrorCode.BAD_REQUEST, "Solr instance is not running in SolrCloud mode.");
    }
    // Pick the action
    SolrParams params = req.getParams();
    String a = params.get(ConfigSetParams.ACTION);
    if (a != null) {
        ConfigSetAction action = ConfigSetAction.get(a);
        if (action == null)
            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown action: " + a);
        if (action == ConfigSetAction.UPLOAD) {
            handleConfigUploadRequest(req, rsp);
            return;
        }
        invokeAction(req, rsp, action);
    } else {
        throw new SolrException(ErrorCode.BAD_REQUEST, "action is a required param");
    }
    rsp.setHttpCaching(false);
}
Also used : ConfigSetAction(org.apache.solr.common.params.ConfigSetParams.ConfigSetAction) SolrParams(org.apache.solr.common.params.SolrParams) SolrException(org.apache.solr.common.SolrException)

Example 24 with SolrParams

use of org.apache.solr.common.params.SolrParams in project lucene-solr by apache.

the class CreateSnapshotOp method execute.

@Override
public void execute(CoreAdminHandler.CallInfo it) throws Exception {
    CoreContainer cc = it.handler.getCoreContainer();
    final SolrParams params = it.req.getParams();
    String commitName = params.required().get(CoreAdminParams.COMMIT_NAME);
    String cname = params.required().get(CoreAdminParams.CORE);
    try (SolrCore core = cc.getCore(cname)) {
        if (core == null) {
            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unable to locate core " + cname);
        }
        String indexDirPath = core.getIndexDir();
        IndexCommit ic = core.getDeletionPolicy().getLatestCommit();
        if (ic == null) {
            RefCounted<SolrIndexSearcher> searcher = core.getSearcher();
            try {
                ic = searcher.get().getIndexReader().getIndexCommit();
            } finally {
                searcher.decref();
            }
        }
        SolrSnapshotMetaDataManager mgr = core.getSnapshotMetaDataManager();
        mgr.snapshot(commitName, indexDirPath, ic.getGeneration());
        it.rsp.add(CoreAdminParams.CORE, core.getName());
        it.rsp.add(CoreAdminParams.COMMIT_NAME, commitName);
        it.rsp.add(SolrSnapshotManager.INDEX_DIR_PATH, indexDirPath);
        it.rsp.add(SolrSnapshotManager.GENERATION_NUM, ic.getGeneration());
        it.rsp.add(SolrSnapshotManager.FILE_LIST, ic.getFileNames());
    }
}
Also used : SolrSnapshotMetaDataManager(org.apache.solr.core.snapshots.SolrSnapshotMetaDataManager) CoreContainer(org.apache.solr.core.CoreContainer) SolrCore(org.apache.solr.core.SolrCore) SolrParams(org.apache.solr.common.params.SolrParams) SolrIndexSearcher(org.apache.solr.search.SolrIndexSearcher) SolrException(org.apache.solr.common.SolrException) IndexCommit(org.apache.lucene.index.IndexCommit)

Example 25 with SolrParams

use of org.apache.solr.common.params.SolrParams in project lucene-solr by apache.

the class BackupCoreOp method execute.

@Override
public void execute(CoreAdminHandler.CallInfo it) throws Exception {
    ZkController zkController = it.handler.coreContainer.getZkController();
    if (zkController == null) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Internal SolrCloud API");
    }
    final SolrParams params = it.req.getParams();
    String cname = params.get(CoreAdminParams.CORE);
    if (cname == null) {
        throw new IllegalArgumentException(CoreAdminParams.CORE + " is required");
    }
    String name = params.get(NAME);
    if (name == null) {
        throw new IllegalArgumentException(CoreAdminParams.NAME + " is required");
    }
    String repoName = params.get(CoreAdminParams.BACKUP_REPOSITORY);
    BackupRepository repository = it.handler.coreContainer.newBackupRepository(Optional.ofNullable(repoName));
    String location = repository.getBackupLocation(params.get(CoreAdminParams.BACKUP_LOCATION));
    if (location == null) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "'location' is not specified as a query" + " parameter or as a default repository property");
    }
    // An optional parameter to describe the snapshot to be backed-up. If this
    // parameter is not supplied, the latest index commit is backed-up.
    String commitName = params.get(CoreAdminParams.COMMIT_NAME);
    URI locationUri = repository.createURI(location);
    try (SolrCore core = it.handler.coreContainer.getCore(cname)) {
        SnapShooter snapShooter = new SnapShooter(repository, core, locationUri, name, commitName);
        //  file system. Otherwise, perhaps the FS location isn't shared -- we want an error.
        if (!snapShooter.getBackupRepository().exists(snapShooter.getLocation())) {
            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Directory to contain snapshots doesn't exist: " + snapShooter.getLocation());
        }
        snapShooter.validateCreateSnapshot();
        snapShooter.createSnapshot();
    } catch (Exception e) {
        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Failed to backup core=" + cname + " because " + e, e);
    }
}
Also used : SnapShooter(org.apache.solr.handler.SnapShooter) BackupRepository(org.apache.solr.core.backup.repository.BackupRepository) ZkController(org.apache.solr.cloud.ZkController) SolrCore(org.apache.solr.core.SolrCore) SolrParams(org.apache.solr.common.params.SolrParams) URI(java.net.URI) SolrException(org.apache.solr.common.SolrException) SolrException(org.apache.solr.common.SolrException)

Aggregations

SolrParams (org.apache.solr.common.params.SolrParams)310 ModifiableSolrParams (org.apache.solr.common.params.ModifiableSolrParams)179 SolrException (org.apache.solr.common.SolrException)78 Test (org.junit.Test)45 Tuple (org.apache.solr.client.solrj.io.Tuple)43 SolrDocument (org.apache.solr.common.SolrDocument)42 ArrayList (java.util.ArrayList)41 NamedList (org.apache.solr.common.util.NamedList)40 MapSolrParams (org.apache.solr.common.params.MapSolrParams)37 SolrQueryRequest (org.apache.solr.request.SolrQueryRequest)37 IOException (java.io.IOException)35 SolrDocumentList (org.apache.solr.common.SolrDocumentList)34 HashMap (java.util.HashMap)33 QueryResponse (org.apache.solr.client.solrj.response.QueryResponse)30 SolrClientCache (org.apache.solr.client.solrj.io.SolrClientCache)27 UpdateRequest (org.apache.solr.client.solrj.request.UpdateRequest)26 SimpleOrderedMap (org.apache.solr.common.util.SimpleOrderedMap)24 Map (java.util.Map)22 SolrIndexSearcher (org.apache.solr.search.SolrIndexSearcher)22 SolrCore (org.apache.solr.core.SolrCore)20