@Override public long addAndGet(long delta) { if(local_addr.equals(coord)) { VersionedValue val=getCounter(name); long retval=val.addAndGet(delta)[0]; if(backup_coords != null) updateBackups(name, val.value, val.version); return retval; } Owner owner=getOwner(); Request req=new AddAndGetRequest(owner, name, delta); Promise<long[]> promise=new Promise<>(); pending_requests.put(owner, new Tuple<>(req, promise)); sendRequest(coord, req); Object obj=null; try { obj=promise.getResultWithTimeout(timeout); if(obj instanceof Throwable) throw new IllegalStateException((Throwable)obj); long[] result=(long[])obj; long value=result[0], version=result[1]; if(!coord.equals(local_addr)) counters.put(name, new VersionedValue(value, version)); return value; } catch(TimeoutException e) { throw new RuntimeException(e); } }
@Override public void set(long new_value) { if(local_addr.equals(coord)) { VersionedValue val=getCounter(name); val.set(new_value); if(backup_coords != null) updateBackups(name, val.value, val.version); return; } Owner owner=getOwner(); Request req=new SetRequest(owner, name, new_value); Promise<long[]> promise=new Promise<>(); pending_requests.put(owner, new Tuple<>(req, promise)); sendRequest(coord, req); Object obj=null; try { obj=promise.getResultWithTimeout(timeout); if(obj instanceof Throwable) throw new IllegalStateException((Throwable)obj); long[] result=(long[])obj; long value=result[0], version=result[1]; if(!coord.equals(local_addr)) counters.put(name, new VersionedValue(value, version)); } catch(TimeoutException e) { throw new RuntimeException(e); } }
boolean retval=val.compareAndSet(expect, update) != null; if(backup_coords != null) updateBackups(name, val.value, val.version); return retval;
sendResponse(sender,rsp); if(backup_coords != null) updateBackups(tmp.name, val.value, val.version); break; case DELETE: sendResponse(sender, rsp); if(backup_coords != null) updateBackups(((SimpleRequest)req).name, result[0], result[1]); break; case COMPARE_AND_SET: if(backup_coords != null) { VersionedValue value=counters.get(((SimpleRequest)req).name); updateBackups(((SimpleRequest)req).name, value.value, value.version); sendResponse(sender, rsp); if(backup_coords != null) updateBackups(((SimpleRequest)req).name, result[0], result[1]); break; case UPDATE:
@Override public void set(long new_value) { if(local_addr.equals(coord)) { VersionedValue val=getCounter(name); val.set(new_value); if(backup_coords != null) updateBackups(name, val.value, val.version); return; } Owner owner=getOwner(); Request req=new SetRequest(owner, name, new_value); Promise<long[]> promise=new Promise<>(); pending_requests.put(owner, new Tuple<>(req, promise)); sendRequest(coord, req); Object obj=null; try { obj=promise.getResultWithTimeout(timeout); if(obj instanceof Throwable) throw new IllegalStateException((Throwable)obj); long[] result=(long[])obj; long value=result[0], version=result[1]; if(!coord.equals(local_addr)) counters.put(name, new VersionedValue(value, version)); } catch(TimeoutException e) { throw new RuntimeException(e); } }
boolean retval=val.compareAndSet(expect, update) != null; if(backup_coords != null) updateBackups(name, val.value, val.version); return retval;
@Override public long addAndGet(long delta) { if(local_addr.equals(coord)) { VersionedValue val=getCounter(name); long retval=val.addAndGet(delta)[0]; if(backup_coords != null) updateBackups(name, val.value, val.version); return retval; } Owner owner=getOwner(); Request req=new AddAndGetRequest(owner, name, delta); Promise<long[]> promise=new Promise<>(); pending_requests.put(owner, new Tuple<>(req, promise)); sendRequest(coord, req); Object obj=null; try { obj=promise.getResultWithTimeout(timeout); if(obj instanceof Throwable) throw new IllegalStateException((Throwable)obj); long[] result=(long[])obj; long value=result[0], version=result[1]; if(!coord.equals(local_addr)) counters.put(name, new VersionedValue(value, version)); return value; } catch(TimeoutException e) { throw new RuntimeException(e); } }
sendResponse(sender,rsp); if(backup_coords != null) updateBackups(tmp.name, val.value, val.version); break; case DELETE: sendResponse(sender, rsp); if(backup_coords != null) updateBackups(((SimpleRequest)req).name, result[0], result[1]); break; case COMPARE_AND_SET: if(backup_coords != null) { VersionedValue value=counters.get(((SimpleRequest)req).name); updateBackups(((SimpleRequest)req).name, value.value, value.version); sendResponse(sender, rsp); if(backup_coords != null) updateBackups(((SimpleRequest)req).name, result[0], result[1]); break; case UPDATE: