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 }
public void initialize( String directoryProviderName, Properties properties, BuildContext context) { this.properties = properties; this.directoryProviderName = directoryProviderName; // source guessing sourceDir = DirectoryProviderHelper.getSourceDirectory(directoryProviderName, properties, true); log.debugf("Source directory: %s", sourceDir.getPath()); indexDir = DirectoryProviderHelper.getVerifiedIndexDir(directoryProviderName, properties, true); log.debugf("Index directory: %s", indexDir.getPath()); try { indexName = indexDir.getCanonicalPath(); directory = DirectoryProviderHelper.createFSIndex(indexDir, properties); } catch (IOException e) { throw new SearchException("Unable to initialize index: " + directoryProviderName, e); } copyChunkSize = DirectoryProviderHelper.getCopyBufferSize(directoryProviderName, properties); this.context = context; current = 0; // write to volatile to publish all state }