in qldbdriver/qldbdriver.go [61:97]
func New(ledgerName string, qldbSession *qldbsession.QLDBSession, fns ...func(*DriverOptions)) (*QLDBDriver, error) {
if qldbSession == nil {
return nil, &qldbDriverError{"Provided QLDBSession is nil."}
}
retryPolicy := RetryPolicy{
MaxRetryLimit: 4,
Backoff: ExponentialBackoffStrategy{SleepBase: time.Duration(10) * time.Millisecond, SleepCap: time.Duration(5000) * time.Millisecond}}
options := &DriverOptions{RetryPolicy: retryPolicy, MaxConcurrentTransactions: 50, Logger: defaultLogger{}, LoggerVerbosity: LogInfo}
for _, fn := range fns {
fn(options)
}
if options.MaxConcurrentTransactions < 1 {
return nil, &qldbDriverError{"MaxConcurrentTransactions must be 1 or greater."}
}
logger := &qldbLogger{options.Logger, options.LoggerVerbosity}
driverQldbSession := *qldbSession
if qldbSession.Client != nil {
client := *qldbSession.Client
qldbSDKRetries := 0
client.Config.MaxRetries = &qldbSDKRetries
driverQldbSession.Client = &client
}
semaphore := makeSemaphore(options.MaxConcurrentTransactions)
sessionPool := make(chan *session, options.MaxConcurrentTransactions)
isClosed := false
return &QLDBDriver{ledgerName, &driverQldbSession, options.MaxConcurrentTransactions, logger, isClosed,
semaphore, sessionPool, options.RetryPolicy, sync.Mutex{}}, nil
}