Fix missing historyUUID in peer recovery when rolling upgrade 5.x to 6.3#31506
Fix missing historyUUID in peer recovery when rolling upgrade 5.x to 6.3#31506dnhatn merged 4 commits intoelastic:6.xfrom
Conversation
Today we make sure that a 5.x index commit should have all required commit tags in RecoveryTarget#cleanFiles method. The reason we do this in RecoveryTarget#cleanFiles method because this is only needed in a file-based recovery and we assume that #cleanFiles should be called in a file-based recovery. However, this assumption is not valid if the index is sealed (.i.e synced-flush). This incorrect assumption would prevent users from rolling upgrade from 5.x to 6.3 if their index were sealed.
|
Pinging @elastic/es-distributed |
ywelsch
left a comment
There was a problem hiding this comment.
Left some nits but looks good o.w.
| createIndex(index, settings.build()); | ||
| indexRandomDocuments(count, randomBoolean(), randomBoolean(), | ||
| n -> JsonXContent.contentBuilder().startObject().field("key", "value").endObject()); | ||
| assertBusy(() -> { |
There was a problem hiding this comment.
Can we replace this assertBusy by an ensureGreen(index)?
| */ | ||
| public void testRecoverySealedIndex() throws Exception { | ||
| int count; | ||
| if (runningAgainstOldCluster) { |
There was a problem hiding this comment.
maybe fold this if-else into the next one.
| mappingsAndSettings.endObject(); | ||
| client().performRequest("PUT", "/" + index, Collections.emptyMap(), | ||
| new StringEntity(Strings.toString(mappingsAndSettings), ContentType.APPLICATION_JSON)); | ||
|
|
| * Tests that a synced-flushed index is correctly recovered. | ||
| * This might be an edge-case from 5.x to 6.x since a 5.x index commit does not have all required 6.x commit tags. | ||
| */ | ||
| public void testRecoverySealedIndex() throws Exception { |
There was a problem hiding this comment.
testRecoverSyncedFlushIndex
| } | ||
| } | ||
|
|
||
| public void testRecoverySealedIndex() throws Exception { |
There was a problem hiding this comment.
testRecoverSyncedFlushIndex
| } | ||
|
|
||
| public void testRecoverySealedIndex() throws Exception { | ||
| final String index = "recovery_a_sealed_index"; |
| .put(SETTING_ALLOCATION_MAX_RETRY.getKey(), "0"); // fail faster | ||
| createIndex(index, settings.build()); | ||
| indexDocs(index, 0, randomInt(5)); | ||
| assertBusy(() -> { |
There was a problem hiding this comment.
same comment as above, replace by ensureGreen()?
|
@ywelsch Thanks for looking.
Unfortunately, we have to spin here. We fire a global checkpoint sync after the last op is completed. A synced-flush will fail if the global checkpoint is happening. I added a comment to explain this. |
| * Tests that a synced-flushed index is correctly recovered. | ||
| * This might be an edge-case from 5.x to 6.x since a 5.x index commit does not have all required 6.x commit tags. | ||
| */ | ||
| public void testRecoverSyncedFlushIndex() throws Exception { |
There was a problem hiding this comment.
can't we fold this into testRecovery and randomly do a synced flush instead of a normal flush?
Sure, will do. |
…6.3 (#31506) Today we make sure that a 5.x index commit should have all required commit tags in RecoveryTarget#cleanFiles method. The reason we do this in RecoveryTarget#cleanFiles method because this is only needed in a file-based recovery and we assume that #cleanFiles should be called in a file-based recovery. However, this assumption is not valid if the index is sealed (.i.e synced-flush). This incorrect assumption would prevent users from rolling upgrade from 5.x to 6.3 if their index were sealed. Closes #31482
|
Although the master branch is not affected by this issue, I think it's nice to have these BWC tests in the master branch. I added these tests to the master branch in 5115102. |
* 6.x: Avoid sending duplicate remote failed shard requests (#31313) Add get field mappings to High Level REST API Client Relates to #27205 [DOCS] Updates Watcher examples for code testing (#31152) [DOCS] Move monitoring to docs folder (#31477) [DOCS] Fixes SQL docs in nav [DOCS] Move sql to docs IndexShard should not return null stats - empty stats or AlreadyCloseException if it's closed is better Clarify that IP range data can be specified in CIDR notation. (#31374) Remove some cases in FieldTypeLookupTests that are no longer relevant. (#31381) In NumberFieldType equals and hashCode, make sure that NumberType is taken into account. (#31514) fix repository update with the same settings but different type Revert "AwaitsFix FullClusterRestartIT#testRecovery" Upgrade to Lucene 7.4.0. (#31529) Avoid deprecation warning when running the ML datafeed extractor. (#31463) Retry synced-flush in FullClusterRestartIT#testRecovery Allow multiple unicast host providers (#31509) [ML] Add ML filter update API (#31437) AwaitsFix FullClusterRestartIT#testRecovery Fix missing historyUUID in peer recovery when rolling upgrade 5.x to 6.3 (#31506) Remove QueryCachingPolicy#ALWAYS_CACHE (#31451) Rename createNewTranslog to fileBasedRecovery (#31508) [DOCS] Add code snippet testing in more ML APIs (#31339) [DOCS] Remove fixed file from build.gradle [DOCS] Creates field and document level security overview (#30937) Test: Skip assertion on windows [DOCS] Move migration APIs to docs (#31473) Add a known issue for upgrading from 5.x to 6.3.0 (#31501) Return transport addresses from UnicastHostsProvider (#31426) Add Delete Snapshot High Level REST API Reload secure settings for plugins (#31481) [DOCS] Fix JDBC Maven client group/artifact ID
+1 |
Today we make sure that a 5.x index commit should have all required
commit tags in RecoveryTarget#cleanFiles method. The reason we do this
in RecoveryTarget#cleanFiles method because this is only needed in a
file-based recovery and we assume that #cleanFiles should be called in a
file-based recovery. However, this assumption is not valid if the index
is sealed (.i.e synced-flush). This incorrect assumption would prevent
users from rolling upgrade from 5.x to 6.3 if their index were sealed.
Closes #31482