From 95b55d2963fe0de152e7092fecc600a98495b3bc Mon Sep 17 00:00:00 2001 From: pycook Date: Mon, 9 Dec 2024 19:50:04 +0800 Subject: [PATCH] feat(api): set the default expire for redis lock --- cmdb-api/api/lib/cmdb/ci.py | 10 ++++++---- cmdb-api/api/lib/cmdb/dcim/rack.py | 8 ++++---- cmdb-api/api/lib/cmdb/ipam/address.py | 2 +- cmdb-api/api/lib/cmdb/perms.py | 6 +++--- cmdb-api/api/lib/perm/acl/cache.py | 4 ++-- cmdb-api/api/lib/perm/acl/role.py | 2 +- cmdb-api/api/tasks/acl.py | 2 +- cmdb-api/api/tasks/cmdb.py | 4 ++-- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/cmdb-api/api/lib/cmdb/ci.py b/cmdb-api/api/lib/cmdb/ci.py index 3638f9c..6a0b568 100644 --- a/cmdb-api/api/lib/cmdb/ci.py +++ b/cmdb-api/api/lib/cmdb/ci.py @@ -295,7 +295,7 @@ class CIManager(object): db.session.commit() value_table = TableMap(attr_name=attr.name).table - with redis_lock.Lock(rd.r, "auto_inc_id_{}".format(attr.name)): + with redis_lock.Lock(rd.r, "auto_inc_id_{}".format(attr.name), expire=10): max_v = value_table.get_by(attr_id=attr.id, only_query=True).order_by( getattr(value_table, 'value').desc()).first() if max_v is not None: @@ -393,7 +393,7 @@ class CIManager(object): ci = None record_id = None password_dict = {} - with redis_lock.Lock(rd.r, ci_type.name): + with redis_lock.Lock(rd.r, ci_type.name, expire=10): db.session.commit() if (unique_key.default and unique_key.default.get('default') == AttributeDefaultValueEnum.AUTO_INC_ID and @@ -550,7 +550,7 @@ class CIManager(object): limit_attrs = self._valid_ci_for_no_read(ci) if not _is_admin else {} record_id = None - with redis_lock.Lock(rd.r, ci_type.name): + with redis_lock.Lock(rd.r, ci_type.name, expire=10): db.session.commit() self._valid_unique_constraint(ci.type_id, ci_dict, ci_id) @@ -1268,7 +1268,9 @@ class CIRelationManager(object): else: type_relation = CITypeRelation.get_by_id(relation_type_id) - with redis_lock.Lock(rd.r, "ci_relation_add_{}_{}".format(first_ci.type_id, second_ci.type_id)): + with redis_lock.Lock(rd.r, + "ci_relation_add_{}_{}".format(first_ci.type_id, second_ci.type_id), + expire=10): cls._check_constraint(first_ci_id, first_ci.type_id, second_ci_id, second_ci.type_id, type_relation) diff --git a/cmdb-api/api/lib/cmdb/dcim/rack.py b/cmdb-api/api/lib/cmdb/dcim/rack.py index ac1dfaa..d241995 100644 --- a/cmdb-api/api/lib/cmdb/dcim/rack.py +++ b/cmdb-api/api/lib/cmdb/dcim/rack.py @@ -122,7 +122,7 @@ class RackManager(DCIMBase): CIManager().update(rack['_id'], **payload) def add_device(self, rack_id, device_id, u_start, u_count=None): - with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id))): + with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id), expire=10)): self.calc_u_free_count(rack_id, device_id, u_start, u_count) self.add_relation(rack_id, device_id) @@ -139,7 +139,7 @@ class RackManager(DCIMBase): OperateHistoryManager().add(operate_type=OperateTypeEnum.ADD_DEVICE, rack_id=rack_id, ci_id=device_id) def remove_device(self, rack_id, device_id): - with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id))): + with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id), expire=10)): CIRelationManager.delete_3(rack_id, device_id, apply_async=False, valid=False) payload = {RackBuiltinAttributes.FREE_U_COUNT: self.calc_u_free_count(rack_id)} @@ -151,7 +151,7 @@ class RackManager(DCIMBase): OperateHistoryManager().add(operate_type=OperateTypeEnum.REMOVE_DEVICE, rack_id=rack_id, ci_id=device_id) def move_device(self, rack_id, device_id, to_u_start): - with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id))): + with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id), expire=10)): payload = {RackBuiltinAttributes.FREE_U_COUNT: self.calc_u_free_count(rack_id, device_id, to_u_start)} CIManager().update(rack_id, _sync=True, **payload) @@ -160,7 +160,7 @@ class RackManager(DCIMBase): OperateHistoryManager().add(operate_type=OperateTypeEnum.MOVE_DEVICE, rack_id=rack_id, ci_id=device_id) def migrate_device(self, rack_id, device_id, to_rack_id, to_u_start): - with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id))): + with (redis_lock.Lock(rd.r, "DCIM_RACK_OPERATE_{}".format(rack_id), expire=10)): self.calc_u_free_count(to_rack_id, device_id, to_u_start) if rack_id != to_rack_id: diff --git a/cmdb-api/api/lib/cmdb/ipam/address.py b/cmdb-api/api/lib/cmdb/ipam/address.py index a29ee99..5faaaa9 100644 --- a/cmdb-api/api/lib/cmdb/ipam/address.py +++ b/cmdb-api/api/lib/cmdb/ipam/address.py @@ -92,7 +92,7 @@ class IpAddressManager(object): else: return abort(400, ErrFormat.ipam_address_model_not_found) - with (redis_lock.Lock(rd.r, "IPAM_ASSIGN_ADDRESS_{}".format(subnet_id))): + with (redis_lock.Lock(rd.r, "IPAM_ASSIGN_ADDRESS_{}".format(subnet_id), expire=10)): cis = self._get_cis(subnet_id, ips) ip2ci = {ci[IPAddressBuiltinAttributes.IP]: ci for ci in cis} diff --git a/cmdb-api/api/lib/cmdb/perms.py b/cmdb-api/api/lib/cmdb/perms.py index 0ebd5f8..4ce8592 100644 --- a/cmdb-api/api/lib/cmdb/perms.py +++ b/cmdb-api/api/lib/cmdb/perms.py @@ -163,7 +163,7 @@ class CIFilterPermsCRUD(DBMixin): def add(self, **kwargs): kwargs = self._can_add(**kwargs) or kwargs - with redis_lock.Lock(rd.r, 'CMDB_FILTER_{}_{}'.format(kwargs['type_id'], kwargs['rid'])): + with redis_lock.Lock(rd.r, 'CMDB_FILTER_{}_{}'.format(kwargs['type_id'], kwargs['rid']), expire=10): request_id_filter = {} if kwargs.get('id_filter'): obj = self.cls.get_by(type_id=kwargs.get('type_id'), @@ -232,7 +232,7 @@ class CIFilterPermsCRUD(DBMixin): pass def delete(self, **kwargs): - with redis_lock.Lock(rd.r, 'CMDB_FILTER_{}_{}'.format(kwargs['type_id'], kwargs['rid'])): + with redis_lock.Lock(rd.r, 'CMDB_FILTER_{}_{}'.format(kwargs['type_id'], kwargs['rid']), expire=10): obj = self.cls.get_by(type_id=kwargs.get('type_id'), rid=kwargs.get('rid'), id_filter=None, @@ -249,7 +249,7 @@ class CIFilterPermsCRUD(DBMixin): def delete2(self, **kwargs): - with redis_lock.Lock(rd.r, 'CMDB_FILTER_{}_{}'.format(kwargs['type_id'], kwargs['rid'])): + with redis_lock.Lock(rd.r, 'CMDB_FILTER_{}_{}'.format(kwargs['type_id'], kwargs['rid']), expire=10): obj = self.cls.get_by(type_id=kwargs.get('type_id'), rid=kwargs.get('rid'), ci_filter=None, diff --git a/cmdb-api/api/lib/perm/acl/cache.py b/cmdb-api/api/lib/perm/acl/cache.py index 42acbfb..b1695da 100644 --- a/cmdb-api/api/lib/perm/acl/cache.py +++ b/cmdb-api/api/lib/perm/acl/cache.py @@ -138,14 +138,14 @@ class HasResourceRoleCache(object): @classmethod def add(cls, rid, app_id): - with redis_lock.Lock(rd.r, 'HasResourceRoleCache'): + with redis_lock.Lock(rd.r, 'HasResourceRoleCache', expire=10): c = cls.get(app_id) c[rid] = 1 cache.set(cls.PREFIX_KEY.format(app_id), c, timeout=0) @classmethod def remove(cls, rid, app_id): - with redis_lock.Lock(rd.r, 'HasResourceRoleCache'): + with redis_lock.Lock(rd.r, 'HasResourceRoleCache', expire=10): c = cls.get(app_id) c.pop(rid, None) cache.set(cls.PREFIX_KEY.format(app_id), c, timeout=0) diff --git a/cmdb-api/api/lib/perm/acl/role.py b/cmdb-api/api/lib/perm/acl/role.py index 1cd35e9..2faacbb 100644 --- a/cmdb-api/api/lib/perm/acl/role.py +++ b/cmdb-api/api/lib/perm/acl/role.py @@ -145,7 +145,7 @@ class RoleRelationCRUD(object): @classmethod def add(cls, role, parent_id, child_ids, app_id): - with redis_lock.Lock(rd.r, "ROLE_RELATION_ADD"): + with redis_lock.Lock(rd.r, "ROLE_RELATION_ADD", expire=10): db.session.commit() result = [] diff --git a/cmdb-api/api/tasks/acl.py b/cmdb-api/api/tasks/acl.py index 94f37b6..31968e4 100644 --- a/cmdb-api/api/tasks/acl.py +++ b/cmdb-api/api/tasks/acl.py @@ -32,7 +32,7 @@ from api.models.acl import Trigger def role_rebuild(rids, app_id): rids = rids if isinstance(rids, list) else [rids] for rid in rids: - with redis_lock.Lock(rd.r, "ROLE_REBUILD_{}_{}".format(rid, app_id)): + with redis_lock.Lock(rd.r, "ROLE_REBUILD_{}_{}".format(rid, app_id), expire=10): RoleRelationCache.rebuild(rid, app_id) current_app.logger.info("Role {0} App {1} rebuild..........".format(rids, app_id)) diff --git a/cmdb-api/api/tasks/cmdb.py b/cmdb-api/api/tasks/cmdb.py index 35f2332..3223100 100644 --- a/cmdb-api/api/tasks/cmdb.py +++ b/cmdb-api/api/tasks/cmdb.py @@ -145,7 +145,7 @@ def ci_delete_trigger(trigger, operate_type, ci_dict): @flush_db @reconnect_db def ci_relation_cache(parent_id, child_id, ancestor_ids): - with redis_lock.Lock(rd.r, "CIRelation_{}".format(parent_id)): + with redis_lock.Lock(rd.r, "CIRelation_{}".format(parent_id), expire=10): children = rd.get([parent_id], REDIS_PREFIX_CI_RELATION)[0] children = json.loads(children) if children is not None else {} @@ -223,7 +223,7 @@ def ci_relation_add(parent_dict, child_id, uid): @celery.task(name="cmdb.ci_relation_delete", queue=CMDB_QUEUE) @reconnect_db def ci_relation_delete(parent_id, child_id, ancestor_ids): - with redis_lock.Lock(rd.r, "CIRelation_{}".format(parent_id)): + with redis_lock.Lock(rd.r, "CIRelation_{}".format(parent_id), expire=10): children = rd.get([parent_id], REDIS_PREFIX_CI_RELATION)[0] children = json.loads(children) if children is not None else {}