if(log.isInfoEnabled()) log.info("merge task terminated");
if(log.isDebugEnabled()) log.debug("merge task terminated");
        public void run() {            MergeData combined_merge_data=null;            if(merging == true) {                if(log.isWarnEnabled()) log.warn("merge is already in progress, terminating");                return;            }            if(log.isInfoEnabled()) log.info("merge task started");            try {                /* 1. Generate a merge_id that uniquely identifies the merge in progress */                merge_id=generateMergeId();                /* 2. Fetch the current Views/Digests from all subgroup coordinators */                getMergeDataFromSubgroupCoordinators(coords, gms.merge_timeout);                /* 3. Remove rejected MergeData elements from merge_rsp and coords (so we'll send the new view only                   to members who accepted the merge request) */                removeRejectedMergeRequests(coords);                if(merge_rsps.size() <= 1) {                    if(log.isWarnEnabled())                        log.warn("merge responses from subgroup coordinators <= 1 (" + merge_rsps + "). Cancelling merge");                    sendMergeCancelledMessage(coords, merge_id);                    return;                }                /* 4. Combine all views and digests into 1 View/1 Digest */                combined_merge_data=consolidateMergeData(merge_rsps);                if(combined_merge_data == null) {                    if(log.isErrorEnabled()) log.error("combined_merge_data == null");                    sendMergeCancelledMessage(coords, merge_id);                    return;                }                /* 5. Send the new View/Digest to all coordinators (including myself). On reception, they will                   install the digest and view in all of their subgroup members */                sendMergeView(coords, combined_merge_data);            }            catch(Throwable ex) {                if(log.isErrorEnabled()) log.error("exception=" + ex);            }            finally {                merging=false;                    if(log.isInfoEnabled()) log.info("merge task terminated");                t=null;            }        }