// NewDatastoreKeyValue will validate the supplied name and create a datastore // backed key / value store // // The file will be located at the init datastoreURL -- currently that's in the // appliance directory under the {dsFolder} folder (i.e. [datastore]vch-appliance/{dsFolder}/{name}) func NewDatastoreKeyValue(ctx context.Context, session *session.Session, name string) (kvstore.KeyValueStore, error) { defer trace.End(trace.Begin(name)) mgr.m.Lock() defer mgr.m.Unlock() // validate the name err := validateStoreName(name) if err != nil { return nil, err } // get a ds helper for this ds url dsHelper, err := datastore.NewHelper(trace.NewOperation(ctx, "datastore helper creation"), session, session.Datastore, fmt.Sprintf("%s/%s", mgr.datastoreURL.Path, KVStoreFolder)) if err != nil { return nil, fmt.Errorf("unable to get datastore helper for %s store creation: %s", name, err.Error()) } // create or restore the specified K/V store keyVal, err := kvstore.NewKeyValueStore(ctx, kvstore.NewDatastoreBackend(dsHelper), name) if err != nil && !os.IsExist(err) { return nil, fmt.Errorf("unable to create %s datastore backed store: %s", name, err.Error()) } // throw it in the store map mgr.dsStores[name] = keyVal return keyVal, nil }
func setup() { // set up fake store manager mgr = &StoreManager{ dsStores: make(map[string]kvstore.KeyValueStore), } kv, err := kvstore.NewKeyValueStore(context.TODO(), &kvstore.MockBackend{}, "test") log.Errorf("failed to create kv store: %s", err) mgr.dsStores[APIKV] = kv }