|
@@ -17,22 +17,33 @@ package endpoints
|
|
|
import (
|
|
import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
+ "sync"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
const keyFormatter = "%s::%s"
|
|
const keyFormatter = "%s::%s"
|
|
|
|
|
|
|
|
-var endpointMapping = make(map[string]string)
|
|
|
|
|
|
|
+type EndpointMapping struct {
|
|
|
|
|
+ sync.RWMutex
|
|
|
|
|
+ endpoint map[string]string
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+var endpointMapping = EndpointMapping{endpoint: make(map[string]string)}
|
|
|
|
|
|
|
|
-// AddEndpointMapping Use product id and region id as key to store the endpoint into inner map
|
|
|
|
|
|
|
+// AddEndpointMapping use productId and regionId as key to store the endpoint into inner map
|
|
|
|
|
+// when using the same productId and regionId as key, the endpoint will be covered.
|
|
|
func AddEndpointMapping(regionId, productId, endpoint string) (err error) {
|
|
func AddEndpointMapping(regionId, productId, endpoint string) (err error) {
|
|
|
key := fmt.Sprintf(keyFormatter, strings.ToLower(regionId), strings.ToLower(productId))
|
|
key := fmt.Sprintf(keyFormatter, strings.ToLower(regionId), strings.ToLower(productId))
|
|
|
- endpointMapping[key] = endpoint
|
|
|
|
|
|
|
+ endpointMapping.Lock()
|
|
|
|
|
+ endpointMapping.endpoint[key] = endpoint
|
|
|
|
|
+ endpointMapping.Unlock()
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// GetEndpointFromMap use Product and RegionId as key to find endpoint from inner map
|
|
// GetEndpointFromMap use Product and RegionId as key to find endpoint from inner map
|
|
|
func GetEndpointFromMap(regionId, productId string) string {
|
|
func GetEndpointFromMap(regionId, productId string) string {
|
|
|
key := fmt.Sprintf(keyFormatter, strings.ToLower(regionId), strings.ToLower(productId))
|
|
key := fmt.Sprintf(keyFormatter, strings.ToLower(regionId), strings.ToLower(productId))
|
|
|
- endpoint, _ := endpointMapping[key]
|
|
|
|
|
|
|
+ endpointMapping.RLock()
|
|
|
|
|
+ endpoint := endpointMapping.endpoint[key]
|
|
|
|
|
+ endpointMapping.RUnlock()
|
|
|
return endpoint
|
|
return endpoint
|
|
|
}
|
|
}
|