preliminary refactoring for custom naming and load balancing
This commit is contained in:
45
picker.go
Normal file
45
picker.go
Normal file
@ -0,0 +1,45 @@
|
||||
package grpc
|
||||
|
||||
// Picker picks a Conn for RPC requests.
|
||||
// This is EXPERIMENTAL and Please do not implement your own Picker for now.
|
||||
type Picker interface {
|
||||
// Pick returns the Conn to use for the upcoming RPC. It may return different
|
||||
// Conn's up to the implementation.
|
||||
Pick() (*Conn, error)
|
||||
// Peek returns the Conn use use for the next upcoming RPC. It returns the same
|
||||
// Conn until next time Pick gets invoked.
|
||||
Peek() *Conn
|
||||
// Close closes all the Conn's owned by this Picker.
|
||||
Close() error
|
||||
}
|
||||
|
||||
func newSimplePicker(target string, dopts dialOptions) (Picker, error) {
|
||||
c, err := NewConn(target, dopts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &simplePicker{
|
||||
conn: c,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// simplePicker is default Picker which is used when there is no custom Picker
|
||||
// specified by users. It always picks the same Conn.
|
||||
type simplePicker struct {
|
||||
conn *Conn
|
||||
}
|
||||
|
||||
func (p *simplePicker) Pick() (*Conn, error) {
|
||||
return p.conn, nil
|
||||
}
|
||||
|
||||
func (p *simplePicker) Peek() *Conn {
|
||||
return p.conn
|
||||
}
|
||||
|
||||
func (p *simplePicker) Close() error {
|
||||
if p.conn != nil {
|
||||
return p.conn.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user