Пример #1
0
 public TaskStatusProto ToProto()
 {
     // This is locked because the Task continuation thread which sets the
     // result is potentially different from the HeartBeat thread.
     lock (_stateLock)
     {
         Check();
         TaskStatusProto taskStatusProto = new TaskStatusProto()
         {
             context_id = ContextId,
             task_id = TaskId,
             state = GetProtoState()
         };
         if (_result.IsPresent())
         {
             taskStatusProto.result = ByteUtilities.CopyBytesFrom(_result.Value);
         }
         else if (_lastException.IsPresent())
         {
             byte[] error = ByteUtilities.StringToByteArrays(_lastException.Value.ToString());
             taskStatusProto.result = ByteUtilities.CopyBytesFrom(error);
         }
         else if (_state == TaskState.Running)
         {
             foreach (TaskMessage message in GetMessages())
             {
                 TaskStatusProto.TaskMessageProto taskMessageProto = new TaskStatusProto.TaskMessageProto()
                 {
                     source_id = message.MessageSourceId,
                     message = ByteUtilities.CopyBytesFrom(message.Message),
                 };
                 taskStatusProto.task_message.Add(taskMessageProto);
             }
         }
         return taskStatusProto;
     }
 }
Пример #2
0
 public TaskStatusProto ToProto()
 {
     Check();
     TaskStatusProto taskStatusProto = new TaskStatusProto()
     {
         context_id = _contextId,
         task_id = _taskId,
         state = GetProtoState(),
     };
     if (_result.IsPresent())
     {
         taskStatusProto.result = ByteUtilities.CopyBytesFrom(_result.Value);
     }
     else if (_lastException.IsPresent())
     {
         //final Encoder<Throwable> codec = new ObjectSerializableCodec<>();
         //final byte[] error = codec.encode(_lastException.get());
         byte[] error = ByteUtilities.StringToByteArrays(_lastException.Value.ToString());
         taskStatusProto.result = ByteUtilities.CopyBytesFrom(error);
     }
     else if (_state == TaskState.Running)
     {
         foreach (TaskMessage message in GetMessages())
         {
             TaskStatusProto.TaskMessageProto taskMessageProto = new TaskStatusProto.TaskMessageProto()
             {
                 source_id = message.MessageSourceId,
                 message = ByteUtilities.CopyBytesFrom(message.Message),
             };
             taskStatusProto.task_message.Add(taskMessageProto);
         }
     }
     return taskStatusProto;
 }
Пример #3
0
        public TaskStatusProto ToProto()
        {
            // This is locked because the Task continuation thread which sets the
            // result is potentially different from the HeartBeat thread.
            lock (_heartBeatManager)
            {
                Check();
                TaskStatusProto taskStatusProto = new TaskStatusProto()
                {
                    context_id = ContextId,
                    task_id = TaskId,
                    state = GetProtoState()
                };
                if (_result.IsPresent())
                {
                    taskStatusProto.result = ByteUtilities.CopyBytesFrom(_result.Value);
                }
                else if (_lastException.IsPresent())
                {
                    byte[] error;
                    try
                    {
                        error = ByteUtilities.SerializeToBinaryFormat(_lastException.Value);
                    }
                    catch (SerializationException se)
                    {
                        error = ByteUtilities.SerializeToBinaryFormat(
                            NonSerializableTaskException.UnableToSerialize(_lastException.Value, se));
                    }

                    var avroFailedTask = new AvroFailedTask
                    {
                        identifier = _taskId,
                        cause = error,
                        data = ByteUtilities.StringToByteArrays(_lastException.Value.ToString()),
                        message = _lastException.Value.Message
                    };

                    taskStatusProto.result = AvroJsonSerializer<AvroFailedTask>.ToBytes(avroFailedTask);
                }
                else if (_state == TaskState.Running)
                {
                    foreach (TaskMessage message in GetMessages())
                    {
                        TaskStatusProto.TaskMessageProto taskMessageProto = new TaskStatusProto.TaskMessageProto()
                        {
                            source_id = message.MessageSourceId,
                            message = ByteUtilities.CopyBytesFrom(message.Message),
                        };
                        taskStatusProto.task_message.Add(taskMessageProto);
                    }
                }
                return taskStatusProto;
            }
        }