Access to UNC paths from ElasticSearch service on Azure for snapshots


(Saurabh Suppal) #1

I have mounted Azure File services as a UNC path on all the nodes in the ES cluster and trying to use this location as Elasticsearch repository path(location where ES stores its snapshots).
But ES is unable to create any folders on this share and it fails with the below error when I give a create repository command : (This only happens when ES runs as a service )

Command:
PUT _snapshot/fs_backup
{
"type": "fs",
"settings": {
"location": "backup1",
"compress": true
}
}

Error:
[2015-09-28 09:36:08,138][WARN ][repositories ] [SASUPP-NODE-M01] failed to create repository [fs_backup]
org.elasticsearch.repositories.RepositoryException: [fs_backup] failed to create repository
at org.elasticsearch.repositories.RepositoriesService.createRepositoryHolder(RepositoriesService.java:414)
at org.elasticsearch.repositories.RepositoriesService.registerRepository(RepositoriesService.java:371)
at org.elasticsearch.repositories.RepositoriesService.access$100(RepositoriesService.java:55)
at org.elasticsearch.repositories.RepositoriesService$1.execute(RepositoriesService.java:110)
at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:374)
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:196)
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:162)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.elasticsearch.common.inject.CreationException: Guice creation errors:

  1. Error injecting constructor, org.elasticsearch.common.blobstore.BlobStoreException: Failed to create directory at [\sasuppintst.file.core.windows.net\es-backup-smb\elasticsearch-backups\backup1]
    at org.elasticsearch.repositories.fs.FsRepository.(Unknown Source)
    while locating org.elasticsearch.repositories.fs.FsRepository
    while locating org.elasticsearch.repositories.Repository

1 error
at org.elasticsearch.common.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:344)
at org.elasticsearch.common.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:178)
at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:110)
at org.elasticsearch.common.inject.InjectorImpl.createChildInjector(InjectorImpl.java:131)
at org.elasticsearch.common.inject.ModulesBuilder.createChildInjector(ModulesBuilder.java:69)
at org.elasticsearch.repositories.RepositoriesService.createRepositoryHolder(RepositoriesService.java:407)
... 9 more
Caused by: org.elasticsearch.common.blobstore.BlobStoreException: Failed to create directory at [\sasuppintst.file.core.windows.net\es-backup-smb\elasticsearch-backups\backup1]
at org.elasticsearch.common.blobstore.fs.FsBlobStore.(FsBlobStore.java:49)
at org.elasticsearch.repositories.fs.FsRepository.(FsRepository.java:88)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.elasticsearch.common.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:54)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:86)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:98)
at org.elasticsearch.common.inject.FactoryProxy.get(FactoryProxy.java:52)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:837)
at ...

Does anyone know what could be the reason behind this behavior ?

I used below wiki to mount the UNC path (Azure file service on a node):

Regards,
Saurabh


(Mark Walkom) #2

Does the user have permission to create directories under the mount?


(Saurabh Suppal) #3

The logon user has the permission to create folders. This is the reason I do not get this error when elastic search runs as a process (since it is running in the context of the logged in user.)
But when Elastic Search is running as a service (under LOCAL SYSTEM account), I get this error.


(David Pilato) #4

Does the LOCAL SYSTEM has permission to create/remove files in this folder?


(Saurabh Suppal) #5

gave permissions to LOCAL SYSTEM by switching to system context using psexec and doing a net use of the share.
Things are working now.
Thanks.


(system) #6