@@ -30,25 +30,25 @@ struct TTasksRequest {
3030 // when task is finished it will be removed from this map
3131 THashMap<ui64, TTaskContext> InFlyTasks;
3232 TInstant Deadline;
33- ui64 TotalMemory = 0 ;
3433 TActorId Executer;
3534 TActorId TimeoutTimer;
3635 bool ExecutionCancelled = false ;
36+
37+ ui64 CalculateTotalMemory () const {
38+ ui64 result = 0 ;
39+ for (auto [id, task]: InFlyTasks) {
40+ result += task.Memory ;
41+ }
42+ return result;
43+ }
3744};
3845
3946struct TTxMeta {
40- ui64 TotalMemory = 0 ;
4147 NRm::EKqpMemoryPool MemoryPool = NRm::EKqpMemoryPool::Unspecified;
4248 ui32 TotalComputeActors = 0 ;
4349 TInstant StartTime;
4450};
4551
46- struct TRemoveTaskContext {
47- ui64 TotalMemory = 0 ;
48- ui64 ComputeActorsNumber = 0 ;
49- bool FinixTx = false ;
50- };
51-
5252class TState {
5353public:
5454 struct TRequestId {
@@ -57,7 +57,6 @@ class TState {
5757 };
5858
5959 struct TRemoveTaskContext {
60- ui64 TotalMemory = 0 ;
6160 ui64 ComputeActorsNumber = 0 ;
6261 bool FinixTx = false ;
6362 TActorId Requester;
@@ -73,18 +72,9 @@ class TState {
7372 return Requests.contains (std::make_pair (txId, requester));
7473 }
7574
76- ui64 GetTxMemory (ui64 txId, NRm::EKqpMemoryPool memoryPool) const {
77- TReadGuard guard (RWLock);
78- if (auto * meta = Meta.FindPtr (txId)) {
79- return meta->MemoryPool == memoryPool ? meta->TotalMemory : 0 ;
80- }
81- return 0 ;
82- }
83-
8475 void NewRequest (ui64 txId, const TActorId& requester, TTasksRequest&& request, NRm::EKqpMemoryPool memoryPool) {
8576 TWriteGuard guard (RWLock);
8677 auto & meta = Meta[txId];
87- meta.TotalMemory += request.TotalMemory ;
8878 meta.TotalComputeActors += request.InFlyTasks .size ();
8979 if (!meta.StartTime ) {
9080 meta.StartTime = TAppData::TimeProvider->Now ();
@@ -109,21 +99,15 @@ class TState {
10999
110100 auto taskIt = requestIt->second .InFlyTasks .find (taskId);
111101 if (taskIt != requestIt->second .InFlyTasks .end ()) {
112- auto task = std::move (taskIt->second );
113102 requestIt->second .InFlyTasks .erase (taskIt);
114-
115- Y_DEBUG_ABORT_UNLESS (requestIt->second .TotalMemory >= task.Memory );
116- requestIt->second .TotalMemory -= task.Memory ;
117103 requestIt->second .ExecutionCancelled |= !success;
118104
119105 auto & meta = Meta[txId];
120- Y_DEBUG_ABORT_UNLESS (meta.TotalMemory >= task.Memory );
121106 Y_DEBUG_ABORT_UNLESS (meta.TotalComputeActors >= 1 );
122- meta.TotalMemory -= task.Memory ;
123107 meta.TotalComputeActors --;
124108
125109 auto ret = TRemoveTaskContext{
126- requestIt->second .TotalMemory , requestIt-> second . InFlyTasks .size (), meta.TotalComputeActors == 0 , senderIt->second
110+ requestIt->second .InFlyTasks .size (), meta.TotalComputeActors == 0 , senderIt->second
127111 };
128112
129113 if (requestIt->second .InFlyTasks .empty ()) {
@@ -157,24 +141,21 @@ class TState {
157141 return RemoveRequestImpl (txId, requester);
158142 }
159143
160- std::vector<TTasksRequest> RemoveTx (ui64 txId) {
144+ // return the vector of pairs where the first element is a taskId
145+ // and the second one is the compute actor id associated with this task.
146+ std::vector<std::pair<ui64, TActorId>> GetTasksByTxId (ui64 txId) {
161147 TWriteGuard guard (RWLock);
162- Meta.erase (txId);
163-
164148 YQL_ENSURE (Requests.size () == SenderIdsByTxId.size ());
165149 const auto senders = SenderIdsByTxId.equal_range (txId);
166- std::vector<TTasksRequest > ret;
150+ std::vector<std::pair<ui64, TActorId> > ret;
167151 for (auto senderIt = senders.first ; senderIt != senders.second ; ++senderIt) {
168152 auto requestIt = Requests.find (*senderIt);
169153 YQL_ENSURE (requestIt != Requests.end ());
170-
171- ret.push_back (std::move (requestIt-> second ) );
172- Requests. erase (requestIt);
154+ for ( const auto & [taskId, task] : requestIt-> second . InFlyTasks ) {
155+ ret.push_back ({taskId, task. ComputeActorId } );
156+ }
173157 }
174158
175- SenderIdsByTxId.erase (txId);
176- YQL_ENSURE (Requests.size () == SenderIdsByTxId.size ());
177-
178159 return ret;
179160 }
180161
@@ -208,15 +189,13 @@ class TState {
208189 for (auto & [txId, requests] : byTx) {
209190 auto & meta = Meta[txId];
210191 str << " TxId: " << txId << Endl;
211- str << " Memory: " << meta.TotalMemory << Endl;
212192 str << " MemoryPool: " << (ui32) meta.MemoryPool << Endl;
213193 str << " Compute actors: " << meta.TotalComputeActors << Endl;
214194 str << " Start time: " << meta.StartTime << Endl;
215195 str << " Requests:" << Endl;
216196 for (auto & [requester, request] : requests) {
217197 str << " Requester: " << requester << Endl;
218198 str << " Deadline: " << request->Deadline << Endl;
219- str << " Memory: " << request->TotalMemory << Endl;
220199 str << " In-fly tasks:" << Endl;
221200 for (auto & [taskId, task] : request->InFlyTasks ) {
222201 str << " Task: " << taskId << Endl;
@@ -250,9 +229,7 @@ class TState {
250229 YQL_ENSURE (Requests.size () == SenderIdsByTxId.size ());
251230
252231 auto & meta = Meta[txId];
253- Y_DEBUG_ABORT_UNLESS (meta.TotalMemory >= ret->TotalMemory );
254232 Y_DEBUG_ABORT_UNLESS (meta.TotalComputeActors >= 1 );
255- meta.TotalMemory -= ret->TotalMemory ;
256233 meta.TotalComputeActors -= ret->InFlyTasks .size ();
257234
258235 if (meta.TotalComputeActors == 0 ) {
0 commit comments