func()

in plugins/storage/rdbms/init.go [150:211]


func (r *RDBMS) init() error {

	driverName := "mysql"
	if r.driverName != "" {
		driverName = r.driverName
	}
	sqlDB, err := sql.Open(driverName, r.dbURI)
	if err != nil {
		return fmt.Errorf("could not initialize database: %w", err)
	}
	if err := sqlDB.Ping(); err != nil {
		sqlDB.Close()
		return fmt.Errorf("unable to contact database: %w", err)
	}
	r.db = sqlDB
	r.sqlDB = sqlDB

	if r.testEventsFlushInterval > 0 {
		r.closeWG.Add(1)
		go func() {
			done := false
			for !done {
				select {
				case <-time.After(r.testEventsFlushInterval):
					if err := r.flushTestEvents(); err != nil {
						log.Warningf("Failed to flush test events: %v", err)
					}
				case <-r.closeCh:
					// Flush one last time
					if err := r.flushTestEvents(); err != nil {
						log.Warningf("Failed to flush test events: %v", err)
					}
					done = true
				}
			}
			r.closeWG.Done()
		}()
	}

	if r.frameworkEventsFlushInterval > 0 {
		r.closeWG.Add(1)
		go func() {
			done := false
			for !done {
				select {
				case <-time.After(r.frameworkEventsFlushInterval):
					if err := r.flushFrameworkEvents(); err != nil {
						log.Warningf("Failed to flush test events: %v", err)
					}
				case <-r.closeCh:
					// Flush one last time
					if err := r.flushFrameworkEvents(); err != nil {
						log.Warningf("Failed to flush test events: %v", err)
					}
					done = true
				}
			}
			r.closeWG.Done()
		}()
	}
	return nil
}