protected void handleException(Throwable exception) { state_provider=null; // ?? up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult(exception))); }
protected void handleViewChange(View v) { super.handleViewChange(v); if(state_provider != null && !v.getMembers().contains(state_provider)) { openBarrierAndResumeStable(); Exception ex=new EOFException("state provider " + state_provider + " left"); up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult(ex))); } }
protected void handleException(Throwable exception) { if(isDigestNeeded()) openBarrierAndResumeStable(); up_prot.up(new Event(Event.GET_STATE_OK, new StateTransferResult(exception))); }
protected void handleViewChange(View v) { super.handleViewChange(v); if(state_provider != null && !v.getMembers().contains(state_provider)) { Util.close(input_stream); openBarrierAndResumeStable(); Exception ex=new EOFException("state provider " + state_provider + " left"); up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult(ex))); } }
protected void handleViewChange(View v) { Address old_coord; List<Address> new_members=v.getMembers(); boolean send_up_exception=false; this.view=v; synchronized(members) { old_coord=(!members.isEmpty()? members.get(0) : null); members.clear(); members.addAll(new_members); // this handles the case where a coord dies during a state transfer; prevents clients from hanging forever // Note this only takes a coordinator crash into account, a getState(target, timeout), where target is not // null is not handled ! (Usually we get the state from the coordinator) // http://jira.jboss.com/jira/browse/JGRP-148 if(waiting_for_state_response && old_coord != null && !members.contains(old_coord)) send_up_exception=true; } if(send_up_exception) { log.warn("%s: discovered that the state provider (%s) left", local_addr, old_coord); waiting_for_state_response=false; Exception ex=new EOFException("state provider " + old_coord + " left"); up_prot.up(new Event(Event.GET_STATE_OK, new StateTransferResult(ex))); openBarrierAndResumeStable(); } // remove non members from list of members requesting state state_requesters.retainAll(new_members); }
protected void setStateInApplication(InputStream in, Object resource, final Address provider) { log.debug("%s: setting the state in the aplication", local_addr); try { up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM, in)); up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult())); down_prot.down(new Event(Event.GET_VIEW_FROM_COORD)); // https://issues.jboss.org/browse/JGRP-1751 } catch(Throwable t) { handleException(t); } finally { Util.close(in); close(resource); if(isDigestNeeded()) { openBarrierAndResumeStable(); closeHoleFor(provider); } } }
state_promise.setResult(new StateTransferResult(t)); state_promise.setResult(new StateTransferResult(t));
up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult()));
/** Set the digest and the send the state up to the application */ protected void handleStateRsp(final Digest digest, Address sender, byte[] state) { try { if(isDigestNeeded()) { punchHoleFor(sender); closeBarrierAndSuspendStable(); // fix for https://jira.jboss.org/jira/browse/JGRP-1013 if(digest != null) down_prot.down(new Event(Event.OVERWRITE_DIGEST, digest)); // set the digest (e.g. in NAKACK) } waiting_for_state_response=false; stop=System.currentTimeMillis(); log.debug("%s: received state, size=%s, time=%d milliseconds", local_addr, (state == null? "0" : Util.printBytes(state.length)), stop - start); StateTransferResult result=new StateTransferResult(state); up_prot.up(new Event(Event.GET_STATE_OK, result)); down_prot.down(new Event(Event.GET_VIEW_FROM_COORD)); // https://issues.jboss.org/browse/JGRP-1751 } catch(Throwable t) { handleException(t); } finally { if(isDigestNeeded()) { closeHoleFor(sender); openBarrierAndResumeStable(); } } }
protected void handleException(Throwable exception) { state_provider=null; // ?? up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult(exception))); }
protected void handleException(Throwable exception) { if(isDigestNeeded()) openBarrierAndResumeStable(); up_prot.up(new Event(Event.GET_STATE_OK, new StateTransferResult(exception))); }
protected void handleViewChange(View v) { super.handleViewChange(v); if(state_provider != null && !v.getMembers().contains(state_provider)) { openBarrierAndResumeStable(); Exception ex=new EOFException("state provider " + state_provider + " left"); up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult(ex))); } }
protected void handleViewChange(View v) { super.handleViewChange(v); if(state_provider != null && !v.getMembers().contains(state_provider)) { Util.close(input_stream); openBarrierAndResumeStable(); Exception ex=new EOFException("state provider " + state_provider + " left"); up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult(ex))); } }
protected void handleViewChange(View v) { Address old_coord; List<Address> new_members=v.getMembers(); boolean send_up_exception=false; this.view=v; synchronized(members) { old_coord=(!members.isEmpty()? members.get(0) : null); members.clear(); members.addAll(new_members); // this handles the case where a coord dies during a state transfer; prevents clients from hanging forever // Note this only takes a coordinator crash into account, a getState(target, timeout), where target is not // null is not handled ! (Usually we get the state from the coordinator) // http://jira.jboss.com/jira/browse/JGRP-148 if(waiting_for_state_response && old_coord != null && !members.contains(old_coord)) send_up_exception=true; } if(send_up_exception) { log.warn("%s: discovered that the state provider (%s) left", local_addr, old_coord); waiting_for_state_response=false; Exception ex=new EOFException("state provider " + old_coord + " left"); up_prot.up(new Event(Event.GET_STATE_OK, new StateTransferResult(ex))); openBarrierAndResumeStable(); } // remove non members from list of members requesting state state_requesters.retainAll(new_members); }
protected void setStateInApplication(InputStream in, Object resource, final Address provider) { log.debug("%s: setting the state in the aplication", local_addr); try { up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM, in)); up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult())); down_prot.down(new Event(Event.GET_VIEW_FROM_COORD)); // https://issues.jboss.org/browse/JGRP-1751 } catch(Throwable t) { handleException(t); } finally { Util.close(in); close(resource); if(isDigestNeeded()) { openBarrierAndResumeStable(); closeHoleFor(provider); } } }
state_promise.setResult(new StateTransferResult(t)); state_promise.setResult(new StateTransferResult(t));
up_prot.up(new Event(Event.STATE_TRANSFER_INPUTSTREAM_CLOSED, new StateTransferResult()));
/** Set the digest and the send the state up to the application */ protected void handleStateRsp(final Digest digest, Address sender, byte[] state) { try { if(isDigestNeeded()) { punchHoleFor(sender); closeBarrierAndSuspendStable(); // fix for https://jira.jboss.org/jira/browse/JGRP-1013 if(digest != null) down_prot.down(new Event(Event.OVERWRITE_DIGEST, digest)); // set the digest (e.g. in NAKACK) } waiting_for_state_response=false; stop=System.currentTimeMillis(); log.debug("%s: received state, size=%s, time=%d milliseconds", local_addr, (state == null? "0" : Util.printBytes(state.length)), stop - start); StateTransferResult result=new StateTransferResult(state); up_prot.up(new Event(Event.GET_STATE_OK, result)); down_prot.down(new Event(Event.GET_VIEW_FROM_COORD)); // https://issues.jboss.org/browse/JGRP-1751 } catch(Throwable t) { handleException(t); } finally { if(isDigestNeeded()) { closeHoleFor(sender); openBarrierAndResumeStable(); } } }