blob: afbbe35104bbb82733525720952a9b0d5f3d4171 [file] [log] [blame] [edit]
// 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())
}()
}