github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/grpc/xds/server_options.go (about) 1 /* 2 * 3 * Copyright 2021 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 package xds 20 21 import ( 22 "net" 23 24 grpc "github.com/hxx258456/ccgo/grpc" 25 "github.com/hxx258456/ccgo/grpc/connectivity" 26 ) 27 28 type serverOptions struct { 29 modeCallback ServingModeCallbackFunc 30 bootstrapContents []byte 31 } 32 33 type serverOption struct { 34 grpc.EmptyServerOption 35 apply func(*serverOptions) 36 } 37 38 // ServingModeCallback returns a grpc.ServerOption which allows users to 39 // register a callback to get notified about serving mode changes. 40 func ServingModeCallback(cb ServingModeCallbackFunc) grpc.ServerOption { 41 return &serverOption{apply: func(o *serverOptions) { o.modeCallback = cb }} 42 } 43 44 // ServingModeCallbackFunc is the callback that users can register to get 45 // notified about the server's serving mode changes. The callback is invoked 46 // with the address of the listener and its new mode. 47 // 48 // Users must not perform any blocking operations in this callback. 49 type ServingModeCallbackFunc func(addr net.Addr, args ServingModeChangeArgs) 50 51 // ServingModeChangeArgs wraps the arguments passed to the serving mode callback 52 // function. 53 type ServingModeChangeArgs struct { 54 // Mode is the new serving mode of the server listener. 55 Mode connectivity.ServingMode 56 // Err is set to a non-nil error if the server has transitioned into 57 // not-serving mode. 58 Err error 59 } 60 61 // BootstrapContentsForTesting returns a grpc.ServerOption which allows users 62 // to inject a bootstrap configuration used by only this server, instead of the 63 // global configuration from the environment variables. 64 // 65 // Testing Only 66 // 67 // This function should ONLY be used for testing and may not work with some 68 // other features, including the CSDS service. 69 // 70 // Experimental 71 // 72 // Notice: This API is EXPERIMENTAL and may be changed or removed in a 73 // later release. 74 func BootstrapContentsForTesting(contents []byte) grpc.ServerOption { 75 return &serverOption{apply: func(o *serverOptions) { o.bootstrapContents = contents }} 76 }