protected void handleView(View view) { this.view=view; if(log.isDebugEnabled()) log.debug("view=" + view); List<Address> members=view.getMembers(); Address old_coord=coord; if(!members.isEmpty()) coord=members.get(0); if(Objects.equals(coord, local_addr)) { List<Address> old_backups=backup_coords != null? new ArrayList<>(backup_coords) : null; backup_coords=new CopyOnWriteArrayList<>(Util.pickNext(members, local_addr, num_backups)); // send the current values to all *new* backups List<Address> new_backups=Util.newElements(old_backups,backup_coords); for(Address new_backup: new_backups) { for(Map.Entry<String,VersionedValue> entry: counters.entrySet()) { UpdateRequest update=new UpdateRequest(entry.getKey(), entry.getValue().value, entry.getValue().version); sendRequest(new_backup, update); } } } else backup_coords=null; if(old_coord != null && coord != null && !old_coord.equals(coord) && local_addr.equals(coord)) { discard_requests=true; // set to false when the task is done startReconciliationTask(); } }
protected void updateBackups(String name, long value, long version) { Request req=new UpdateRequest(name, value, version); try { Buffer buffer=requestToBuffer(req); if(backup_coords != null && !backup_coords.isEmpty()) { for(Address backup_coord: backup_coords) send(backup_coord, buffer); } } catch(Exception ex) { log.error(Util.getMessage("FailedSending") + req + " to backup coordinator(s):" + ex); } }
protected static Request createRequest(RequestType type) { switch(type) { case COMPARE_AND_SET: return new CompareAndSetRequest(); case ADD_AND_GET: return new AddAndGetRequest(); case UPDATE: return new UpdateRequest(); case GET_OR_CREATE: return new GetOrCreateRequest(); case DELETE: return new DeleteRequest(); case SET: return new SetRequest(); case RECONCILE: return new ReconcileRequest(); case RESEND_PENDING_REQUESTS: return new ResendPendingRequests(); default: throw new IllegalArgumentException("failed creating a request from " + type); } }
protected void handleView(View view) { this.view=view; if(log.isDebugEnabled()) log.debug("view=" + view); List<Address> members=view.getMembers(); Address old_coord=coord; if(!members.isEmpty()) coord=members.get(0); if(Objects.equals(coord, local_addr)) { List<Address> old_backups=backup_coords != null? new ArrayList<>(backup_coords) : null; backup_coords=new CopyOnWriteArrayList<>(Util.pickNext(members, local_addr, num_backups)); // send the current values to all *new* backups List<Address> new_backups=Util.newElements(old_backups,backup_coords); for(Address new_backup: new_backups) { for(Map.Entry<String,VersionedValue> entry: counters.entrySet()) { UpdateRequest update=new UpdateRequest(entry.getKey(), entry.getValue().value, entry.getValue().version); sendRequest(new_backup, update); } } } else backup_coords=null; if(old_coord != null && coord != null && !old_coord.equals(coord) && local_addr.equals(coord)) { discard_requests=true; // set to false when the task is done startReconciliationTask(); } }
protected static Request createRequest(RequestType type) { switch(type) { case COMPARE_AND_SET: return new CompareAndSetRequest(); case ADD_AND_GET: return new AddAndGetRequest(); case UPDATE: return new UpdateRequest(); case GET_OR_CREATE: return new GetOrCreateRequest(); case DELETE: return new DeleteRequest(); case SET: return new SetRequest(); case RECONCILE: return new ReconcileRequest(); case RESEND_PENDING_REQUESTS: return new ResendPendingRequests(); default: throw new IllegalArgumentException("failed creating a request from " + type); } }
protected void updateBackups(String name, long value, long version) { Request req=new UpdateRequest(name, value, version); try { Buffer buffer=requestToBuffer(req); if(backup_coords != null && !backup_coords.isEmpty()) { for(Address backup_coord: backup_coords) send(backup_coord, buffer); } } catch(Exception ex) { log.error(Util.getMessage("FailedSending") + req + " to backup coordinator(s):" + ex); } }