in dax/internal/client/single.go [85:155]
func newSingleClientWithOptions(endpoint string, connConfigData connConfig, region string, credentials aws.CredentialsProvider, maxPendingConnections int, dialContextFn dialContext, routeListener RouteListener) (*SingleDaxClient, error) {
po := defaultTubePoolOptions
if maxPendingConnections > 0 {
po.maxConcurrentConnAttempts = maxPendingConnections
}
po.dialContext = dialContextFn
client := &SingleDaxClient{
region: region,
credentials: credentials,
tubeAuthWindowSecs: authTtlSecs * tubeAuthWindowScalar,
pool: newTubePoolWithOptions(endpoint, po, connConfigData),
executor: newExecutor(),
healthStatus: newHealthStatus(endpoint, routeListener),
}
client.keySchema = &lru.Lru{
MaxEntries: keySchemaLruCacheSize,
LoadFunc: func(ctx context.Context, key lru.Key) (interface{}, error) {
table, ok := key.(string)
if !ok {
return nil, &smithy.SerializationError{Err: errors.New("unexpected type for table name")}
}
if ctx == nil {
ctx = context.Background()
}
return client.defineKeySchema(ctx, table)
},
}
client.attrNamesListToId = &lru.Lru{
MaxEntries: attributeListLruCacheSize,
LoadFunc: func(ctx context.Context, key lru.Key) (interface{}, error) {
attrNames, ok := key.([]string)
if !ok {
return nil, &smithy.SerializationError{Err: errors.New("unexpected type for attribute list")}
}
if ctx == nil {
ctx = context.Background()
}
return client.defineAttributeListId(ctx, attrNames)
},
KeyMarshaller: func(key lru.Key) lru.Key {
var buf bytes.Buffer
w := cbor.NewWriter(&buf)
defer w.Close()
for _, v := range key.([]string) {
w.WriteString(v)
}
w.Flush()
return string(buf.Bytes())
},
}
client.attrListIdToNames = &lru.Lru{
MaxEntries: attributeListLruCacheSize,
LoadFunc: func(ctx context.Context, key lru.Key) (interface{}, error) {
id, ok := key.(int64)
if !ok {
return nil, &smithy.SerializationError{Err: errors.New("unexpected type for attribute list id")}
}
if ctx == nil {
ctx = context.Background()
}
return client.defineAttributeList(ctx, id)
},
}
return client, nil
}