| 227 | TGUID MasterGuid; |
| 228 | |
| 229 | void LaunchOps(int localCompId) { |
| 230 | CHROMIUM_TRACE_FUNCTION(); |
| 231 | |
| 232 | int mapJobCount = JobRequest->Descr.ExecList.ysize(); |
| 233 | LocalMapBuf.ResultData.resize(mapJobCount); |
| 234 | LocalMapBuf.ResultHasData.resize(mapJobCount, false); |
| 235 | MapJob2PartId.resize(mapJobCount, -1); |
| 236 | |
| 237 | bool localOnly = JobRequest->ExecPlan.empty(); |
| 238 | if (JobRequest->ExecPlan.ysize() == 1 && JobRequest->ExecPlan[0] == localCompId) |
| 239 | localOnly = true; |
| 240 | |
| 241 | if (localOnly) { |
| 242 | // local host only, launch local ops |
| 243 | LocalUserContext = UserContext; |
| 244 | |
| 245 | LocalMapReqCount = 1; |
| 246 | for (int i = 0; i < mapJobCount; ++i) { |
| 247 | Y_ASSERT(JobRequest->Descr.ExecList[i].CompId == localCompId); |
| 248 | int cmdId = JobRequest->Descr.ExecList[i].CmdId; |
| 249 | Cmds.Check(cmdId); |
| 250 | } |
| 251 | AtomicAdd(LocalMapReqCount, mapJobCount); |
| 252 | int execRangeFlags = JobRequest->IsLowPriority ? TLocalExecutor::MED_PRIORITY : 0; |
| 253 | LocalExecutor().ExecRange(this, 0, mapJobCount, execRangeFlags); |
| 254 | DoneLocalMapTask(); |
| 255 | } else { |
| 256 | LocalUserContext = UserContext->CreateLocalOnlyContext(); |
| 257 | |
| 258 | RemoteMapReqCount = 1; |
| 259 | |
| 260 | // get subtasks |
| 261 | TVector<TVector<ui16>> subTasks; |
| 262 | GenerateSubtasks(JobRequest->ExecPlan, &subTasks); |
| 263 | int partCount = subTasks.ysize(); |
| 264 | Y_ASSERT(partCount > 0); // one remote part is possible |
| 265 | |
| 266 | RemoteMapBuf.ResultData.resize(mapJobCount); |
| 267 | RemoteMapBuf.ResultHasData.resize(mapJobCount, false); |
| 268 | PartCompleted.resize(partCount, false); |
| 269 | |
| 270 | // split job on subtasks |
| 271 | MapParts.resize(partCount); |
| 272 | for (int i = 0; i < partCount; ++i) { |
| 273 | TJobRequest* jr = new TJobRequest; |
| 274 | TRemoteMapInfo* part = &MapParts[i]; |
| 275 | ProjectJob(&jr->Descr, i, &part->ResultMap, |
| 276 | &RemoteMapBuf.ResultHasData, &MapJob2PartId, |
| 277 | JobRequest->Descr, |
| 278 | subTasks[i]); |
| 279 | jr->ExecPlan = subTasks[i]; |
| 280 | jr->HostId2Computer = JobRequest->HostId2Computer; |
| 281 | jr->EnvId2Version = JobRequest->EnvId2Version; |
| 282 | jr->IsLowPriority = JobRequest->IsLowPriority; |
| 283 | |
| 284 | part->JobRequest = jr; |
| 285 | part->DstHost = SelectRandomHost(jr->ExecPlan); |
| 286 | } |
no test coverage detected