-
-
Notifications
You must be signed in to change notification settings - Fork 140
Open
Description
I keep getting the "no available client found" error when calling pubsub, err = client.NewPubSub() on client = cache.NewEmbeddedClient(). It seems to seldomly work - I managed to get it to work like 1/10 times.
Details
22:36:17.574 [INFO] Olric 0.5.4 on linux/amd64 go1.22.0
23:36:17.574 [INFO] Join completed. Synced with 1 initial nodes
23:36:17.575 [INFO] Memberlist bindAddr: 10.244.0.88, bindPort: 3322
23:36:17.575 [INFO] Cluster coordinator: 10.244.0.38:3320
23:36:17.575 [INFO] Node name in the cluster: 10.244.0.88:3320
23:36:17.575 [INFO] Olric bindAddr: 10.244.0.88, bindPort: 3320
23:36:17.575 [INFO] Replication count is 1
23:36:17.575 [INFO] Node joined: 10.244.0.38:3320
23:36:17.587 [INFO] Routing table has been pushed by 10.244.0.38:3320
23:36:17.588 pubsub error no available client found
Code I'm using is the one from the base example with some custom kubernetes discovery setup:
func Init(discovery *k8s.K8sDiscovery) bool {
discoveryAdapter, err := newK8sAdapter(discovery)
if err != nil {
log.Fatalln("adapter error:", err)
}
// create a new Olric configuration
cfg := config.New("lan") // default configuration
cfg.ReplicationMode = config.SyncReplicationMode
cfg.ServiceDiscovery = map[string]interface{}{"plugin": discoveryAdapter} //https://gist.github.com/derekperkins/8f5232d897ccf5a20691a1556574cfce
cfg.DMaps.EvictionPolicy = config.LRUEviction //
cfg.DMaps.MaxInuse = 50_000_000 // 50 MB
cfg.LogLevel = "INFO"
cfg.LogVerbosity = 3 // at least 2 is recommended; https://github.com/buraksezer/olric/blob/master/config/config.go#L102
// this wait group is used to block the main goroutine until the embedded client is ready
wg := sync.WaitGroup{}
wg.Add(1)
cfg.Started = func() { wg.Done() }
// create the actual Olric instance
cache, err = olric.New(cfg)
if err != nil {
log.Println("error creating cache from config:", err)
return false
}
// start the instance, which triggers the k8s service discovery and forms the cluster
go func() {
if err := cache.Start(); err != nil {
panic("error starting:" + err.Error())
}
}()
// wait for the cluster to be ready before continuing
wg.Wait()
client = cache.NewEmbeddedClient()
if client == nil {
log.Fatalln("client nil")
}
pubsub, err = client.NewPubSub()
if err != nil {
log.Fatalln("pubsub error", err)
}
return true
}
Any suggestions on what I might be doing wrong here?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels