Repository: phoenix Updated Branches: refs/heads/master 367662dc8 -> ebb6a7adb
PHOENIX-1173: MutableIndexFailureIT.java doesn't finish sometimes or is flappy. Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/ebb6a7ad Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/ebb6a7ad Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/ebb6a7ad Branch: refs/heads/master Commit: ebb6a7adb9134eb2413950796bd5f4e80a250e7d Parents: 367662d Author: Jeffrey Zhong <jeffr...@apache.org> Authored: Fri Aug 15 14:02:51 2014 -0700 Committer: Jeffrey Zhong <jeffr...@apache.org> Committed: Fri Aug 15 16:05:55 2014 -0700 ---------------------------------------------------------------------- .../apache/phoenix/coprocessor/MetaDataEndpointImpl.java | 2 ++ .../apache/phoenix/coprocessor/MetaDataRegionObserver.java | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/ebb6a7ad/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java index b99483b..5b43a90 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java @@ -1508,6 +1508,8 @@ public class MetaDataEndpointImpl extends MetaDataProtocol implements Coprocesso dataTableKey = SchemaUtil.getTableKey(tenantId, schemaName, dataTableKV.getValue()); } if(dataTableKey != null) { + // make a copy of tableMetadata + tableMetadata = new ArrayList<Mutation>(tableMetadata); // insert an empty KV to trigger time stamp update on data table row Put p = new Put(dataTableKey); p.add(TABLE_FAMILY_BYTES, QueryConstants.EMPTY_COLUMN_BYTES, timeStamp, ByteUtil.EMPTY_BYTE_ARRAY); http://git-wip-us.apache.org/repos/asf/phoenix/blob/ebb6a7ad/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java index 6ce0148..822ced8 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java @@ -28,6 +28,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.logging.Log; @@ -65,14 +68,14 @@ import org.apache.phoenix.util.SchemaUtil; */ public class MetaDataRegionObserver extends BaseRegionObserver { public static final Log LOG = LogFactory.getLog(MetaDataRegionObserver.class); - protected Timer scheduleTimer = new Timer(true); + protected ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); private boolean enableRebuildIndex = QueryServicesOptions.DEFAULT_INDEX_FAILURE_HANDLING_REBUILD; private long rebuildIndexTimeInterval = QueryServicesOptions.DEFAULT_INDEX_FAILURE_HANDLING_REBUILD_INTERVAL; @Override public void preClose(final ObserverContext<RegionCoprocessorEnvironment> c, boolean abortRequested) { - scheduleTimer.cancel(); + executor.shutdownNow(); GlobalCache.getInstance(c.getEnvironment()).getMetaDataCache().invalidateAll(); } @@ -113,7 +116,7 @@ public class MetaDataRegionObserver extends BaseRegionObserver { // starts index rebuild schedule work BuildIndexScheduleTask task = new BuildIndexScheduleTask(e.getEnvironment()); // run scheduled task every 10 secs - scheduleTimer.schedule(task, 10000, rebuildIndexTimeInterval); + executor.scheduleAtFixedRate(task, 10000, rebuildIndexTimeInterval, TimeUnit.MILLISECONDS); } catch (ClassNotFoundException ex) { LOG.error("BuildIndexScheduleTask cannot start!", ex); }