文章目录
2021SC@SDUSC
WorkerTransfer
tryTransferRemote()
public boolean tryTransferRemote(AddressedTuple addressedTuple, Queue<AddressedTuple> pendingEmits, ITupleSerializer serializer) {
if (pendingEmits != null && !pendingEmits.isEmpty()) {
pendingEmits.add(addressedTuple);
return false;
}
if (!remoteBackPressureStatus[addressedTuple.dest].get()) {
TaskMessage tm = new TaskMessage(addressedTuple.getDest(), serializer.serialize(addressedTuple.getTuple()));
if (transferQueue.tryPublish(tm)) {
return true;
}
} else {
LOG.debug("Noticed Back Pressure in remote task {}", addressedTuple.dest);
}
if (pendingEmits != null) {
pendingEmits.add(addressedTuple);
}
return false;
}
这不是一个阻塞调用。如果不能发出,将添加’tuple’到’ pendingemit ‘并返回’false’。’ pendingemit '可以为空。
这里可以看到创建TaskMessage的时候,使用serializer.serialize(addressedTuple.getTuple())对tuple进行了序列化;该serializer为ITupleSerializer类型,它的实现类为KryoTupleSerializer。
WorkerTokenInfo
_Fields
public enum _Fields implements org.apache.storm.thrift.TFieldIdEnum {
USER_NAME((short)1, "userName"),
TOPOLOGY_ID((short)2, "topologyId"),
SECRET_VERSION((short)3, "secretVersion"),
EXPIRATION_TIME_MILLIS((short)4, "expirationTimeMillis");
private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
static {
for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
byName.put(field.getFieldName(), field);
}
}
该结构包含的字段集,以及查找和操作它们的方便方法。
findByThriftId
@org.apache.storm.thrift.annotation.Nullable
public static _Fields findByThriftId(int fieldId) {
switch(fieldId) {
case 1: // USER_NAME
return USER_NAME;
case 2: // TOPOLOGY_ID
return TOPOLOGY_ID;
case 3: // SECRET_VERSION
return SECRET_VERSION;
case 4: // EXPIRATION_TIME_MILLIS
return EXPIRATION_TIME_MILLIS;
default:
return null;
}
}
找到匹配fieldId的_Fields常量,如果没有找到则为null。
findByThriftIdOrThrow
public static _Fields findByThriftIdOrThrow(int fieldId) {
_Fields fields = findByThriftId(fieldId);
if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
return fields;
}
找到匹配fieldId的_Fields常量,如果没有找到,则抛出异常。
findByName
@org.apache.storm.thrift.annotation.Nullable
public static _Fields findByName(java.lang.String name) {
return byName.get(name);
}
private final short _thriftId;
private final java.lang.String _fieldName;
_Fields(short thriftId, java.lang.String fieldName) {
_thriftId = thriftId;
_fieldName = fieldName;
}
public short getThriftFieldId() {
return _thriftId;
}
public java.lang.String getFieldName() {
return _fieldName;
}
}
找到与name匹配的_Fields常量,如果没有找到则为null。