@@ -19,7 +19,6 @@ import (
1919 podENITypes "github.com/AliyunContainerService/terway/pkg/apis/network.alibabacloud.com/v1beta1"
2020 "github.com/AliyunContainerService/terway/pkg/backoff"
2121 terwayIP "github.com/AliyunContainerService/terway/pkg/ip"
22- "github.com/AliyunContainerService/terway/pkg/ipam"
2322 "github.com/AliyunContainerService/terway/pkg/link"
2423 "github.com/AliyunContainerService/terway/pkg/logger"
2524 "github.com/AliyunContainerService/terway/pkg/metric"
@@ -29,6 +28,7 @@ import (
2928 "github.com/AliyunContainerService/terway/pkg/utils"
3029 "github.com/AliyunContainerService/terway/rpc"
3130 "github.com/AliyunContainerService/terway/types"
31+ "github.com/AliyunContainerService/terway/types/daemon"
3232
3333 "github.com/containernetworking/cni/libcni"
3434 containertypes "github.com/containernetworking/cni/pkg/types"
@@ -265,6 +265,9 @@ func (n *networkService) AllocIP(ctx context.Context, r *rpc.AllocIPRequest) (*r
265265 if netConfig .IfName != IfEth0 && netConfig .IfName != "" {
266266 continue
267267 }
268+ if netConfig .BasicInfo == nil || netConfig .BasicInfo .PodIP == nil {
269+ continue
270+ }
268271 var ips []string
269272 if netConfig .BasicInfo .PodIP .IPv4 != "" {
270273 ips = append (ips , netConfig .BasicInfo .PodIP .IPv4 )
@@ -491,6 +494,14 @@ func (n *networkService) ReleaseIP(ctx context.Context, r *rpc.ReleaseIPRequest)
491494 "containerID" : r .K8SPodInfraContainerId ,
492495 }).Info ("release ip req" )
493496
497+ _ , exist := n .pendingPods .LoadOrStore (podInfoKey (r .K8SPodNamespace , r .K8SPodName ), struct {}{})
498+ if exist {
499+ return nil , fmt .Errorf ("pod %s resource processing" , podInfoKey (r .K8SPodNamespace , r .K8SPodName ))
500+ }
501+ defer func () {
502+ n .pendingPods .Delete (podInfoKey (r .K8SPodNamespace , r .K8SPodName ))
503+ }()
504+
494505 n .RLock ()
495506 defer n .RUnlock ()
496507 var (
@@ -1336,7 +1347,7 @@ func newNetworkService(configFilePath, kubeconfig, master, daemonMode string) (r
13361347
13371348 var err error
13381349
1339- globalConfig , err := types .GetConfigFromFileWithMerge (configFilePath , nil )
1350+ globalConfig , err := daemon .GetConfigFromFileWithMerge (configFilePath , nil )
13401351 if err != nil {
13411352 return nil , err
13421353 }
@@ -1353,7 +1364,7 @@ func newNetworkService(configFilePath, kubeconfig, master, daemonMode string) (r
13531364 dynamicCfg = ""
13541365 }
13551366
1356- config , err := types .GetConfigFromFileWithMerge (configFilePath , []byte (dynamicCfg ))
1367+ config , err := daemon .GetConfigFromFileWithMerge (configFilePath , []byte (dynamicCfg ))
13571368 if err != nil {
13581369 return nil , fmt .Errorf ("failed parse config: %v" , err )
13591370 }
@@ -1440,10 +1451,6 @@ func newNetworkService(configFilePath, kubeconfig, master, daemonMode string) (r
14401451 }
14411452 serviceLog .Infof ("init pool config: %+v" , poolConfig )
14421453
1443- err = restoreLocalENIRes (ecs , netSrv .k8s , netSrv .resourceDB )
1444- if err != nil {
1445- return nil , errors .Wrapf (err , "error restore local eni resources" )
1446- }
14471454 localResource := make (map [string ]map [string ]resourceManagerInitItem )
14481455 resObjList , err := netSrv .resourceDB .List ()
14491456 if err != nil {
@@ -1537,53 +1544,8 @@ func newNetworkService(configFilePath, kubeconfig, master, daemonMode string) (r
15371544 return netSrv , nil
15381545}
15391546
1540- // restore local eni resources for old terway migration
1541- func restoreLocalENIRes (ecs ipam.API , k8s Kubernetes , resourceDB storage.Storage ) error {
1542- resList , err := resourceDB .List ()
1543- if err != nil {
1544- return errors .Wrapf (err , "error list resourceDB storage" )
1545- }
1546- if len (resList ) != 0 {
1547- serviceLog .Debugf ("skip restore for upgraded" )
1548- return nil
1549- }
1550-
1551- eniList , err := ecs .GetAttachedENIs (context .Background (), false )
1552- if err != nil {
1553- return errors .Wrapf (err , "error get attached eni for restore" )
1554- }
1555- ipEniMap := map [string ]* types.ENI {}
1556- for _ , eni := range eniList {
1557- ipEniMap [eni .PrimaryIP .IPv4 .String ()] = eni
1558- }
1559-
1560- podList , err := k8s .GetLocalPods ()
1561- if err != nil {
1562- return errors .Wrapf (err , "error get local pod for restore" )
1563- }
1564- for _ , pod := range podList {
1565- if pod .PodNetworkType != podNetworkTypeVPCENI {
1566- continue
1567- }
1568- serviceLog .Debugf ("restore for local pod: %+v, enis: %+v" , pod , ipEniMap )
1569- eni , ok := ipEniMap [pod .PodIPs .IPv4 .String ()]
1570- if ok {
1571- err = resourceDB .Put (podInfoKey (pod .Namespace , pod .Name ), types.PodResources {
1572- PodInfo : pod ,
1573- Resources : eni .ToResItems (),
1574- })
1575- if err != nil {
1576- return errors .Wrapf (err , "error put resource into store" )
1577- }
1578- } else {
1579- serviceLog .Warnf ("error found pod relate eni, pod: %+v" , pod )
1580- }
1581- }
1582- return nil
1583- }
1584-
15851547// setup default value
1586- func setDefault (cfg * types. Configure ) error {
1548+ func setDefault (cfg * daemon. Config ) error {
15871549 if cfg .EniCapRatio == 0 {
15881550 cfg .EniCapRatio = 1
15891551 }
@@ -1600,7 +1562,7 @@ func setDefault(cfg *types.Configure) error {
16001562 return nil
16011563}
16021564
1603- func validateConfig (cfg * types. Configure ) error {
1565+ func validateConfig (cfg * daemon. Config ) error {
16041566 switch cfg .IPStack {
16051567 case "" , string (types .IPStackIPv4 ), string (types .IPStackDual ):
16061568 default :
@@ -1610,7 +1572,7 @@ func validateConfig(cfg *types.Configure) error {
16101572 return nil
16111573}
16121574
1613- func getPoolConfig (cfg * types. Configure , ipamType types.IPAMType ) (* types.PoolConfig , error ) {
1575+ func getPoolConfig (cfg * daemon. Config , ipamType types.IPAMType ) (* types.PoolConfig , error ) {
16141576 poolConfig := & types.PoolConfig {
16151577 MaxPoolSize : cfg .MaxPoolSize ,
16161578 MinPoolSize : cfg .MinPoolSize ,
0 commit comments