Skip to content

Commit fc4a1d9

Browse files
committed
Fix assertion at end of forceRefreshes (#37559)
This commit ensures that we only change refreshListeners to a list if we're actually adding something to the list.
1 parent 855801a commit fc4a1d9

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

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

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,24 +129,25 @@ public boolean addOrNotify(Translog.Location location, Consumer<Boolean> listene
129129
return true;
130130
}
131131
synchronized (this) {
132-
List<Tuple<Translog.Location, Consumer<Boolean>>> listeners = refreshListeners;
133-
if (listeners == null) {
134-
if (closed) {
135-
throw new IllegalStateException("can't wait for refresh on a closed index");
136-
}
137-
listeners = new ArrayList<>();
138-
refreshListeners = listeners;
132+
if (closed) {
133+
throw new IllegalStateException("can't wait for refresh on a closed index");
139134
}
140-
if (refreshForcers == 0 && listeners.size() < getMaxRefreshListeners.getAsInt()) {
135+
List<Tuple<Translog.Location, Consumer<Boolean>>> listeners = refreshListeners;
136+
final int maxRefreshes = getMaxRefreshListeners.getAsInt();
137+
if (refreshForcers == 0 && maxRefreshes > 0 && (listeners == null || listeners.size() < maxRefreshes)) {
141138
ThreadContext.StoredContext storedContext = threadContext.newStoredContext(true);
142139
Consumer<Boolean> contextPreservingListener = forced -> {
143140
try (ThreadContext.StoredContext ignore = threadContext.stashContext()) {
144141
storedContext.restore();
145142
listener.accept(forced);
146143
}
147144
};
145+
if (listeners == null) {
146+
listeners = new ArrayList<>();
147+
}
148148
// We have a free slot so register the listener
149149
listeners.add(new Tuple<>(location, contextPreservingListener));
150+
refreshListeners = listeners;
150151
return false;
151152
}
152153
}

0 commit comments

Comments
 (0)