code: func (m *Manager) OpenDB() error {
  	if m.dbPath == "" {
  		return nil
  	}
  	m.dbMtx.Lock()
  	defer m.dbMtx.Unlock()
  	// open/initialize db
  	if err := os.MkdirAll(filepath.Dir(m.dbPath), 0755); err != nil {
  		return fmt.Errorf("could not mkdir for volume persistence db: %s", err)
  	}
  	db, err := bolt.Open(m.dbPath, 0600, &bolt.Options{Timeout: 5 * time.Second})
  	if err != nil {
  		return fmt.Errorf("could not open volume persistence db: %s", err)
  	}
  	if err := db.Update(func(tx *bolt.Tx) error {
  		// idempotently create buckets.  (errors ignored because they're all compile-time impossible args checks.)
  		tx.CreateBucketIfNotExists([]byte("volumes"))
  		tx.CreateBucketIfNotExists([]byte("providers"))
  		return nil
  	}); err != nil {
  		return fmt.Errorf("could not initialize volume persistence db: %s", err)
  	}
  	m.db = db
  	if err := m.restore(); err != nil {
  		return err
  	}
  	return m.maybeInitDefaultProvider()
  }
docs: // OpenDB opens and initialises the persistence DB, if not already open.