def create(self, name, project=None, capabilities=None): capabilities = {} if capabilities is None else capabilities subset_key = utils.flavor_project_subset_key(project) set_key = utils.flavor_set_key() hash_key = utils.flavor_name_hash_key(name) flavors = self._client.hgetall(hash_key) if len(flavors) == 0: flavors = { 'f': name, 'p': project, 'c': self._packer(capabilities or {}), } # Pipeline ensures atomic inserts. with self._client.pipeline() as pipe: pipe.zadd(set_key, 1, hash_key) pipe.zadd(subset_key, 1, hash_key) pipe.hmset(hash_key, flavors) pipe.execute() else: with self._client.pipeline() as pipe: pipe.hset(hash_key, "c", self._packer(capabilities)) pipe.hset(hash_key, "p", project) pipe.execute()
def create(self, name, project=None, capabilities=None): capabilities = {} if capabilities is None else capabilities subset_key = utils.flavor_project_subset_key(project) set_key = utils.flavor_set_key() hash_key = utils.flavor_name_hash_key(name) flavors = self._client.hgetall(hash_key) if len(flavors) == 0: flavors = { 'f': name, 'p': project, 'c': self._packer(capabilities or {}), } # Pipeline ensures atomic inserts. with self._client.pipeline() as pipe: pipe.zadd(set_key, {hash_key: 1}) pipe.zadd(subset_key, {hash_key: 1}) pipe.hmset(hash_key, flavors) pipe.execute() else: with self._client.pipeline() as pipe: pipe.hset(hash_key, "c", self._packer(capabilities)) pipe.hset(hash_key, "p", project) pipe.execute()
def delete(self, name, project=None): subset_key = utils.flavor_project_subset_key(project) set_key = utils.flavor_set_key() hash_key = utils.flavor_name_hash_key(name) if self._client.zrank(subset_key, hash_key) is not None: with self._client.pipeline() as pipe: pipe.zrem(set_key, hash_key) pipe.zrem(subset_key, hash_key) pipe.delete(hash_key) pipe.execute()
def exists(self, name, project=None): set_key = utils.flavor_set_key() hash_key = utils.flavor_name_hash_key(name) return self._client.zrank(set_key, hash_key) is not None