@@ -388,7 +388,7 @@ func (nc *NodeController) syncNode(key string) (err error) {
388
388
389
389
kubeNode , err := nc .ds .GetKubernetesNodeRO (name )
390
390
if err != nil {
391
- if apierrors . IsNotFound (err ) {
391
+ if datastore . ErrorIsNotFound (err ) {
392
392
// Directly record condition and return. The Kubernetes node controller should delete this Longhorn node
393
393
// very soon. If we continue to reconcile with a nil pointer (e.g. on a node that is being removed), we are
394
394
// guaranteed to run into an exception later on anyways.
@@ -555,7 +555,7 @@ func (nc *NodeController) enqueueReplica(obj interface{}) {
555
555
556
556
node , err := nc .ds .GetNodeRO (replica .Spec .NodeID )
557
557
if err != nil {
558
- if ! apierrors . IsNotFound (err ) {
558
+ if ! datastore . ErrorIsNotFound (err ) {
559
559
utilruntime .HandleError (fmt .Errorf ("failed to get node %v for replica %v: %v " ,
560
560
replica .Spec .NodeID , replica .Name , err ))
561
561
}
@@ -638,7 +638,7 @@ func (nc *NodeController) enqueueKubernetesNode(obj interface{}) {
638
638
639
639
nodeRO , err := nc .ds .GetNodeRO (kubernetesNode .Name )
640
640
if err != nil {
641
- if ! apierrors . IsNotFound (err ) {
641
+ if ! datastore . ErrorIsNotFound (err ) {
642
642
utilruntime .HandleError (fmt .Errorf ("failed to get longhorn node %v: %v " , kubernetesNode .Name , err ))
643
643
}
644
644
return
@@ -1165,7 +1165,7 @@ func (nc *NodeController) cleanUpBackingImagesInDisks(node *longhorn.Node) error
1165
1165
for _ , bi := range backingImages {
1166
1166
log := getLoggerForBackingImage (nc .logger , bi ).WithField ("node" , node .Name )
1167
1167
bids , err := nc .ds .GetBackingImageDataSource (bi .Name )
1168
- if err != nil && ! apierrors . IsNotFound (err ) {
1168
+ if err != nil && ! datastore . ErrorIsNotFound (err ) {
1169
1169
log .WithError (err ).Warn ("Failed to get the backing image data source when cleaning up the images in disks" )
1170
1170
continue
1171
1171
}
@@ -1305,14 +1305,18 @@ func (nc *NodeController) syncOrphans(node *longhorn.Node, collectedDataInfo map
1305
1305
newOrphanedReplicaDataStores , missingOrphanedReplicaDataStores :=
1306
1306
nc .getNewAndMissingOrphanedReplicaDataStores (diskName , diskInfo .DiskUUID , diskInfo .Path , diskInfo .OrphanedReplicaDataStores )
1307
1307
1308
- if err := nc .createOrphans (node , diskName , diskInfo , newOrphanedReplicaDataStores ); err != nil {
1308
+ if err := nc .createOrphansForReplicaDataStore (node , diskName , diskInfo , newOrphanedReplicaDataStores ); err != nil {
1309
1309
return errors .Wrapf (err , "failed to create orphans for disk %v" , diskName )
1310
1310
}
1311
- if err := nc .deleteOrphans (node , diskName , diskInfo , missingOrphanedReplicaDataStores ); err != nil {
1311
+ if err := nc .deleteOrphansForReplicaDataStore (node , diskName , diskInfo , missingOrphanedReplicaDataStores ); err != nil {
1312
1312
return errors .Wrapf (err , "failed to delete orphans for disk %v" , diskName )
1313
1313
}
1314
1314
}
1315
1315
1316
+ if node .Spec .EvictionRequested {
1317
+ return nc .deleteOrphansForEngineAndReplicaInstances (node )
1318
+ }
1319
+
1316
1320
return nil
1317
1321
}
1318
1322
@@ -1356,7 +1360,30 @@ func (nc *NodeController) getNewAndMissingOrphanedReplicaDataStores(diskName, di
1356
1360
return newOrphanedReplicaDataStores , missingOrphanedReplicaDataStores
1357
1361
}
1358
1362
1359
- func (nc * NodeController ) deleteOrphans (node * longhorn.Node , diskName string , diskInfo * monitor.CollectedDiskInfo , missingOrphanedReplicaDataStores map [string ]string ) error {
1363
+ func (nc * NodeController ) deleteOrphansForEngineAndReplicaInstances (node * longhorn.Node ) error {
1364
+ nc .logger .Infof ("Deleting orphans on evicted node %v" , node .Name )
1365
+
1366
+ orphans , err := nc .ds .ListOrphansByNodeRO (node .Name )
1367
+ if err != nil {
1368
+ return errors .Wrapf (err , "failed to list orphans to evict node %v" , node .Name )
1369
+ }
1370
+
1371
+ multiError := util .NewMultiError ()
1372
+ for _ , orphan := range orphans {
1373
+ switch orphan .Spec .Type {
1374
+ case longhorn .OrphanTypeEngineInstance , longhorn .OrphanTypeReplicaInstance :
1375
+ if err := nc .ds .DeleteOrphan (orphan .Name ); err != nil && ! datastore .ErrorIsNotFound (err ) {
1376
+ multiError .Append (util .NewMultiError (fmt .Sprintf ("%v: %v" , orphan .Name , err )))
1377
+ }
1378
+ }
1379
+ }
1380
+ if len (multiError ) > 0 {
1381
+ return fmt .Errorf ("node controller failed to delete instance orphans: %v" , multiError .Join ())
1382
+ }
1383
+ return nil
1384
+ }
1385
+
1386
+ func (nc * NodeController ) deleteOrphansForReplicaDataStore (node * longhorn.Node , diskName string , diskInfo * monitor.CollectedDiskInfo , missingOrphanedReplicaDataStores map [string ]string ) error {
1360
1387
autoDeletionResourceTypes , err := nc .ds .GetSettingOrphanResourceAutoDeletion ()
1361
1388
if err != nil {
1362
1389
return errors .Wrapf (err , "failed to get %v setting" , types .SettingNameOrphanResourceAutoDeletion )
@@ -1365,7 +1392,7 @@ func (nc *NodeController) deleteOrphans(node *longhorn.Node, diskName string, di
1365
1392
1366
1393
for dataStore := range missingOrphanedReplicaDataStores {
1367
1394
orphanName := types .GetOrphanChecksumNameForOrphanedDataStore (node .Name , diskName , diskInfo .Path , diskInfo .DiskUUID , dataStore )
1368
- if err := nc .ds .DeleteOrphan (orphanName ); err != nil && ! apierrors . IsNotFound (err ) {
1395
+ if err := nc .ds .DeleteOrphan (orphanName ); err != nil && ! datastore . ErrorIsNotFound (err ) {
1369
1396
return errors .Wrapf (err , "failed to delete orphan %v" , orphanName )
1370
1397
}
1371
1398
}
@@ -1386,15 +1413,15 @@ func (nc *NodeController) deleteOrphans(node *longhorn.Node, diskName string, di
1386
1413
}
1387
1414
1388
1415
if autoDeletionEnabled || dataCleanableCondition .Status == longhorn .ConditionStatusFalse {
1389
- if err := nc .ds .DeleteOrphan (orphan .Name ); err != nil && ! apierrors . IsNotFound (err ) {
1416
+ if err := nc .ds .DeleteOrphan (orphan .Name ); err != nil && ! datastore . ErrorIsNotFound (err ) {
1390
1417
return errors .Wrapf (err , "failed to delete orphan %v" , orphan .Name )
1391
1418
}
1392
1419
}
1393
1420
}
1394
1421
return nil
1395
1422
}
1396
1423
1397
- func (nc * NodeController ) createOrphans (node * longhorn.Node , diskName string , diskInfo * monitor.CollectedDiskInfo , newOrphanedReplicaDataStores map [string ]string ) error {
1424
+ func (nc * NodeController ) createOrphansForReplicaDataStore (node * longhorn.Node , diskName string , diskInfo * monitor.CollectedDiskInfo , newOrphanedReplicaDataStores map [string ]string ) error {
1398
1425
for dataStore := range newOrphanedReplicaDataStores {
1399
1426
if err := nc .createOrphan (node , diskName , dataStore , diskInfo ); err != nil && ! apierrors .IsAlreadyExists (err ) {
1400
1427
return errors .Wrapf (err , "failed to create orphan for orphaned replica data store %v in disk %v on node %v" ,
@@ -1408,7 +1435,7 @@ func (nc *NodeController) createOrphan(node *longhorn.Node, diskName, replicaDat
1408
1435
name := types .GetOrphanChecksumNameForOrphanedDataStore (node .Name , diskName , diskInfo .Path , diskInfo .DiskUUID , replicaDataStore )
1409
1436
1410
1437
_ , err := nc .ds .GetOrphanRO (name )
1411
- if err == nil || (err != nil && ! apierrors . IsNotFound (err )) {
1438
+ if err == nil || (err != nil && ! datastore . ErrorIsNotFound (err )) {
1412
1439
return err
1413
1440
}
1414
1441
0 commit comments