diff --git a/server/src/main/java/io/druid/segment/realtime/FireHydrant.java b/server/src/main/java/io/druid/segment/realtime/FireHydrant.java index 4781520968cc..adcadb73d239 100644 --- a/server/src/main/java/io/druid/segment/realtime/FireHydrant.java +++ b/server/src/main/java/io/druid/segment/realtime/FireHydrant.java @@ -36,7 +36,7 @@ public class FireHydrant private final int count; private volatile IncrementalIndex index; private volatile ReferenceCountingSegment adapter; - private Object swapLock = new Object(); + private final Object swapLock = new Object(); public FireHydrant( IncrementalIndex index, @@ -82,16 +82,17 @@ public boolean hasSwapped() public void swapSegment(Segment adapter) { synchronized (swapLock) { - if (this.adapter != null) { + ReferenceCountingSegment oldAdapter = this.adapter; + this.adapter = new ReferenceCountingSegment(adapter); + this.index = null; + if (oldAdapter != null) { try { - this.adapter.close(); + oldAdapter.close(); } catch (IOException e) { throw Throwables.propagate(e); } } - this.adapter = new ReferenceCountingSegment(adapter); - this.index = null; } }