@@ -3,6 +3,7 @@ package domain
33import (
44 "fmt"
55 "strconv"
6+ "sync"
67
78 "github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2/api"
89 "github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2/constants"
@@ -15,21 +16,18 @@ import (
1516type Project struct {
1617 * api.Project
1718 OnlineStore OnlineStore
18- FeatureViewMap map [ string ] FeatureView
19+ FeatureViewMap sync. Map
1920 FeatureEntityMap map [string ]* FeatureEntity
20- ModelMap map [ string ] * Model
21- LabelTableMap map [ int ] * LabelTable
21+ ModelMap sync. Map
22+ LabelTableMap sync. Map
2223
2324 apiClient * api.APIClient
2425}
2526
2627func NewProject (p * api.Project , isInitClient bool ) * Project {
2728 project := Project {
2829 Project : p ,
29- FeatureViewMap : make (map [string ]FeatureView ),
3030 FeatureEntityMap : make (map [string ]* FeatureEntity ),
31- ModelMap : make (map [string ]* Model ),
32- LabelTableMap : make (map [int ]* LabelTable ),
3331 }
3432
3533 switch p .OnlineDatasourceType {
@@ -89,50 +87,58 @@ func (p *Project) SetApiClient(apiClient *api.APIClient) {
8987}
9088
9189func (p * Project ) GetFeatureView (name string ) FeatureView {
92- if _ , exists := p .FeatureViewMap [name ]; ! exists {
93- err := p .loadFeatureView (name )
94- if err != nil {
95- return nil
96- }
90+ if value , exists := p .FeatureViewMap .Load (name ); exists {
91+ return value .(FeatureView )
9792 }
98-
99- return p .FeatureViewMap [name ]
93+ if err := p .loadFeatureView (name ); err != nil {
94+ return nil
95+ }
96+ if value , exists := p .FeatureViewMap .Load (name ); exists {
97+ return value .(FeatureView )
98+ }
99+ return nil
100100}
101101
102102func (p * Project ) GetFeatureEntity (name string ) * FeatureEntity {
103103 return p .FeatureEntityMap [name ]
104104}
105105
106106func (p * Project ) GetLabelTable (labelTableId int ) * LabelTable {
107- if _ , exists := p .LabelTableMap [labelTableId ]; ! exists {
108- err := p .loadLabelTable (labelTableId )
109- if err != nil {
110- return nil
111- }
107+ if value , exists := p .LabelTableMap .Load (labelTableId ); exists {
108+ return value .(* LabelTable )
112109 }
113-
114- return p .LabelTableMap [labelTableId ]
110+ if err := p .loadLabelTable (labelTableId ); err != nil {
111+ return nil
112+ }
113+ if value , exists := p .LabelTableMap .Load (labelTableId ); exists {
114+ return value .(* LabelTable )
115+ }
116+ return nil
115117}
116118
117119func (p * Project ) GetModel (name string ) * Model {
118- if _ , exists := p .ModelMap [name ]; ! exists {
119- err := p .loadModelFeature (name )
120- if err != nil {
121- return nil
122- }
120+ if value , exists := p .ModelMap .Load (name ); exists {
121+ return value .(* Model )
123122 }
124-
125- return p .ModelMap [name ]
123+ if err := p .loadModelFeature (name ); err != nil {
124+ return nil
125+ }
126+ if value , exists := p .ModelMap .Load (name ); exists {
127+ return value .(* Model )
128+ }
129+ return nil
126130}
127131func (p * Project ) GetModelFeature (name string ) * Model {
128- if _ , exists := p .ModelMap [name ]; ! exists {
129- err := p .loadModelFeature (name )
130- if err != nil {
131- return nil
132- }
132+ if value , exists := p .ModelMap .Load (name ); exists {
133+ return value .(* Model )
133134 }
134-
135- return p .ModelMap [name ]
135+ if err := p .loadModelFeature (name ); err != nil {
136+ return nil
137+ }
138+ if value , exists := p .ModelMap .Load (name ); exists {
139+ return value .(* Model )
140+ }
141+ return nil
136142}
137143
138144func (p * Project ) loadFeatureView (featureViewName string ) error {
@@ -166,7 +172,7 @@ func (p *Project) loadFeatureView(featureViewName string) error {
166172 return fmt .Errorf ("feature entity not exist, name=%s" , featureView .FeatureEntityName )
167173 }
168174 featureViewDomain := NewFeatureView (featureView , p , entity )
169- p .FeatureViewMap [ featureView .Name ] = featureViewDomain
175+ p .FeatureViewMap . Store ( featureView .Name , featureViewDomain )
170176 }
171177
172178 if len (listFeatureViews .FeatureViews ) == 0 || pageSize * pageNumber > listFeatureViews .TotalCount {
@@ -186,7 +192,7 @@ func (p *Project) loadLabelTable(labelTableId int) error {
186192 return err
187193 }
188194 labelTableDomain := NewLabelTable (getLabelTableResponse .LabelTable )
189- p .LabelTableMap [ labelTableId ] = labelTableDomain
195+ p .LabelTableMap . Store ( labelTableId , labelTableDomain )
190196
191197 return nil
192198}
@@ -207,17 +213,13 @@ func (p *Project) loadModelFeature(modelFeatureName string) error {
207213 return err
208214 }
209215 model := getModelFeatureResponse .Model
210- var labelTableDomain * LabelTable
211- if _ , exists := p .LabelTableMap [model .LabelTableId ]; ! exists {
212- err := p .loadLabelTable (model .LabelTableId )
213- if err != nil {
214- fmt .Printf ("get label table error, err=%v" , err )
215- return err
216- }
216+ labelTableDomain := p .GetLabelTable (model .LabelTableId )
217+ if labelTableDomain == nil {
218+ fmt .Printf ("label table not exist, id=%d" , model .LabelTableId )
219+ return fmt .Errorf ("label table not exist, id=%d" , model .LabelTableId )
217220 }
218- labelTableDomain = p .LabelTableMap [model .LabelTableId ]
219221 modelDomain := NewModel (model , p , labelTableDomain )
220- p .ModelMap [ model .Name ] = modelDomain
222+ p .ModelMap . Store ( model .Name , modelDomain )
221223 }
222224
223225 if len (listModelFeatures .Models ) == 0 || pageSize * pageNumber > listModelFeatures .TotalCount {
0 commit comments