является ли создание индекса API Java elasticsearch с сопоставлениями атомной операцией?

#elasticsearch #atomic #elasticsearch-java-api

Вопрос:

в принципе, я читал и читал тонны статей и документацию по API JAVA elasticsearch о том, как создавать и индексировать как настройки, так и сопоставления в одном кадре. Мой код почти такой же, как у доков:

 // Some validations before

             getClient()
                        .admin().indices().prepareCreate(index)
                        .setSettings(Settings.settingsBuilder()
                                .put("index.number_of_shards", shards)
                                .put("index.number_of_replicas", replicas)
                                .build())
                        .addMapping("guests", generateMappings("guests"))
                        .addMapping("orders", generateMappings("orders"))
                        .get();

// Some validations after, try catch exception and finally client closing
 

Вопрос заключается в атомарности этой операции: я предполагаю, что если какой-то шаг завершится неудачно (создание индекса, создание настроек или создание сопоставлений), то вся транзакция завершится неудачно, и индекс не будет создан без настроек или сопоставлений. В документе ES об этом недостаточно ясно сказано.

Я также покопался в Java-коде ES и нашел кое-что интересное в классе CreateIndexRequest:

     @Override
    public void writeTo(StreamOutput out) throws IOException {
        super.writeTo(out);
        out.writeString(cause);
        out.writeString(index);
        writeSettingsToStream(settings, out);
        writeTimeout(out);
        out.writeVInt(mappings.size());
        for (Map.Entry<String, String> entry : mappings.entrySet()) {
            out.writeString(entry.getKey());
            out.writeString(entry.getValue());
        }
        out.writeVInt(customs.size());
        for (Map.Entry<String, IndexMetaData.Custom> entry : customs.entrySet()) {
            out.writeString(entry.getKey());
            entry.getValue().writeTo(out);
        }
        out.writeVInt(aliases.size());
        for (Alias alias : aliases) {
            alias.writeTo(out);
        }
        out.writeBoolean(updateAllTypes);
    }
 

Поэтому я предполагаю его атомарность, но было бы здорово быть уверенным на 100%.

Заранее спасибо!