mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-06-24 14:02:01 +00:00
fix: 创建节点的时候加锁,可以并发调用
This commit is contained in:
parent
f361621ab5
commit
3ec78ff9be
@ -28,6 +28,7 @@ from ..tasks import (
|
|||||||
)
|
)
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
from .mixin import SerializeToTreeNodeMixin
|
from .mixin import SerializeToTreeNodeMixin
|
||||||
|
from assets.locks import NodeAddChildrenLock
|
||||||
|
|
||||||
|
|
||||||
logger = get_logger(__file__)
|
logger = get_logger(__file__)
|
||||||
@ -114,6 +115,7 @@ class NodeChildrenApi(generics.ListCreateAPIView):
|
|||||||
return super().initial(request, *args, **kwargs)
|
return super().initial(request, *args, **kwargs)
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
|
with NodeAddChildrenLock(self.instance):
|
||||||
data = serializer.validated_data
|
data = serializer.validated_data
|
||||||
_id = data.get("id")
|
_id = data.get("id")
|
||||||
value = data.get("value")
|
value = data.get("value")
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from orgs.utils import current_org
|
from orgs.utils import current_org
|
||||||
from common.utils.lock import DistributedLock
|
from common.utils.lock import DistributedLock
|
||||||
|
from assets.models import Node
|
||||||
|
|
||||||
|
|
||||||
class NodeTreeUpdateLock(DistributedLock):
|
class NodeTreeUpdateLock(DistributedLock):
|
||||||
@ -18,3 +19,11 @@ class NodeTreeUpdateLock(DistributedLock):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
name = self.get_name()
|
name = self.get_name()
|
||||||
super().__init__(name=name, release_on_transaction_commit=True, reentrant=True)
|
super().__init__(name=name, release_on_transaction_commit=True, reentrant=True)
|
||||||
|
|
||||||
|
|
||||||
|
class NodeAddChildrenLock(DistributedLock):
|
||||||
|
name_template = 'assets.node.add_children.<org_id:{org_id}>'
|
||||||
|
|
||||||
|
def __init__(self, node: Node):
|
||||||
|
name = self.name_template.format(org_id=node.org_id)
|
||||||
|
super().__init__(name=name, release_on_transaction_commit=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user