From 4a93593136d1ab5e69c9e8676d33850726722e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20L=C3=A9aut=C3=A9?= Date: Tue, 17 May 2016 17:54:25 -0700 Subject: [PATCH] fix possible case of 'Null storage adapter found' when segments are swapped --- .../java/io/druid/segment/realtime/FireHydrant.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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; } }