@Override public void messageReceived(ChannelMessage msg) { if ( !okToProcess(msg.getOptions()) ) { super.messageReceived(msg); return; } int msgnr = XByteBuffer.toInt(msg.getMessage().getBytesDirect(),msg.getMessage().getLength()-4); msg.getMessage().trim(4); MessageOrder order = new MessageOrder(msgnr,(ChannelMessage)msg.deepclone()); inLock.writeLock().lock(); try { if ( processIncoming(order) ) processLeftOvers(msg.getAddress(),false); } finally { inLock.writeLock().unlock(); } } protected void processLeftOvers(Member member, boolean force) {
Member member = order.getMessage().getAddress(); Counter cnt = getInCounter(member); order = MessageOrder.add(tmp,order); while ( (order!=null) && (order.getMsgNr() <= cnt.getCounter()) ) { if ( order.getMsgNr() == cnt.getCounter() ) cnt.inc(); else if ( order.getMsgNr() > cnt.getCounter() ) cnt.setCounter(order.getMsgNr()); super.messageReceived(order.getMessage()); order.setMessage(null); order = order.next; tmp = order; boolean empty = order!=null?order.getCount()>=maxQueue:false; while ( tmp != null ) { if ( tmp.isExpired(expire) || empty ) { cnt.setCounter(tmp.getMsgNr()+1); if ( getForwardExpired() ) super.messageReceived(tmp.getMessage()); tmp.setMessage(null); tmp = tmp.next; if ( prev != null ) prev.next = tmp;
Member member = order.getMessage().getAddress(); Counter cnt = getInCounter(member); order = MessageOrder.add(tmp,order); while ( (order!=null) && (order.getMsgNr() <= cnt.getCounter()) ) { if ( order.getMsgNr() == cnt.getCounter() ) cnt.inc(); else if ( order.getMsgNr() > cnt.getCounter() ) cnt.setCounter(order.getMsgNr()); super.messageReceived(order.getMessage()); order.setMessage(null); order = order.next; tmp = order; boolean empty = order!=null?order.getCount()>=maxQueue:false; while ( tmp != null ) { if ( tmp.isExpired(expire) || empty ) { cnt.setCounter(tmp.getMsgNr()+1); if ( getForwardExpired() ) super.messageReceived(tmp.getMessage()); tmp.setMessage(null); tmp = tmp.next; if ( prev != null ) prev.next = tmp;
Member member = order.getMessage().getAddress(); Counter cnt = getInCounter(member); order = MessageOrder.add(tmp,order); while ( (order!=null) && (order.getMsgNr() <= cnt.getCounter()) ) { if ( order.getMsgNr() == cnt.getCounter() ) cnt.inc(); else if ( order.getMsgNr() > cnt.getCounter() ) cnt.setCounter(order.getMsgNr()); super.messageReceived(order.getMessage()); order.setMessage(null); order = order.next; tmp = order; boolean empty = order!=null?order.getCount()>=maxQueue:false; while ( tmp != null ) { if ( tmp.isExpired(expire) || empty ) { cnt.setCounter(tmp.getMsgNr()+1); if ( getForwardExpired() ) super.messageReceived(tmp.getMessage()); tmp.setMessage(null); tmp = tmp.next; if ( prev != null ) prev.next = tmp;
Member member = order.getMessage().getAddress(); Counter cnt = getInCounter(member); order = MessageOrder.add(tmp,order); while ( (order!=null) && (order.getMsgNr() <= cnt.getCounter()) ) { if ( order.getMsgNr() == cnt.getCounter() ) cnt.inc(); else if ( order.getMsgNr() > cnt.getCounter() ) cnt.setCounter(order.getMsgNr()); super.messageReceived(order.getMessage()); order.setMessage(null); order = order.next; tmp = order; boolean empty = order!=null?order.getCount()>=maxQueue:false; while ( tmp != null ) { if ( tmp.isExpired(expire) || empty ) { cnt.setCounter(tmp.getMsgNr()+1); if ( getForwardExpired() ) super.messageReceived(tmp.getMessage()); tmp.setMessage(null); tmp = tmp.next; if ( prev != null ) prev.next = tmp;
@SuppressWarnings("null") // prev cannot be null public static MessageOrder add(MessageOrder head, MessageOrder add) { if ( head == null ) return add; if ( add == null ) return head; if ( head == add ) return add; if ( head.getMsgNr() > add.getMsgNr() ) { add.next = head; return add; } MessageOrder iter = head; MessageOrder prev = null; while ( iter.getMsgNr() < add.getMsgNr() && (iter.next !=null ) ) { prev = iter; iter = iter.next; } if ( iter.getMsgNr() < add.getMsgNr() ) { //add after add.next = iter.next; iter.next = add; } else if (iter.getMsgNr() > add.getMsgNr()) { //add before prev.next = add; // prev cannot be null here, warning suppressed add.next = iter; } else { throw new ArithmeticException(sm.getString("orderInterceptor.messageAdded.sameCounter")); } return head; }
@SuppressWarnings("null") // prev cannot be null public static MessageOrder add(MessageOrder head, MessageOrder add) { if ( head == null ) return add; if ( add == null ) return head; if ( head == add ) return add; if ( head.getMsgNr() > add.getMsgNr() ) { add.next = head; return add; } MessageOrder iter = head; MessageOrder prev = null; while ( iter.getMsgNr() < add.getMsgNr() && (iter.next !=null ) ) { prev = iter; iter = iter.next; } if ( iter.getMsgNr() < add.getMsgNr() ) { //add after add.next = iter.next; iter.next = add; } else if (iter.getMsgNr() > add.getMsgNr()) { //add before prev.next = add; // prev cannot be null here, warning suppressed add.next = iter; } else { throw new ArithmeticException("Message added has the same counter, synchronization bug. Disable the order interceptor"); } return head; }
@Override public void messageReceived(ChannelMessage msg) { if ( !okToProcess(msg.getOptions()) ) { super.messageReceived(msg); return; } int msgnr = XByteBuffer.toInt(msg.getMessage().getBytesDirect(),msg.getMessage().getLength()-4); msg.getMessage().trim(4); MessageOrder order = new MessageOrder(msgnr,(ChannelMessage)msg.deepclone()); try { inLock.writeLock().lock(); if ( processIncoming(order) ) processLeftOvers(msg.getAddress(),false); }finally { inLock.writeLock().unlock(); } } protected void processLeftOvers(Member member, boolean force) {
public void messageReceived(ChannelMessage msg) { if ( !okToProcess(msg.getOptions()) ) { super.messageReceived(msg); return; } int msgnr = XByteBuffer.toInt(msg.getMessage().getBytesDirect(),msg.getMessage().getLength()-4); msg.getMessage().trim(4); MessageOrder order = new MessageOrder(msgnr,(ChannelMessage)msg.deepclone()); try { inLock.writeLock().lock(); if ( processIncoming(order) ) processLeftOvers(msg.getAddress(),false); }finally { inLock.writeLock().unlock(); } } protected void processLeftOvers(Member member, boolean force) {
@Override public void messageReceived(ChannelMessage msg) { if ( !okToProcess(msg.getOptions()) ) { super.messageReceived(msg); return; } int msgnr = XByteBuffer.toInt(msg.getMessage().getBytesDirect(),msg.getMessage().getLength()-4); msg.getMessage().trim(4); MessageOrder order = new MessageOrder(msgnr,(ChannelMessage)msg.deepclone()); try { inLock.writeLock().lock(); if ( processIncoming(order) ) processLeftOvers(msg.getAddress(),false); }finally { inLock.writeLock().unlock(); } } protected void processLeftOvers(Member member, boolean force) {