func New()

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
}