*/
package org.opendaylight.controller.cluster.messaging;
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.concurrent.atomic.AtomicLong;
import org.opendaylight.yangtools.concepts.Identifier;
+import org.opendaylight.yangtools.concepts.WritableObjects;
/**
* Identifier for a message slice that is composed of a client-supplied Identifier and an internal counter value.
private static final AtomicLong ID_COUNTER = new AtomicLong(1);
private final Identifier clientIdentifier;
+ private final long slicerId;
private final long messageId;
- MessageSliceIdentifier(final Identifier clientIdentifier) {
- this(clientIdentifier, ID_COUNTER.getAndIncrement());
+ MessageSliceIdentifier(final Identifier clientIdentifier, final long slicerId) {
+ this(clientIdentifier, slicerId, ID_COUNTER.getAndIncrement());
}
- private MessageSliceIdentifier(final Identifier clientIdentifier, final long messageId) {
- this.clientIdentifier = Preconditions.checkNotNull(clientIdentifier);
+ private MessageSliceIdentifier(final Identifier clientIdentifier, final long slicerId, final long messageId) {
+ this.clientIdentifier = requireNonNull(clientIdentifier);
this.messageId = messageId;
+ this.slicerId = slicerId;
}
Identifier getClientIdentifier() {
return clientIdentifier;
}
+ long getSlicerId() {
+ return slicerId;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + clientIdentifier.hashCode();
result = prime * result + (int) (messageId ^ messageId >>> 32);
+ result = prime * result + (int) (slicerId ^ slicerId >>> 32);
return result;
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
}
MessageSliceIdentifier other = (MessageSliceIdentifier) obj;
- return other.clientIdentifier.equals(clientIdentifier) && other.messageId == messageId;
+ return other.clientIdentifier.equals(clientIdentifier) && other.slicerId == slicerId
+ && other.messageId == messageId;
}
@Override
public String toString() {
- return "MessageSliceIdentifier [clientIdentifier=" + clientIdentifier + ", messageId=" + messageId + "]";
+ return "MessageSliceIdentifier [clientIdentifier=" + clientIdentifier + ", slicerId=" + slicerId
+ + ", messageId=" + messageId + "]";
}
private Object writeReplace() {
public Proxy() {
}
- Proxy(MessageSliceIdentifier messageSliceId) {
+ Proxy(final MessageSliceIdentifier messageSliceId) {
this.messageSliceId = messageSliceId;
}
@Override
- public void writeExternal(ObjectOutput out) throws IOException {
+ public void writeExternal(final ObjectOutput out) throws IOException {
out.writeObject(messageSliceId.clientIdentifier);
- out.writeLong(messageSliceId.messageId);
+ WritableObjects.writeLongs(out, messageSliceId.slicerId, messageSliceId.messageId);
}
@Override
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- messageSliceId = new MessageSliceIdentifier((Identifier) in.readObject(), in.readLong());
+ public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
+ final Identifier clientIdentifier = (Identifier) in.readObject();
+ final byte header = WritableObjects.readLongHeader(in);
+ final long slicerId = WritableObjects.readFirstLong(in, header);
+ final long messageId = WritableObjects.readSecondLong(in, header);
+ messageSliceId = new MessageSliceIdentifier(clientIdentifier, slicerId, messageId);
}
private Object readResolve() {