Doesn’t match any of the locations specified by path.repo because this setting is empty – How to solve related issues

Opster Team

Feb-22, Version: 1.7-8.0

It’s important to ensure your path repository setting is configured correctly to ensure location identification. Before you begin reading this guide, we recommend you run the Elasticsearch Error Check-Up to check your configuration and resolve issues such as the above.

This guide will explain how to easily resolve this issue. Beyond that, it’s also important to understand the issues related to the log, so below there is an overview on common issues and tips related to the Elasticsearch concepts: repositories and repository-azure.

Overview

The process of setting up Elasticsearch to take snapshots of your data begins with you configuring Elasticsearch so it knows the available repositories where it will be able to save your data. When it comes to shared file system repositories, this is done in two steps:

  1. You first have to list all available data repositories in the configuration file on every node of the cluster
  2. You can then register repositories in the cluster state, so they can be used when taking snapshots

The “Doesn’t match any of the locations specified by path.repo because this setting is empty” error usually takes place when you try to execute the second step prior to the first one.

What it means

This error probably means you didn’t configure the path.repo parameter in the config/elasticsearch.yml configuration file of at least one of the nodes of your cluster.

Why it occurs

In order to create a snapshot or to configure a snapshot policy to secure your Elasticsearch cluster, you first have to register a repository to which it will save your data. You do this by sending a PUT request to the _snapshot endpoint, as shown below:

PUT _snapshot/my_fs_backup
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/my_fs_backup_location"
  }
}

Elasticsearch’s snapshot solution supports several repository implementations, such as AWS S3, Google Cloud Storage, Microsoft Azure among others. You can also use your own data infrastructure and provide a shared filesystem repository (which is the case for the example above). 

In this case, prior to registering the repository in the cluster’s state, you must include a path.repo parameter in the config/elasticsearch.yml configuration file on every node in your cluster. The value of this parameter should contain a path to the shared file system, which should be accessible in every node.

If for some reason you fail to do that, you’ll then get the “Doesn’t match any of the locations specified by path.repo because this setting is empty” error message. In the example above the reference to the /mount/backups/my_fs_backup_location location will cause the error, if not configured in the configuration file of all the nodes. 

This is the error Elasticsearch will return:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "repository_exception",
        "reason" : "[my_fs_backup] location [/mount/backups/my_fs_backup_location] doesn't match any of the locations specified by path.repo because this setting is empty"
      }
    ],
    "type" : "repository_exception",
    "reason" : "[my_fs_backup] failed to create repository",
    "caused_by" : {
      "type" : "repository_exception",
      "reason" : "[my_fs_backup] location [/mount/backups/my_fs_backup_location] doesn't match any of the locations specified by path.repo because this setting is empty"
    }
  },
  "status" : 500
}

How to resolve it

You can simply include the path.repo parameter with a proper value in the config/elasticsearch.yml of all of your nodes and then restart them.

cluster.name: acme
node.name: node01
network.host: [ _local_ ]
cluster.initial_master_nodes: node01
path.repo: ["/mount/backups/my_fs_backup_location"]

Log Context

Log “The specified location [{}] should start with a repository path specified by” classname is FsRepository.java.
We extracted the following from Elasticsearch source code for those seeking an in-depth context :

                 logger.warn("The specified location [{}] doesn't start with any "
                    + "repository paths specified by the path.repo setting: [{}] "; location; environment.repoFiles());
                throw new RepositoryException(metadata.name(); "location [" + location
                    + "] doesn't match any of the locations specified by path.repo");
            } else {
                logger.warn("The specified location [{}] should start with a repository path specified by"
                    + " the path.repo setting; but the path.repo setting was not set on this node"; location);
                throw new RepositoryException(metadata.name(); "location [" + location
                    + "] doesn't match any of the locations specified by path.repo because this setting is empty");
            }
        }




 

Watch product tour

Try AutoOps to find & fix Elasticsearch problems

Analyze Your Cluster
Skip to content