Working around a bug in Windows SMB and Java on windows

When using a shared file system based on the SMB protocol (like Azure File Service) to store indices, the way Lucene open index segment files is with a write only flag. This is the correct way to open the files, as they will only be used for writes and allows different FS implementations to optimize for it. Sadly, in windows with SMB, this disables the cache manager, causing writes to be slow. This has been described in LUCENE-6176, but it affects each and every Java program out there!. This need and must be fixed outside of ES and/or Lucene, either in windows or OpenJDK. For now, we are providing an experimental support to open the files with read flag, but this should be considered experimental and the correct way to fix it is in OpenJDK or Windows.

The Azure Cloud plugin provides two storage types optimized for SMB:

smb_mmap_fs
a SMB specific implementation of the default mmap fs
smb_simple_fs
a SMB specific implementation of the default simple fs

To use one of these specific storage types, you need to install the Azure Cloud plugin and restart the node. Then configure Elasticsearch to set the storage type you want.

This can be configured for all indices by adding this to the elasticsearch.yml file:

index.store.type: smb_simple_fs

Note that setting will be applied for newly created indices.

It can also be set on a per-index basis at index creation time:

PUT my_index
{
   "settings": {
       "index.store.type": "smb_mmap_fs"
   }
}