Skip to content

Commit 67badc6

Browse files
committed
close if failed to install reference
1 parent 6816960 commit 67badc6

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

server/src/main/java/org/elasticsearch/index/shard/IndexShard.java

+12-16
Original file line numberDiff line numberDiff line change
@@ -1606,21 +1606,19 @@ private void innerOpenEngineAndTranslog(LongSupplier globalCheckpointSupplier) t
16061606
synchronized (engineMutex) {
16071607
// we must create a new engine under mutex (see IndexShard#snapshotStoreMetadata).
16081608
final Engine newEngine = engineFactory.newReadWriteEngine(config);
1609-
boolean success = false;
1610-
try {
1611-
synchronized (mutex) {
1609+
synchronized (mutex) {
1610+
try {
16121611
verifyNotClosed();
16131612
assert currentEngineReference.get() == null : "engine is running";
16141613
onNewEngine(newEngine);
16151614
currentEngineReference.set(newEngine);
16161615
// We set active because we are now writing operations to the engine; this way,
16171616
// if we go idle after some time and become inactive, we still give sync'd flush a chance to run.
16181617
active.set(true);
1619-
success = true;
1620-
}
1621-
} finally {
1622-
if (success == false) {
1623-
newEngine.close();
1618+
} finally {
1619+
if (currentEngineReference.get() != newEngine) {
1620+
newEngine.close();
1621+
}
16241622
}
16251623
}
16261624
}
@@ -3372,16 +3370,14 @@ public void close() throws IOException {
33723370
IOUtils.close(super::close, newEngine);
33733371
}
33743372
};
3375-
boolean success = false;
3376-
try {
3377-
synchronized (mutex) {
3373+
synchronized (mutex) {
3374+
try {
33783375
verifyNotClosed();
33793376
IOUtils.close(currentEngineReference.getAndSet(readOnlyEngine));
3380-
success = true;
3381-
}
3382-
} finally {
3383-
if (success == false) {
3384-
readOnlyEngine.close();
3377+
} finally {
3378+
if (currentEngineReference.get() != readOnlyEngine) {
3379+
readOnlyEngine.close();
3380+
}
33853381
}
33863382
}
33873383
newEngineReference.set(engineFactory.newReadWriteEngine(newEngineConfig(replicationTracker)));

0 commit comments

Comments
 (0)