google.golang.org/grpc@v1.72.2/internal/internal.go (about) 1 /* 2 * Copyright 2016 gRPC authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 */ 17 18 // Package internal contains gRPC-internal code, to avoid polluting 19 // the godoc of the top-level grpc package. It must not import any grpc 20 // symbols to avoid circular dependencies. 21 package internal 22 23 import ( 24 "context" 25 "time" 26 27 "google.golang.org/grpc/connectivity" 28 "google.golang.org/grpc/serviceconfig" 29 ) 30 31 var ( 32 // HealthCheckFunc is used to provide client-side LB channel health checking 33 HealthCheckFunc HealthChecker 34 // RegisterClientHealthCheckListener is used to provide a listener for 35 // updates from the client-side health checking service. It returns a 36 // function that can be called to stop the health producer. 37 RegisterClientHealthCheckListener any // func(ctx context.Context, sc balancer.SubConn, serviceName string, listener func(balancer.SubConnState)) func() 38 // BalancerUnregister is exported by package balancer to unregister a balancer. 39 BalancerUnregister func(name string) 40 // KeepaliveMinPingTime is the minimum ping interval. This must be 10s by 41 // default, but tests may wish to set it lower for convenience. 42 KeepaliveMinPingTime = 10 * time.Second 43 // KeepaliveMinServerPingTime is the minimum ping interval for servers. 44 // This must be 1s by default, but tests may wish to set it lower for 45 // convenience. 46 KeepaliveMinServerPingTime = time.Second 47 // ParseServiceConfig parses a JSON representation of the service config. 48 ParseServiceConfig any // func(string) *serviceconfig.ParseResult 49 // EqualServiceConfigForTesting is for testing service config generation and 50 // parsing. Both a and b should be returned by ParseServiceConfig. 51 // This function compares the config without rawJSON stripped, in case the 52 // there's difference in white space. 53 EqualServiceConfigForTesting func(a, b serviceconfig.Config) bool 54 // GetCertificateProviderBuilder returns the registered builder for the 55 // given name. This is set by package certprovider for use from xDS 56 // bootstrap code while parsing certificate provider configs in the 57 // bootstrap file. 58 GetCertificateProviderBuilder any // func(string) certprovider.Builder 59 // GetXDSHandshakeInfoForTesting returns a pointer to the xds.HandshakeInfo 60 // stored in the passed in attributes. This is set by 61 // credentials/xds/xds.go. 62 GetXDSHandshakeInfoForTesting any // func (*attributes.Attributes) *unsafe.Pointer 63 // GetServerCredentials returns the transport credentials configured on a 64 // gRPC server. An xDS-enabled server needs to know what type of credentials 65 // is configured on the underlying gRPC server. This is set by server.go. 66 GetServerCredentials any // func (*grpc.Server) credentials.TransportCredentials 67 // MetricsRecorderForServer returns the MetricsRecorderList derived from a 68 // server's stats handlers. 69 MetricsRecorderForServer any // func (*grpc.Server) estats.MetricsRecorder 70 // CanonicalString returns the canonical string of the code defined here: 71 // https://github.com/grpc/grpc/blob/master/doc/statuscodes.md. 72 // 73 // This is used in the 1.0 release of gcp/observability, and thus must not be 74 // deleted or changed. 75 CanonicalString any // func (codes.Code) string 76 // IsRegisteredMethod returns whether the passed in method is registered as 77 // a method on the server. 78 IsRegisteredMethod any // func(*grpc.Server, string) bool 79 // ServerFromContext returns the server from the context. 80 ServerFromContext any // func(context.Context) *grpc.Server 81 // AddGlobalServerOptions adds an array of ServerOption that will be 82 // effective globally for newly created servers. The priority will be: 1. 83 // user-provided; 2. this method; 3. default values. 84 // 85 // This is used in the 1.0 release of gcp/observability, and thus must not be 86 // deleted or changed. 87 AddGlobalServerOptions any // func(opt ...ServerOption) 88 // ClearGlobalServerOptions clears the array of extra ServerOption. This 89 // method is useful in testing and benchmarking. 90 // 91 // This is used in the 1.0 release of gcp/observability, and thus must not be 92 // deleted or changed. 93 ClearGlobalServerOptions func() 94 // AddGlobalDialOptions adds an array of DialOption that will be effective 95 // globally for newly created client channels. The priority will be: 1. 96 // user-provided; 2. this method; 3. default values. 97 // 98 // This is used in the 1.0 release of gcp/observability, and thus must not be 99 // deleted or changed. 100 AddGlobalDialOptions any // func(opt ...DialOption) 101 // DisableGlobalDialOptions returns a DialOption that prevents the 102 // ClientConn from applying the global DialOptions (set via 103 // AddGlobalDialOptions). 104 // 105 // This is used in the 1.0 release of gcp/observability, and thus must not be 106 // deleted or changed. 107 DisableGlobalDialOptions any // func() grpc.DialOption 108 // ClearGlobalDialOptions clears the array of extra DialOption. This 109 // method is useful in testing and benchmarking. 110 // 111 // This is used in the 1.0 release of gcp/observability, and thus must not be 112 // deleted or changed. 113 ClearGlobalDialOptions func() 114 115 // AddGlobalPerTargetDialOptions adds a PerTargetDialOption that will be 116 // configured for newly created ClientConns. 117 AddGlobalPerTargetDialOptions any // func (opt any) 118 // ClearGlobalPerTargetDialOptions clears the slice of global late apply 119 // dial options. 120 ClearGlobalPerTargetDialOptions func() 121 122 // JoinDialOptions combines the dial options passed as arguments into a 123 // single dial option. 124 JoinDialOptions any // func(...grpc.DialOption) grpc.DialOption 125 // JoinServerOptions combines the server options passed as arguments into a 126 // single server option. 127 JoinServerOptions any // func(...grpc.ServerOption) grpc.ServerOption 128 129 // WithBinaryLogger returns a DialOption that specifies the binary logger 130 // for a ClientConn. 131 // 132 // This is used in the 1.0 release of gcp/observability, and thus must not be 133 // deleted or changed. 134 WithBinaryLogger any // func(binarylog.Logger) grpc.DialOption 135 // BinaryLogger returns a ServerOption that can set the binary logger for a 136 // server. 137 // 138 // This is used in the 1.0 release of gcp/observability, and thus must not be 139 // deleted or changed. 140 BinaryLogger any // func(binarylog.Logger) grpc.ServerOption 141 142 // SubscribeToConnectivityStateChanges adds a grpcsync.Subscriber to a 143 // provided grpc.ClientConn. 144 SubscribeToConnectivityStateChanges any // func(*grpc.ClientConn, grpcsync.Subscriber) 145 146 // NewXDSResolverWithConfigForTesting creates a new xds resolver builder using 147 // the provided xds bootstrap config instead of the global configuration from 148 // the supported environment variables. The resolver.Builder is meant to be 149 // used in conjunction with the grpc.WithResolvers DialOption. 150 // 151 // Testing Only 152 // 153 // This function should ONLY be used for testing and may not work with some 154 // other features, including the CSDS service. 155 NewXDSResolverWithConfigForTesting any // func([]byte) (resolver.Builder, error) 156 157 // NewXDSResolverWithPoolForTesting creates a new xDS resolver builder 158 // using the provided xDS pool instead of creating a new one using the 159 // bootstrap configuration specified by the supported environment variables. 160 // The resolver.Builder is meant to be used in conjunction with the 161 // grpc.WithResolvers DialOption. The resolver.Builder does not take 162 // ownership of the provided xDS client and it is the responsibility of the 163 // caller to close the client when no longer required. 164 // 165 // Testing Only 166 // 167 // This function should ONLY be used for testing and may not work with some 168 // other features, including the CSDS service. 169 NewXDSResolverWithPoolForTesting any // func(*xdsclient.Pool) (resolver.Builder, error) 170 171 // NewXDSResolverWithClientForTesting creates a new xDS resolver builder 172 // using the provided xDS client instead of creating a new one using the 173 // bootstrap configuration specified by the supported environment variables. 174 // The resolver.Builder is meant to be used in conjunction with the 175 // grpc.WithResolvers DialOption. The resolver.Builder does not take 176 // ownership of the provided xDS client and it is the responsibility of the 177 // caller to close the client when no longer required. 178 // 179 // Testing Only 180 // 181 // This function should ONLY be used for testing and may not work with some 182 // other features, including the CSDS service. 183 NewXDSResolverWithClientForTesting any // func(xdsclient.XDSClient) (resolver.Builder, error) 184 185 // RegisterRLSClusterSpecifierPluginForTesting registers the RLS Cluster 186 // Specifier Plugin for testing purposes, regardless of the XDSRLS environment 187 // variable. 188 // 189 // TODO: Remove this function once the RLS env var is removed. 190 RegisterRLSClusterSpecifierPluginForTesting func() 191 192 // UnregisterRLSClusterSpecifierPluginForTesting unregisters the RLS Cluster 193 // Specifier Plugin for testing purposes. This is needed because there is no way 194 // to unregister the RLS Cluster Specifier Plugin after registering it solely 195 // for testing purposes using RegisterRLSClusterSpecifierPluginForTesting(). 196 // 197 // TODO: Remove this function once the RLS env var is removed. 198 UnregisterRLSClusterSpecifierPluginForTesting func() 199 200 // RegisterRBACHTTPFilterForTesting registers the RBAC HTTP Filter for testing 201 // purposes, regardless of the RBAC environment variable. 202 // 203 // TODO: Remove this function once the RBAC env var is removed. 204 RegisterRBACHTTPFilterForTesting func() 205 206 // UnregisterRBACHTTPFilterForTesting unregisters the RBAC HTTP Filter for 207 // testing purposes. This is needed because there is no way to unregister the 208 // HTTP Filter after registering it solely for testing purposes using 209 // RegisterRBACHTTPFilterForTesting(). 210 // 211 // TODO: Remove this function once the RBAC env var is removed. 212 UnregisterRBACHTTPFilterForTesting func() 213 214 // ORCAAllowAnyMinReportingInterval is for examples/orca use ONLY. 215 ORCAAllowAnyMinReportingInterval any // func(so *orca.ServiceOptions) 216 217 // GRPCResolverSchemeExtraMetadata determines when gRPC will add extra 218 // metadata to RPCs. 219 GRPCResolverSchemeExtraMetadata = "xds" 220 221 // EnterIdleModeForTesting gets the ClientConn to enter IDLE mode. 222 EnterIdleModeForTesting any // func(*grpc.ClientConn) 223 224 // ExitIdleModeForTesting gets the ClientConn to exit IDLE mode. 225 ExitIdleModeForTesting any // func(*grpc.ClientConn) error 226 227 // ChannelzTurnOffForTesting disables the Channelz service for testing 228 // purposes. 229 ChannelzTurnOffForTesting func() 230 231 // TriggerXDSResourceNotFoundForTesting causes the provided xDS Client to 232 // invoke resource-not-found error for the given resource type and name. 233 TriggerXDSResourceNotFoundForTesting any // func(xdsclient.XDSClient, xdsresource.Type, string) error 234 235 // FromOutgoingContextRaw returns the un-merged, intermediary contents of 236 // metadata.rawMD. 237 FromOutgoingContextRaw any // func(context.Context) (metadata.MD, [][]string, bool) 238 239 // UserSetDefaultScheme is set to true if the user has overridden the 240 // default resolver scheme. 241 UserSetDefaultScheme = false 242 243 // ConnectedAddress returns the connected address for a SubConnState. The 244 // address is only valid if the state is READY. 245 ConnectedAddress any // func (scs SubConnState) resolver.Address 246 247 // SetConnectedAddress sets the connected address for a SubConnState. 248 SetConnectedAddress any // func(scs *SubConnState, addr resolver.Address) 249 250 // SnapshotMetricRegistryForTesting snapshots the global data of the metric 251 // registry. Returns a cleanup function that sets the metric registry to its 252 // original state. Only called in testing functions. 253 SnapshotMetricRegistryForTesting func() func() 254 255 // SetDefaultBufferPoolForTesting updates the default buffer pool, for 256 // testing purposes. 257 SetDefaultBufferPoolForTesting any // func(mem.BufferPool) 258 259 // SetBufferPoolingThresholdForTesting updates the buffer pooling threshold, for 260 // testing purposes. 261 SetBufferPoolingThresholdForTesting any // func(int) 262 263 // TimeAfterFunc is used to create timers. During tests the function is 264 // replaced to track allocated timers and fail the test if a timer isn't 265 // cancelled. 266 TimeAfterFunc = func(d time.Duration, f func()) Timer { 267 return time.AfterFunc(d, f) 268 } 269 ) 270 271 // HealthChecker defines the signature of the client-side LB channel health 272 // checking function. 273 // 274 // The implementation is expected to create a health checking RPC stream by 275 // calling newStream(), watch for the health status of serviceName, and report 276 // its health back by calling setConnectivityState(). 277 // 278 // The health checking protocol is defined at: 279 // https://github.com/grpc/grpc/blob/master/doc/health-checking.md 280 type HealthChecker func(ctx context.Context, newStream func(string) (any, error), setConnectivityState func(connectivity.State, error), serviceName string) error 281 282 const ( 283 // CredsBundleModeFallback switches GoogleDefaultCreds to fallback mode. 284 CredsBundleModeFallback = "fallback" 285 // CredsBundleModeBalancer switches GoogleDefaultCreds to grpclb balancer 286 // mode. 287 CredsBundleModeBalancer = "balancer" 288 // CredsBundleModeBackendFromBalancer switches GoogleDefaultCreds to mode 289 // that supports backend returned by grpclb balancer. 290 CredsBundleModeBackendFromBalancer = "backend-from-balancer" 291 ) 292 293 // RLSLoadBalancingPolicyName is the name of the RLS LB policy. 294 // 295 // It currently has an experimental suffix which would be removed once 296 // end-to-end testing of the policy is completed. 297 const RLSLoadBalancingPolicyName = "rls_experimental" 298 299 // EnforceSubConnEmbedding is used to enforce proper SubConn implementation 300 // embedding. 301 type EnforceSubConnEmbedding interface { 302 enforceSubConnEmbedding() 303 } 304 305 // EnforceClientConnEmbedding is used to enforce proper ClientConn implementation 306 // embedding. 307 type EnforceClientConnEmbedding interface { 308 enforceClientConnEmbedding() 309 } 310 311 // Timer is an interface to allow injecting different time.Timer implementations 312 // during tests. 313 type Timer interface { 314 Stop() bool 315 }