Package org.jgroups.util

Examples of org.jgroups.util.Digest


    /**
     * Get the view and digest and send back both (MergeData) in the form of a MERGE_RSP to the sender.
     * If a merge is already in progress, send back a MergeData with the merge_rejected field set to true.
     */
    public void handleMergeRequest(Address sender, ViewId merge_id) {
        Digest digest;
        View view;

        if(sender == null) {
            if(log.isErrorEnabled()) log.error("sender == null; cannot send back a response");
            return;
View Full Code Here


            // Example: {A}, B joins, after returning JoinRsp to B, A garbage collects messages higher than those
            // in the digest returned to the client, so the client will *not* be able to ask for retransmission
            // of those messages if he misses them           
            if(hasJoiningMembers) {
                gms.getDownProtocol().down(new Event(Event.SUSPEND_STABLE, MAX_SUSPEND_TIMEOUT));
                Digest tmp=gms.getDigest(); // get existing digest
                MutableDigest join_digest=null;
                if(tmp == null){
                    log.error("received null digest from GET_DIGEST: will cause JOIN to fail");
                }
                else {
                    // create a new digest, which contains the new member
                    join_digest=new MutableDigest(tmp.size() + new_mbrs.size());
                    join_digest.add(tmp); // add the existing digest to the new one
                    for(Address member:new_mbrs)
                        join_digest.add(member, 0, 0); // ... and add the new members. their first seqno will be 1
                }
                join_rsp=new JoinRsp(new_view, join_digest != null? join_digest.copy() : null);
View Full Code Here

        new_view=new MergeView(new_vid, new_mbrs.getMembers(), subgroups);
        if(log.isDebugEnabled())
            log.debug("Merge leader " + gms.local_addr + " computed new merged view that will be " + new_view);

        // determine the new digest
        Digest new_digest=consolidateDigests(merge_rsps, new_mbrs.size());
        if(new_digest == null) {
            if(log.isErrorEnabled()) log.error("Merge leader " + gms.local_addr + "could not consolidate digest for merge");
            return null;
        }
        if(log.isDebugEnabled()) log.debug("Merge leader " + gms.local_addr + "consolidated digest=" + new_digest);
View Full Code Here

     */
    private Digest consolidateDigests(Vector<MergeData> merge_rsps, int num_mbrs) {              
        MutableDigest retval=new MutableDigest(num_mbrs);

        for(MergeData data:merge_rsps) {           
            Digest tmp_digest=data.getDigest();
            if(tmp_digest == null) {
                if(log.isErrorEnabled()) log.error("tmp_digest == null; skipping");
                continue;
            }
            retval.merge(tmp_digest);
View Full Code Here

        a2=new IpAddress(6666);
        a3=new IpAddress(7777);
        map.put(a1, new Digest.Entry(4, 500, 501));
        map.put(a2, new Digest.Entry(25, 26, 26));
        map.put(a3, new Digest.Entry(20, 25, 33));
        d=new Digest(map);
        md=new MutableDigest(map);
    }
View Full Code Here

     *     the new view
     * </ol>
     */
    private void sendMergeView(Vector<Address> coords, MergeData combined_merge_data) {                     
        View v;
        Digest d;

        if(coords == null || combined_merge_data == null)
            return;

        v=combined_merge_data.view;
View Full Code Here

        d=new Digest(map);
        md=new MutableDigest(map);
    }

    public void testSize() {
        d2=new Digest(3);
        assertEquals(0, d2.size());
    }
View Full Code Here

      a2=new IpAddress(6666);
      a3=new IpAddress(7777);
      map.put(a1, new Digest.Entry(4, 500, 501));
      map.put(a2, new Digest.Entry(25, 26, 26));
      map.put(a3, new Digest.Entry(20, 25, 33));
      Digest digest =new Digest(map);
      
      Map<Address, Digest.Entry> map2=new HashMap<Address, Digest.Entry>();      
      map2.put(a1, new Digest.Entry(4, 500, 501));
      map2.put(a2, new Digest.Entry(25, 26, 26));
      map2.put(a3, new Digest.Entry(20, 37, 33));
      Digest digest2 =new Digest(map2);
      
      assertNotSame(digest, digest2);
     
      Digest diff = digest2.difference(digest);
      System.out.println(diff);
      assertTrue(diff.contains(a3));
        assertEquals(1, diff.size());
     
     
      Map<Address, Digest.Entry> map3=new HashMap<Address, Digest.Entry>();
      map3.put(a1, new Digest.Entry(4, 500, 501));
      map3.put(a2, new Digest.Entry(25, 26, 26));
      map3.put(a3, new Digest.Entry(20, 37, 33));
      map3.put(new IpAddress(8888), new Digest.Entry(1, 2, 3));
      Digest digest3 =new Digest(map3);
     
      diff = digest3.difference(digest);
      System.out.println(diff);
        assertEquals(2, diff.size());
     
      diff = digest3.difference(digest2);
      System.out.println(diff);
        assertEquals(1, diff.size());
     
      Digest diff2 = digest2.difference(digest3);
      System.out.println(diff2);
        assertEquals(1, diff2.size());
        assertEquals(diff, diff2);
    }
View Full Code Here

    public void testIsGreaterThanOrEqual() {
        Map<Address, Digest.Entry> map=new HashMap<Address, Digest.Entry>();
        map.put(a1, new Digest.Entry(4, 500, 501));
        map.put(a2, new Digest.Entry(25, 26, 26));
        map.put(a3, new Digest.Entry(20, 25, 33));
        Digest my=new Digest(map);

        System.out.println("\nd: " + d + "\nmy: " + my);
        assertTrue(my.isGreaterThanOrEqual(d));

        map.remove(a3);
        map.put(a3, new Digest.Entry(20, 26, 33));
        my=new Digest(map);
        System.out.println("\nd: " + d + "\nmy: " + my);
        assertTrue(my.isGreaterThanOrEqual(d));

        map.remove(a3);
        map.put(a3, new Digest.Entry(20, 22, 32));
        my=new Digest(map);
        System.out.println("\nd: " + d + "\nmy: " + my);
        assertFalse(my.isGreaterThanOrEqual(d));
    }
View Full Code Here

        assertFalse(d.equals(md));
    }


    public void testMutability() {
        Digest md2=md;
        assertEquals(md, md2);
        md.incrementHighestDeliveredSeqno(a2);
        assertEquals(md, md2);
    }
View Full Code Here

TOP

Related Classes of org.jgroups.util.Digest

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.