karmada/pkg/search/backendstore/store.go

74 lines
1.5 KiB
Go

package backendstore
import (
"sync"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
"k8s.io/klog/v2"
"github.com/karmada-io/karmada/pkg/apis/search/v1alpha1"
)
// BackendStore define BackendStore interface
type BackendStore interface {
ResourceEventHandlerFuncs() cache.ResourceEventHandler
Close()
}
var (
backendLock sync.Mutex
backends map[string]BackendStore
k8sClient *kubernetes.Clientset
)
// Init init backend store manager
func Init(cs *kubernetes.Clientset) {
backendLock.Lock()
backends = make(map[string]BackendStore)
k8sClient = cs
backendLock.Unlock()
}
// AddBackend add backend store
func AddBackend(cluster string, cfg *v1alpha1.BackendStoreConfig) {
backendLock.Lock()
defer backendLock.Unlock()
if cfg == nil || cfg.OpenSearch == nil {
backends[cluster] = NewDefaultBackend(cluster)
return
}
bs, err := NewOpenSearch(cluster, cfg)
if err != nil {
klog.Errorf("cannot create backend store %s: %v, use default backend store", cluster, err)
return
}
backends[cluster] = bs
}
// DeleteBackend delete backend store
func DeleteBackend(cluster string) {
backendLock.Lock()
defer backendLock.Unlock()
bs, ok := backends[cluster]
if ok {
bs.Close()
delete(backends, cluster)
}
}
// GetBackend get backend store
func GetBackend(cluster string) BackendStore {
backendLock.Lock()
defer backendLock.Unlock()
bs, ok := backends[cluster]
if !ok {
klog.Errorf("cannot find backend store %s, use defult backend", cluster)
return NewDefaultBackend(cluster)
}
return bs
}