From 15a218d02e2ffd17b8c48bbf67369208b1b537c9 Mon Sep 17 00:00:00 2001 From: Yannick Welsch Date: Wed, 16 Jan 2019 19:47:24 +0100 Subject: [PATCH 1/2] Fix assertion at end of forceRefreshes --- .../elasticsearch/index/shard/RefreshListeners.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java b/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java index b4b9e13f7e063..2edeed56015e3 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java +++ b/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java @@ -129,13 +129,12 @@ public boolean addOrNotify(Translog.Location location, Consumer listene return true; } synchronized (this) { + if (closed) { + throw new IllegalStateException("can't wait for refresh on a closed index"); + } List>> listeners = refreshListeners; if (listeners == null) { - if (closed) { - throw new IllegalStateException("can't wait for refresh on a closed index"); - } listeners = new ArrayList<>(); - refreshListeners = listeners; } if (refreshForcers == 0 && listeners.size() < getMaxRefreshListeners.getAsInt()) { ThreadContext.StoredContext storedContext = threadContext.newStoredContext(true); @@ -145,6 +144,9 @@ public boolean addOrNotify(Translog.Location location, Consumer listene listener.accept(forced); } }; + if (refreshListeners == null) { + refreshListeners = listeners; + } // We have a free slot so register the listener listeners.add(new Tuple<>(location, contextPreservingListener)); return false; From ee153065dab0dca553c4dbd576a2511250643c9f Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Thu, 17 Jan 2019 14:45:13 +0100 Subject: [PATCH 2/2] CR: Avoid needlessly instantiating ArrayList --- .../elasticsearch/index/shard/RefreshListeners.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java b/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java index 2edeed56015e3..713563eb111ba 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java +++ b/server/src/main/java/org/elasticsearch/index/shard/RefreshListeners.java @@ -133,10 +133,8 @@ public boolean addOrNotify(Translog.Location location, Consumer listene throw new IllegalStateException("can't wait for refresh on a closed index"); } List>> listeners = refreshListeners; - if (listeners == null) { - listeners = new ArrayList<>(); - } - if (refreshForcers == 0 && listeners.size() < getMaxRefreshListeners.getAsInt()) { + final int maxRefreshes = getMaxRefreshListeners.getAsInt(); + if (refreshForcers == 0 && maxRefreshes > 0 && (listeners == null || listeners.size() < maxRefreshes)) { ThreadContext.StoredContext storedContext = threadContext.newStoredContext(true); Consumer contextPreservingListener = forced -> { try (ThreadContext.StoredContext ignore = threadContext.stashContext()) { @@ -144,11 +142,12 @@ public boolean addOrNotify(Translog.Location location, Consumer listene listener.accept(forced); } }; - if (refreshListeners == null) { - refreshListeners = listeners; + if (listeners == null) { + listeners = new ArrayList<>(); } // We have a free slot so register the listener listeners.add(new Tuple<>(location, contextPreservingListener)); + refreshListeners = listeners; return false; } }