Пример #1
0
        /// <summary>
        /// Performs IMRU iterations on map side
        /// </summary>
        /// <param name="memento"></param>
        /// <returns></returns>
        public byte[] Call(byte[] memento)
        {
            MapControlMessage controlMessage = MapControlMessage.AnotherRound;

            while (!_taskCloseCoordinator.ShouldCloseTask() && controlMessage != MapControlMessage.Stop)
            {
                if (_invokeGC)
                {
                    Logger.Log(Level.Verbose, "Calling Garbage Collector");
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }

                using (
                    MapInputWithControlMessage <TMapInput> mapInput = _dataAndMessageReceiver.Receive())
                {
                    controlMessage = mapInput.ControlMessage;
                    if (controlMessage != MapControlMessage.Stop)
                    {
                        _dataReducer.Send(_mapTask.Map(mapInput.Message));
                    }
                }
            }

            _taskCloseCoordinator.SignalTaskStopped();
            return(null);
        }
Пример #2
0
        /// <summary>
        /// Performs IMRU iterations on map side
        /// </summary>
        /// <param name="memento"></param>
        /// <returns></returns>
        public byte[] Call(byte[] memento)
        {
            while (true)
            {
                if (_invokeGC)
                {
                    Logger.Log(Level.Verbose, "Calling Garbage Collector");
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }

                TMapOutput result;

                using (
                    MapInputWithControlMessage <TMapInput> mapInput = _dataAndMessageReceiver.Receive())
                {
                    if (mapInput.ControlMessage == MapControlMessage.Stop)
                    {
                        break;
                    }
                    result = _mapTask.Map(mapInput.Message);
                }

                _dataReducer.Send(result);
            }
            return(null);
        }
Пример #3
0
        /// <summary>
        /// Performs IMRU iterations on map side
        /// </summary>
        /// <returns></returns>
        protected override byte[] TaskBody(byte[] memento)
        {
            MapControlMessage controlMessage = MapControlMessage.AnotherRound;

            while (!_cancellationSource.IsCancellationRequested && controlMessage != MapControlMessage.Stop)
            {
                if (_invokeGc)
                {
                    Logger.Log(Level.Verbose, "Calling Garbage Collector");
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }

                using (
                    MapInputWithControlMessage <TMapInput> mapInput =
                        _dataAndMessageReceiver.Receive(_cancellationSource))
                {
                    controlMessage = mapInput.ControlMessage;
                    if (controlMessage != MapControlMessage.Stop)
                    {
                        TMapOutput output = default(TMapOutput);
                        try
                        {
                            output = _mapTask.Map(mapInput.Message);
                        }
                        catch (Exception e)
                        {
                            HandleTaskAppException(e);
                        }
                        _dataReducer.Send(output, _cancellationSource);
                    }
                }
            }
            return(null);
        }
Пример #4
0
        /// <summary>
        /// Performs IMRU iterations on update side
        /// </summary>
        /// <returns></returns>
        protected override byte[] TaskBody(byte[] memento)
        {
            UpdateResult <TMapInput, TResult> updateResult = null;

            try
            {
                updateResult = _updateTask.Initialize();
            }
            catch (Exception e)
            {
                HandleTaskAppException(e);
            }

            while (!_cancellationSource.IsCancellationRequested && updateResult.HasMapInput)
            {
                using (
                    var message = new MapInputWithControlMessage <TMapInput>(updateResult.MapInput,
                                                                             MapControlMessage.AnotherRound))
                {
                    _dataAndControlMessageSender.Send(message);
                }

                if (_invokeGc)
                {
                    Logger.Log(Level.Verbose, "Calling Garbage Collector");
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }

                var input = _dataReceiver.Reduce(_cancellationSource);

                try
                {
                    updateResult = _updateTask.Update(input);
                    if (updateResult.HasResult)
                    {
                        _resultHandler.HandleResult(updateResult.Result);
                        _done = true;
                    }
                }
                catch (Exception e)
                {
                    HandleTaskAppException(e);
                }
            }

            if (!_cancellationSource.IsCancellationRequested)
            {
                MapInputWithControlMessage <TMapInput> stopMessage =
                    new MapInputWithControlMessage <TMapInput>(MapControlMessage.Stop);
                _dataAndControlMessageSender.Send(stopMessage);
            }

            if (_done)
            {
                return(ByteUtilities.StringToByteArrays(TaskManager.UpdateTaskCompleted));
            }
            return(null);
        }
Пример #5
0
        /// <summary>
        /// Performs IMRU iterations on map side
        /// </summary>
        /// <param name="memento"></param>
        /// <returns></returns>
        public byte[] Call(byte[] memento)
        {
            MapControlMessage controlMessage = MapControlMessage.AnotherRound;

            while (!_cancellationSource.IsCancellationRequested && controlMessage != MapControlMessage.Stop)
            {
                if (_invokeGC)
                {
                    Logger.Log(Level.Verbose, "Calling Garbage Collector");
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }

                try
                {
                    using (
                        MapInputWithControlMessage <TMapInput> mapInput = _dataAndMessageReceiver.Receive(_cancellationSource))
                    {
                        controlMessage = mapInput.ControlMessage;
                        if (controlMessage != MapControlMessage.Stop)
                        {
                            _dataReducer.Send(_mapTask.Map(mapInput.Message), _cancellationSource);
                        }
                    }
                }
                catch (OperationCanceledException e)
                {
                    Logger.Log(Level.Warning, "Received OperationCanceledException in MapTaskHost with message: {0}.", e.Message);
                    break;
                }
                catch (IOException e)
                {
                    Logger.Log(Level.Error, "Received IOException in MapTaskHost with message: {0}.", e.Message);
                    if (!_cancellationSource.IsCancellationRequested)
                    {
                        throw new IMRUTaskGroupCommunicationException(TaskManager.TaskGroupCommunicationError);
                    }
                    break;
                }
                catch (TcpClientConnectionException e)
                {
                    Logger.Log(Level.Error, "Received TcpClientConnectionException in MapTaskHost with message: {0}.", e.Message);
                    if (!_cancellationSource.IsCancellationRequested)
                    {
                        throw new IMRUTaskGroupCommunicationException(TaskManager.TaskGroupCommunicationError);
                    }
                    break;
                }
            }

            _taskCloseCoordinator.SignalTaskStopped();
            Logger.Log(Level.Info, "MapTaskHost returned with cancellation token:{0}.", _cancellationSource.IsCancellationRequested);
            return(null);
        }
Пример #6
0
        /// <summary>
        /// Performs IMRU iterations on update side
        /// </summary>
        /// <param name="memento"></param>
        /// <returns></returns>
        public byte[] Call(byte[] memento)
        {
            var updateResult = _updateTask.Initialize();
            int iterNo       = 0;

            while (updateResult.HasMapInput && !_taskCloseCoordinator.ShouldCloseTask())
            {
                iterNo++;

                using (
                    var message = new MapInputWithControlMessage <TMapInput>(updateResult.MapInput,
                                                                             MapControlMessage.AnotherRound))
                {
                    _dataAndControlMessageSender.Send(message);
                }

                var input = _dataReceiver.Reduce();

                if (_invokeGC)
                {
                    Logger.Log(Level.Verbose, "Calling Garbage Collector");
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }

                updateResult = _updateTask.Update(input);

                if (updateResult.HasResult)
                {
                    _resultHandler.HandleResult(updateResult.Result);
                }
            }

            if (!_taskCloseCoordinator.ShouldCloseTask())
            {
                MapInputWithControlMessage <TMapInput> stopMessage =
                    new MapInputWithControlMessage <TMapInput>(MapControlMessage.Stop);
                _dataAndControlMessageSender.Send(stopMessage);
            }

            _resultHandler.Dispose();
            _taskCloseCoordinator.SignalTaskStopped();
            return(null);
        }
Пример #7
0
        /// <summary>
        /// Performs IMRU iterations on update side
        /// </summary>
        /// <param name="memento"></param>
        /// <returns></returns>
        public byte[] Call(byte[] memento)
        {
            var updateResult = _updateTask.Initialize();
            int iterNo       = 0;

            try
            {
                while (updateResult.HasMapInput && !_cancellationSource.IsCancellationRequested)
                {
                    iterNo++;

                    using (
                        var message = new MapInputWithControlMessage <TMapInput>(updateResult.MapInput,
                                                                                 MapControlMessage.AnotherRound))
                    {
                        _dataAndControlMessageSender.Send(message);
                    }

                    var input = _dataReceiver.Reduce(_cancellationSource);

                    if (_invokeGC)
                    {
                        Logger.Log(Level.Verbose, "Calling Garbage Collector");
                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                    }

                    updateResult = _updateTask.Update(input);

                    if (updateResult.HasResult)
                    {
                        _resultHandler.HandleResult(updateResult.Result);
                    }
                }
                if (!_cancellationSource.IsCancellationRequested)
                {
                    MapInputWithControlMessage <TMapInput> stopMessage =
                        new MapInputWithControlMessage <TMapInput>(MapControlMessage.Stop);
                    _dataAndControlMessageSender.Send(stopMessage);
                }
            }
            catch (OperationCanceledException e)
            {
                Logger.Log(Level.Warning,
                           "Received OperationCanceledException in UpdateTaskHost with message: {0}.",
                           e.Message);
            }
            catch (IOException e)
            {
                Logger.Log(Level.Error, "Received IOException in UpdateTaskHost with message: {0}.", e.Message);
                if (!_cancellationSource.IsCancellationRequested)
                {
                    throw new IMRUTaskGroupCommunicationException(TaskManager.TaskGroupCommunicationError);
                }
            }
            catch (TcpClientConnectionException e)
            {
                Logger.Log(Level.Error,
                           "Received TcpClientConnectionException in UpdateTaskHost with message: {0}.",
                           e.Message);
                if (!_cancellationSource.IsCancellationRequested)
                {
                    throw new IMRUTaskGroupCommunicationException(TaskManager.TaskGroupCommunicationError);
                }
            }
            _resultHandler.Dispose();
            _taskCloseCoordinator.SignalTaskStopped();
            Logger.Log(Level.Info, "UpdateTaskHost returned with cancellation token {0}.", _cancellationSource.IsCancellationRequested);
            return(null);
        }