Skip to content

Commit

Permalink
Fix concurrent problem of CacheResult
Browse files Browse the repository at this point in the history
  • Loading branch information
huangli committed Oct 2, 2021
1 parent 75e6700 commit 995e70a
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
* @author <a href="mailto:[email protected]">huangli</a>
*/
public class CacheGetResult<V> extends CacheResult {
private V value;
private CacheValueHolder<V> holder;
private volatile V value;
private volatile CacheValueHolder<V> holder;

public static final CacheGetResult NOT_EXISTS_WITHOUT_MSG = new CacheGetResult(CacheResultCode.NOT_EXISTS, null, null);
public static final CacheGetResult EXPIRED_WITHOUT_MSG = new CacheGetResult(CacheResultCode.EXPIRED, null ,null);
Expand All @@ -35,9 +35,9 @@ public V getValue() {

@Override
protected void fetchResultSuccess(ResultData resultData) {
super.fetchResultSuccess(resultData);
holder = (CacheValueHolder<V>) resultData.getOriginData();
value = (V) unwrapValue(holder);
super.fetchResultSuccess(resultData);
}

static Object unwrapValue(Object holder) {
Expand All @@ -55,8 +55,8 @@ static Object unwrapValue(Object holder) {

@Override
protected void fetchResultFail(Throwable e) {
super.fetchResultFail(e);
value = null;
super.fetchResultFail(e);
}

protected CacheValueHolder<V> getHolder() {
Expand Down
12 changes: 6 additions & 6 deletions jetcache-core/src/main/java/com/alicp/jetcache/CacheResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ public class CacheResult {
public static final CacheResult FAIL_ILLEGAL_ARGUMENT = new CacheResult(CacheResultCode.FAIL, MSG_ILLEGAL_ARGUMENT);
public static final CacheResult EXISTS_WITHOUT_MSG = new CacheResult(CacheResultCode.EXISTS, null);

private CacheResultCode resultCode;
private String message;
private CompletionStage<ResultData> future;
private volatile CacheResultCode resultCode;
private volatile String message;
private final CompletionStage<ResultData> future;

private Duration timeout = DEFAULT_TIMEOUT;
private volatile Duration timeout = DEFAULT_TIMEOUT;

public CacheResult(CompletionStage<ResultData> future) {
this.future = future;
Expand Down Expand Up @@ -62,13 +62,13 @@ public void waitForResult(Duration timeout) {
}

protected void fetchResultSuccess(ResultData resultData) {
resultCode = resultData.getResultCode();
message = resultData.getMessage();
resultCode = resultData.getResultCode();
}

protected void fetchResultFail(Throwable e) {
resultCode = CacheResultCode.FAIL;
message = e.getClass() + ":" + e.getMessage();
resultCode = CacheResultCode.FAIL;
}

public CacheResultCode getResultCode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
* @author <a href="mailto:[email protected]">huangli</a>
*/
public class MultiGetResult<K, V> extends CacheResult {
private Map<K, CacheGetResult<V>> values;
private volatile Map<K, CacheGetResult<V>> values;

public MultiGetResult(CompletionStage<ResultData> future) {
super(future);
Expand All @@ -32,14 +32,14 @@ public Map<K, CacheGetResult<V>> getValues() {

@Override
protected void fetchResultSuccess(ResultData resultData) {
super.fetchResultSuccess(resultData);
values = (Map<K, CacheGetResult<V>>) resultData.getOriginData();
super.fetchResultSuccess(resultData);
}

@Override
protected void fetchResultFail(Throwable e) {
super.fetchResultFail(e);
values = null;
super.fetchResultFail(e);
}

public Map<K, V> unwrapValues() {
Expand Down

0 comments on commit 995e70a

Please sign in to comment.