persist/fs/featurestore.go (62 lines of code) (raw):

package fs import ( "fmt" "github.com/alibaba/pairec/v2/log" "github.com/alibaba/pairec/v2/recconf" "github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2/domain" "github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2/featurestore" ) var fsInstances = make(map[string]*FSClient) func GetFeatureStoreClient(name string) (*FSClient, error) { if _, ok := fsInstances[name]; !ok { return nil, fmt.Errorf("feature store client not found, name:%s", name) } return fsInstances[name], nil } type FSClient struct { client *featurestore.FeatureStoreClient project *domain.Project projectName string } func (fs *FSClient) GetProject() *domain.Project { return fs.project } func (fs *FSClient) ReloadProject() { if p, err := fs.client.GetProject(fs.projectName); err == nil { fs.project = p } else { log.Error(fmt.Sprintf("get project failed, projectName:%s, err:%v", fs.projectName, err)) } } func Load(config *recconf.RecommendConfig) { for name, conf := range config.FeatureStoreConfs { if fs, ok := fsInstances[name]; ok { fs.ReloadProject() continue } hologresPort := 80 if conf.HologresPort > 0 { hologresPort = conf.HologresPort } l := log.FeatureStoreLogger{} client, err := featurestore.NewFeatureStoreClient(conf.RegionId, conf.AccessId, conf.AccessKey, conf.ProjectName, featurestore.WithLogger(featurestore.LoggerFunc(l.Infof)), featurestore.WithErrorLogger(featurestore.LoggerFunc(l.Errorf)), featurestore.WithFeatureDBLogin(conf.FeatureDBUsername, conf.FeatureDBPassword), featurestore.WithHologresPort(hologresPort), ) if err != nil { panic(err) } p, err := client.GetProject(conf.ProjectName) if err != nil { panic(err) } m := &FSClient{ client: client, project: p, projectName: conf.ProjectName, } fsInstances[name] = m } }