The change had no functional impact, hence left it alone.

But happy to follow whatever is the existing practice. Should I have one
for every change?

On Wed, Mar 4, 2015 at 8:29 PM, Alan Woodward <[email protected]> wrote:

> Hi Ram, I think you missed a CHANGES.txt entry on this one?
>
> Alan Woodward
> www.flax.co.uk
>
>
> On 4 Mar 2015, at 19:45, [email protected] wrote:
>
> Author: andyetitmoves
> Date: Wed Mar  4 19:45:09 2015
> New Revision: 1664126
>
> URL: http://svn.apache.org/r1664126
> Log:
> SOLR-6804: Untangle SnapPuller and ReplicationHandler
>
> This closes #110
>
> Added:
>
>    
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
>      - copied, changed from r1663969,
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
> Removed:
>
>    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
> Modified:
>    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
>
>    
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
>
>    
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapShooter.java
>    lucene/dev/trunk/solr/core/src/test-files/log4j.properties
>
>    
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
>
>    
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
>
>    
> lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java
>
> Modified:
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1664126&r1=1664125&r2=1664126&view=diff
>
> ==============================================================================
> --- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
> (original)
> +++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
> Wed Mar  4 19:45:09 2015
> @@ -83,9 +83,9 @@ import org.apache.solr.common.util.IOUti
> import org.apache.solr.common.util.NamedList;
> import org.apache.solr.common.util.SimpleOrderedMap;
> import org.apache.solr.core.DirectoryFactory.DirContext;
> +import org.apache.solr.handler.IndexFetcher;
> import org.apache.solr.handler.ReplicationHandler;
> import org.apache.solr.handler.RequestHandlerBase;
> -import org.apache.solr.handler.SnapPuller;
> import org.apache.solr.handler.admin.ShowFileRequestHandler;
> import org.apache.solr.handler.component.DebugComponent;
> import org.apache.solr.handler.component.ExpandComponent;
> @@ -291,7 +291,7 @@ public final class SolrCore implements S
>       dir = getDirectoryFactory().get(getDataDir(), DirContext.META_DATA,
> getSolrConfig().indexConfig.lockType);
>       IndexInput input;
>       try {
> -        input = dir.openInput(SnapPuller.INDEX_PROPERTIES,
> IOContext.DEFAULT);
> +        input = dir.openInput(IndexFetcher.INDEX_PROPERTIES,
> IOContext.DEFAULT);
>       } catch (FileNotFoundException | NoSuchFileException e) {
>         input = null;
>       }
> @@ -307,7 +307,7 @@ public final class SolrCore implements S
>           }
>
>         } catch (Exception e) {
> -          log.error("Unable to load " + SnapPuller.INDEX_PROPERTIES, e);
> +          log.error("Unable to load " + IndexFetcher.INDEX_PROPERTIES, e);
>         } finally {
>           IOUtils.closeQuietly(is);
>         }
>
> Copied:
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
> (from r1663969,
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapPuller.java)
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java?p2=lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java&p1=lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapPuller.java&r1=1663969&r2=1664126&rev=1664126&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapPuller.java
> (original)
> +++
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
> Wed Mar  4 19:45:09 2015
> @@ -67,11 +67,7 @@ import java.util.concurrent.ExecutionExc
> import java.util.concurrent.ExecutorService;
> import java.util.concurrent.Executors;
> import java.util.concurrent.Future;
> -import java.util.concurrent.ScheduledExecutorService;
> import java.util.concurrent.TimeUnit;
> -import java.util.concurrent.atomic.AtomicBoolean;
> -import java.util.regex.Matcher;
> -import java.util.regex.Pattern;
> import java.util.zip.Adler32;
> import java.util.zip.Checksum;
> import java.util.zip.InflaterInputStream;
> @@ -94,7 +90,6 @@ import org.apache.solr.common.SolrExcept
> import org.apache.solr.common.SolrException.ErrorCode;
> import org.apache.solr.common.params.CommonParams;
> import org.apache.solr.common.params.ModifiableSolrParams;
> -import org.apache.solr.common.util.ExecutorUtil;
> import org.apache.solr.common.util.FastInputStream;
> import org.apache.solr.common.util.NamedList;
> import org.apache.solr.core.DirectoryFactory;
> @@ -121,24 +116,16 @@ import org.slf4j.LoggerFactory;
>  *
>  * @since solr 1.4
>  */
> -public class SnapPuller {
> +public class IndexFetcher {
>   private static final int _100K = 100000;
>
>   public static final String INDEX_PROPERTIES = "index.properties";
>
> -  private static final Logger LOG =
> LoggerFactory.getLogger(SnapPuller.class.getName());
> +  private static final Logger LOG =
> LoggerFactory.getLogger(IndexFetcher.class.getName());
>
>   private final String masterUrl;
>
> -  private final ReplicationHandler replicationHandler;
> -
> -  private final Integer pollInterval;
> -
> -  private String pollIntervalStr;
> -
> -  private ScheduledExecutorService executorService;
> -
> -  private volatile long executorStartTime;
> +  final ReplicationHandler replicationHandler;
>
>   private volatile long replicationStartTime;
>
> @@ -166,11 +153,6 @@ public class SnapPuller {
>
>   private boolean useExternal = false;
>
> -  /**
> -   * Disable the timer task for polling
> -   */
> -  private AtomicBoolean pollDisabled = new AtomicBoolean(false);
> -
>   private final HttpClient myHttpClient;
>
>   private static HttpClient createHttpClient(SolrCore core, String
> connTimeout, String readTimeout, String httpBasicAuthUser, String
> httpBasicAuthPassword, boolean useCompression) {
> @@ -184,7 +166,7 @@ public class SnapPuller {
>     return HttpClientUtil.createClient(httpClientParams,
> core.getCoreDescriptor().getCoreContainer().getUpdateShardHandler().getConnectionManager());
>   }
>
> -  public SnapPuller(final NamedList initArgs, final ReplicationHandler
> handler, final SolrCore sc) {
> +  public IndexFetcher(final NamedList initArgs, final ReplicationHandler
> handler, final SolrCore sc) {
>     solrCore = sc;
>     String masterUrl = (String) initArgs.get(MASTER_URL);
>     if (masterUrl == null)
> @@ -197,8 +179,6 @@ public class SnapPuller {
>     this.masterUrl = masterUrl;
>
>     this.replicationHandler = handler;
> -    pollIntervalStr = (String) initArgs.get(POLL_INTERVAL);
> -    pollInterval = readInterval(pollIntervalStr);
>     String compress = (String) initArgs.get(COMPRESSION);
>     useInternal = INTERNAL.equals(compress);
>     useExternal = EXTERNAL.equals(compress);
> @@ -207,35 +187,6 @@ public class SnapPuller {
>     String httpBasicAuthUser = (String)
> initArgs.get(HttpClientUtil.PROP_BASIC_AUTH_USER);
>     String httpBasicAuthPassword = (String)
> initArgs.get(HttpClientUtil.PROP_BASIC_AUTH_PASS);
>     myHttpClient = createHttpClient(solrCore, connTimeout, readTimeout,
> httpBasicAuthUser, httpBasicAuthPassword, useExternal);
> -    if (pollInterval != null && pollInterval > 0) {
> -      startExecutorService();
> -    } else {
> -      LOG.info(" No value set for 'pollInterval'. Timer Task not
> started.");
> -    }
> -  }
> -
> -  private void startExecutorService() {
> -    Runnable task = new Runnable() {
> -      @Override
> -      public void run() {
> -        if (pollDisabled.get()) {
> -          LOG.info("Poll disabled");
> -          return;
> -        }
> -        try {
> -          LOG.debug("Polling for index modifications");
> -          executorStartTime = System.currentTimeMillis();
> -          replicationHandler.doFetch(null, false);
> -        } catch (Exception e) {
> -          LOG.error("Exception in fetching index", e);
> -        }
> -      }
> -    };
> -    executorService = Executors.newSingleThreadScheduledExecutor(
> -        new DefaultSolrThreadFactory("snapPuller"));
> -    long initialDelay = pollInterval - (System.currentTimeMillis() %
> pollInterval);
> -    executorService.scheduleAtFixedRate(task, initialDelay, pollInterval,
> TimeUnit.MILLISECONDS);
> -    LOG.info("Poll Scheduled at an interval of " + pollInterval + "ms");
>   }
>
>   /**
> @@ -427,13 +378,13 @@ public class SnapPuller {
>               Thread.sleep(1000);
>               c++;
>               if (c >= 30)  {
> -                LOG.warn("SnapPuller unable to cleanup unused lucene
> index files so we must do a full copy instead");
> +                LOG.warn("IndexFetcher unable to cleanup unused lucene
> index files so we must do a full copy instead");
>                 isFullCopyNeeded = true;
>                 break;
>               }
>             }
>             if (c > 0)  {
> -              LOG.info("SnapPuller slept for " + (c * 1000) + "ms for
> unused lucene index files to be delete-able");
> +              LOG.info("IndexFetcher slept for " + (c * 1000) + "ms for
> unused lucene index files to be delete-able");
>             }
>           } finally {
>             writer.decref();
> @@ -634,7 +585,7 @@ public class SnapPuller {
>         props.setProperty(TIMES_CONFIG_REPLICATED,
> String.valueOf(confFilesCount));
>       }
>
> -      props.setProperty(LAST_CYCLE_BYTES_DOWNLOADED,
> String.valueOf(getTotalBytesDownloaded(this)));
> +      props.setProperty(LAST_CYCLE_BYTES_DOWNLOADED,
> String.valueOf(getTotalBytesDownloaded()));
>       if (!successfulInstall) {
>         int numFailures = 1;
>         if (props.containsKey(TIMES_FAILED)) {
> @@ -663,20 +614,20 @@ public class SnapPuller {
>     }
>   }
>
> -  static long getTotalBytesDownloaded(SnapPuller snappuller) {
> +  long getTotalBytesDownloaded() {
>     long bytesDownloaded = 0;
>     //get size from list of files to download
> -    for (Map<String, Object> file : snappuller.getFilesDownloaded()) {
> +    for (Map<String, Object> file : getFilesDownloaded()) {
>       bytesDownloaded += (Long) file.get(SIZE);
>     }
>
>     //get size from list of conf files to download
> -    for (Map<String, Object> file : snappuller.getConfFilesDownloaded()) {
> +    for (Map<String, Object> file : getConfFilesDownloaded()) {
>       bytesDownloaded += (Long) file.get(SIZE);
>     }
>
>     //get size from current file being downloaded
> -    Map<String, Object> currentFile = snappuller.getCurrentFile();
> +    Map<String, Object> currentFile = getCurrentFile();
>     if (currentFile != null) {
>       if (currentFile.containsKey("bytesDownloaded")) {
>         bytesDownloaded += (Long) currentFile.get("bytesDownloaded");
> @@ -1053,33 +1004,33 @@ public class SnapPuller {
>     Directory dir = null;
>     try {
>       dir = solrCore.getDirectoryFactory().get(solrCore.getDataDir(),
> DirContext.META_DATA, solrCore.getSolrConfig().indexConfig.lockType);
> -      if (slowFileExists(dir, SnapPuller.INDEX_PROPERTIES)){
> -        final IndexInput input =
> dir.openInput(SnapPuller.INDEX_PROPERTIES,
> DirectoryFactory.IOCONTEXT_NO_CACHE);
> +      if (slowFileExists(dir, IndexFetcher.INDEX_PROPERTIES)){
> +        final IndexInput input =
> dir.openInput(IndexFetcher.INDEX_PROPERTIES,
> DirectoryFactory.IOCONTEXT_NO_CACHE);
>
>         final InputStream is = new PropertiesInputStream(input);
>         try {
>           p.load(new InputStreamReader(is, StandardCharsets.UTF_8));
>         } catch (Exception e) {
> -          LOG.error("Unable to load " + SnapPuller.INDEX_PROPERTIES, e);
> +          LOG.error("Unable to load " + IndexFetcher.INDEX_PROPERTIES, e);
>         } finally {
>           IOUtils.closeQuietly(is);
>         }
>       }
>       try {
> -        dir.deleteFile(SnapPuller.INDEX_PROPERTIES);
> +        dir.deleteFile(IndexFetcher.INDEX_PROPERTIES);
>       } catch (IOException e) {
>         // no problem
>       }
> -      final IndexOutput out =
> dir.createOutput(SnapPuller.INDEX_PROPERTIES,
> DirectoryFactory.IOCONTEXT_NO_CACHE);
> +      final IndexOutput out =
> dir.createOutput(IndexFetcher.INDEX_PROPERTIES,
> DirectoryFactory.IOCONTEXT_NO_CACHE);
>       p.put("index", tmpIdxDirName);
>       Writer os = null;
>       try {
>         os = new OutputStreamWriter(new PropertiesOutputStream(out),
> StandardCharsets.UTF_8);
> -        p.store(os, SnapPuller.INDEX_PROPERTIES);
> +        p.store(os, IndexFetcher.INDEX_PROPERTIES);
>         dir.sync(Collections.singleton(INDEX_PROPERTIES));
>       } catch (Exception e) {
>         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
> -            "Unable to write " + SnapPuller.INDEX_PROPERTIES, e);
> +            "Unable to write " + IndexFetcher.INDEX_PROPERTIES, e);
>       } finally {
>         IOUtils.closeQuietly(os);
>       }
> @@ -1161,25 +1112,9 @@ public class SnapPuller {
>   }
>
>   /**
> -   * Disable periodic polling
> -   */
> -  void disablePoll() {
> -    pollDisabled.set(true);
> -    LOG.info("inside disable poll, value of pollDisabled = " +
> pollDisabled);
> -  }
> -
> -  /**
> -   * Enable periodic polling
> -   */
> -  void enablePoll() {
> -    pollDisabled.set(false);
> -    LOG.info("inside enable poll, value of pollDisabled = " +
> pollDisabled);
> -  }
> -
> -  /**
> -   * Stops the ongoing pull
> +   * Stops the ongoing fetch
>    */
> -  void abortPull() {
> +  void abortFetch() {
>     stop = true;
>   }
>
> @@ -1187,6 +1122,13 @@ public class SnapPuller {
>     return replicationStartTime;
>   }
>
> +  long getReplicationTimeElapsed() {
> +    long timeElapsed = 0;
> +    if (getReplicationStartTime() > 0)
> +      timeElapsed = TimeUnit.SECONDS.convert(System.currentTimeMillis() -
> getReplicationStartTime(), TimeUnit.MILLISECONDS);
> +    return timeElapsed;
> +  }
> +
>   List<Map<String, Object>> getConfFilesToDownload() {
>     //make a copy first because it can be null later
>     List<Map<String, Object>> tmp = confFilesToDownload;
> @@ -1224,17 +1166,6 @@ public class SnapPuller {
>     return tmp;
>   }
>
> -  boolean isPollingDisabled() {
> -    return pollDisabled.get();
> -  }
> -
> -  Long getNextScheduledExecTime() {
> -    Long nextTime = null;
> -    if (executorStartTime > 0)
> -      nextTime = executorStartTime + pollInterval;
> -    return nextTime;
> -  }
> -
>   private static class ReplicationHandlerException extends
> InterruptedException {
>     public ReplicationHandlerException(String message) {
>       super(message);
> @@ -1586,55 +1517,14 @@ public class SnapPuller {
>     }
>   }
>
> -  static Integer readInterval(String interval) {
> -    if (interval == null)
> -      return null;
> -    int result = 0;
> -    Matcher m = INTERVAL_PATTERN.matcher(interval.trim());
> -    if (m.find()) {
> -      String hr = m.group(1);
> -      String min = m.group(2);
> -      String sec = m.group(3);
> -      result = 0;
> -      try {
> -        if (sec != null && sec.length() > 0)
> -          result += Integer.parseInt(sec);
> -        if (min != null && min.length() > 0)
> -          result += (60 * Integer.parseInt(min));
> -        if (hr != null && hr.length() > 0)
> -          result += (60 * 60 * Integer.parseInt(hr));
> -        result *= 1000;
> -      } catch (NumberFormatException e) {
> -        throw new SolrException(ErrorCode.SERVER_ERROR, INTERVAL_ERR_MSG);
> -      }
> -    } else {
> -      throw new SolrException(ErrorCode.SERVER_ERROR, INTERVAL_ERR_MSG);
> -    }
> -
> -    return result;
> -  }
> -
>   public void destroy() {
> -    try {
> -      if (executorService != null) executorService.shutdown();
> -    } finally {
> -      try {
> -        abortPull();
> -      } finally {
> -        if (executorService != null) ExecutorUtil
> -            .shutdownNowAndAwaitTermination(executorService);
> -      }
> -    }
> +    abortFetch();
>   }
>
>   String getMasterUrl() {
>     return masterUrl;
>   }
>
> -  String getPollInterval() {
> -    return pollIntervalStr;
> -  }
> -
>   private static final int MAX_RETRIES = 5;
>
>   private static final int NO_CONTENT = 1;
> @@ -1643,12 +1533,6 @@ public class SnapPuller {
>
>   public static final String REPLICATION_PROPERTIES =
> "replication.properties";
>
> -  public static final String POLL_INTERVAL = "pollInterval";
> -
> -  public static final String INTERVAL_ERR_MSG = "The " + POLL_INTERVAL +
> " must be in this format 'HH:mm:ss'";
> -
> -  private static final Pattern INTERVAL_PATTERN = Pattern.compile("(\\d*?
> ):(\\d*?):(\\d*)");
> -
>   static final String INDEX_REPLICATED_AT = "indexReplicatedAt";
>
>   static final String TIMES_INDEX_REPLICATED = "timesIndexReplicated";
>
> Modified:
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=1664126&r1=1664125&r2=1664126&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
> (original)
> +++
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
> Wed Mar  4 19:45:09 2015
> @@ -36,9 +36,13 @@ import java.util.HashMap;
> import java.util.List;
> import java.util.Map;
> import java.util.Properties;
> +import java.util.concurrent.Executors;
> +import java.util.concurrent.ScheduledExecutorService;
> import java.util.concurrent.TimeUnit;
> import java.util.concurrent.atomic.AtomicBoolean;
> import java.util.concurrent.locks.ReentrantLock;
> +import java.util.regex.Matcher;
> +import java.util.regex.Pattern;
> import java.util.zip.Adler32;
> import java.util.zip.Checksum;
> import java.util.zip.DeflaterOutputStream;
> @@ -60,6 +64,7 @@ import org.apache.solr.common.SolrExcept
> import org.apache.solr.common.params.CommonParams;
> import org.apache.solr.common.params.ModifiableSolrParams;
> import org.apache.solr.common.params.SolrParams;
> +import org.apache.solr.common.util.ExecutorUtil;
> import org.apache.solr.common.util.FastOutputStream;
> import org.apache.solr.common.util.NamedList;
> import org.apache.solr.common.util.SimpleOrderedMap;
> @@ -75,6 +80,7 @@ import org.apache.solr.request.SolrQuery
> import org.apache.solr.response.SolrQueryResponse;
> import org.apache.solr.search.SolrIndexSearcher;
> import org.apache.solr.update.SolrIndexWriter;
> +import org.apache.solr.util.DefaultSolrThreadFactory;
> import org.apache.solr.util.NumberUtils;
> import org.apache.solr.util.PropertiesInputStream;
> import org.apache.solr.util.RefCounted;
> @@ -90,8 +96,8 @@ import org.slf4j.LoggerFactory;
>  * file (command=filecontent&amp;file=&lt;FILE_NAME&gt;) You can
> optionally specify an offset and length to get that
>  * chunk of the file. You can request a configuration file by using "cf"
> parameter instead of the "file" parameter.</li>
>  * <li>Get status/statistics (command=details)</li> </ol> <p>When running
> on the slave, it provides the following
> - * commands <ol> <li>Perform a snap pull now (command=snappull)</li>
> <li>Get status/statistics (command=details)</li>
> - * <li>Abort a snap pull (command=abort)</li> <li>Enable/Disable polling
> the master for new versions (command=enablepoll
> + * commands <ol> <li>Perform an index fetch now (command=snappull)</li>
> <li>Get status/statistics (command=details)</li>
> + * <li>Abort an index fetch (command=abort)</li> <li>Enable/Disable
> polling the master for new versions (command=enablepoll
>  * or command=disablepoll)</li> </ol>
>  *
>  *
> @@ -134,9 +140,9 @@ public class ReplicationHandler extends
>     }
>   }
>
> -  private SnapPuller snapPuller;
> +  private IndexFetcher pollingIndexFetcher;
>
> -  private ReentrantLock snapPullLock = new ReentrantLock();
> +  private ReentrantLock indexFetchLock = new ReentrantLock();
>
>   private String includeConfFiles;
>
> @@ -151,14 +157,18 @@ public class ReplicationHandler extends
>   private boolean replicateOnCommit = false;
>
>   private boolean replicateOnStart = false;
> -
> +
> +  private ScheduledExecutorService executorService;
> +
> +  private volatile long executorStartTime;
> +
>   private int numberBackupsToKeep = 0; //zero: do not delete old backups
>
>   private int numTimesReplicated = 0;
>
>   private final Map<String, FileInfo> confFileInfoCache = new HashMap<>();
>
> -  private Integer reserveCommitDuration =
> SnapPuller.readInterval("00:00:10");
> +  private Integer reserveCommitDuration = readInterval("00:00:10");
>
>   volatile IndexCommit indexCommitPoint;
>
> @@ -166,6 +176,19 @@ public class ReplicationHandler extends
>
>   private AtomicBoolean replicationEnabled = new AtomicBoolean(true);
>
> +  private Integer pollInterval;
> +
> +  private String pollIntervalStr;
> +
> +  /**
> +   * Disable the timer task for polling
> +   */
> +  private AtomicBoolean pollDisabled = new AtomicBoolean(false);
> +
> +  String getPollInterval() {
> +    return pollIntervalStr;
> +  }
> +
>   @Override
>   public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse
> rsp) throws Exception {
>     rsp.setHttpCaching(false);
> @@ -221,38 +244,38 @@ public class ReplicationHandler extends
>         return;
>       }
>       final SolrParams paramsCopy = new ModifiableSolrParams(solrParams);
> -      Thread puller = new Thread("explicit-fetchindex-cmd") {
> +      Thread fetchThread = new Thread("explicit-fetchindex-cmd") {
>         @Override
>         public void run() {
>           doFetch(paramsCopy, false);
>         }
>       };
> -      puller.setDaemon(false);
> -      puller.start();
> +      fetchThread.setDaemon(false);
> +      fetchThread.start();
>       if (solrParams.getBool(WAIT, false)) {
> -        puller.join();
> +        fetchThread.join();
>       }
>       rsp.add(STATUS, OK_STATUS);
>     } else if (command.equalsIgnoreCase(CMD_DISABLE_POLL)) {
> -      if (snapPuller != null){
> -        snapPuller.disablePoll();
> +      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 (snapPuller != null){
> -        snapPuller.enablePoll();
> +      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)) {
> -      SnapPuller temp = tempSnapPuller;
> -      if (temp != null){
> -        temp.abortPull();
> +      IndexFetcher fetcher = currentIndexFetcher;
> +      if (fetcher != null){
> +        fetcher.abortFetch();
>         rsp.add(STATUS, OK_STATUS);
>       } else {
>         rsp.add(STATUS,ERR_STATUS);
> @@ -321,38 +344,35 @@ public class ReplicationHandler extends
>     return null;
>   }
>
> -  private volatile SnapPuller tempSnapPuller;
> +  private volatile IndexFetcher currentIndexFetcher;
>
>   public boolean doFetch(SolrParams solrParams, boolean forceReplication) {
>     String masterUrl = solrParams == null ? null :
> solrParams.get(MASTER_URL);
> -    if (!snapPullLock.tryLock())
> +    if (!indexFetchLock.tryLock())
>       return false;
>     try {
>       if (masterUrl != null) {
> -        if (tempSnapPuller != null && tempSnapPuller != snapPuller) {
> -          tempSnapPuller.destroy();
> +        if (currentIndexFetcher != null && currentIndexFetcher !=
> pollingIndexFetcher) {
> +          currentIndexFetcher.destroy();
>         }
> -
> -        NamedList<Object> nl = solrParams.toNamedList();
> -        nl.remove(SnapPuller.POLL_INTERVAL);
> -        tempSnapPuller = new SnapPuller(nl, this, core);
> +        currentIndexFetcher = new IndexFetcher(solrParams.toNamedList(),
> this, core);
>       } else {
> -        tempSnapPuller = snapPuller;
> +        currentIndexFetcher = pollingIndexFetcher;
>       }
> -      return tempSnapPuller.fetchLatestIndex(core, forceReplication);
> +      return currentIndexFetcher.fetchLatestIndex(core, forceReplication);
>     } catch (Exception e) {
> -      SolrException.log(LOG, "SnapPull failed ", e);
> +      SolrException.log(LOG, "Index fetch failed ", e);
>     } finally {
> -      if (snapPuller != null) {
> -        tempSnapPuller = snapPuller;
> +      if (pollingIndexFetcher != null) {
> +        currentIndexFetcher = pollingIndexFetcher;
>       }
> -      snapPullLock.unlock();
> +      indexFetchLock.unlock();
>     }
>     return false;
>   }
>
>   boolean isReplicating() {
> -    return snapPullLock.isLocked();
> +    return indexFetchLock.isLocked();
>   }
>
>   private void doSnapShoot(SolrParams params, SolrQueryResponse rsp,
> @@ -390,10 +410,10 @@ public class ReplicationHandler extends
>
>   /**
>    * This method adds an Object of FileStream to the response . The
> FileStream implements a custom protocol which is
> -   * understood by SnapPuller.FileFetcher
> +   * understood by IndexFetcher.FileFetcher
>    *
> -   * @see org.apache.solr.handler.SnapPuller.LocalFsFileFetcher
> -   * @see org.apache.solr.handler.SnapPuller.DirectoryFileFetcher
> +   * @see IndexFetcher.LocalFsFileFetcher
> +   * @see IndexFetcher.DirectoryFileFetcher
>    */
>   private void getFileStream(SolrParams solrParams, SolrQueryResponse rsp)
> {
>     ModifiableSolrParams rawParams = new ModifiableSolrParams(solrParams);
> @@ -538,18 +558,28 @@ public class ReplicationHandler extends
>   }
>
>   void disablePoll() {
> -    if (isSlave)
> -      snapPuller.disablePoll();
> +    if (isSlave) {
> +      pollDisabled.set(true);
> +      LOG.info("inside disable poll, value of pollDisabled = " +
> pollDisabled);
> +    }
>   }
>
>   void enablePoll() {
> -    if (isSlave)
> -      snapPuller.enablePoll();
> +    if (isSlave) {
> +      pollDisabled.set(false);
> +      LOG.info("inside enable poll, value of pollDisabled = " +
> pollDisabled);
> +    }
>   }
>
>   boolean isPollingDisabled() {
> -    if (snapPuller == null) return true;
> -    return snapPuller.isPollingDisabled();
> +    return pollDisabled.get();
> +  }
> +
> +  Long getNextScheduledExecTime() {
> +    Long nextTime = null;
> +    if (executorStartTime > 0)
> +      nextTime = executorStartTime + pollInterval;
> +    return nextTime;
>   }
>
>   int getTimesReplicatedSinceStartup() {
> @@ -611,31 +641,31 @@ public class ReplicationHandler extends
>       list.add("isMaster", String.valueOf(isMaster));
>       list.add("isSlave", String.valueOf(isSlave));
>
> -      SnapPuller snapPuller = tempSnapPuller;
> -      if (snapPuller != null) {
> -        list.add(MASTER_URL, snapPuller.getMasterUrl());
> -        if (snapPuller.getPollInterval() != null) {
> -          list.add(SnapPuller.POLL_INTERVAL,
> snapPuller.getPollInterval());
> +      IndexFetcher fetcher = currentIndexFetcher;
> +      if (fetcher != null) {
> +        list.add(MASTER_URL, fetcher.getMasterUrl());
> +        if (getPollInterval() != null) {
> +          list.add(POLL_INTERVAL, getPollInterval());
>         }
>         list.add("isPollingDisabled", String.valueOf(isPollingDisabled()));
>         list.add("isReplicating", String.valueOf(isReplicating()));
> -        long elapsed = getTimeElapsed(snapPuller);
> -        long val = SnapPuller.getTotalBytesDownloaded(snapPuller);
> +        long elapsed = fetcher.getReplicationTimeElapsed();
> +        long val = fetcher.getTotalBytesDownloaded();
>         if (elapsed > 0) {
>           list.add("timeElapsed", elapsed);
>           list.add("bytesDownloaded", val);
>           list.add("downloadSpeed", val / elapsed);
>         }
>         Properties props = loadReplicationProperties();
> -        addVal(list, SnapPuller.PREVIOUS_CYCLE_TIME_TAKEN, props,
> Long.class);
> -        addVal(list, SnapPuller.INDEX_REPLICATED_AT, props, Date.class);
> -        addVal(list, SnapPuller.CONF_FILES_REPLICATED_AT, props,
> Date.class);
> -        addVal(list, SnapPuller.REPLICATION_FAILED_AT, props, Date.class);
> -        addVal(list, SnapPuller.TIMES_FAILED, props, Integer.class);
> -        addVal(list, SnapPuller.TIMES_INDEX_REPLICATED, props,
> Integer.class);
> -        addVal(list, SnapPuller.LAST_CYCLE_BYTES_DOWNLOADED, props,
> Long.class);
> -        addVal(list, SnapPuller.TIMES_CONFIG_REPLICATED, props,
> Integer.class);
> -        addVal(list, SnapPuller.CONF_FILES_REPLICATED, props,
> String.class);
> +        addVal(list, IndexFetcher.PREVIOUS_CYCLE_TIME_TAKEN, props,
> Long.class);
> +        addVal(list, IndexFetcher.INDEX_REPLICATED_AT, props, Date.class);
> +        addVal(list, IndexFetcher.CONF_FILES_REPLICATED_AT, props,
> Date.class);
> +        addVal(list, IndexFetcher.REPLICATION_FAILED_AT, props,
> Date.class);
> +        addVal(list, IndexFetcher.TIMES_FAILED, props, Integer.class);
> +        addVal(list, IndexFetcher.TIMES_INDEX_REPLICATED, props,
> Integer.class);
> +        addVal(list, IndexFetcher.LAST_CYCLE_BYTES_DOWNLOADED, props,
> Long.class);
> +        addVal(list, IndexFetcher.TIMES_CONFIG_REPLICATED, props,
> Integer.class);
> +        addVal(list, IndexFetcher.CONF_FILES_REPLICATED, props,
> String.class);
>       }
>       if (isMaster) {
>         if (includeConfFiles != null) list.add("confFilesToReplicate",
> includeConfFiles);
> @@ -677,12 +707,12 @@ public class ReplicationHandler extends
>       master.add("replicableGeneration", repCommitInfo.generation);
>     }
>
> -    SnapPuller snapPuller = tempSnapPuller;
> -    if (snapPuller != null) {
> +    IndexFetcher fetcher = currentIndexFetcher;
> +    if (fetcher != null) {
>       Properties props = loadReplicationProperties();
>       if (showSlaveDetails) {
>         try {
> -          NamedList nl = snapPuller.getDetails();
> +          NamedList nl = fetcher.getDetails();
>           slave.add("masterDetails", nl.get(CMD_DETAILS));
>         } catch (Exception e) {
>           LOG.warn(
> @@ -691,26 +721,26 @@ public class ReplicationHandler extends
>           slave.add(ERR_STATUS, "invalid_master");
>         }
>       }
> -      slave.add(MASTER_URL, snapPuller.getMasterUrl());
> -      if (snapPuller.getPollInterval() != null) {
> -        slave.add(SnapPuller.POLL_INTERVAL, snapPuller.getPollInterval());
> +      slave.add(MASTER_URL, fetcher.getMasterUrl());
> +      if (getPollInterval() != null) {
> +        slave.add(POLL_INTERVAL, getPollInterval());
>       }
> -      if (snapPuller.getNextScheduledExecTime() != null &&
> !isPollingDisabled()) {
> -        slave.add(NEXT_EXECUTION_AT, new
> Date(snapPuller.getNextScheduledExecTime()).toString());
> +      if (getNextScheduledExecTime() != null && !isPollingDisabled()) {
> +        slave.add(NEXT_EXECUTION_AT, new
> Date(getNextScheduledExecTime()).toString());
>       } else if (isPollingDisabled()) {
>         slave.add(NEXT_EXECUTION_AT, "Polling disabled");
>       }
> -      addVal(slave, SnapPuller.INDEX_REPLICATED_AT, props, Date.class);
> -      addVal(slave, SnapPuller.INDEX_REPLICATED_AT_LIST, props,
> List.class);
> -      addVal(slave, SnapPuller.REPLICATION_FAILED_AT_LIST, props,
> List.class);
> -      addVal(slave, SnapPuller.TIMES_INDEX_REPLICATED, props,
> Integer.class);
> -      addVal(slave, SnapPuller.CONF_FILES_REPLICATED, props,
> Integer.class);
> -      addVal(slave, SnapPuller.TIMES_CONFIG_REPLICATED, props,
> Integer.class);
> -      addVal(slave, SnapPuller.CONF_FILES_REPLICATED_AT, props,
> Integer.class);
> -      addVal(slave, SnapPuller.LAST_CYCLE_BYTES_DOWNLOADED, props,
> Long.class);
> -      addVal(slave, SnapPuller.TIMES_FAILED, props, Integer.class);
> -      addVal(slave, SnapPuller.REPLICATION_FAILED_AT, props, Date.class);
> -      addVal(slave, SnapPuller.PREVIOUS_CYCLE_TIME_TAKEN, props,
> Long.class);
> +      addVal(slave, IndexFetcher.INDEX_REPLICATED_AT, props, Date.class);
> +      addVal(slave, IndexFetcher.INDEX_REPLICATED_AT_LIST, props,
> List.class);
> +      addVal(slave, IndexFetcher.REPLICATION_FAILED_AT_LIST, props,
> List.class);
> +      addVal(slave, IndexFetcher.TIMES_INDEX_REPLICATED, props,
> Integer.class);
> +      addVal(slave, IndexFetcher.CONF_FILES_REPLICATED, props,
> Integer.class);
> +      addVal(slave, IndexFetcher.TIMES_CONFIG_REPLICATED, props,
> Integer.class);
> +      addVal(slave, IndexFetcher.CONF_FILES_REPLICATED_AT, props,
> Integer.class);
> +      addVal(slave, IndexFetcher.LAST_CYCLE_BYTES_DOWNLOADED, props,
> Long.class);
> +      addVal(slave, IndexFetcher.TIMES_FAILED, props, Integer.class);
> +      addVal(slave, IndexFetcher.REPLICATION_FAILED_AT, props,
> Date.class);
> +      addVal(slave, IndexFetcher.PREVIOUS_CYCLE_TIME_TAKEN, props,
> Long.class);
>
>       slave.add("currentDate", new Date().toString());
>       slave.add("isPollingDisabled", String.valueOf(isPollingDisabled()));
> @@ -720,13 +750,13 @@ public class ReplicationHandler extends
>         try {
>           long bytesToDownload = 0;
>           List<String> filesToDownload = new ArrayList<>();
> -          for (Map<String, Object> file :
> snapPuller.getFilesToDownload()) {
> +          for (Map<String, Object> file : fetcher.getFilesToDownload()) {
>             filesToDownload.add((String) file.get(NAME));
>             bytesToDownload += (Long) file.get(SIZE);
>           }
>
>           //get list of conf files to download
> -          for (Map<String, Object> file :
> snapPuller.getConfFilesToDownload()) {
> +          for (Map<String, Object> file :
> fetcher.getConfFilesToDownload()) {
>             filesToDownload.add((String) file.get(NAME));
>             bytesToDownload += (Long) file.get(SIZE);
>           }
> @@ -737,18 +767,18 @@ public class ReplicationHandler extends
>
>           long bytesDownloaded = 0;
>           List<String> filesDownloaded = new ArrayList<>();
> -          for (Map<String, Object> file :
> snapPuller.getFilesDownloaded()) {
> +          for (Map<String, Object> file : fetcher.getFilesDownloaded()) {
>             filesDownloaded.add((String) file.get(NAME));
>             bytesDownloaded += (Long) file.get(SIZE);
>           }
>
>           //get list of conf files downloaded
> -          for (Map<String, Object> file :
> snapPuller.getConfFilesDownloaded()) {
> +          for (Map<String, Object> file :
> fetcher.getConfFilesDownloaded()) {
>             filesDownloaded.add((String) file.get(NAME));
>             bytesDownloaded += (Long) file.get(SIZE);
>           }
>
> -          Map<String, Object> currentFile = snapPuller.getCurrentFile();
> +          Map<String, Object> currentFile = fetcher.getCurrentFile();
>           String currFile = null;
>           long currFileSize = 0, currFileSizeDownloaded = 0;
>           float percentDownloaded = 0;
> @@ -767,10 +797,10 @@ public class ReplicationHandler extends
>
>           long estimatedTimeRemaining = 0;
>
> -          if (snapPuller.getReplicationStartTime() > 0) {
> -            slave.add("replicationStartTime", new
> Date(snapPuller.getReplicationStartTime()).toString());
> +          if (fetcher.getReplicationStartTime() > 0) {
> +            slave.add("replicationStartTime", new
> Date(fetcher.getReplicationStartTime()).toString());
>           }
> -          long elapsed = getTimeElapsed(snapPuller);
> +          long elapsed = fetcher.getReplicationTimeElapsed();
>           slave.add("timeElapsed", String.valueOf(elapsed) + "s");
>
>           if (bytesDownloaded > 0)
> @@ -840,13 +870,6 @@ public class ReplicationHandler extends
>     return replicateAfter;
>   }
>
> -  private long getTimeElapsed(SnapPuller snapPuller) {
> -    long timeElapsed = 0;
> -    if (snapPuller.getReplicationStartTime() > 0)
> -      timeElapsed = TimeUnit.SECONDS.convert(System.currentTimeMillis() -
> snapPuller.getReplicationStartTime(), TimeUnit.MILLISECONDS);
> -    return timeElapsed;
> -  }
> -
>   Properties loadReplicationProperties() {
>     Directory dir = null;
>     try {
> @@ -856,7 +879,7 @@ public class ReplicationHandler extends
>         IndexInput input;
>         try {
>           input = dir.openInput(
> -            SnapPuller.REPLICATION_PROPERTIES, IOContext.DEFAULT);
> +            IndexFetcher.REPLICATION_PROPERTIES, IOContext.DEFAULT);
>         } catch (FileNotFoundException | NoSuchFileException e) {
>           return new Properties();
>         }
> @@ -887,6 +910,37 @@ public class ReplicationHandler extends
> //    }
> //  }
>
> +  private void setupPolling(String intervalStr) {
> +    pollIntervalStr = intervalStr;
> +    pollInterval = readInterval(pollIntervalStr);
> +    if (pollInterval == null || pollInterval <= 0) {
> +      LOG.info(" No value set for 'pollInterval'. Timer Task not
> started.");
> +      return;
> +    }
> +
> +    Runnable task = new Runnable() {
> +      @Override
> +      public void run() {
> +        if (pollDisabled.get()) {
> +          LOG.info("Poll disabled");
> +          return;
> +        }
> +        try {
> +          LOG.debug("Polling for index modifications");
> +          executorStartTime = System.currentTimeMillis();
> +          doFetch(null, false);
> +        } catch (Exception e) {
> +          LOG.error("Exception in fetching index", e);
> +        }
> +      }
> +    };
> +    executorService = Executors.newSingleThreadScheduledExecutor(
> +        new DefaultSolrThreadFactory("indexFetcher"));
> +    long initialDelay = pollInterval - (System.currentTimeMillis() %
> pollInterval);
> +    executorService.scheduleAtFixedRate(task, initialDelay, pollInterval,
> TimeUnit.MILLISECONDS);
> +    LOG.info("Poll Scheduled at an interval of " + pollInterval + "ms");
> +  }
> +
>   @Override
>   @SuppressWarnings("unchecked")
>   public void inform(SolrCore core) {
> @@ -901,7 +955,8 @@ public class ReplicationHandler extends
>     NamedList slave = (NamedList) initArgs.get("slave");
>     boolean enableSlave = isEnabled( slave );
>     if (enableSlave) {
> -      tempSnapPuller = snapPuller = new SnapPuller(slave, this, core);
> +      currentIndexFetcher = pollingIndexFetcher = new IndexFetcher(slave,
> this, core);
> +      setupPolling((String) slave.get(POLL_INTERVAL));
>       isSlave = true;
>     }
>     NamedList master = (NamedList) initArgs.get("master");
> @@ -1005,7 +1060,7 @@ public class ReplicationHandler extends
>       }
>       String reserve = (String) master.get(RESERVE);
>       if (reserve != null && !reserve.trim().equals("")) {
> -        reserveCommitDuration = SnapPuller.readInterval(reserve);
> +        reserveCommitDuration = readInterval(reserve);
>       }
>       LOG.info("Commits will be reserved for  " + reserveCommitDuration);
>       isMaster = true;
> @@ -1029,11 +1084,20 @@ public class ReplicationHandler extends
>     core.addCloseHook(new CloseHook() {
>       @Override
>       public void preClose(SolrCore core) {
> -        if (snapPuller != null) {
> -          snapPuller.destroy();
> +        try {
> +          if (executorService != null) executorService.shutdown();
> +        } finally {
> +          try {
> +            if (pollingIndexFetcher != null) {
> +              pollingIndexFetcher.destroy();
> +            }
> +          } finally {
> +            if (executorService != null) ExecutorUtil
> +                .shutdownNowAndAwaitTermination(executorService);
> +          }
>         }
> -        if (tempSnapPuller != null && tempSnapPuller != snapPuller) {
> -          tempSnapPuller.destroy();
> +        if (currentIndexFetcher != null && currentIndexFetcher !=
> pollingIndexFetcher) {
> +          currentIndexFetcher.destroy();
>         }
>       }
>
> @@ -1307,8 +1371,40 @@ public class ReplicationHandler extends
>         releaseCommitPointAndExtendReserve();
>       }
>     }
> -  }
> -
> +  }
> +
> +  static Integer readInterval(String interval) {
> +    if (interval == null)
> +      return null;
> +    int result = 0;
> +    if (interval != null) {
> +      Matcher m = INTERVAL_PATTERN.matcher(interval.trim());
> +      if (m.find()) {
> +        String hr = m.group(1);
> +        String min = m.group(2);
> +        String sec = m.group(3);
> +        result = 0;
> +        try {
> +          if (sec != null && sec.length() > 0)
> +            result += Integer.parseInt(sec);
> +          if (min != null && min.length() > 0)
> +            result += (60 * Integer.parseInt(min));
> +          if (hr != null && hr.length() > 0)
> +            result += (60 * 60 * Integer.parseInt(hr));
> +          result *= 1000;
> +        } catch (NumberFormatException e) {
> +          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
> +              INTERVAL_ERR_MSG);
> +        }
> +      } else {
> +        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
> +            INTERVAL_ERR_MSG);
> +      }
> +
> +    }
> +    return result;
> +  }
> +
>   public static final String MASTER_URL = "masterUrl";
>
>   public static final String STATUS = "status";
> @@ -1369,6 +1465,12 @@ public class ReplicationHandler extends
>
>   public static final String FILE_STREAM = "filestream";
>
> +  public static final String POLL_INTERVAL = "pollInterval";
> +
> +  public static final String INTERVAL_ERR_MSG = "The " + POLL_INTERVAL +
> " must be in this format 'HH:mm:ss'";
> +
> +  private static final Pattern INTERVAL_PATTERN = Pattern.compile("(\\d*?
> ):(\\d*?):(\\d*)");
> +
>   public static final int PACKET_SZ = 1024 * 1024; // 1MB
>
>   public static final String RESERVE = "commitReserveDuration";
>
> Modified:
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapShooter.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapShooter.java?rev=1664126&r1=1664125&r2=1664126&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapShooter.java
> (original)
> +++
> lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/SnapShooter.java
> Wed Mar  4 19:45:09 2015
> @@ -144,7 +144,7 @@ public class SnapShooter {
>       details.add("snapshotName", snapshotName);
>       LOG.info("Done creating backup snapshot: " + (snapshotName == null ?
> "<not named>" : snapshotName));
>     } catch (Exception e) {
> -      SnapPuller.delTree(snapShotDir);
> +      IndexFetcher.delTree(snapShotDir);
>       LOG.error("Exception while creating snapshot", e);
>       details.add("snapShootException", e.getMessage());
>     } finally {
> @@ -170,7 +170,7 @@ public class SnapShooter {
>     int i=1;
>     for (OldBackupDirectory dir : dirs) {
>       if (i++ > numberToKeep) {
> -        SnapPuller.delTree(dir.dir);
> +        IndexFetcher.delTree(dir.dir);
>       }
>     }
>   }
> @@ -181,7 +181,7 @@ public class SnapShooter {
>     NamedList<Object> details = new NamedList<>();
>     boolean isSuccess;
>     File f = new File(snapDir, "snapshot." + snapshotName);
> -    isSuccess = SnapPuller.delTree(f);
> +    isSuccess = IndexFetcher.delTree(f);
>
>     if(isSuccess) {
>       details.add("status", "success");
>
> Modified: lucene/dev/trunk/solr/core/src/test-files/log4j.properties
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/log4j.properties?rev=1664126&r1=1664125&r2=1664126&view=diff
>
> ==============================================================================
> --- lucene/dev/trunk/solr/core/src/test-files/log4j.properties (original)
> +++ lucene/dev/trunk/solr/core/src/test-files/log4j.properties Wed Mar  4
> 19:45:09 2015
> @@ -25,7 +25,7 @@ log4j.logger.org.apache.solr.hadoop=INFO
> #log4j.logger.org.apache.solr.cloud.ChaosMonkey=DEBUG
> #log4j.logger.org.apache.solr.update.TransactionLog=DEBUG
> #log4j.logger.org.apache.solr.handler.ReplicationHandler=DEBUG
> -#log4j.logger.org.apache.solr.handler.SnapPuller=DEBUG
> +#log4j.logger.org.apache.solr.handler.IndexFetcher=DEBUG
>
> #log4j.logger.org.apache.solr.common.cloud.ClusterStateUtil=DEBUG
> #log4j.logger.org.apache.solr.cloud.OverseerAutoReplicaFailoverThread=DEBUG
> \ No newline at end of file
>
> Modified:
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java?rev=1664126&r1=1664125&r2=1664126&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
> (original)
> +++
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
> Wed Mar  4 19:45:09 2015
> @@ -36,7 +36,7 @@ import org.apache.lucene.store.Directory
> import org.apache.lucene.util.IOUtils;
> import org.apache.solr.common.SolrException;
> import org.apache.solr.common.params.CommonParams;
> -import org.apache.solr.handler.SnapPuller;
> +import org.apache.solr.handler.IndexFetcher;
> import org.apache.solr.util.AbstractSolrTestCase;
> import org.apache.solr.util.TestHarness;
> import org.junit.AfterClass;
> @@ -93,7 +93,7 @@ public class TestArbitraryIndexDir exten
>     assertU(adoc("id", String.valueOf(1),
>         "name", "name"+String.valueOf(1)));
>     //create a new index dir and index.properties file
> -    File idxprops = new File(h.getCore().getDataDir() +
> SnapPuller.INDEX_PROPERTIES);
> +    File idxprops = new File(h.getCore().getDataDir() +
> IndexFetcher.INDEX_PROPERTIES);
>     Properties p = new Properties();
>     File newDir = new File(h.getCore().getDataDir() + "index_temp");
>     newDir.mkdirs();
> @@ -104,7 +104,7 @@ public class TestArbitraryIndexDir exten
>       p.store(os, "index properties");
>     } catch (Exception e) {
>       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
> -          "Unable to write " + SnapPuller.INDEX_PROPERTIES, e);
> +          "Unable to write " + IndexFetcher.INDEX_PROPERTIES, e);
>     } finally {
>       IOUtils.closeWhileHandlingException(os);
>     }
>
> Modified:
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java?rev=1664126&r1=1664125&r2=1664126&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
> (original)
> +++
> lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
> Wed Mar  4 19:45:09 2015
> @@ -172,17 +172,13 @@ public class TestReplicationHandler exte
>   }
>
>   NamedList query(String query, SolrClient s) throws SolrServerException,
> IOException {
> -    NamedList res = new SimpleOrderedMap();
>     ModifiableSolrParams params = new ModifiableSolrParams();
>
>     params.add("q", query);
>     params.add("sort","id desc");
>
>     QueryResponse qres = s.query(params);
> -
> -    res = qres.getResponse();
> -
> -    return res;
> +    return qres.getResponse();
>   }
>
>   /** will sleep up to 30 seconds, looking for expectedDocCount */
> @@ -304,7 +300,7 @@ public class TestReplicationHandler exte
>       assertNotNull("slave has slave section",
>                     details.get("slave"));
>       // SOLR-2677: assert not false negatives
> -      Object timesFailed =
> ((NamedList)details.get("slave")).get(SnapPuller.TIMES_FAILED);
> +      Object timesFailed =
> ((NamedList)details.get("slave")).get(IndexFetcher.TIMES_FAILED);
>       assertEquals("slave has fetch error count",
>                    null, timesFailed);
>
> @@ -513,7 +509,7 @@ public class TestReplicationHandler exte
>     slaveClient.close();
>     slaveClient = createNewSolrClient(slaveJetty.getLocalPort());
>
> -    //add a doc with new field and commit on master to trigger snappull
> from slave.
> +    //add a doc with new field and commit on master to trigger index
> fetch from slave.
>     index(masterClient, "id", "2000", "name", "name = " + 2000, "newname",
> "newname = " + 2000);
>     masterClient.commit();
>
> @@ -581,7 +577,7 @@ public class TestReplicationHandler exte
>   }
>
>   @Test
> -  public void doTestSnapPullWithMasterUrl() throws Exception {
> +  public void doTestIndexFetchWithMasterUrl() throws Exception {
>     //change solrconfig on slave
>     //this has no entry for pollinginterval
>     slave.copyConfigFile(CONF_DIR + "solrconfig-slave1.xml",
> "solrconfig.xml");
> @@ -608,7 +604,7 @@ public class TestReplicationHandler exte
>     SolrDocumentList masterQueryResult = (SolrDocumentList)
> masterQueryRsp.get("response");
>     assertEquals(nDocs, masterQueryResult.getNumFound());
>
> -    // snappull
> +    // index fetch
>     String masterUrl = buildUrl(slaveJetty.getLocalPort()) + "/" +
> DEFAULT_TEST_CORENAME + "/replication?command=fetchindex&masterUrl=";
>     masterUrl += buildUrl(masterJetty.getLocalPort()) + "/" +
> DEFAULT_TEST_CORENAME + "/replication";
>     URL url = new URL(masterUrl);
> @@ -623,7 +619,7 @@ public class TestReplicationHandler exte
>     String cmp = BaseDistributedSearchTestCase.compare(masterQueryResult,
> slaveQueryResult, 0, null);
>     assertEquals(null, cmp);
>
> -    // snappull from the slave to the master
> +    // index fetch from the slave to the master
>
>     for (int i = nDocs; i < nDocs + 3; i++)
>       index(slaveClient, "id", i, "name", "name = " + i);
> @@ -765,7 +761,7 @@ public class TestReplicationHandler exte
>             .get("response");
>         assertEquals(totalDocs, masterQueryResult.getNumFound());
>
> -        // snappull
> +        // index fetch
>         Date slaveCoreStart = watchCoreStartAt(slaveClient, 30*1000, null);
>         pullFromMasterToSlave();
>         if (confCoreReload) {
> @@ -1219,7 +1215,7 @@ public class TestReplicationHandler exte
>     // record collection1's start time on slave
>     final Date slaveStartTime = watchCoreStartAt(slaveClient, 30*1000,
> null);
>
> -    //add a doc with new field and commit on master to trigger snappull
> from slave.
> +    //add a doc with new field and commit on master to trigger index
> fetch from slave.
>     index(masterClient, "id", "2000", "name", "name = " + 2000, "newname",
> "n2000");
>     masterClient.commit();
>     rQuery(1, "newname:n2000", masterClient);  // sanity check
>
> Modified:
> lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java?rev=1664126&r1=1664125&r2=1664126&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java
> (original)
> +++
> lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockDirectoryFactory.java
> Wed Mar  4 19:45:09 2015
> @@ -69,7 +69,7 @@ public class MockDirectoryFactory extend
>       // already been created.
>       mockDirWrapper.setPreventDoubleWrite(false);
>
> -      // snappuller & co don't seem ready for this:
> +      // IndexFetcher & co don't seem ready for this:
>       mockDirWrapper.setEnableVirusScanner(false);
>
>       if (allowReadingFilesStillOpenForWrite) {
>
>
>
>


-- 
Not sent from my iPhone or my Blackberry or anyone else's

Reply via email to