|
@@ -94,13 +94,14 @@ class SubchannelData {
|
|
|
return curr_connectivity_state_;
|
|
return curr_connectivity_state_;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// FIXME: remove
|
|
|
|
|
- // An alternative to SetConnectedSubchannelFromSubchannelLocked() for
|
|
|
|
|
- // cases where we are retaining a connected subchannel from a previous
|
|
|
|
|
- // subchannel list. This is slightly more efficient than getting the
|
|
|
|
|
- // connected subchannel from the subchannel, because that approach
|
|
|
|
|
- // requires the use of a mutex, whereas this one only mutates a
|
|
|
|
|
- // refcount.
|
|
|
|
|
|
|
+ // Used to set the connected subchannel in cases where we are retaining a
|
|
|
|
|
+ // subchannel from a previous subchannel list. This is slightly more
|
|
|
|
|
+ // efficient than getting the connected subchannel from the subchannel,
|
|
|
|
|
+ // because that approach requires the use of a mutex, whereas this one
|
|
|
|
|
+ // only mutates a refcount.
|
|
|
|
|
+ // TODO(roth): This method is a bit of a hack and is used only in
|
|
|
|
|
+ // pick_first. When we have time, find a way to remove this, possibly
|
|
|
|
|
+ // by making pick_first work more like round_robin.
|
|
|
void SetConnectedSubchannelFromLocked(SubchannelData* other) {
|
|
void SetConnectedSubchannelFromLocked(SubchannelData* other) {
|
|
|
GPR_ASSERT(subchannel_ == other->subchannel_);
|
|
GPR_ASSERT(subchannel_ == other->subchannel_);
|
|
|
connected_subchannel_ = other->connected_subchannel_; // Adds ref.
|
|
connected_subchannel_ = other->connected_subchannel_; // Adds ref.
|
|
@@ -164,11 +165,12 @@ class SubchannelData {
|
|
|
// Implementations can use connectivity_state() to get the new
|
|
// Implementations can use connectivity_state() to get the new
|
|
|
// connectivity state.
|
|
// connectivity state.
|
|
|
// Implementations must invoke either StopConnectivityWatch() or again
|
|
// Implementations must invoke either StopConnectivityWatch() or again
|
|
|
- // call StartConnectivityWatch() before returning.
|
|
|
|
|
|
|
+ // call StartOrRenewConnectivityWatch() before returning.
|
|
|
virtual void ProcessConnectivityChangeLocked(grpc_error* error) GRPC_ABSTRACT;
|
|
virtual void ProcessConnectivityChangeLocked(grpc_error* error) GRPC_ABSTRACT;
|
|
|
|
|
|
|
|
private:
|
|
private:
|
|
|
-// FIXME: document
|
|
|
|
|
|
|
+ // Updates connected_subchannel_ based on pending_connectivity_state_unsafe_.
|
|
|
|
|
+ // Returns true if the connectivity state should be reported.
|
|
|
bool UpdateConnectedSubchannelLocked();
|
|
bool UpdateConnectedSubchannelLocked();
|
|
|
|
|
|
|
|
static void OnConnectivityChangedLocked(void* arg, grpc_error* error);
|
|
static void OnConnectivityChangedLocked(void* arg, grpc_error* error);
|