Example #1
0
func (db *stateStore) State(id types.Id, key string) ([]byte, types.Error) {
	db.RLock()
	defer db.RUnlock()
	bucket := db.buckets[id]
	if bucket == nil {
		return nil, types.InvalidStateError("bucket '" + id.String() + "' doesn't exist")
	}
	bucket.RLock()
	defer bucket.RUnlock()
	value := bucket.states[key]
	return value, nil
}
Example #2
0
func (db *stateStore) States(id types.Id) ([]interfaces.State, types.Error) {
	db.RLock()
	defer db.RUnlock()
	bucket := db.buckets[id]
	if bucket == nil {
		return nil, types.InvalidStateError("bucket '" + id.String() + "' doesn't exist")
	}
	bucket.RLock()
	defer bucket.RUnlock()
	states := make([]interfaces.State, 0, len(bucket.states))
	for key, value := range bucket.states {
		states = append(states, state{key, value})
	}
	return states, nil
}
Example #3
0
func (db *stateStore) SetState(id types.Id, key string, value []byte) ([]byte, types.Error) {
	db.RLock()
	defer db.RUnlock()
	bucket := db.buckets[id]
	if bucket == nil {
		return nil, types.InvalidStateError("bucket '" + id.String() + "' doesn't exist")
	}
	bucket.Lock()
	defer bucket.Unlock()
	oldValue := bucket.states[key]
	if len(value) == 0 {
		delete(bucket.states, key)
	} else {
		bucket.states[key] = value
	}

	return oldValue, nil
}