in dax/internal/client/single.go [84:153]
func newSingleClientWithOptions(endpoint string, connConfigData connConfig, region string, credentials *credentials.Credentials, maxPendingConnections int, dialContextFn dialContext) (*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),
}
client.handlers = client.buildHandlers()
client.keySchema = &lru.Lru{
MaxEntries: keySchemaLruCacheSize,
LoadFunc: func(ctx aws.Context, key lru.Key) (interface{}, error) {
table, ok := key.(string)
if !ok {
return nil, awserr.New(request.ErrCodeSerialization, "unexpected type for table name", nil)
}
if ctx == nil {
ctx = aws.BackgroundContext()
}
return client.defineKeySchema(ctx, table)
},
}
client.attrNamesListToId = &lru.Lru{
MaxEntries: attributeListLruCacheSize,
LoadFunc: func(ctx aws.Context, key lru.Key) (interface{}, error) {
attrNames, ok := key.([]string)
if !ok {
return nil, awserr.New(request.ErrCodeSerialization, "unexpected type for attribute list", nil)
}
if ctx == nil {
ctx = aws.BackgroundContext()
}
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 aws.Context, key lru.Key) (interface{}, error) {
id, ok := key.(int64)
if !ok {
return nil, awserr.New(request.ErrCodeSerialization, "unexpected type for attribute list id", nil)
}
if ctx == nil {
ctx = aws.BackgroundContext()
}
return client.defineAttributeList(ctx, id)
},
}
return client, nil
}