Use atomic boolean for a var that is being accessed and modified by multiple threads.
diff --git a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTreeMutableComponent.java b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTreeMutableComponent.java
index 0f3e3ce..6c01b29 100644
--- a/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTreeMutableComponent.java
+++ b/hyracks/hyracks-storage-am-lsm-btree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/btree/impls/LSMBTreeMutableComponent.java
@@ -23,11 +23,10 @@
public class LSMBTreeMutableComponent extends AbstractMutableLSMComponent {
private final BTree btree;
- private final IVirtualBufferCache vbc;
public LSMBTreeMutableComponent(BTree btree, IVirtualBufferCache vbc) {
+ super(vbc);
this.btree = btree;
- this.vbc = vbc;
}
public BTree getBTree() {
@@ -35,11 +34,6 @@
}
@Override
- protected boolean isFull() {
- return vbc.isFull();
- }
-
- @Override
protected void reset() throws HyracksDataException {
super.reset();
btree.deactivate();
diff --git a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractMutableLSMComponent.java b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractMutableLSMComponent.java
index 7180492..43501f9 100644
--- a/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractMutableLSMComponent.java
+++ b/hyracks/hyracks-storage-am-lsm-common/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/common/impls/AbstractMutableLSMComponent.java
@@ -14,8 +14,11 @@
*/
package edu.uci.ics.hyracks.storage.am.lsm.common.impls;
+import java.util.concurrent.atomic.AtomicBoolean;
+
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMComponent;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.IVirtualBufferCache;
public abstract class AbstractMutableLSMComponent implements ILSMComponent {
@@ -23,8 +26,9 @@
private int writerCount;
private ComponentState state;
private IMutableResetCallback resetCallback;
+ private final IVirtualBufferCache vbc;
- private boolean isModified;
+ private final AtomicBoolean isModified;
private enum ComponentState {
READABLE_WRITABLE,
@@ -33,11 +37,12 @@
UNREADABLE_UNWRITABLE
}
- public AbstractMutableLSMComponent() {
+ public AbstractMutableLSMComponent(IVirtualBufferCache vbc) {
+ this.vbc = vbc;
readerCount = 0;
writerCount = 0;
state = ComponentState.READABLE_WRITABLE;
- isModified = false;
+ isModified = new AtomicBoolean();
}
@Override
@@ -123,16 +128,18 @@
}
public void setIsModified() {
- isModified = true;
+ isModified.set(true);
}
public boolean isModified() {
- return isModified;
+ return isModified.get();
}
- protected abstract boolean isFull();
+ public boolean isFull() {
+ return vbc.isFull();
+ }
protected void reset() throws HyracksDataException {
- isModified = false;
+ isModified.set(false);
}
}
diff --git a/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMutableComponent.java b/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMutableComponent.java
index 7084803..d6c3c5e 100644
--- a/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMutableComponent.java
+++ b/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndexMutableComponent.java
@@ -25,12 +25,11 @@
private final IInvertedIndex invIndex;
private final BTree deletedKeysBTree;
- private final IVirtualBufferCache vbc;
public LSMInvertedIndexMutableComponent(IInvertedIndex invIndex, BTree deletedKeysBTree, IVirtualBufferCache vbc) {
+ super(vbc);
this.invIndex = invIndex;
this.deletedKeysBTree = deletedKeysBTree;
- this.vbc = vbc;
}
public IInvertedIndex getInvIndex() {
@@ -42,11 +41,6 @@
}
@Override
- protected boolean isFull() {
- return vbc.isFull();
- }
-
- @Override
protected void reset() throws HyracksDataException {
super.reset();
invIndex.deactivate();
diff --git a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMutableComponent.java b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMutableComponent.java
index 7d572ad..ffe583c 100644
--- a/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMutableComponent.java
+++ b/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/edu/uci/ics/hyracks/storage/am/lsm/rtree/impls/LSMRTreeMutableComponent.java
@@ -25,12 +25,11 @@
private final RTree rtree;
private final BTree btree;
- private final IVirtualBufferCache vbc;
public LSMRTreeMutableComponent(RTree rtree, BTree btree, IVirtualBufferCache vbc) {
+ super(vbc);
this.rtree = rtree;
this.btree = btree;
- this.vbc = vbc;
}
public RTree getRTree() {
@@ -42,11 +41,6 @@
}
@Override
- protected boolean isFull() {
- return vbc.isFull();
- }
-
- @Override
protected void reset() throws HyracksDataException {
super.reset();
rtree.deactivate();