// Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a MIT // license that can be found in the LICENSE file. package main import ( "context" "os" "runtime" "runtime/pprof" "sync" ) func init() { register("Etcd6708", Etcd6708) } type EndpointSelectionMode_etcd6708 int const ( EndpointSelectionRandom_etcd6708 EndpointSelectionMode_etcd6708 = iota EndpointSelectionPrioritizeLeader_etcd6708 ) type MembersAPI_etcd6708 interface { Leader(ctx context.Context) } type Client_etcd6708 interface { Sync(ctx context.Context) SetEndpoints() httpClient_etcd6708 } type httpClient_etcd6708 interface { Do(context.Context) } type httpClusterClient_etcd6708 struct { sync.RWMutex selectionMode EndpointSelectionMode_etcd6708 } func (c *httpClusterClient_etcd6708) getLeaderEndpoint() { mAPI := NewMembersAPI_etcd6708(c) mAPI.Leader(context.Background()) } func (c *httpClusterClient_etcd6708) SetEndpoints() { switch c.selectionMode { case EndpointSelectionRandom_etcd6708: case EndpointSelectionPrioritizeLeader_etcd6708: c.getLeaderEndpoint() } } func (c *httpClusterClient_etcd6708) Do(ctx context.Context) { c.RLock() c.RUnlock() } func (c *httpClusterClient_etcd6708) Sync(ctx context.Context) { c.Lock() defer c.Unlock() c.SetEndpoints() } type httpMembersAPI_etcd6708 struct { client httpClient_etcd6708 } func (m *httpMembersAPI_etcd6708) Leader(ctx context.Context) { m.client.Do(ctx) } func NewMembersAPI_etcd6708(c Client_etcd6708) MembersAPI_etcd6708 { return &httpMembersAPI_etcd6708{ client: c, } } func Etcd6708() { prof := pprof.Lookup("goroutineleak") defer func() { // Yield several times to allow the child goroutine to run. for i := 0; i < yieldCount; i++ { runtime.Gosched() } prof.WriteTo(os.Stdout, 2) }() go func() { hc := &httpClusterClient_etcd6708{ selectionMode: EndpointSelectionPrioritizeLeader_etcd6708, } hc.Sync(context.Background()) }() }