Search in sources :

Example 96 with CloudSolrClient

use of org.apache.solr.client.solrj.impl.CloudSolrClient in project lucene-solr by apache.

the class TestCollectionAPI method clusterStatusAliasTest.

private void clusterStatusAliasTest() throws Exception {
    try (CloudSolrClient client = createCloudClient(null)) {
        ModifiableSolrParams params = new ModifiableSolrParams();
        params.set("action", CollectionParams.CollectionAction.CREATEALIAS.toString());
        params.set("name", "myalias");
        params.set("collections", DEFAULT_COLLECTION + "," + COLLECTION_NAME);
        SolrRequest request = new QueryRequest(params);
        request.setPath("/admin/collections");
        client.request(request);
        params = new ModifiableSolrParams();
        params.set("action", CollectionParams.CollectionAction.CLUSTERSTATUS.toString());
        params.set("collection", DEFAULT_COLLECTION);
        request = new QueryRequest(params);
        request.setPath("/admin/collections");
        NamedList<Object> rsp = client.request(request);
        NamedList<Object> cluster = (NamedList<Object>) rsp.get("cluster");
        assertNotNull("Cluster state should not be null", cluster);
        Map<String, String> aliases = (Map<String, String>) cluster.get("aliases");
        assertNotNull("Aliases should not be null", aliases);
        assertEquals("Alias: myalias not found in cluster status", DEFAULT_COLLECTION + "," + COLLECTION_NAME, aliases.get("myalias"));
        NamedList<Object> collections = (NamedList<Object>) cluster.get("collections");
        assertNotNull("Collections should not be null in cluster state", collections);
        assertNotNull(collections.get(DEFAULT_COLLECTION));
        Map<String, Object> collection = (Map<String, Object>) collections.get(DEFAULT_COLLECTION);
        assertEquals("conf1", collection.get("configName"));
        List<String> collAlias = (List<String>) collection.get("aliases");
        assertEquals("Aliases not found", Lists.newArrayList("myalias"), collAlias);
    }
}
Also used : QueryRequest(org.apache.solr.client.solrj.request.QueryRequest) NamedList(org.apache.solr.common.util.NamedList) SolrRequest(org.apache.solr.client.solrj.SolrRequest) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) CloudSolrClient(org.apache.solr.client.solrj.impl.CloudSolrClient) ArrayList(java.util.ArrayList) NamedList(org.apache.solr.common.util.NamedList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 97 with CloudSolrClient

use of org.apache.solr.client.solrj.impl.CloudSolrClient in project lucene-solr by apache.

the class TestCollectionAPI method clusterStatusRolesTest.

private void clusterStatusRolesTest() throws Exception {
    try (CloudSolrClient client = createCloudClient(null)) {
        client.connect();
        Replica replica = client.getZkStateReader().getLeaderRetry(DEFAULT_COLLECTION, SHARD1);
        ModifiableSolrParams params = new ModifiableSolrParams();
        params.set("action", CollectionParams.CollectionAction.ADDROLE.toString());
        params.set("node", replica.getNodeName());
        params.set("role", "overseer");
        SolrRequest request = new QueryRequest(params);
        request.setPath("/admin/collections");
        client.request(request);
        params = new ModifiableSolrParams();
        params.set("action", CollectionParams.CollectionAction.CLUSTERSTATUS.toString());
        params.set("collection", DEFAULT_COLLECTION);
        request = new QueryRequest(params);
        request.setPath("/admin/collections");
        NamedList<Object> rsp = client.request(request);
        NamedList<Object> cluster = (NamedList<Object>) rsp.get("cluster");
        assertNotNull("Cluster state should not be null", cluster);
        Map<String, Object> roles = (Map<String, Object>) cluster.get("roles");
        assertNotNull("Role information should not be null", roles);
        List<String> overseer = (List<String>) roles.get("overseer");
        assertNotNull(overseer);
        assertEquals(1, overseer.size());
        assertTrue(overseer.contains(replica.getNodeName()));
    }
}
Also used : QueryRequest(org.apache.solr.client.solrj.request.QueryRequest) NamedList(org.apache.solr.common.util.NamedList) SolrRequest(org.apache.solr.client.solrj.SolrRequest) Replica(org.apache.solr.common.cloud.Replica) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) CloudSolrClient(org.apache.solr.client.solrj.impl.CloudSolrClient) ArrayList(java.util.ArrayList) NamedList(org.apache.solr.common.util.NamedList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 98 with CloudSolrClient

use of org.apache.solr.client.solrj.impl.CloudSolrClient in project lucene-solr by apache.

the class TestCollectionAPI method testClusterStateMigration.

private void testClusterStateMigration() throws Exception {
    try (CloudSolrClient client = createCloudClient(null)) {
        client.connect();
        CollectionAdminRequest.createCollection("testClusterStateMigration", "conf1", 1, 1).setStateFormat(1).process(client);
        waitForRecoveriesToFinish("testClusterStateMigration", true);
        assertEquals(1, client.getZkStateReader().getClusterState().getCollection("testClusterStateMigration").getStateFormat());
        for (int i = 0; i < 10; i++) {
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id", "id_" + i);
            client.add("testClusterStateMigration", doc);
        }
        client.commit("testClusterStateMigration");
        CollectionAdminRequest.migrateCollectionFormat("testClusterStateMigration").process(client);
        client.getZkStateReader().forceUpdateCollection("testClusterStateMigration");
        assertEquals(2, client.getZkStateReader().getClusterState().getCollection("testClusterStateMigration").getStateFormat());
        QueryResponse response = client.query("testClusterStateMigration", new SolrQuery("*:*"));
        assertEquals(10, response.getResults().getNumFound());
    }
}
Also used : SolrInputDocument(org.apache.solr.common.SolrInputDocument) QueryResponse(org.apache.solr.client.solrj.response.QueryResponse) SolrQuery(org.apache.solr.client.solrj.SolrQuery) CloudSolrClient(org.apache.solr.client.solrj.impl.CloudSolrClient)

Example 99 with CloudSolrClient

use of org.apache.solr.client.solrj.impl.CloudSolrClient in project lucene-solr by apache.

the class AbstractCloudBackupRestoreTestCase method testInvalidPath.

// This test verifies the system behavior when the backup location cluster property is configured with an invalid
// value for the specified repository (and the default backup location is not configured in solr.xml).
private void testInvalidPath(String collectionName) throws Exception {
    // Execute this test only if the default backup location is NOT configured in solr.xml
    if (getBackupLocation() == null) {
        return;
    }
    String backupName = "invalidbackuprequest";
    CloudSolrClient solrClient = cluster.getSolrClient();
    ClusterProp req = CollectionAdminRequest.setClusterProperty(CoreAdminParams.BACKUP_LOCATION, "/location/does/not/exist");
    assertEquals(0, req.process(solrClient).getStatus());
    // Do not specify the backup location.
    CollectionAdminRequest.Backup backup = CollectionAdminRequest.backupCollection(collectionName, backupName).setRepositoryName(getBackupRepoName());
    try {
        backup.process(solrClient);
        fail("This request should have failed since the cluster property value for backup location property is invalid.");
    } catch (SolrException ex) {
        assertEquals(ErrorCode.SERVER_ERROR.code, ex.code());
    }
    String restoreCollectionName = collectionName + "_invalidrequest";
    CollectionAdminRequest.Restore restore = CollectionAdminRequest.restoreCollection(restoreCollectionName, backupName).setRepositoryName(getBackupRepoName());
    try {
        restore.process(solrClient);
        fail("This request should have failed since the cluster property value for backup location property is invalid.");
    } catch (SolrException ex) {
        assertEquals(ErrorCode.SERVER_ERROR.code, ex.code());
    }
}
Also used : ClusterProp(org.apache.solr.client.solrj.request.CollectionAdminRequest.ClusterProp) CollectionAdminRequest(org.apache.solr.client.solrj.request.CollectionAdminRequest) SolrException(org.apache.solr.common.SolrException) CloudSolrClient(org.apache.solr.client.solrj.impl.CloudSolrClient)

Example 100 with CloudSolrClient

use of org.apache.solr.client.solrj.impl.CloudSolrClient in project lucene-solr by apache.

the class AliasIntegrationTest method test.

@Test
public void test() throws Exception {
    CollectionAdminRequest.createCollection("collection1", "conf", 2, 1).process(cluster.getSolrClient());
    CollectionAdminRequest.createCollection("collection2", "conf", 1, 1).process(cluster.getSolrClient());
    waitForState("Expected collection1 to be created with 2 shards and 1 replica", "collection1", clusterShape(2, 1));
    waitForState("Expected collection2 to be created with 1 shard and 1 replica", "collection2", clusterShape(1, 1));
    new UpdateRequest().add("id", "6", "a_t", "humpty dumpy sat on a wall").add("id", "7", "a_t", "humpty dumpy3 sat on a walls").add("id", "8", "a_t", "humpty dumpy2 sat on a walled").commit(cluster.getSolrClient(), "collection1");
    new UpdateRequest().add("id", "9", "a_t", "humpty dumpy sat on a wall").add("id", "10", "a_t", "humpty dumpy3 sat on a walls").commit(cluster.getSolrClient(), "collection2");
    CollectionAdminRequest.createAlias("testalias", "collection1").process(cluster.getSolrClient());
    // ensure that the alias has been registered
    assertEquals("collection1", new CollectionAdminRequest.ListAliases().process(cluster.getSolrClient()).getAliases().get("testalias"));
    // search for alias
    QueryResponse res = cluster.getSolrClient().query("testalias", new SolrQuery("*:*"));
    assertEquals(3, res.getResults().getNumFound());
    // search for alias with random non cloud client
    JettySolrRunner jetty = cluster.getRandomJetty(random());
    try (HttpSolrClient client = getHttpSolrClient(jetty.getBaseUrl().toString() + "/testalias")) {
        res = client.query(new SolrQuery("*:*"));
        assertEquals(3, res.getResults().getNumFound());
    }
    // create alias, collection2 first because it's not on every node
    CollectionAdminRequest.createAlias("testalias", "collection2,collection1").process(cluster.getSolrClient());
    // search with new cloud client
    try (CloudSolrClient cloudSolrClient = getCloudSolrClient(cluster.getZkServer().getZkAddress(), random().nextBoolean())) {
        cloudSolrClient.setParallelUpdates(random().nextBoolean());
        SolrQuery query = new SolrQuery("*:*");
        query.set("collection", "testalias");
        res = cloudSolrClient.query(query);
        assertEquals(5, res.getResults().getNumFound());
        // Try with setDefaultCollection
        query = new SolrQuery("*:*");
        cloudSolrClient.setDefaultCollection("testalias");
        res = cloudSolrClient.query(query);
        assertEquals(5, res.getResults().getNumFound());
    }
    // search for alias with random non cloud client
    jetty = cluster.getRandomJetty(random());
    try (HttpSolrClient client = getHttpSolrClient(jetty.getBaseUrl().toString() + "/testalias")) {
        SolrQuery query = new SolrQuery("*:*");
        query.set("collection", "testalias");
        res = client.query(query);
        assertEquals(5, res.getResults().getNumFound());
        // now without collections param
        query = new SolrQuery("*:*");
        res = client.query(query);
        assertEquals(5, res.getResults().getNumFound());
    }
    // update alias
    CollectionAdminRequest.createAlias("testalias", "collection2").process(cluster.getSolrClient());
    // search for alias
    SolrQuery query = new SolrQuery("*:*");
    query.set("collection", "testalias");
    res = cluster.getSolrClient().query(query);
    assertEquals(2, res.getResults().getNumFound());
    // set alias to two collections
    CollectionAdminRequest.createAlias("testalias", "collection1,collection2").process(cluster.getSolrClient());
    query = new SolrQuery("*:*");
    query.set("collection", "testalias");
    res = cluster.getSolrClient().query(query);
    assertEquals(5, res.getResults().getNumFound());
    // try a std client
    // search 1 and 2, but have no collections param
    query = new SolrQuery("*:*");
    try (HttpSolrClient client = getHttpSolrClient(jetty.getBaseUrl().toString() + "/testalias")) {
        res = client.query(query);
        assertEquals(5, res.getResults().getNumFound());
    }
    CollectionAdminRequest.createAlias("testalias", "collection2").process(cluster.getSolrClient());
    // a second alias
    CollectionAdminRequest.createAlias("testalias2", "collection2").process(cluster.getSolrClient());
    try (HttpSolrClient client = getHttpSolrClient(jetty.getBaseUrl().toString() + "/testalias")) {
        new UpdateRequest().add("id", "11", "a_t", "humpty dumpy4 sat on a walls").commit(cluster.getSolrClient(), "testalias");
        res = client.query(query);
        assertEquals(3, res.getResults().getNumFound());
    }
    CollectionAdminRequest.createAlias("testalias", "collection2,collection1").process(cluster.getSolrClient());
    query = new SolrQuery("*:*");
    query.set("collection", "testalias");
    res = cluster.getSolrClient().query(query);
    assertEquals(6, res.getResults().getNumFound());
    CollectionAdminRequest.deleteAlias("testalias").process(cluster.getSolrClient());
    CollectionAdminRequest.deleteAlias("testalias2").process(cluster.getSolrClient());
    SolrException e = expectThrows(SolrException.class, () -> {
        SolrQuery q = new SolrQuery("*:*");
        q.set("collection", "testalias");
        cluster.getSolrClient().query(q);
    });
    assertTrue("Unexpected exception message: " + e.getMessage(), e.getMessage().contains("Collection not found: testalias"));
}
Also used : HttpSolrClient(org.apache.solr.client.solrj.impl.HttpSolrClient) UpdateRequest(org.apache.solr.client.solrj.request.UpdateRequest) JettySolrRunner(org.apache.solr.client.solrj.embedded.JettySolrRunner) QueryResponse(org.apache.solr.client.solrj.response.QueryResponse) SolrQuery(org.apache.solr.client.solrj.SolrQuery) SolrException(org.apache.solr.common.SolrException) CloudSolrClient(org.apache.solr.client.solrj.impl.CloudSolrClient) Test(org.junit.Test)

Aggregations

CloudSolrClient (org.apache.solr.client.solrj.impl.CloudSolrClient)140 Test (org.junit.Test)52 ArrayList (java.util.ArrayList)40 SolrQuery (org.apache.solr.client.solrj.SolrQuery)30 HashMap (java.util.HashMap)26 QueryResponse (org.apache.solr.client.solrj.response.QueryResponse)25 SolrInputDocument (org.apache.solr.common.SolrInputDocument)25 CollectionAdminRequest (org.apache.solr.client.solrj.request.CollectionAdminRequest)24 Slice (org.apache.solr.common.cloud.Slice)24 JettySolrRunner (org.apache.solr.client.solrj.embedded.JettySolrRunner)22 List (java.util.List)21 ZkStateReader (org.apache.solr.common.cloud.ZkStateReader)21 Map (java.util.Map)20 ModifiableSolrParams (org.apache.solr.common.params.ModifiableSolrParams)20 QueryRequest (org.apache.solr.client.solrj.request.QueryRequest)19 NamedList (org.apache.solr.common.util.NamedList)18 UpdateRequest (org.apache.solr.client.solrj.request.UpdateRequest)17 Replica (org.apache.solr.common.cloud.Replica)17 SolrRequest (org.apache.solr.client.solrj.SolrRequest)15 DocCollection (org.apache.solr.common.cloud.DocCollection)15