/** Returns all index paths. */
 public Path[] indexPaths(Index index) {
   assert assertEnvIsLocked();
   Path[] indexPaths = new Path[nodePaths.length];
   for (int i = 0; i < nodePaths.length; i++) {
     indexPaths[i] = nodePaths[i].indicesPath.resolve(index.name());
   }
   return indexPaths;
 }
 /**
  * Deletes an indexes data directory recursively. Note: this method assumes that the shard lock is
  * acquired
  *
  * @param index the index to delete
  * @param indexSettings settings for the index being deleted
  */
 public void deleteIndexDirectoryUnderLock(Index index, IndexSettings indexSettings)
     throws IOException {
   final Path[] indexPaths = indexPaths(index);
   logger.trace(
       "deleting index {} directory, paths({}): [{}]", index, indexPaths.length, indexPaths);
   IOUtils.rm(indexPaths);
   if (indexSettings.hasCustomDataPath()) {
     Path customLocation = resolveCustomLocation(indexSettings, index.name());
     logger.trace("deleting custom index {} directory [{}]", index, customLocation);
     IOUtils.rm(customLocation);
   }
 }
 /**
  * Deletes an indexes data directory recursively. Note: this method assumes that the shard lock is
  * acquired
  *
  * @param index the index to delete
  * @param indexSettings settings for the index being deleted
  */
 public void deleteIndexDirectoryUnderLock(Index index, @IndexSettings Settings indexSettings)
     throws IOException {
   // This is to ensure someone doesn't use Settings.EMPTY
   assert indexSettings != Settings.EMPTY;
   final Path[] indexPaths = indexPaths(index);
   logger.trace(
       "deleting index {} directory, paths({}): [{}]", index, indexPaths.length, indexPaths);
   IOUtils.rm(indexPaths);
   if (hasCustomDataPath(indexSettings)) {
     Path customLocation = resolveCustomLocation(indexSettings, index.name());
     logger.trace("deleting custom index {} directory [{}]", index, customLocation);
     IOUtils.rm(customLocation);
   }
 }
  protected BlobStoreIndexGateway(
      Index index, @IndexSettings Settings indexSettings, Gateway gateway) {
    super(index, indexSettings);

    if (gateway.type().equals(NoneGateway.TYPE)) {
      logger.warn(
          "index gateway is configured, but no cluster level gateway configured, cluster level metadata will be lost on full shutdown");
    }

    this.gateway = (BlobStoreGateway) gateway;
    this.blobStore = this.gateway.blobStore();

    this.chunkSize = componentSettings.getAsBytesSize("chunk_size", this.gateway.chunkSize());

    this.indexPath = this.gateway.basePath().add("indices").add(index.name());
  }
 /**
  * Tries to find all allocated shards for the given index on the current node. NOTE: This methods
  * is prone to race-conditions on the filesystem layer since it might not see directories created
  * concurrently or while it's traversing.
  *
  * @param index the index to filter shards
  * @return a set of shard IDs
  * @throws IOException if an IOException occurs
  */
 public Set<ShardId> findAllShardIds(final Index index) throws IOException {
   assert index != null;
   if (nodePaths == null || locks == null) {
     throw new IllegalStateException("node is not configured to store local location");
   }
   assert assertEnvIsLocked();
   final Set<ShardId> shardIds = Sets.newHashSet();
   String indexName = index.name();
   for (final NodePath nodePath : nodePaths) {
     Path location = nodePath.indicesPath;
     if (Files.isDirectory(location)) {
       try (DirectoryStream<Path> indexStream = Files.newDirectoryStream(location)) {
         for (Path indexPath : indexStream) {
           if (indexName.equals(indexPath.getFileName().toString())) {
             shardIds.addAll(findAllShardsForIndex(indexPath));
           }
         }
       }
     }
   }
   return shardIds;
 }
 /** Resolves the given indexes directory against this NodePath */
 public Path resolve(Index index) {
   return indicesPath.resolve(index.name());
 }