11import uuid
2+ import logging
23import requests
34from django .conf import settings
45from django .core .cache import cache
56from requests .auth import HTTPBasicAuth
67
78from .utils import random_string , get_session , CacheLock
89
10+ logger = logging .getLogger (__name__ )
11+
912
1013class FilerClient (object ):
1114
@@ -16,6 +19,9 @@ def __init__(self, app_id, volume, scheduler):
1619 self .volume = volume
1720 self .scheduler = scheduler
1821
22+ def log (self , message , level = logging .INFO ):
23+ logger .log (level , "[{}]: {}" .format (self .app_id , message ))
24+
1925 @property
2026 def server (self ):
2127 lock_key = f"filer:lock:{ self .app_id } :{ self .volume .name } "
@@ -35,6 +41,7 @@ def cache_key(self):
3541 return f"filer:{ self .app_id } :{ self .volume .name } "
3642
3743 def get_server (self ):
44+ self .clean () # clean old filer
3845 pod_name = f"drycc-filer-{ uuid .uuid4 ().hex } "
3946 k8s_volume = {"name" : self .volume .name }
4047 if self .volume .type == "csi" :
@@ -59,6 +66,19 @@ def get_server(self):
5966 address = self .scheduler .pod .get (self .app_id , pod_name ).json ()["status" ]["podIP" ]
6067 return {"address" : address , "username" : username , "password" : password }
6168
69+ def clean (self ):
70+ response = self .scheduler .pod .get (
71+ self .app_id , labels = {"app" : self .app_id , "type" : "filer" })
72+ if response .status_code != 200 :
73+ self .log ("clean up old filter errors" )
74+ return False
75+ for item in response .json ()["items" ]:
76+ if item ['status' ]['phase' ] in ('Succeeded' , 'Failed' ):
77+ pod_name = item ['metadata' ]['name' ]
78+ self .scheduler .pod .delete (self .app_id , pod_name )
79+ self .log ("clean up old filter completed" )
80+ return True
81+
6282 def health (self , server ):
6383 try :
6484 return self .request (
0 commit comments