public void start() {
   int currentLocal = 0;
   this.directoryProviderLock = this.context.getDirectoryProviderLock(this);
   this.context = null;
   try {
     // copy to source
     if (new File(sourceDir, CURRENT1).exists()) {
       currentLocal = 2;
     } else if (new File(sourceDir, CURRENT2).exists()) {
       currentLocal = 1;
     } else {
       log.debugf("Source directory for '%s' will be initialized", indexName);
       currentLocal = 1;
     }
     String currentString = Integer.valueOf(currentLocal).toString();
     File subDir = new File(sourceDir, currentString);
     FileHelper.synchronize(indexDir, subDir, true, copyChunkSize);
     new File(sourceDir, CURRENT1).delete();
     new File(sourceDir, CURRENT2).delete();
     // TODO small hole, no file can be found here
     new File(sourceDir, CURRENT_DIR_NAME[currentLocal]).createNewFile();
     log.debugf("Current directory: %d", currentLocal);
   } catch (IOException e) {
     throw new SearchException("Unable to initialize index: " + directoryProviderName, e);
   }
   task = new FSMasterDirectoryProvider.TriggerTask(indexDir, sourceDir);
   long period = DirectoryProviderHelper.getRefreshPeriod(properties, directoryProviderName);
   timer.scheduleAtFixedRate(task, period, period);
   this.current = currentLocal; // write to volatile to publish all state
 }