package org.corfudb.protocols.wireprotocol;
import io.netty.buffer.ByteBuf;
import lombok.RequiredArgsConstructor;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/** An enum for distinguishing different response from the sequencer.
* Created by dalia on 4/8/17.
*/
@RequiredArgsConstructor
public enum TokenType implements ICorfuPayload<TokenType> {
// standard token issue by sequencer
NORMAL((byte) 0),
// response to tail-query (no allocation)
QUERY((byte)1),
// token request for optimistic TX-commit rejected due to conflict
TX_ABORT_CONFLICT((byte)2),
// token request for optimistic TX-commit rejected due to a
// failover-sequencer lacking conflict-resolution info
TX_ABORT_NEWSEQ((byte) 3);
final int val;
byte asByte() {
return (byte) val;
}
@Override
public void doSerialize(ByteBuf buf) {
buf.writeByte(asByte());
}
static Map<Byte, TokenType> typeMap =
Arrays.stream(TokenType.values())
.collect(Collectors.toMap(TokenType::asByte, Function.identity()));
}