@ManagedAttribute(description="Is a merge currently running") public boolean isMergeInProgress() {return merger.isMergeInProgress();}
/** * Invoked upon receiving a MERGE event from the MERGE layer. Starts the merge protocol. * See description of protocol in DESIGN. * @param views A List of <em>different</em> views detected by the merge protocol, keyed by sender */ public void merge(Map<Address, View> views) { if(views == null || views.isEmpty()) { log.warn("the views passed with the MERGE event were empty (or null); ignoring MERGE event"); return; } if(View.sameViews(views.values())) { log.debug("MERGE event is ignored because of identical views: %s", Util.printListWithDelimiter(views.values(), ", ")); return; } if(isMergeInProgress()) { log.trace("%s: merge is already running (merge_id=%s)", gms.local_addr, merge_id); return; } Address merge_leader=determineMergeLeader(views); if(merge_leader == null) return; if(merge_leader.equals(gms.local_addr)) { log.debug("%s: I will be the merge leader. Starting the merge task. Views: %s", gms.local_addr, views); merge_task.start(views); } else log.trace("%s: I'm not the merge leader, waiting for merge leader (%s) to start merge", gms.local_addr, merge_leader); }
public Object up(Event evt) { switch(evt.getType()) { case Event.SUSPECT: Object retval=up_prot.up(evt); // todo: change this to only accept lists in 4.1 Collection<Address> suspects=evt.arg() instanceof Address? Collections.singletonList(evt.arg()) : evt.arg(); Request[] suspect_reqs=new Request[suspects.size()]; int index=0; for(Address mbr: suspects) suspect_reqs[index++]=new Request(Request.SUSPECT, mbr); view_handler.add(suspect_reqs); ack_collector.suspect(suspects); merge_ack_collector.suspect(suspects); return retval; case Event.UNSUSPECT: impl.unsuspect(evt.getArg()); return null; // discard case Event.MERGE: view_handler.add(new Request(Request.MERGE, null, evt.getArg())); return null; // don't pass up case Event.IS_MERGE_IN_PROGRESS: return merger.isMergeInProgress(); } return up_prot.up(evt); }
@ManagedAttribute(description="Is a merge currently running") public boolean isMergeInProgress() {return merger.isMergeInProgress();}
/** * Invoked upon receiving a MERGE event from the MERGE layer. Starts the merge protocol. * See description of protocol in DESIGN. * @param views A List of <em>different</em> views detected by the merge protocol, keyed by sender */ public void merge(Map<Address, View> views) { if(views == null || views.isEmpty()) { log.warn("the views passed with the MERGE event were empty (or null); ignoring MERGE event"); return; } if(View.sameViews(views.values())) { log.debug("MERGE event is ignored because of identical views: %s", Util.printListWithDelimiter(views.values(), ", ")); return; } if(isMergeInProgress()) { log.trace("%s: merge is already running (merge_id=%s)", gms.local_addr, merge_id); return; } Address merge_leader=determineMergeLeader(views); if(merge_leader == null) return; if(merge_leader.equals(gms.local_addr)) { log.debug("%s: I will be the merge leader. Starting the merge task. Views: %s", gms.local_addr, views); merge_task.start(views); } else log.trace("%s: I'm not the merge leader, waiting for merge leader (%s) to start merge", gms.local_addr, merge_leader); }
public Object up(Event evt) { switch(evt.getType()) { case Event.SUSPECT: Object retval=up_prot.up(evt); // todo: change this to only accept lists in 4.1 Collection<Address> suspects=evt.arg() instanceof Address? Collections.singletonList(evt.arg()) : evt.arg(); Request[] suspect_reqs=new Request[suspects.size()]; int index=0; for(Address mbr: suspects) suspect_reqs[index++]=new Request(Request.SUSPECT, mbr); view_handler.add(suspect_reqs); ack_collector.suspect(suspects); merge_ack_collector.suspect(suspects); return retval; case Event.UNSUSPECT: impl.unsuspect(evt.getArg()); return null; // discard case Event.MERGE: view_handler.add(new Request(Request.MERGE, null, evt.getArg())); return null; // don't pass up case Event.IS_MERGE_IN_PROGRESS: return merger.isMergeInProgress(); } return up_prot.up(evt); }