@@ -1309,23 +1309,27 @@ def _delete_pod(self, namespace, name):
13091309 if unhealthy (resp .status_code ):
13101310 error (resp , 'delete Pod "{}" in Namespace "{}"' , name , namespace )
13111311
1312- # Verify the pod has been deleted. Give it 30 seconds.
1313- for _ in range (30 ):
1312+ # Verify the pod has been deleted
1313+ # Only wait as long as the grace period is - k8s will eventually GC
1314+ for _ in range (settings .KUBERNETES_POD_TERMINATION_GRACE_PERIOD_SECONDS ):
13141315 try :
1315- self ._get_pod (namespace , name )
1316+ pod = self ._get_pod (namespace , name ).json ()
1317+ # http://kubernetes.io/docs/user-guide/pods/#termination-of-pods
1318+ if 'deletionTimestamp' in pod ['metadata' ]:
1319+ deletion = datetime .strptime (
1320+ pod ['metadata' ]['deletionTimestamp' ],
1321+ settings .DEIS_DATETIME_FORMAT
1322+ )
1323+
1324+ # past the graceful deletion period
1325+ if deletion < datetime .utcnow ():
1326+ return
13161327 except KubeHTTPException as e :
13171328 if e .response .status_code == 404 :
13181329 break
13191330
13201331 time .sleep (1 )
13211332
1322- # Pod was not deleted within the grace period.
1323- try :
1324- self ._get_pod (namespace , name )
1325- except KubeHTTPException as e :
1326- if e .response .status_code != 404 :
1327- error (e .response , 'delete Pod "{}" in Namespace "{}"' , name , namespace )
1328-
13291333 def _pod_log (self , namespace , name ):
13301334 url = self ._api ("/namespaces/{}/pods/{}/log" , namespace , name )
13311335 response = self .session .get (url )
0 commit comments