Handle cockroach createDB error (#1603)

This commit is contained in:
ben-toogood 2020-05-06 10:58:14 +01:00 committed by GitHub
parent 90dd1f63c8
commit 5387f73b5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -68,16 +68,22 @@ func (s *sqlStore) getDB(database, table string) (string, string) {
return database, table return database, table
} }
func (s *sqlStore) createDB(database, table string) { func (s *sqlStore) createDB(database, table string) error {
database, table = s.getDB(database, table) database, table = s.getDB(database, table)
s.Lock() s.Lock()
_, ok := s.databases[database+":"+table] defer s.Unlock()
if !ok {
s.initDB(database, table) if _, ok := s.databases[database+":"+table]; ok {
s.databases[database+":"+table] = true return nil
} }
s.Unlock()
if err := s.initDB(database, table); err != nil {
return err
}
s.databases[database+":"+table] = true
return nil
} }
func (s *sqlStore) initDB(database, table string) error { func (s *sqlStore) initDB(database, table string) error {
@ -192,7 +198,9 @@ func (s *sqlStore) List(opts ...store.ListOption) ([]string, error) {
} }
// create the db if not exists // create the db if not exists
s.createDB(options.Database, options.Table) if err := s.createDB(options.Database, options.Table); err != nil {
return nil, err
}
st, err := s.prepare(options.Database, options.Table, "list") st, err := s.prepare(options.Database, options.Table, "list")
if err != nil { if err != nil {
@ -249,7 +257,9 @@ func (s *sqlStore) Read(key string, opts ...store.ReadOption) ([]*store.Record,
} }
// create the db if not exists // create the db if not exists
s.createDB(options.Database, options.Table) if err := s.createDB(options.Database, options.Table); err != nil {
return nil, err
}
if options.Prefix || options.Suffix { if options.Prefix || options.Suffix {
return s.read(key, options) return s.read(key, options)
@ -366,7 +376,9 @@ func (s *sqlStore) Write(r *store.Record, opts ...store.WriteOption) error {
} }
// create the db if not exists // create the db if not exists
s.createDB(options.Database, options.Table) if err := s.createDB(options.Database, options.Table); err != nil {
return err
}
st, err := s.prepare(options.Database, options.Table, "write") st, err := s.prepare(options.Database, options.Table, "write")
if err != nil { if err != nil {
@ -395,7 +407,9 @@ func (s *sqlStore) Delete(key string, opts ...store.DeleteOption) error {
} }
// create the db if not exists // create the db if not exists
s.createDB(options.Database, options.Table) if err := s.createDB(options.Database, options.Table); err != nil {
return err
}
st, err := s.prepare(options.Database, options.Table, "delete") st, err := s.prepare(options.Database, options.Table, "delete")
if err != nil { if err != nil {