Package backtype.storm.serialization

Source Code of backtype.storm.serialization.KryoTupleDeserializer

package backtype.storm.serialization;

import backtype.storm.task.GeneralTopologyContext;
import backtype.storm.tuple.MessageId;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.TupleImplExt;

import com.esotericsoftware.kryo.io.Input;

import java.io.IOException;
import java.net.URLClassLoader;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

public class KryoTupleDeserializer implements ITupleDeserializer {
  private static final Logger LOG = Logger.getLogger(KryoTupleDeserializer.class);
 
  public static final boolean USE_RAW_PACKET = true;

  GeneralTopologyContext _context;
  KryoValuesDeserializer _kryo;
  SerializationFactory.IdDictionary _ids;
  Input _kryoInput;

  public KryoTupleDeserializer(final Map conf,
      final GeneralTopologyContext context) {
    _kryo = new KryoValuesDeserializer(conf);
    _context = context;
    _ids = new SerializationFactory.IdDictionary(context.getRawTopology());
    _kryoInput = new Input(1);
  }

  public Tuple deserialize(byte[] ser) {
   
    int targetTaskId = 0;
    int taskId = 0;
    int streamId = 0;
    String componentName = null;
    String streamName = null;
    MessageId id = null;
   
    try {

      _kryoInput.setBuffer(ser);

      targetTaskId = _kryoInput.readInt();
      taskId = _kryoInput.readInt(true);
      streamId = _kryoInput.readInt(true);
      componentName = _context.getComponentId(taskId);
      streamName = _ids.getStreamName(componentName, streamId);
      id = MessageId.deserialize(_kryoInput);
      List<Object> values = _kryo.deserializeFrom(_kryoInput);
      TupleImplExt tuple = new TupleImplExt(_context, values, taskId,
          streamName, id);
      tuple.setTargetTaskId(targetTaskId);
      return tuple;
    } catch (Throwable e) {
      StringBuilder sb = new StringBuilder();
     
      sb.append("Deserialize error:");
      sb.append("targetTaskId:").append(targetTaskId);
      sb.append(",taskId:").append(taskId);
      sb.append(",streamId:").append(streamId);
      sb.append(",componentName:").append(componentName);
      sb.append(",streamName:").append(streamName);
      sb.append(",MessageId").append(id);
     
      LOG.info(sb.toString(), e );
      throw new RuntimeException(e);
    }
  }

  /**
   * just get target taskId
   *
   * @param ser
   * @return
   */
  public static int deserializeTaskId(byte[] ser) {
    Input _kryoInput = new Input(1);

    _kryoInput.setBuffer(ser);

    int targetTaskId = _kryoInput.readInt();

    return targetTaskId;
  }
}
TOP

Related Classes of backtype.storm.serialization.KryoTupleDeserializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.