robocanic commented on code in PR #1440:
URL: https://github.com/apache/dubbo-admin/pull/1440#discussion_r3012957775


##########
pkg/core/engine/subscriber/runtime_instance.go:
##########
@@ -129,31 +131,110 @@ func (s *RuntimeInstanceEventSubscriber) 
processUpsert(rtInstanceRes *meshresour
 
 // processDelete when runtime instance deleted, we should delete the 
corresponding instance resource
 func (s *RuntimeInstanceEventSubscriber) processDelete(rtInstanceRes 
*meshresource.RuntimeInstanceResource) error {
-       var instanceResource *meshresource.InstanceResource
-       var err error
-       switch rtInstanceRes.Spec.SourceEngineType {
-       case string(enginecfg.Kubernetes):
-               instanceResource, err = s.getRelatedInstanceByIP(rtInstanceRes)
-       default:
-               instanceResource, err = 
s.getRelatedInstanceByName(rtInstanceRes)
-       }
+       instanceResource, err := s.getRelatedInstance(rtInstanceRes)
        if err != nil {
                return err
        }
        if instanceResource == nil {
                logger.Warnf("cannot find instance resource by runtime instance 
%s, skipped deleting instance", rtInstanceRes.ResourceKey())
                return nil
        }
+       meshresource.ClearRuntimeInstanceFromInstance(instanceResource)
+       if meshresource.HasRPCInstanceSource(instanceResource) {
+               if err = s.instanceStore.Update(instanceResource); err != nil {
+                       logger.Errorf("update instance resource failed after 
runtime delete, instance: %s, err: %s",
+                               instanceResource.ResourceKey(), err.Error())
+                       return err
+               }
+               logger.Infof("instance lifecycle runtime source removed, keep 
instance by rpc source, instance: %s, runtime: %s, registerState: registered",
+                       instanceResource.ResourceKey(), 
rtInstanceRes.ResourceKey())
+               instanceUpdateEvent := 
events.NewResourceChangedEvent(cache.Updated, instanceResource, 
instanceResource)
+               s.eventEmitter.Send(instanceUpdateEvent)
+               logger.Debugf("runtime instance delete trigger instance update 
event, event: %s", instanceUpdateEvent.String())
+               return nil
+       }
        if err = s.instanceStore.Delete(instanceResource); err != nil {
                logger.Errorf("delete instance resource failed, instance: %s, 
err: %s", instanceResource.ResourceKey(), err.Error())
                return err
        }
+       logger.Infof("instance lifecycle runtime source removed and no rpc 
source remains, deleted instance: %s, runtime: %s",
+               instanceResource.ResourceKey(), rtInstanceRes.ResourceKey())
        instanceDeleteEvent := events.NewResourceChangedEvent(cache.Deleted, 
instanceResource, nil)
        s.eventEmitter.Send(instanceDeleteEvent)
        logger.Debugf("runtime instance delete trigger instance delete event, 
event: %s", instanceDeleteEvent.String())
        return nil
 }
 
+func (s *RuntimeInstanceEventSubscriber) getRelatedInstance(
+       rtInstanceRes *meshresource.RuntimeInstanceResource) 
(*meshresource.InstanceResource, error) {
+       if rtInstanceRes == nil || rtInstanceRes.Spec == nil {
+               return nil, nil
+       }
+       switch rtInstanceRes.Spec.SourceEngineType {
+       case string(enginecfg.Kubernetes):
+               return s.getRelatedKubernetesInstance(rtInstanceRes)
+       default:
+               return s.getRelatedInstanceByName(rtInstanceRes)
+       }
+}
+
+func (s *RuntimeInstanceEventSubscriber) getRelatedKubernetesInstance(

Review Comment:
   > 即旧的pod还没有完全销毁(发出delete事件),新的pod ip相同的pod已经上线
   
   这在K8s官方文档里有说到吗,我印象中是旧Pod必须完全销毁之后,IP才能被其它新pod复用。



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to