mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-26 18:08:36 +00:00
Always use last properly persisted metadata as previous state (#47779)
On data-only nodes we were not using the last persisted cluster state as base point to compute what needed storage, but the last applied cluster state (but not necessarily properly persisted) instead.
This commit is contained in:
parent
ba1c13c47d
commit
acf6d34d69
@ -283,7 +283,7 @@ public class GatewayMetaState {
|
||||
incrementalClusterStateWriter.setCurrentTerm(event.state().term());
|
||||
}
|
||||
|
||||
incrementalClusterStateWriter.updateClusterState(event.state(), event.previousState());
|
||||
incrementalClusterStateWriter.updateClusterState(event.state());
|
||||
incrementalClusterStateWriter.setIncrementalWrite(true);
|
||||
} catch (WriteStateException e) {
|
||||
logger.warn("Exception occurred when storing new meta data", e);
|
||||
@ -325,9 +325,9 @@ public class GatewayMetaState {
|
||||
@Override
|
||||
public void setLastAcceptedState(ClusterState clusterState) {
|
||||
try {
|
||||
final ClusterState previousClusterState = incrementalClusterStateWriter.getPreviousClusterState();
|
||||
incrementalClusterStateWriter.setIncrementalWrite(previousClusterState.term() == clusterState.term());
|
||||
incrementalClusterStateWriter.updateClusterState(clusterState, previousClusterState);
|
||||
incrementalClusterStateWriter.setIncrementalWrite(
|
||||
incrementalClusterStateWriter.getPreviousClusterState().term() == clusterState.term());
|
||||
incrementalClusterStateWriter.updateClusterState(clusterState);
|
||||
} catch (WriteStateException e) {
|
||||
logger.error(new ParameterizedMessage("Failed to set last accepted state with version {}", clusterState.version()), e);
|
||||
e.rethrowAsErrorOrUncheckedException();
|
||||
|
@ -101,18 +101,17 @@ public class IncrementalClusterStateWriter {
|
||||
* Updates manifest and meta data on disk.
|
||||
*
|
||||
* @param newState new {@link ClusterState}
|
||||
* @param previousState previous {@link ClusterState}
|
||||
*
|
||||
* @throws WriteStateException if exception occurs. See also {@link WriteStateException#isDirty()}.
|
||||
*/
|
||||
void updateClusterState(ClusterState newState, ClusterState previousState) throws WriteStateException {
|
||||
void updateClusterState(ClusterState newState) throws WriteStateException {
|
||||
MetaData newMetaData = newState.metaData();
|
||||
|
||||
final long startTimeMillis = relativeTimeMillisSupplier.getAsLong();
|
||||
|
||||
final AtomicClusterStateWriter writer = new AtomicClusterStateWriter(metaStateService, previousManifest);
|
||||
long globalStateGeneration = writeGlobalState(writer, newMetaData);
|
||||
Map<Index, Long> indexGenerations = writeIndicesMetadata(writer, newState, previousState);
|
||||
Map<Index, Long> indexGenerations = writeIndicesMetadata(writer, newState);
|
||||
Manifest manifest = new Manifest(previousManifest.getCurrentTerm(), newState.version(), globalStateGeneration, indexGenerations);
|
||||
writeManifest(writer, manifest);
|
||||
previousManifest = manifest;
|
||||
@ -136,14 +135,14 @@ public class IncrementalClusterStateWriter {
|
||||
}
|
||||
}
|
||||
|
||||
private Map<Index, Long> writeIndicesMetadata(AtomicClusterStateWriter writer, ClusterState newState, ClusterState previousState)
|
||||
private Map<Index, Long> writeIndicesMetadata(AtomicClusterStateWriter writer, ClusterState newState)
|
||||
throws WriteStateException {
|
||||
Map<Index, Long> previouslyWrittenIndices = previousManifest.getIndexGenerations();
|
||||
Set<Index> relevantIndices = getRelevantIndices(newState);
|
||||
|
||||
Map<Index, Long> newIndices = new HashMap<>();
|
||||
|
||||
MetaData previousMetaData = incrementalWrite ? previousState.metaData() : null;
|
||||
MetaData previousMetaData = incrementalWrite ? previousClusterState.metaData() : null;
|
||||
Iterable<IndexMetaDataAction> actions = resolveIndexMetaDataActions(previouslyWrittenIndices, relevantIndices, previousMetaData,
|
||||
newState.metaData());
|
||||
|
||||
|
@ -510,7 +510,7 @@ public class IncrementalClusterStateWriterTests extends ESAllocationTestCase {
|
||||
Loggers.addAppender(classLogger, mockAppender);
|
||||
|
||||
try {
|
||||
incrementalClusterStateWriter.updateClusterState(clusterState, clusterState);
|
||||
incrementalClusterStateWriter.updateClusterState(clusterState);
|
||||
} finally {
|
||||
Loggers.removeAppender(classLogger, mockAppender);
|
||||
mockAppender.stop();
|
||||
|
Loading…
x
Reference in New Issue
Block a user