Example #1
0
 public StateMachineController(LifeCycleState lifeCycleState, SchedulerState schedulerState,
                               ConnectivityState connectivityState)
 {
     _lifeCycleState    = lifeCycleState;
     _schedulerState    = schedulerState;
     _connectivityState = connectivityState;
 }
Example #2
0
        public void UpdateState(BalancerState state)
        {
            _controller.UpdateState(state);
            _state = state.ConnectivityState;

            NotifySubscribers();
        }
Example #3
0
        internal Task WaitForStateChangedAsync(ConnectivityState lastObservedState, ConnectivityState?waitForState, CancellationToken cancellationToken)
        {
            StateWatcher?watcher;

            lock (_lock)
            {
                if (State != lastObservedState)
                {
                    return(Task.CompletedTask);
                }
                else
                {
                    // Minor optimization to check if we're already waiting for state change
                    // using the specified cancellation token.
                    foreach (var stateWatcher in _stateWatchers)
                    {
                        if (stateWatcher.CancellationToken == cancellationToken &&
                            stateWatcher.WaitForState == waitForState)
                        {
                            return(stateWatcher.Tcs.Task);
                        }
                    }

                    watcher = new StateWatcher(
                        cancellationToken,
                        waitForState,
                        new TaskCompletionSource <object?>(TaskCreationOptions.RunContinuationsAsynchronously));
                    _stateWatchers.Add(watcher);
                }
            }

            return(WaitForStateChangedAsyncCore(watcher));
        }
Example #4
0
        //=============================================================================

        public void SetCorrStatus(ConnectivityState status)
        {
            if (status == ConnectivityState.Online)
            {
                MakeStatusOnline();
                EnableSyncButton();
            }
            else if (status == ConnectivityState.Offline)
            {
                MakeStatusOffline();
                DisableSyncButton();
            }
        }
Example #5
0
        internal void RaiseStateChanged(ConnectivityState state, Status status)
        {
            SubchannelLog.SubchannelStateChanged(_logger, Id, state, status);

            if (_stateChangedRegistrations.Count > 0)
            {
                var subchannelState = new SubchannelState(state, status);
                foreach (var registration in _stateChangedRegistrations)
                {
                    registration.Invoke(subchannelState);
                }
            }
        }
Example #6
0
        private static async Task WaitForStateAsync(GrpcChannel channel, ConnectivityState state)
        {
            while (true)
            {
                var currentState = channel.State;

                if (currentState == state)
                {
                    return;
                }

                await channel.WaitForStateChangedAsync(currentState);
            }
        }
Example #7
0
        internal void OnSubchannelStateChange(Subchannel subchannel, ConnectivityState state, Status status)
        {
            if (state == ConnectivityState.Shutdown)
            {
                lock (_subchannels)
                {
                    var removed = _subchannels.Remove(subchannel);
                    Debug.Assert(removed);
                }
            }

            lock (_lock)
            {
                subchannel.RaiseStateChanged(state, status);
            }
        }
Example #8
0
        internal bool UpdateConnectivityState(ConnectivityState state, Status status)
        {
            lock (Lock)
            {
                // Don't update subchannel state if the state is the same or the subchannel has been shutdown.
                //
                // This could happen when:
                // 1. Start trying to connect with a subchannel.
                // 2. Address resolver updates and subchannel address is no longer there and subchannel is shutdown.
                // 3. Connection attempt fails and tries to update subchannel state.
                if (_state == state || _state == ConnectivityState.Shutdown)
                {
                    return(false);
                }
                _state = state;
            }

            // Notify channel outside of lock to avoid deadlocks.
            _manager.OnSubchannelStateChange(this, state, status);
            return(true);
        }
Example #9
0
 public static void ChannelStateUpdated(ILogger logger, ConnectivityState connectivityState)
 {
     _channelStateUpdated(logger, connectivityState, null);
 }
 public BalancerState(ConnectivityState connectivityState, SubchannelPicker picker)
 {
     ConnectivityState = connectivityState;
     Picker            = picker;
 }
Example #11
0
 public void UpdateState(ConnectivityState state, Status?status = null)
 {
     _state = state;
     Subchannel.UpdateConnectivityState(_state, status ?? Status.DefaultSuccess);
 }
 public static void SetMessagebusConnectivity(ConnectivityState state)
 {
     __messagebusConnectivity.SetState(state);
     if (state == ConnectivityState.Broken)
     {
         Thread.MemoryBarrier();
         __messagebusConnectivityRetryTime = DateTime.Now.Add(TimeSpan.FromMinutes(5));
         Thread.MemoryBarrier();
     }
 }
 public void UpdateKnownState(ConnectivityState knownState)
 {
     _lastKnownState = knownState;
 }
Example #14
0
 public static void RefreshingResolverForSubchannel(ILogger logger, int subchannelId, ConnectivityState state)
 {
     _refreshingResolverForSubchannel(logger, subchannelId, state, null);
 }
Example #15
0
 private void UpdateChannelState(ConnectivityState state, SubchannelPicker subchannelPicker)
 {
     State = state;
     Controller.UpdateState(new BalancerState(state, subchannelPicker));
 }
Example #16
0
 internal bool UpdateConnectivityState(ConnectivityState state, string successDetail)
 {
     return(UpdateConnectivityState(state, new Status(StatusCode.OK, successDetail)));
 }
 internal SubchannelState(ConnectivityState state, Status status)
 {
     State  = state;
     Status = status;
 }
Example #18
0
 public static void ProcessingSubchannelStateChanged(ILogger logger, int subchannelId, ConnectivityState state, Status status)
 {
     _processingSubchannelStateChanged(logger, subchannelId, state, status.Detail, status.DebugException);
 }
Example #19
0
 public static void ConnectionRequestedInNonIdleState(ILogger logger, int subchannelId, ConnectivityState state)
 {
     _connectionRequestedInNonIdleState(logger, subchannelId, state, null);
 }
Example #20
0
 public static void RequestingConnectionForSubchannel(ILogger logger, int subchannelId, ConnectivityState state)
 {
     _requestingConnectionForSubchannel(logger, subchannelId, state, null);
 }
 public AddressSubchannel(Subchannel subchannel, BalancerAddress address)
 {
     Subchannel      = subchannel;
     Address         = address;
     _lastKnownState = ConnectivityState.Idle;
 }