public Digest copy() { return new Digest(members, Arrays.copyOf(seqnos, seqnos.length)); }
/** * Returns a message digest: for each member P the highest delivered and received seqno is added */ public Digest getDigest() { final Map<Address,long[]> map=new HashMap<>(); for(Map.Entry<Address,Table<Message>> entry: xmit_table.entrySet()) { Address sender=entry.getKey(); // guaranteed to be non-null (CCHM) Table<Message> buf=entry.getValue(); // guaranteed to be non-null (CCHM) long[] seqnos=buf.getDigest(); map.put(sender, seqnos); } return new Digest(map); }
public Digest getDigest(Address mbr) { if(mbr == null) return getDigest(); Table<Message> buf=xmit_table.get(mbr); if(buf == null) return null; long[] seqnos=buf.getDigest(); return new Digest(mbr, seqnos[0], seqnos[1]); }
public void readFrom(DataInput in) throws Exception { byte flags=in.readByte(); // 1. view if((flags & VIEW_PRESENT) == VIEW_PRESENT) { view=new View(); view.readFrom(in); } // 2. digest if((flags & DIGEST_PRESENT) == DIGEST_PRESENT) { digest=new Digest(view.getMembersRaw()); digest.readFrom(in, false); } // 3. fail_reason if((flags & FAIL_REASON_PRESENT) == FAIL_REASON_PRESENT) fail_reason=in.readUTF(); }
public static Tuple<View,Digest> _readViewAndDigest(byte[] buffer, int offset, int length) throws Exception { if(buffer == null) return null; DataInput in=new ByteArrayDataInputStream(buffer, offset, length); View tmp_view=null; Digest digest=null; short flags=in.readShort(); if((flags & VIEW_PRESENT) == VIEW_PRESENT) { tmp_view=(flags & MERGE_VIEW) == MERGE_VIEW? new MergeView() : (flags & DELTA_VIEW) == DELTA_VIEW? new DeltaView() : new View(); tmp_view.readFrom(in); } if((flags & DIGEST_PRESENT) == DIGEST_PRESENT) { if((flags & READ_ADDRS) == READ_ADDRS) { digest=new Digest(); digest.readFrom(in); } else { digest=new Digest(tmp_view.getMembersRaw()); digest.readFrom(in,false); } } return new Tuple<>(tmp_view, digest); }
void becomeSingletonMember(Address mbr) { View new_view=View.create(mbr, 0, mbr); // create singleton view with mbr as only member // set the initial digest (since I'm the first member) Digest initial_digest=new Digest(mbr, 0, 0); gms.installView(new_view, initial_digest); gms.becomeCoordinator(); // not really necessary - installView() should do it gms.getUpProtocol().up(new Event(Event.BECOME_SERVER)); gms.getDownProtocol().down(new Event(Event.BECOME_SERVER)); log.debug("%s: created cluster (first member). My view is %s, impl is %s", gms.getLocalAddress(), gms.getViewId(), gms.getImpl().getClass().getName()); } }
void filterIncomingMessage(DistributionMessage m) { switch (m.getDSFID()) { case JOIN_RESPONSE: JoinResponseMessage jrsp = (JoinResponseMessage) m; if (jrsp.getRejectionMessage() == null && services.getConfig().getTransport().isMcastEnabled()) { byte[] serializedDigest = jrsp.getMessengerData(); ByteArrayInputStream bis = new ByteArrayInputStream(serializedDigest); DataInputStream dis = new DataInputStream(bis); try { Digest digest = new Digest(); digest.readFrom(dis); logger.trace("installing JGroups message digest {}", digest); this.myChannel.getProtocolStack().getTopProtocol() .down(new Event(Event.MERGE_DIGEST, digest)); jrsp.setMessengerData(null); } catch (Exception e) { logger.fatal("Unable to read JGroups messaging digest", e); } } break; default: break; } }
public Digest copy() { return new Digest(senders); }
public Digest copy() { return new Digest(members, Arrays.copyOf(seqnos, seqnos.length)); }
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { type=in.readInt(); boolean digest_not_null=in.readBoolean(); if(digest_not_null) { stableDigest=new Digest(); stableDigest.readExternal(in); } }
/** * Returns a message digest: for each member P the highest delivered and received seqno is added */ public Digest getDigest() { final Map<Address,long[]> map=new HashMap<>(); for(Map.Entry<Address,Table<Message>> entry: xmit_table.entrySet()) { Address sender=entry.getKey(); // guaranteed to be non-null (CCHM) Table<Message> buf=entry.getValue(); // guaranteed to be non-null (CCHM) long[] seqnos=buf.getDigest(); map.put(sender, seqnos); } return new Digest(map); }
/** * Returns a message digest: for each member P the highest seqno received from P is added to the digest. */ private Digest getDigest() { Digest.Entry entry; Map<Address,Digest.Entry> map=new HashMap<Address,Digest.Entry>(members.size()); for(Address sender: members) { entry=getEntry(sender); if(entry == null) { if(log.isErrorEnabled()) { log.error("range is null"); } continue; } map.put(sender, entry); } return new Digest(map); }
/** * Returns a message digest: for each member P the highest seqno received from P <em>without a gap</em> is added to * the digest. E.g. if the seqnos received from P are [+3 +4 +5 -6 +7 +8], then 5 will be returned. Also, the * highest seqno <em>seen</em> is added. The max of all highest seqnos seen will be used (in STABLE) to determine * whether the last seqno from a sender was received (see "Last Message Dropped" topic in DESIGN). */ private Digest getDigestHighestDeliveredMsgs() { Digest.Entry entry; Map<Address,Digest.Entry> map=new HashMap<Address,Digest.Entry>(members.size()); for(Address sender: members) { entry=getEntry(sender); if(entry == null) { if(log.isErrorEnabled()) { log.error("range is null"); } continue; } map.put(sender, entry); } return new Digest(map); }
public Digest getDigest(Address mbr) { if(mbr == null) return getDigest(); Table<Message> buf=xmit_table.get(mbr); if(buf == null) return null; long[] seqnos=buf.getDigest(); return new Digest(mbr, seqnos[0], seqnos[1]); }
public void readFrom(DataInput in) throws Exception { byte flags=in.readByte(); // 1. view if((flags & VIEW_PRESENT) == VIEW_PRESENT) { view=new View(); view.readFrom(in); } // 2. digest if((flags & DIGEST_PRESENT) == DIGEST_PRESENT) { digest=new Digest(view.getMembersRaw()); digest.readFrom(in, false); } // 3. fail_reason if((flags & FAIL_REASON_PRESENT) == FAIL_REASON_PRESENT) fail_reason=in.readUTF(); }
result=new Digest(resultMap);
void becomeSingletonMember(Address mbr) { Digest initial_digest; ViewId view_id; Vector mbrs=new Vector(1); // set the initial digest (since I'm the first member) initial_digest=new Digest(gms.local_addr, 0, 0); // initial seqno mcast by me will be 1 (highest seen +1) gms.setDigest(initial_digest); view_id=new ViewId(mbr); // create singleton view with mbr as only member mbrs.addElement(mbr); gms.installView(new View(view_id, mbrs)); gms.becomeCoordinator(); // not really necessary - installView() should do it gms.getUpProtocol().up(new Event(Event.BECOME_SERVER)); gms.getDownProtocol().down(new Event(Event.BECOME_SERVER)); if(log.isDebugEnabled()) log.debug("created group (first member). My view is " + gms.view_id + ", impl is " + gms.getImpl().getClass().getName()); }
public static Tuple<View,Digest> _readViewAndDigest(byte[] buffer, int offset, int length) throws Exception { if(buffer == null) return null; DataInput in=new ByteArrayDataInputStream(buffer, offset, length); View tmp_view=null; Digest digest=null; short flags=in.readShort(); if((flags & VIEW_PRESENT) == VIEW_PRESENT) { tmp_view=(flags & MERGE_VIEW) == MERGE_VIEW? new MergeView() : (flags & DELTA_VIEW) == DELTA_VIEW? new DeltaView() : new View(); tmp_view.readFrom(in); } if((flags & DIGEST_PRESENT) == DIGEST_PRESENT) { if((flags & READ_ADDRS) == READ_ADDRS) { digest=new Digest(); digest.readFrom(in); } else { digest=new Digest(tmp_view.getMembersRaw()); digest.readFrom(in,false); } } return new Tuple<>(tmp_view, digest); }
void becomeSingletonMember(Address mbr) { View new_view=View.create(mbr, 0, mbr); // create singleton view with mbr as only member // set the initial digest (since I'm the first member) Digest initial_digest=new Digest(mbr, 0, 0); gms.installView(new_view, initial_digest); gms.becomeCoordinator(); // not really necessary - installView() should do it gms.getUpProtocol().up(new Event(Event.BECOME_SERVER)); gms.getDownProtocol().down(new Event(Event.BECOME_SERVER)); log.debug("%s: created cluster (first member). My view is %s, impl is %s", gms.getLocalAddress(), gms.getViewId(), gms.getImpl().getClass().getName()); } }
void filterIncomingMessage(DistributionMessage m) { switch (m.getDSFID()) { case JOIN_RESPONSE: JoinResponseMessage jrsp = (JoinResponseMessage)m; if (jrsp.getRejectionMessage() == null && services.getConfig().getTransport().isMcastEnabled()) { byte[] serializedDigest = jrsp.getMessengerData(); ByteArrayInputStream bis = new ByteArrayInputStream(serializedDigest); DataInputStream dis = new DataInputStream(bis); try { Digest digest = new Digest(); digest.readFrom(dis); if (digest != null) { logger.trace("installing JGroups message digest {}", digest); this.myChannel.getProtocolStack() .getTopProtocol().down(new Event(Event.SET_DIGEST, digest)); jrsp.setMessengerData(null); } } catch (Exception e) { logger.fatal("Unable to read JGroups messaging digest", e); } } break; default: break; } }