Beispiel #1
0
        /// <summary>
        /// get context's status in protocol buffer
        /// </summary>
        /// <returns>this context's status in protocol buffer form.</returns>
        public ContextStatusProto GetContextStatus()
        {
            lock (_contextLifeCycle)
            {
                var contextStatusProto = new ContextStatusProto
                {
                    context_id    = Id,
                    context_state = _contextState,
                };
                if (_parentContext.IsPresent())
                {
                    contextStatusProto.parent_id = _parentContext.Value.Id;
                }

                foreach (var sourceMessage in _contextLifeCycle.ContextMessageSources.Where(src => src.Message.IsPresent()).Select(src => src.Message.Value))
                {
                    var contextMessageProto = new ContextStatusProto.ContextMessageProto
                    {
                        source_id = sourceMessage.MessageSourceId,
                        message   = ByteUtilities.CopyBytesFrom(sourceMessage.Bytes),
                    };
                    contextStatusProto.context_message.Add(contextMessageProto);
                }

                return(contextStatusProto);
            }
        }
Beispiel #2
0
        /// <summary>
        /// get context's status in protocol buffer
        /// </summary>
        /// <returns>this context's status in protocol buffer form.</returns>
        public ContextStatusProto GetContextStatus()
        {
            lock (_contextLifeCycle)
            {
                var contextStatusProto = new ContextStatusProto
                {
                    context_id    = Id,
                    context_state = _contextState,
                };
                if (_parentContext.IsPresent())
                {
                    contextStatusProto.parent_id = _parentContext.Value.Id;
                }

                foreach (var source in _contextLifeCycle.ContextMessageSources)
                {
                    // Note: Please do not convert to LINQ expression, as source.Message
                    // may not return the same object in subsequent Get calls.
                    var sourceMessage = source.Message;
                    if (sourceMessage.IsPresent())
                    {
                        var contextMessageProto = new ContextStatusProto.ContextMessageProto
                        {
                            source_id = sourceMessage.Value.MessageSourceId,
                            message   = ByteUtilities.CopyBytesFrom(sourceMessage.Value.Bytes),
                        };

                        contextStatusProto.context_message.Add(contextMessageProto);
                    }
                }

                return(contextStatusProto);
            }
        }
        /// <summary>
        /// get context's status in protocol buffer
        /// </summary>
        /// <returns>this context's status in protocol buffer form.</returns>
        public ContextStatusProto GetContextStatus()
        {
            lock (_contextLifeCycle)
            {
                ContextStatusProto contextStatusProto = new ContextStatusProto()
                {
                    context_id    = Id,
                    context_state = _contextState,
                };
                if (_parentContext.IsPresent())
                {
                    contextStatusProto.parent_id = _parentContext.Value.Id;
                }

                foreach (IContextMessageSource source in _contextLifeCycle.ContextMessageSources)
                {
                    Optional <ContextMessage> contextMessageOptional = source.Message;
                    if (contextMessageOptional.IsPresent())
                    {
                        ContextStatusProto.ContextMessageProto contextMessageProto
                            = new ContextStatusProto.ContextMessageProto()
                            {
                            source_id = contextMessageOptional.Value.MessageSourceId,
                            };
                        contextMessageProto.message = ByteUtilities.CopyBytesFrom(contextMessageOptional.Value.Bytes);
                        contextStatusProto.context_message.Add(contextMessageProto);
                    }
                }
                return(contextStatusProto);
            }
        }
Beispiel #4
0
        /// <summary>
        /// get status of all contexts in the stack.
        /// </summary>
        /// <returns>the status of all contexts in the stack.</returns>
        public ICollection <ContextStatusProto> GetContextStatusCollection()
        {
            ICollection <ContextStatusProto> result = new Collection <ContextStatusProto>();

            foreach (ContextRuntime runtime in _contextStack)
            {
                ContextStatusProto contextStatusProto = runtime.GetContextStatus();
                LOGGER.Log(Level.Verbose, string.Format(CultureInfo.InvariantCulture, "Add context status: {0}", contextStatusProto));
                result.Add(contextStatusProto);
            }
            return(result);
        }
Beispiel #5
0
 /// <summary>
 ///  Called with a specific ContextStatusProto that must be delivered to the driver
 /// </summary>
 /// <param name="contextStatusProto"></param>
 public void OnNext(ContextStatusProto contextStatusProto)
 {
     LOGGER.Log(Level.Verbose, "Before acquiring lock: HeartbeatManager::OnNext(ContextStatusProto)");
     lock (this)
     {
         LOGGER.Log(Level.Verbose, "HeartbeatManager::OnNext(ContextStatusProto)");
         List <ContextStatusProto> contextStatusProtos = new List <ContextStatusProto>();
         contextStatusProtos.Add(contextStatusProto);
         contextStatusProtos.AddRange(ContextManager.GetContextStatusCollection());
         EvaluatorHeartbeatProto heartbeatProto = GetEvaluatorHeartbeatProto(
             EvaluatorRuntime.GetEvaluatorStatus(),
             contextStatusProtos,
             Optional <TaskStatusProto> .Empty());
         LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "Triggered a heartbeat: {0}.", heartbeatProto));
         Send(heartbeatProto);
     }
 }
Beispiel #6
0
        /// <summary>
        /// THIS ASSUMES THAT IT IS CALLED ON A THREAD HOLDING THE LOCK ON THE HeartBeatManager
        /// </summary>
        /// <param name="e"></param>
        private void HandlContextException(ContextClientCodeException e)
        {
            LOGGER.Log(Level.Error, "ContextClientCodeException", e);
            byte[]             exception          = ByteUtilities.StringToByteArrays(e.ToString());
            ContextStatusProto contextStatusProto = new ContextStatusProto()
            {
                context_id    = e.ContextId,
                context_state = ContextStatusProto.State.FAIL,
                error         = exception
            };

            if (e.ParentId.IsPresent())
            {
                contextStatusProto.parent_id = e.ParentId.Value;
            }
            LOGGER.Log(Level.Error, string.Format(CultureInfo.InvariantCulture, "Sending Heartbeat for a failed context: {0}", contextStatusProto.ToString()));
            _heartBeatManager.OnNext(contextStatusProto);
        }
        private void HandleContextException(Exception e, string contextId, string parentContextId)
        {
            lock (_heartBeatManager)
            {
                LOGGER.Log(Level.Warning, "ContextException", e);

                byte[] exception          = ByteUtilities.StringToByteArrays(e.ToString());
                var    contextStatusProto = new ContextStatusProto
                {
                    context_id    = contextId,
                    context_state = ContextStatusProto.State.FAIL,
                    parent_id     = parentContextId,
                    error         = exception
                };

                LOGGER.Log(Level.Error, "Sending Heartbeat for a failed context: {0}", contextStatusProto);
                _heartBeatManager.OnNext(contextStatusProto);
            }
        }
Beispiel #8
0
        /// <summary>
        /// Handle a context status update
        /// </summary>
        /// <param name="contextStatusProto"></param>
        /// <param name="notifyClientOnNewActiveContext"></param>
        private void Handle(ContextStatusProto contextStatusProto, bool notifyClientOnNewActiveContext)
        {
            string            contextId = contextStatusProto.context_id;
            Optional <string> parentId  = contextStatusProto.parent_id != null ?
                                          Optional <string> .Of(contextStatusProto.parent_id) : Optional <string> .Empty();

            if (ContextStatusProto.State.READY == contextStatusProto.context_state)
            {
                if (!_activeContextIds.Contains(contextId))
                {
                    EvaluatorContext evaluatorContext = new EvaluatorContext(this, contextId, parentId);
                    AddEvaluatorContext(evaluatorContext);
                    if (notifyClientOnNewActiveContext)
                    {
                        LOGGER.Log(Level.Info, "TODO: REPLACE THIS " + evaluatorContext.ToString());
                        //TODO
                        //dispatcher.onNext(ActiveContext.class, context);
                    }
                }
                foreach (ContextStatusProto.ContextMessageProto contextMessageProto in contextStatusProto.context_message)
                {
                    byte[] message  = contextMessageProto.message;
                    string sourceId = contextMessageProto.source_id;
                    LOGGER.Log(Level.Info, "TODO: REPLACE THIS " + sourceId + message);
                    //        this.dispatcher.onNext(ContextMessage.class,
                    //new ContextMessageImpl(theMessage, contextID, sourceID));
                }
            }
            else
            {
                if (!_activeContextIds.Contains(contextId))
                {
                    if (ContextStatusProto.State.FAIL == contextStatusProto.context_state)
                    {
                        AddEvaluatorContext(new EvaluatorContext(this, contextId, parentId));
                    }
                    else
                    {
                        var e = new InvalidOperationException("unknown context signaling state " + contextStatusProto.context_state);
                        Exceptions.Throw(e, LOGGER);
                    }
                }
            }

            EvaluatorContext context       = GetEvaluatorContext(contextId);
            EvaluatorContext parentContext = context.ParentId.IsPresent() ?
                                             GetEvaluatorContext(context.ParentId.Value) : null;

            RemoveEvaluatorContext(context);

            if (ContextStatusProto.State.FAIL == contextStatusProto.context_state)
            {
                // TODO
                Exception reason = new InvalidOperationException(ByteUtilities.ByteArrarysToString(contextStatusProto.error));
                Optional <IActiveContext> optionalParentContext = (null == parentContext) ?
                                                                  Optional <IActiveContext> .Empty() : Optional <IActiveContext> .Of(parentContext);

                LOGGER.Log(Level.Info, "TODO: REPLACE THIS " + reason.ToString() + optionalParentContext);
                // TODO
                //this.dispatcher.onNext(FailedContext.class,
                //context.getFailedContext(optionalParentContext, reason));
            }
            else if (ContextStatusProto.State.DONE == contextStatusProto.context_state)
            {
                if (null != parentContext)
                {
                    // TODO
                    //this.dispatcher.onNext(ClosedContext.class, context.getClosedContext(parentContext));
                }
                else
                {
                    LOGGER.Log(Level.Info, "Root context closed. Evaluator closed will trigger final shutdown.");
                }
            }
            else
            {
                var e = new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Unknown context state {0} for context {1}", contextStatusProto.context_state, contextId));
                Exceptions.Throw(e, LOGGER);
            }
        }