Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.apache.solr.cloud;
  
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 import java.io.File;
 import java.util.Map;
 
 
 public abstract class AbstractDistribZkTestBase extends BaseDistributedSearchTestCase {
   
   protected static final String DEFAULT_COLLECTION = "collection1";
   private static final boolean DEBUG = false;
   protected ZkTestServer zkServer;
   private AtomicInteger homeCount = new AtomicInteger();
 
   public static void beforeThisClass() throws Exception {
     // Only For Manual Testing: this will force an fs based dir factory
     //useFactory(null);
   }
 
 
   @Before
   @Override
   public void setUp() throws Exception {
     super.setUp();
     createTempDir();
     
     String zkDir = .getAbsolutePath() + .
     + "zookeeper/server1/data";
      = new ZkTestServer(zkDir);
     .run();
     
     System.setProperty("zkHost".getZkAddress());
     System.setProperty("enable.update.log""true");
     System.setProperty("remove.version.field""true");
 
     String schema = getSchemaFile();
     if (schema == nullschema = "schema.xml";
     AbstractZkTestCase.buildZooKeeper(.getZkHost(), .getZkAddress(), getCloudSolrConfig(), schema);
 
     // set some system properties for use by tests
     System.setProperty("solr.test.sys.prop1""propone");
     System.setProperty("solr.test.sys.prop2""proptwo");
   }
   
   protected String getCloudSolrConfig() {
     return "solrconfig-tlog.xml";
   }
   
   @Override
   protected void createServers(int numShardsthrows Exception {
     // give everyone there own solrhome
     File controlHome = new File(new File(getSolrHome()).getParentFile(), "control" + .incrementAndGet());
     FileUtils.copyDirectory(new File(getSolrHome()), controlHome);
     setupJettySolrHome(controlHome);
     
     System.setProperty("collection""control_collection");
     String numShardsS = System.getProperty(.);
      = createJetty(controlHomenull);      // let the shardId default to shard1
     System.clearProperty("collection");
     if(numShardsS != null) {
       System.setProperty(.numShardsS);
     } else {
     }
 
    StringBuilder sb = new StringBuilder();
    for (int i = 1; i <= numShardsi++) {
      if (sb.length() > 0) sb.append(',');
      // give everyone there own solrhome
      File jettyHome = new File(new File(getSolrHome()).getParentFile(), "jetty" + .incrementAndGet());
      setupJettySolrHome(jettyHome);
      JettySolrRunner j = createJetty(jettyHomenull"shard" + (i + 2));
      .add(j);
      sb.append("127.0.0.1:").append(j.getLocalPort()).append();
    }
     = sb.toString();
    
    // now wait till we see the leader for each shard
    for (int i = 1; i <= numShardsi++) {
      ZkStateReader zkStateReader = ((SolrDispatchFilter.get(0)
          .getZkStateReader();
      zkStateReader.getLeaderRetry("collection1""shard" + (i + 2), 15000);
    }
  }
  
  protected void waitForRecoveriesToFinish(String collectionZkStateReader zkStateReaderboolean verbose)
      throws Exception {
    waitForRecoveriesToFinish(collectionzkStateReaderverbosetrue);
  }
  
  protected void waitForRecoveriesToFinish(String collectionZkStateReader zkStateReaderboolean verboseboolean failOnTimeout)
      throws Exception {
    waitForRecoveriesToFinish(collectionzkStateReaderverbosefailOnTimeout, 330);
  }
  
  protected void waitForRecoveriesToFinish(String collection,
      ZkStateReader zkStateReaderboolean verboseboolean failOnTimeoutint timeoutSeconds)
      throws Exception {
    .info("Wait for recoveries to finish - collection: " + collection + " failOnTimeout:" + failOnTimeout + " timeout (sec):" + timeoutSeconds);
    boolean cont = true;
    int cnt = 0;
    
    while (cont) {
      if (verbose..println("-");
      boolean sawLiveRecovering = false;
      zkStateReader.updateClusterState(true);
      ClusterState clusterState = zkStateReader.getClusterState();
      Map<String,Sliceslices = clusterState.getSlicesMap(collection);
      assertNotNull("Could not find collection:" + collectionslices);
      for (Map.Entry<String,Sliceentry : slices.entrySet()) {
        Map<String,Replicashards = entry.getValue().getReplicasMap();
        for (Map.Entry<String,Replicashard : shards.entrySet()) {
          if (verbose..println("rstate:"
              + shard.getValue().getStr(.)
              + " live:"
              + clusterState.liveNodesContain(shard.getValue().getNodeName()));
          String state = shard.getValue().getStr(.);
          if ((state.equals(.) || state
              .equals(.) || state.equals(.))
              && clusterState.liveNodesContain(shard.getValue().getStr(
              .))) {
            sawLiveRecovering = true;
          }
        }
      }
      if (!sawLiveRecovering || cnt == timeoutSeconds) {
        if (!sawLiveRecovering) {
          if (verbose..println("no one is recoverying");
        } else {
          if (verbose..println("Gave up waiting for recovery to finish..");
          if (failOnTimeout) {
            Diagnostics.logThreadDumps("Gave up waiting for recovery to finish.  THREAD DUMP:");
            printLayout();
            fail("There are still nodes recoverying - waited for " + timeoutSeconds + " seconds");
            // won't get here
            return;
          }
        }
        cont = false;
      } else {
        Thread.sleep(1000);
      }
      cnt++;
    }
    .info("Recoveries finished - collection: " + collection);
  }
  protected void assertAllActive(String collection,ZkStateReader zkStateReader)
      throws KeeperExceptionInterruptedException {
      zkStateReader.updateClusterState(true);
      ClusterState clusterState = zkStateReader.getClusterState();
      Map<String,Sliceslices = clusterState.getSlicesMap(collection);
      if (slices == null) {
        throw new IllegalArgumentException("Cannot find collection:" + collection);
      }
      for (Map.Entry<String,Sliceentry : slices.entrySet()) {
        Map<String,Replicashards = entry.getValue().getReplicasMap();
        for (Map.Entry<String,Replicashard : shards.entrySet()) {
          String state = shard.getValue().getStr(.);
          if (!state.equals(.)) {
            fail("Not all shards are ACTIVE - found a shard that is: " + state);
          }
        }
      }
  }
  
  public void tearDown() throws Exception {
    if () {
      printLayout();
    }
    System.clearProperty("zkHost");
    System.clearProperty("collection");
    System.clearProperty("enable.update.log");
    System.clearProperty("remove.version.field");
    System.clearProperty("solr.directoryFactory");
    System.clearProperty("solr.test.sys.prop1");
    System.clearProperty("solr.test.sys.prop2");
    super.tearDown();
  }
  
  protected void printLayout() throws Exception {
    zkClient.printLayoutToStdOut();
    zkClient.close();
  }
New to GrepCode? Check out our FAQ X