in hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractMemoryLSMComponent.java [52:114]
public boolean threadEnter(LSMOperationType opType, boolean isMutableComponent) throws HyracksDataException {
if (state == ComponentState.INACTIVE && requestedToBeActive) {
state = ComponentState.READABLE_WRITABLE;
requestedToBeActive = false;
}
switch (opType) {
case FORCE_MODIFICATION:
if (isMutableComponent) {
if (state == ComponentState.READABLE_WRITABLE || state == ComponentState.READABLE_UNWRITABLE) {
writerCount++;
} else {
return false;
}
} else {
if (state == ComponentState.READABLE_UNWRITABLE
|| state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
readerCount++;
} else {
return false;
}
}
break;
case MODIFICATION:
if (isMutableComponent) {
if (state == ComponentState.READABLE_WRITABLE) {
writerCount++;
} else {
return false;
}
} else {
if (state == ComponentState.READABLE_UNWRITABLE
|| state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
readerCount++;
} else {
return false;
}
}
break;
case REPLICATE:
case SEARCH:
if (state == ComponentState.READABLE_WRITABLE || state == ComponentState.READABLE_UNWRITABLE
|| state == ComponentState.READABLE_UNWRITABLE_FLUSHING) {
readerCount++;
} else {
return false;
}
break;
case FLUSH:
if (state == ComponentState.READABLE_WRITABLE || state == ComponentState.READABLE_UNWRITABLE) {
if (writerCount != 0) {
throw new IllegalStateException("Trying to flush when writerCount != 0");
}
state = ComponentState.READABLE_UNWRITABLE_FLUSHING;
readerCount++;
} else {
return false;
}
break;
default:
throw new UnsupportedOperationException("Unsupported operation " + opType);
}
return true;
}