@@ -60,12 +60,12 @@ bool TLockableItem::IsLocked(TErrorInfo &error, TDuration defaultRetryTime,
60
60
return true ;
61
61
}
62
62
63
- if (!ScheduledLocks.empty () && ScheduledLocks.begin ()->Order < DeactivatedLocksOrder ) {
63
+ if (!ScheduledLocks.empty () && ScheduledLocks.begin ()->Priority < DeactivatedLocksPriority ) {
64
64
error.Code = TStatus::DISALLOW_TEMP;
65
- error.Reason = Sprintf (" %s has scheduled action %s owned by %s (order %" PRIu64 " vs %" PRIu64 " )" ,
65
+ error.Reason = Sprintf (" %s has scheduled action %s owned by %s (priority %" PRIi32 " vs %" PRIi32 " )" ,
66
66
PrettyItemName ().data (), ScheduledLocks.begin ()->RequestId .data (),
67
- ScheduledLocks.begin ()->Owner .data (), ScheduledLocks.begin ()->Order ,
68
- DeactivatedLocksOrder );
67
+ ScheduledLocks.begin ()->Owner .data (), ScheduledLocks.begin ()->Priority ,
68
+ DeactivatedLocksPriority );
69
69
error.Deadline = now + defaultRetryTime;
70
70
return true ;
71
71
}
@@ -113,12 +113,12 @@ void TLockableItem::RollbackLocks(ui64 point)
113
113
114
114
void TLockableItem::ReactivateScheduledLocks ()
115
115
{
116
- DeactivatedLocksOrder = Max<ui64 >();
116
+ DeactivatedLocksPriority = Max<i32 >();
117
117
}
118
118
119
- void TLockableItem::DeactivateScheduledLocks (ui64 order )
119
+ void TLockableItem::DeactivateScheduledLocks (i32 priority )
120
120
{
121
- DeactivatedLocksOrder = order ;
121
+ DeactivatedLocksPriority = priority ;
122
122
}
123
123
124
124
void TLockableItem::RemoveScheduledLocks (const TString &requestId)
@@ -650,21 +650,30 @@ void TClusterInfo::ApplyActionWithoutLog(const NKikimrCms::TAction &action)
650
650
case TAction::REBOOT_HOST:
651
651
if (auto nodes = NodePtrs (action.GetHost (), MakeServices (action))) {
652
652
for (const auto node : nodes) {
653
- for (auto &nodeGroup: node->NodeGroups )
654
- nodeGroup->LockNode (node->NodeId );
653
+ for (auto &nodeGroup: node->NodeGroups ) {
654
+ if (!nodeGroup->IsNodeLocked (node->NodeId )) {
655
+ nodeGroup->LockNode (node->NodeId );
656
+ }
657
+ }
655
658
}
656
659
}
657
660
break ;
658
661
case TAction::REPLACE_DEVICES:
659
662
for (const auto &device : action.GetDevices ()) {
660
663
if (HasPDisk (device)) {
661
664
auto pdisk = &PDiskRef (device);
662
- for (auto &nodeGroup: NodeRef (pdisk->NodeId ).NodeGroups )
663
- nodeGroup->LockNode (pdisk->NodeId );
665
+ for (auto &nodeGroup: NodeRef (pdisk->NodeId ).NodeGroups ) {
666
+ if (!nodeGroup->IsNodeLocked (pdisk->NodeId )) {
667
+ nodeGroup->LockNode (pdisk->NodeId );
668
+ }
669
+ }
664
670
} else if (HasVDisk (device)) {
665
671
auto vdisk = &VDiskRef (device);
666
- for (auto &nodeGroup: NodeRef (vdisk->NodeId ).NodeGroups )
667
- nodeGroup->LockNode (vdisk->NodeId );
672
+ for (auto &nodeGroup: NodeRef (vdisk->NodeId ).NodeGroups ) {
673
+ if (!nodeGroup->IsNodeLocked (vdisk->NodeId )) {
674
+ nodeGroup->LockNode (vdisk->NodeId );
675
+ }
676
+ }
668
677
}
669
678
}
670
679
break ;
@@ -756,7 +765,7 @@ ui64 TClusterInfo::AddLocks(const TPermissionInfo &permission, const TActorConte
756
765
|| permission.Action .GetType () == TAction::REBOOT_HOST
757
766
|| permission.Action .GetType () == TAction::REPLACE_DEVICES)) {
758
767
item->State = RESTART;
759
- lock = true ;;
768
+ lock = true ;
760
769
}
761
770
762
771
if (lock) {
@@ -854,7 +863,7 @@ ui64 TClusterInfo::ScheduleActions(const TRequestInfo &request, const TActorCont
854
863
auto items = FindLockedItems (action, ctx);
855
864
856
865
for (auto item : items)
857
- item->ScheduleLock ({action, request.Owner , request.RequestId , request.Order });
866
+ item->ScheduleLock ({action, request.Owner , request.RequestId , request.Priority });
858
867
859
868
locks += items.size ();
860
869
}
@@ -868,10 +877,10 @@ void TClusterInfo::UnscheduleActions(const TString &requestId)
868
877
entry.second ->RemoveScheduledLocks (requestId);
869
878
}
870
879
871
- void TClusterInfo::DeactivateScheduledLocks (ui64 order )
880
+ void TClusterInfo::DeactivateScheduledLocks (i32 priority )
872
881
{
873
882
for (auto &entry : LockableItems)
874
- entry.second ->DeactivateScheduledLocks (order );
883
+ entry.second ->DeactivateScheduledLocks (priority );
875
884
}
876
885
877
886
void TClusterInfo::ReactivateScheduledLocks ()
@@ -1020,22 +1029,30 @@ void TOperationLogManager::ApplyAction(const NKikimrCms::TAction &action,
1020
1029
case NKikimrCms::TAction::REBOOT_HOST:
1021
1030
if (auto nodes = clusterState->NodePtrs (action.GetHost (), MakeServices (action))) {
1022
1031
for (const auto node : nodes) {
1023
- for (auto &nodeGroup: node->NodeGroups )
1024
- AddNodeLockOperation (node->NodeId , nodeGroup);
1032
+ for (auto &nodeGroup: node->NodeGroups ) {
1033
+ if (!nodeGroup->IsNodeLocked (node->NodeId )) {
1034
+ AddNodeLockOperation (node->NodeId , nodeGroup);
1035
+ }
1036
+ }
1025
1037
}
1026
1038
}
1027
1039
break ;
1028
1040
case NKikimrCms::TAction::REPLACE_DEVICES:
1029
1041
for (const auto &device : action.GetDevices ()) {
1030
1042
if (clusterState->HasPDisk (device)) {
1031
1043
auto pdisk = &clusterState->PDisk (device);
1032
- for (auto &nodeGroup: clusterState->NodeRef (pdisk->NodeId ).NodeGroups )
1033
- AddNodeLockOperation (pdisk->NodeId , nodeGroup);
1034
-
1044
+ for (auto &nodeGroup: clusterState->NodeRef (pdisk->NodeId ).NodeGroups ) {
1045
+ if (!nodeGroup->IsNodeLocked (pdisk->NodeId )) {
1046
+ AddNodeLockOperation (pdisk->NodeId , nodeGroup);
1047
+ }
1048
+ }
1035
1049
} else if (clusterState->HasVDisk (device)) {
1036
1050
auto vdisk = &clusterState->VDisk (device);
1037
- for (auto &nodeGroup: clusterState->NodeRef (vdisk->NodeId ).NodeGroups )
1038
- AddNodeLockOperation (vdisk->NodeId , nodeGroup);
1051
+ for (auto &nodeGroup: clusterState->NodeRef (vdisk->NodeId ).NodeGroups ) {
1052
+ if (!nodeGroup->IsNodeLocked (vdisk->NodeId )) {
1053
+ AddNodeLockOperation (vdisk->NodeId , nodeGroup);
1054
+ }
1055
+ }
1039
1056
}
1040
1057
}
1041
1058
break ;
0 commit comments