@@ -1230,7 +1230,11 @@ func (s *service) Create(requestCtx context.Context, request *taskAPI.CreateTask
1230
1230
request .Rootfs = nil
1231
1231
}
1232
1232
1233
- resp , err := s .taskManager .CreateTask (requestCtx , request , s .agentClient , ioConnectorSet )
1233
+ agent , err := s .agent ()
1234
+ if err != nil {
1235
+ return nil , err
1236
+ }
1237
+ resp , err := s .taskManager .CreateTask (requestCtx , request , agent , ioConnectorSet )
1234
1238
if err != nil {
1235
1239
err = fmt .Errorf ("failed to create task: %w" , err )
1236
1240
logger .WithError (err ).Error ()
@@ -1253,7 +1257,11 @@ func (s *service) Start(requestCtx context.Context, req *taskAPI.StartRequest) (
1253
1257
defer logPanicAndDie (log .G (requestCtx ))
1254
1258
1255
1259
log .G (requestCtx ).WithFields (logrus.Fields {"task_id" : req .ID , "exec_id" : req .ExecID }).Debug ("start" )
1256
- resp , err := s .agentClient .Start (requestCtx , req )
1260
+ agent , err := s .agent ()
1261
+ if err != nil {
1262
+ return nil , err
1263
+ }
1264
+ resp , err := agent .Start (requestCtx , req )
1257
1265
if err != nil {
1258
1266
return nil , err
1259
1267
}
@@ -1267,7 +1275,11 @@ func (s *service) Delete(requestCtx context.Context, req *taskAPI.DeleteRequest)
1267
1275
1268
1276
logger .Debug ("delete" )
1269
1277
1270
- resp , err := s .taskManager .DeleteProcess (requestCtx , req , s .agentClient )
1278
+ agent , err := s .agent ()
1279
+ if err != nil {
1280
+ return nil , err
1281
+ }
1282
+ resp , err := s .taskManager .DeleteProcess (requestCtx , req , agent )
1271
1283
if err != nil {
1272
1284
return nil , err
1273
1285
}
@@ -1316,6 +1328,11 @@ func (s *service) Exec(requestCtx context.Context, req *taskAPI.ExecProcessReque
1316
1328
logger := s .logger .WithField ("task_id" , req .ID ).WithField ("exec_id" , req .ExecID )
1317
1329
logger .Debug ("exec" )
1318
1330
1331
+ agent , err := s .agent ()
1332
+ if err != nil {
1333
+ return nil , err
1334
+ }
1335
+
1319
1336
// no OCI config bytes to provide for Exec, just leave those fields empty
1320
1337
extraData , err := s .generateExtraData (nil , req .Spec )
1321
1338
if err != nil {
@@ -1336,7 +1353,7 @@ func (s *service) Exec(requestCtx context.Context, req *taskAPI.ExecProcessReque
1336
1353
return nil , err
1337
1354
}
1338
1355
1339
- resp , err := s .taskManager .ExecProcess (requestCtx , req , s . agentClient , ioConnectorSet )
1356
+ resp , err := s .taskManager .ExecProcess (requestCtx , req , agent , ioConnectorSet )
1340
1357
if err != nil {
1341
1358
return nil , err
1342
1359
}
@@ -1359,7 +1376,11 @@ func (s *service) ResizePty(requestCtx context.Context, req *taskAPI.ResizePtyRe
1359
1376
defer logPanicAndDie (log .G (requestCtx ))
1360
1377
1361
1378
log .G (requestCtx ).WithFields (logrus.Fields {"task_id" : req .ID , "exec_id" : req .ExecID }).Debug ("resize_pty" )
1362
- resp , err := s .agentClient .ResizePty (requestCtx , req )
1379
+ agent , err := s .agent ()
1380
+ if err != nil {
1381
+ return nil , err
1382
+ }
1383
+ resp , err := agent .ResizePty (requestCtx , req )
1363
1384
if err != nil {
1364
1385
return nil , err
1365
1386
}
@@ -1373,7 +1394,11 @@ func (s *service) State(requestCtx context.Context, req *taskAPI.StateRequest) (
1373
1394
1374
1395
logger := log .G (requestCtx ).WithFields (logrus.Fields {"task_id" : req .ID , "exec_id" : req .ExecID })
1375
1396
logger .Debug ("state" )
1376
- resp , err := s .agentClient .State (requestCtx , req )
1397
+ agent , err := s .agent ()
1398
+ if err != nil {
1399
+ return nil , err
1400
+ }
1401
+ resp , err := agent .State (requestCtx , req )
1377
1402
if err != nil {
1378
1403
return nil , err
1379
1404
}
@@ -1451,7 +1476,11 @@ func (s *service) Pause(requestCtx context.Context, req *taskAPI.PauseRequest) (
1451
1476
defer logPanicAndDie (log .G (requestCtx ))
1452
1477
1453
1478
log .G (requestCtx ).WithField ("task_id" , req .ID ).Debug ("pause" )
1454
- resp , err := s .agentClient .Pause (requestCtx , req )
1479
+ agent , err := s .agent ()
1480
+ if err != nil {
1481
+ return nil , err
1482
+ }
1483
+ resp , err := agent .Pause (requestCtx , req )
1455
1484
if err != nil {
1456
1485
return nil , err
1457
1486
}
@@ -1464,7 +1493,11 @@ func (s *service) Resume(requestCtx context.Context, req *taskAPI.ResumeRequest)
1464
1493
defer logPanicAndDie (log .G (requestCtx ))
1465
1494
1466
1495
log .G (requestCtx ).WithField ("task_id" , req .ID ).Debug ("resume" )
1467
- resp , err := s .agentClient .Resume (requestCtx , req )
1496
+ agent , err := s .agent ()
1497
+ if err != nil {
1498
+ return nil , err
1499
+ }
1500
+ resp , err := agent .Resume (requestCtx , req )
1468
1501
if err != nil {
1469
1502
return nil , err
1470
1503
}
@@ -1477,7 +1510,11 @@ func (s *service) Kill(requestCtx context.Context, req *taskAPI.KillRequest) (*t
1477
1510
defer logPanicAndDie (log .G (requestCtx ))
1478
1511
1479
1512
log .G (requestCtx ).WithFields (logrus.Fields {"task_id" : req .ID , "exec_id" : req .ExecID }).Debug ("kill" )
1480
- resp , err := s .agentClient .Kill (requestCtx , req )
1513
+ agent , err := s .agent ()
1514
+ if err != nil {
1515
+ return nil , err
1516
+ }
1517
+ resp , err := agent .Kill (requestCtx , req )
1481
1518
if err != nil {
1482
1519
return nil , err
1483
1520
}
@@ -1489,7 +1526,11 @@ func (s *service) Pids(requestCtx context.Context, req *taskAPI.PidsRequest) (*t
1489
1526
defer logPanicAndDie (log .G (requestCtx ))
1490
1527
1491
1528
log .G (requestCtx ).WithField ("task_id" , req .ID ).Debug ("pids" )
1492
- resp , err := s .agentClient .Pids (requestCtx , req )
1529
+ agent , err := s .agent ()
1530
+ if err != nil {
1531
+ return nil , err
1532
+ }
1533
+ resp , err := agent .Pids (requestCtx , req )
1493
1534
if err != nil {
1494
1535
return nil , err
1495
1536
}
@@ -1502,7 +1543,11 @@ func (s *service) CloseIO(requestCtx context.Context, req *taskAPI.CloseIOReques
1502
1543
defer logPanicAndDie (log .G (requestCtx ))
1503
1544
1504
1545
log .G (requestCtx ).WithFields (logrus.Fields {"task_id" : req .ID , "exec_id" : req .ExecID }).Debug ("close_io" )
1505
- resp , err := s .agentClient .CloseIO (requestCtx , req )
1546
+ agent , err := s .agent ()
1547
+ if err != nil {
1548
+ return nil , err
1549
+ }
1550
+ resp , err := agent .CloseIO (requestCtx , req )
1506
1551
if err != nil {
1507
1552
return nil , err
1508
1553
}
@@ -1515,7 +1560,11 @@ func (s *service) Checkpoint(requestCtx context.Context, req *taskAPI.Checkpoint
1515
1560
defer logPanicAndDie (log .G (requestCtx ))
1516
1561
1517
1562
log .G (requestCtx ).WithFields (logrus.Fields {"task_id" : req .ID , "path" : req .Path }).Info ("checkpoint" )
1518
- resp , err := s .agentClient .Checkpoint (requestCtx , req )
1563
+ agent , err := s .agent ()
1564
+ if err != nil {
1565
+ return nil , err
1566
+ }
1567
+ resp , err := agent .Checkpoint (requestCtx , req )
1519
1568
if err != nil {
1520
1569
return nil , err
1521
1570
}
@@ -1528,7 +1577,11 @@ func (s *service) Connect(requestCtx context.Context, req *taskAPI.ConnectReques
1528
1577
defer logPanicAndDie (log .G (requestCtx ))
1529
1578
1530
1579
log .G (requestCtx ).WithField ("id" , req .ID ).Debug ("connect" )
1531
- resp , err := s .agentClient .Connect (requestCtx , req )
1580
+ agent , err := s .agent ()
1581
+ if err != nil {
1582
+ return nil , err
1583
+ }
1584
+ resp , err := agent .Connect (requestCtx , req )
1532
1585
if err != nil {
1533
1586
return nil , err
1534
1587
}
@@ -1614,7 +1667,11 @@ func (s *service) terminate(ctx context.Context) (retErr error) {
1614
1667
}
1615
1668
1616
1669
s .logger .Info ("gracefully shutdown VM" )
1617
- _ , err = s .agentClient .Shutdown (ctx , & taskAPI.ShutdownRequest {ID : s .vmID , Now : true })
1670
+ agent , err := s .agent ()
1671
+ if err != nil {
1672
+ return err
1673
+ }
1674
+ _ , err = agent .Shutdown (ctx , & taskAPI.ShutdownRequest {ID : s .vmID , Now : true })
1618
1675
if err != nil {
1619
1676
s .logger .WithError (err ).Error ("failed to call in-VM agent" )
1620
1677
return
@@ -1634,7 +1691,11 @@ func (s *service) Stats(requestCtx context.Context, req *taskAPI.StatsRequest) (
1634
1691
defer logPanicAndDie (log .G (requestCtx ))
1635
1692
log .G (requestCtx ).WithField ("task_id" , req .ID ).Debug ("stats" )
1636
1693
1637
- resp , err := s .agentClient .Stats (requestCtx , req )
1694
+ agent , err := s .agent ()
1695
+ if err != nil {
1696
+ return nil , err
1697
+ }
1698
+ resp , err := agent .Stats (requestCtx , req )
1638
1699
if err != nil {
1639
1700
return nil , err
1640
1701
}
@@ -1647,7 +1708,11 @@ func (s *service) Update(requestCtx context.Context, req *taskAPI.UpdateTaskRequ
1647
1708
defer logPanicAndDie (log .G (requestCtx ))
1648
1709
log .G (requestCtx ).WithField ("task_id" , req .ID ).Debug ("update" )
1649
1710
1650
- resp , err := s .agentClient .Update (requestCtx , req )
1711
+ agent , err := s .agent ()
1712
+ if err != nil {
1713
+ return nil , err
1714
+ }
1715
+ resp , err := agent .Update (requestCtx , req )
1651
1716
if err != nil {
1652
1717
return nil , err
1653
1718
}
@@ -1660,7 +1725,11 @@ func (s *service) Wait(requestCtx context.Context, req *taskAPI.WaitRequest) (*t
1660
1725
defer logPanicAndDie (log .G (requestCtx ))
1661
1726
log .G (requestCtx ).WithFields (logrus.Fields {"task_id" : req .ID , "exec_id" : req .ExecID }).Debug ("wait" )
1662
1727
1663
- resp , err := s .agentClient .Wait (requestCtx , req )
1728
+ agent , err := s .agent ()
1729
+ if err != nil {
1730
+ return nil , err
1731
+ }
1732
+ resp , err := agent .Wait (requestCtx , req )
1664
1733
if err != nil {
1665
1734
return nil , err
1666
1735
}
@@ -1715,3 +1784,12 @@ func (s *service) monitorVMExit() {
1715
1784
s .logger .WithError (err ).Error ("failed to clean up the VM" )
1716
1785
}
1717
1786
}
1787
+
1788
+ // agent returns a client to talk to in-VM agent, only if the VM is not terminated.
1789
+ func (s * service ) agent () (taskAPI.TaskService , error ) {
1790
+ pid , _ := s .machine .PID ()
1791
+ if pid == 0 {
1792
+ return nil , status .Errorf (codes .NotFound , "failed to find VM %q" , s .vmID )
1793
+ }
1794
+ return s .agentClient , nil
1795
+ }
0 commit comments