diff --git src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
index 38aada9..417628b 100644
--- src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
+++ src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
@@ -161,7 +161,9 @@ public class SplitTransaction {
* false if it is not (e.g. its already closed, etc.).
*/
public boolean prepare() {
- if (this.parent.isClosed() || this.parent.isClosing()) return false;
+ if (this.parent.isClosed() || this.parent.isClosing() || this.parent.hasReferences()) {
+ return false;
+ }
// Split key can be null if this region is unsplittable; i.e. has refs.
if (this.splitrow == null) return false;
HRegionInfo hri = this.parent.getRegionInfo();
diff --git src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransaction.java src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransaction.java
index 408edc6..da1f2c2 100644
--- src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransaction.java
+++ src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransaction.java
@@ -19,6 +19,8 @@
*/
package org.apache.hadoop.hbase.regionserver;
+import com.google.common.collect.ImmutableList;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -142,6 +144,29 @@ public class TestSplitTransaction {
}
/**
+ * Pass a reference store
+ */
+ @Test public void testPrepareWithRegionsWithReference() throws IOException {
+ // create a mock that will act as a reference StoreFile
+ StoreFile storeFileMock = Mockito.mock(StoreFile.class);
+ when(storeFileMock.isReference()).thenReturn(true);
+
+ // add the mock to the parent stores
+ Store storeMock = Mockito.mock(Store.class);
+ List storeFileList = new ArrayList(1);
+ storeFileList.add(storeFileMock);
+ when(storeMock.getStorefiles()).thenReturn(storeFileList);
+ when(storeMock.close()).thenReturn(ImmutableList.copyOf(storeFileList));
+ this.parent.stores.put(Bytes.toBytes(""), storeMock);
+
+ SplitTransaction st = new SplitTransaction(this.parent, GOOD_SPLIT_ROW);
+
+ assertFalse("a region should not be splittable if it has instances of store file references",
+ st.prepare());
+ }
+
+
+ /**
* Pass an unreasonable split row.
*/
@Test public void testPrepareWithBadSplitRow() throws IOException {