亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? stable.java

?? JGRoups源碼
?? JAVA
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
     * passed down by default by the superclass after this method returns !</b>     *     * @return boolean Defaults to true. If false, event will not be passed     * down the stack.     */    public boolean handleDownEvent(Event evt) {        switch(evt.getType()) {            case Event.VIEW_CHANGE:                if(!downViewChange(evt))                    return (false);                break;                // does anyone else below needs this msg except STABLE?            case Event.GET_MSGS_RECEIVED_OK:                if(!downGetMsgsReceived(evt))                    return (false);                break;        }        return (true);    }    /**     * The gossip task that runs periodically     */    private void gossipRun() {        num_msgs=max_msgs;        sendGossip();    }    /**     * <pre>     * Reset the state of msg garbage-collection:     * i. Reset the table of highest seqnos seen by each member     * ii. Reset the tbl of mbrs from which highest seqnos have been recorded     * </pre>     */    private void initialize() {        synchronized(this) {            seqnos=new long[mbrs.size()];            for(int i=0; i < seqnos.length; i++)                seqnos[i]=-1;            heard_from=new boolean[mbrs.size()];            for(int i=0; i < heard_from.length; i++)                heard_from[i]=false;        }    }    /**     * (1)<br>     * Merge this member's table of highest seqnos seen by a each member     * with the one received from a gossip by another member. The result is     * the element-wise minimum of the input arrays. For each entry:<br>     *     * <tt>seqno[mbr_i] = min(seqno[mbr_i], gossip_seqno[mbr_i])</tt>     * <p>     *     * (2)<br>     * Merge the <tt>heard from</tt> tables of this member and the sender of     * the gossip. The resulting table is:<br>     *     * <tt>heard_from[mbr_i] = heard_from[mbr_i] | sender_heard[mbr_i]</tt>     *     * @param sender the sender of the gossip     * @param gossip_seqnos the highest deliverable seqnos of the sender     * @param gossip_heard_from the table of members sender has heard from     *     */    private void update(Object sender, long[] gossip_seqnos,                        boolean[] gossip_heard_from) {        int index;        synchronized(this) {            index=mbrs.indexOf(sender);            if(index < 0) {                 if(warn) log.warn("sender " + sender + " not found in mbrs !");                return;            }            for(int i=0; i < gossip_seqnos.length; i++)                seqnos[i]=Math.min(seqnos[i], gossip_seqnos[i]);            heard_from[index]=true;            for(int i=0; i < heard_from.length; i++)                heard_from[i]=heard_from[i] | gossip_heard_from[i];        }    }    /**     * Set the seqnos and heard_from arrays to those of the sender. The     * method is called when the sender seems to know more than this member.     * The situation occurs if either:     * <ul>     * <li>     * sender.heard_from > this.heard_from, i.e. the sender has heard     * from more members than we have</li>     * <li>     * sender.round > this.round, i.e. the sender is in a more recent round     * than we are</li>     * </ul>     *     * In both cases, this member is assigned the state of the sender     */    private void set(Object sender, long[] gossip_seqnos,                     boolean[] gossip_heard_from) {        int index;        synchronized(this) {            index=mbrs.indexOf(sender);            if(index < 0) {                 if(warn) log.warn("sender " + sender + " not found in mbrs !");                return;            }            seqnos=gossip_seqnos;            heard_from=gossip_heard_from;        }    }    /**     * @return true, if we have received the highest deliverable seqnos     * directly or indirectly from all members     */    private boolean heardFromAll() {        synchronized(this) {            if(heard_from == null) return false;            for(int i=0; i < heard_from.length; i++)                if(!heard_from[i])                    return false;        }        return true;    }    /**     * Send our <code>seqnos</code> array to a subset of the membership     */    private void sendGossip() {        Vector gossip_subset;        Object[] params;        MethodCall call;        synchronized(this) {            gossip_subset=Util.pickSubset(mbrs, subset);            if(gossip_subset == null || gossip_subset.size() < 1) {                 if(warn) log.warn("picked empty subset !");                return;            }                if(log.isInfoEnabled()) log.info("subset=" + gossip_subset + ", round=" + round + ", seqnos=" +                        Util.array2String(seqnos));            params=new Object[]{                vid.clone(),                new Long(round),                seqnos.clone(),                heard_from.clone(),                local_addr};        }        call=new MethodCall("gossip", params,             new String[] {ViewId.class.getName(), long.class.getName(), long[].class.getName(), boolean[].class.getName(), Object.class.getName()});        for(int i=0; i < gossip_subset.size(); i++) {            try {                callRemoteMethod((Address)gossip_subset.get(i), call, GroupRequest.GET_NONE, 0);            }            catch(Exception e) {                 if(log.isDebugEnabled()) log.debug("exception=" + e);            }        }    }    /**     * Sends GET_MSGS_RECEIVED to NAKACK layer (above us !) and stores result     * in <code>seqnos</code>. In case <code>seqnos</code> does not yet exist     * it creates and initializes it.     */    private void getHighestSeqnos() {        synchronized(highest_seqnos_mutex) {            passUp(new Event(Event.GET_MSGS_RECEIVED));            try {                highest_seqnos_mutex.wait(highest_seqnos_timeout);            }            catch(InterruptedException e) {                if(log.isErrorEnabled()) log.error("Interrupted while waiting for highest seqnos from NAKACK");            }        }    }    /**     * Start scheduling the gossip task     */    private void startGossip() {        synchronized(this) {            if(gossip_task != null)                gossip_task.cancel();            gossip_task=new Task(new Times(new long[]{GOSSIP_INTERVAL}));            sched.add(gossip_task);        }    }    /**     * Received a <tt>MSG</tt> event from a layer below     *     * A msg received:     * If unicast ignore; if multicast and time for gossiping has been     * reached, send out a gossip to a subset of the mbrs     *     * @return true if the event should be forwarded to the layer above     */    private boolean upMsg(Event e) {        Message msg=(Message)e.getArg();        if(msg.getDest() != null && (!msg.getDest().isMulticastAddress()))            return (true);        synchronized(this) {            --num_msgs;            if(num_msgs > 0)                return (true);            num_msgs=max_msgs;            gossip_task.cancel();            gossip_task=new Task(new Times(new long[]{0, GOSSIP_INTERVAL}));            sched.add(gossip_task);        }        return (true);    }    /**     * Received a <tt>VIEW_CHANGE</tt> event from a layer above     *     * A new view:     * i. Set the new mbrs list and the new view ID.     * ii. Reset the highest deliverable seqnos seen     *     * @return true if the event should be forwarded to the layer below     */    private boolean downViewChange(Event e) {        View v=(View)e.getArg();        Vector new_mbrs=v.getMembers();        /*          // Could this ever happen? GMS is always sending non-null value          if(new_mbrs == null) {          / Trace.println(          "STABLE.handleDownEvent()", Trace.ERROR,          "Received VIEW_CHANGE event with null mbrs list");          break;          }        */        synchronized(this) {            vid=v.getVid();            mbrs.clear();            mbrs.addAll(new_mbrs);            initialize();        }        return (true);    }    /**     * Received a <tt>GET_MSGS__RECEIVED_OK</tt> event from a layer above     *     * Updated list of highest deliverable seqnos:     * i. Update the local copy of highest deliverable seqnos     *     * @return true if the event should be forwarded to the layer below     */    private boolean downGetMsgsReceived(Event e) {        long[] new_seqnos=(long[])e.getArg();        try {            synchronized(this) {                if(new_seqnos == null)                    return (true);                if(new_seqnos.length != seqnos.length) {                        if(log.isInfoEnabled()) log.info("GET_MSGS_RECEIVED: array of highest " +                                "seqnos seen so far (received from NAKACK layer) " +                                "has a different length (" + new_seqnos.length +                                ") from 'seqnos' array (" + seqnos.length + ')');                    return (true);                }                System.arraycopy(new_seqnos, 0, seqnos, 0, seqnos.length);            }        }        finally {            synchronized(highest_seqnos_mutex) {                highest_seqnos_mutex.notifyAll();            }        }        return (true);    }    /**     * Select next interval from list. Once the end of the list is reached,     * keep returning the last value. It would be sensible that list of     * times is in increasing order     */    private static class Times {        private int next=0;        private long[] times;        Times(long[] times) {            if(times.length == 0)                throw new IllegalArgumentException("times");            this.times=times;        }        public synchronized long next() {            if(next >= times.length)                return (times[times.length - 1]);            else                return (times[next++]);        }        public long[] times() {            return (times);        }        public synchronized void reset() {            next=0;        }    }    /**     * The gossiping task     */    private class Task implements TimeScheduler.Task {        private final Times intervals;        private boolean cancelled=false;        Task(Times intervals) {            this.intervals=intervals;        }        public long nextInterval() {            return (intervals.next());        }        public boolean cancelled() {            return (cancelled);        }        public void cancel() {            cancelled=true;        }        public void run() {            gossipRun();        }    }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av一二三| 看电视剧不卡顿的网站| 国产精品久久久久aaaa| 日韩美女久久久| 国产精品九色蝌蚪自拍| 亚洲国产精品嫩草影院| 免费高清在线视频一区·| 美女视频网站黄色亚洲| 色综合激情五月| 国产精品视频一二三区| 五月天精品一区二区三区| 国内精品第一页| 欧美日韩国产系列| 国产精品视频麻豆| 久久99精品久久久久久久久久久久| 波多野结衣中文字幕一区| 久久蜜桃香蕉精品一区二区三区| 亚洲伊人伊色伊影伊综合网| 成a人片国产精品| 久久久久久9999| 美女脱光内衣内裤视频久久影院| 91成人国产精品| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲欧美激情视频在线观看一区二区三区 | 老鸭窝一区二区久久精品| 色88888久久久久久影院按摩 | 91视频国产资源| 亚洲男人电影天堂| 在线观看亚洲精品视频| 亚洲激情欧美激情| caoporn国产精品| 一区二区在线免费| 91精品国产欧美日韩| 奇米精品一区二区三区在线观看一| 欧美日韩高清在线| 久久激情五月激情| 亚洲日本韩国一区| 国产午夜亚洲精品不卡 | 综合欧美一区二区三区| 欧美日韩另类一区| 久久99最新地址| 国产欧美久久久精品影院| 国产激情视频一区二区在线观看| 久久久亚洲综合| 97se亚洲国产综合在线| 日本成人在线看| 亚洲黄色av一区| 久久综合999| 欧美日韩国产三级| www.欧美亚洲| 国产一区二区不卡| 亚洲一区二区偷拍精品| 国产视频一区在线观看 | 一区二区三区在线视频免费观看| 日韩一级二级三级精品视频| 91网站黄www| jiyouzz国产精品久久| 国产大陆精品国产| 国产精品系列在线播放| 久久99精品国产.久久久久| 亚洲国产毛片aaaaa无费看| 国产精品免费久久| 中文字幕精品综合| 国产精品国产精品国产专区不片 | 成人免费高清视频| 99精品视频一区二区| 99久久精品国产精品久久| www.在线成人| 69av一区二区三区| 国产拍揄自揄精品视频麻豆 | 欧美日本国产一区| 精品国产三级a在线观看| 久久久久久久一区| 亚洲图片欧美综合| 九九**精品视频免费播放| 国产精品一区久久久久| 波多野结衣91| 欧美精品粉嫩高潮一区二区| 欧美大胆人体bbbb| 亚洲免费看黄网站| 一区二区三区在线免费观看| 丝袜亚洲另类欧美| 裸体一区二区三区| 色8久久精品久久久久久蜜| 精品欧美一区二区久久| 最新久久zyz资源站| 国产一区二区三区视频在线播放 | 三级亚洲高清视频| 91视频观看免费| 日韩一区二区三免费高清| 亚洲人午夜精品天堂一二香蕉| 天堂精品中文字幕在线| 91官网在线免费观看| 国产日产亚洲精品系列| 欧美aaa在线| 欧美区在线观看| 亚洲欧美精品午睡沙发| 国产成人av自拍| 中文字幕成人av| 国产精品一区二区三区网站| 日韩欧美成人午夜| 国产精品综合av一区二区国产馆| 欧美日韩mp4| 麻豆成人久久精品二区三区红 | 亚洲精品视频在线| 99久久精品国产毛片| 亚洲精品中文字幕乱码三区| 91热门视频在线观看| 亚洲一区二区三区四区五区黄| 99re亚洲国产精品| 视频精品一区二区| 日韩三级视频在线观看| 国内一区二区视频| 国产精品久久久久一区| 在线观看亚洲a| 国产一区二区三区黄视频 | 成人v精品蜜桃久久一区| 最新不卡av在线| 日韩亚洲欧美一区二区三区| 国产精品中文欧美| 亚洲国产wwwccc36天堂| 久久综合九色综合97婷婷女人| www.日韩精品| 久久99蜜桃精品| 一区二区三区鲁丝不卡| 久久久久久综合| 欧美va亚洲va在线观看蝴蝶网| 99热这里都是精品| 国产九九视频一区二区三区| 日韩电影在线一区二区三区| 亚洲视频在线观看三级| 日本一区二区视频在线| 欧美成人性战久久| 91精品国产乱码久久蜜臀| 在线免费观看日韩欧美| 972aa.com艺术欧美| 成人午夜在线播放| 成人av资源网站| 91女厕偷拍女厕偷拍高清| 国产福利精品导航| 粉嫩13p一区二区三区| 国产不卡视频一区二区三区| 激情久久五月天| 成人高清视频免费观看| 色综合久久88色综合天天免费| 99久久伊人网影院| 欧美日韩中字一区| 3751色影院一区二区三区| 欧美一二三在线| 国产精品入口麻豆原神| 亚洲国产一二三| 日韩高清欧美激情| 国产精品一区在线| 欧美综合天天夜夜久久| 91麻豆精品91久久久久久清纯| 精品久久一区二区| 亚洲一区二区视频在线| 国产一区二区三区在线看麻豆| 99国产欧美另类久久久精品| 欧洲另类一二三四区| 久久久蜜桃精品| 亚洲一区在线观看网站| 精品一区二区三区香蕉蜜桃| 成人精品视频.| 日韩一区二区在线观看视频播放| 国产欧美一区二区精品性色超碰| 亚洲一区二区三区四区不卡| 国产精品一区二区在线播放| 91精品国产综合久久精品麻豆 | 在线亚洲精品福利网址导航| 久久久久久久久蜜桃| 一区二区三区在线免费播放 | 国产精品免费丝袜| 国产一区二区三区免费观看| 国产精品乱子久久久久| 国产精品原创巨作av| 欧美日韩国产精品成人| 亚洲黄色小视频| 欧美偷拍一区二区| 亚洲成人综合网站| 欧美一区二区网站| 免费xxxx性欧美18vr| 精品久久久久久无| 国产尤物一区二区| 国产精品国产三级国产专播品爱网| 国产精品夜夜爽| 中文字幕在线一区免费| 91视频免费播放| 亚洲超碰97人人做人人爱| 欧美男男青年gay1069videost | 免费观看一级特黄欧美大片| 91精品国产麻豆国产自产在线 | 欧美高清你懂得| 高清国产午夜精品久久久久久| 国产精品天美传媒| 制服丝袜成人动漫| 国产成人精品三级| 亚洲成人资源在线| 久久综合国产精品| 欧美体内she精高潮|