storm源码分析(八)


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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值