You have to wait for green health of the index before retrieving the new
mapping.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-health.html

While the mapping changes, cluster has some work to do to propagate the new
field to all nodes. This takes some time. It is not a race condition.

Jörg

On Mon, Mar 2, 2015 at 10:44 PM, Andrew Pak <[email protected]>
wrote:

> Hello!
>
> Here's my issue:
>
> 1. I create an index with a mapping that has a dynamic template.
> 2. I create a new document that contains a new field that will match a
> dynamic template in the mapping and that will be added to the mapping. The
> PUT succeeds with 201 Created.
> 3. I then retrieve the mapping with a GET to check that the new field has
> been correctly added. The GET succeeds with 200 OK.
> 4. The returned mapping doesn't always contain the newly created field. It
> sometimes takes a small delay (< 1s) for the updated mapping to be returned.
>
> Seems like a race condition, so I'm wondering if this is expected
> behaviour and if there is a setting or parameter that can be set to
> guarantee that the mapping gets refreshed atomically, just like you can
> force-refresh an index. This is not currently a show-stopping issue, I'd
> just like to have a definitive answer.
>
> The reason I need the mapping to reflect the changes immediately is that I
> have unit tests that depend on field information retrieved from the mapping
> at run-time and they sporadically fail because the returned mapping and the
> expected mapping don't always match up.
>
> Here's a curl recreation script:
> https://gist.github.com/elasticsearcher/7f116867603a44575ce1
>
> However, it seems that curl is slow enough that the small delay needed for
> the mapping to refresh passes in-between curl calls and the script doesn't
> actually reproduce the issue. I hence created an equivalent Python script
> that retries the whole process until the issue is demonstrated:
> https://gist.github.com/elasticsearcher/2dff7ee44e11c6a39bfb
>
> Here's a sample output from the script (contains a few iterations of the
> entire recreation cycle):
>
> > /bin/python es_mapping_race_condition.py
> Delete index /documents: {"acknowledged":true}
> Create index /documents: {"acknowledged":true}
> Create mapping /documents/pdf: {"acknowledged":true}
> Create new /documents/pdf document:
> {"_index":"documents","_type":"pdf","_id":"AUvcWwZgoOHS3xjDkoFH","_version":1,"created":true}
> Refresh index /documents {"_shards":{"total":10,"successful":5,"failed":0}}
> Retrieved fields: [u'new_field_str', u'new_field_str.tags_str',
> u'title_str', u'title_str.tags_str']
> Delete index /documents: {"acknowledged":true}
> Create index /documents: {"acknowledged":true}
> Create mapping /documents/pdf: {"acknowledged":true}
> Create new /documents/pdf document:
> {"_index":"documents","_type":"pdf","_id":"AUvcWwsCoOHS3xjDkoFI","_version":1,"created":true}
> Refresh index /documents {"_shards":{"total":10,"successful":5,"failed":0}}
> Retrieved fields: [u'new_field_str', u'new_field_str.tags_str',
> u'title_str', u'title_str.tags_str']
> Delete index /documents: {"acknowledged":true}
> Create index /documents: {"acknowledged":true}
> Create mapping /documents/pdf: {"acknowledged":true}
> Create new /documents/pdf document:
> {"_index":"documents","_type":"pdf","_id":"AUvcWxDioOHS3xjDkoFJ","_version":1,"created":true}
> Refresh index /documents {"_shards":{"total":10,"successful":5,"failed":0}}
> Retrieved fields: [u'title_str', u'title_str.tags_str']
> ########################################################################
> #
> # Field 'new_field_str' was not found in the mapping.
> #
> ########################################################################
>
> Thanks in advance for any help!
>
> --
> You received this message because you are subscribed to the Google Groups
> "elasticsearch" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elasticsearch/88e7df12-e862-442b-8e15-3c2a6fcae7d4%40googlegroups.com
> <https://groups.google.com/d/msgid/elasticsearch/88e7df12-e862-442b-8e15-3c2a6fcae7d4%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/CAKdsXoFy%2B7gLoV6yF2VutUWwDveSxC2ccVK2%2BBQdBRqkD2cAVg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to