From 3ef86dee110b1a6380af576529897203b132d336 Mon Sep 17 00:00:00 2001 From: mbautin Date: Thu, 8 Mar 2012 16:32:20 -0800 Subject: [PATCH] [HBASE-5535] Make the functions in task monitor synchronized Summary: There are some potential race condition in the task monitor. So update the functions in task monitor to be synchronized. The example of the problem caused by the race condition: ERROR org.apache.hadoop.hbase.regionserver.MemStoreFlusher: Cache flush failed for region java.lang.IndexOutOfBoundsException: Index: 1745, Size: 1744 at java.util.ArrayList.add(ArrayList.java:367) at java.util.SubList.add(AbstractList.java:633) at java.util.SubList.add(AbstractList.java:633) at java.util.SubList.add(AbstractList.java:633) at java.util.SubList.add(AbstractList.java:633) at java.util.SubList.add(AbstractList.java:633) at java.util.AbstractList.add(AbstractList.java:91) at org.apache.hadoop.hbase.monitoring.TaskMonitor.createStatus(TaskMonitor.java:74) at org.apache.hadoop.hbase.regionserver.HRegion.flushcache(HRegion.java:1139) at org.apache.hadoop.hbase.regionserver.MemStoreFlusher.flushRegion(MemStoreFlusher.java:260) at org.apache.hadoop.hbase.regionserver.MemStoreFlusher.flushRegion(MemStoreFlusher.java:234) at org.apache.hadoop.hbase.regionserver.MemStoreFlusher.run(MemStoreFlusher.java:146) Test Plan: running all the unit tests Reviewers: kannan, pkhemani Reviewed By: pkhemani CC: hbase-eng@lists Differential Revision: https://phabricator.fb.com/D422810 Task ID: 958785, 956527 --- .../hadoop/hbase/monitoring/TaskMonitor.java | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java index bdb754a..1cbc84a 100644 --- src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java +++ src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java @@ -66,7 +66,7 @@ public class TaskMonitor { return instance; } - public MonitoredTask createStatus(String description) { + public synchronized MonitoredTask createStatus(String description) { MonitoredTask stat = new MonitoredTaskImpl(); stat.setDescription(description); MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance( @@ -80,7 +80,7 @@ public class TaskMonitor { return proxy; } - public MonitoredRPCHandler createRPCStatus(String description) { + public synchronized MonitoredRPCHandler createRPCStatus(String description) { MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl(); stat.setDescription(description); MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance( -- 1.7.4.4