diff --git a/rootfs/api/filer.py b/rootfs/api/filer.py index daff5a47..0e7152eb 100644 --- a/rootfs/api/filer.py +++ b/rootfs/api/filer.py @@ -1,4 +1,5 @@ import uuid +import logging import requests from django.conf import settings from django.core.cache import cache @@ -6,6 +7,8 @@ from .utils import random_string, get_session, CacheLock +logger = logging.getLogger(__name__) + class FilerClient(object): @@ -16,6 +19,9 @@ def __init__(self, app_id, volume, scheduler): self.volume = volume self.scheduler = scheduler + def log(self, message, level=logging.INFO): + logger.log(level, "[{}]: {}".format(self.app_id, message)) + @property def server(self): lock_key = f"filer:lock:{self.app_id}:{self.volume.name}" @@ -35,6 +41,7 @@ def cache_key(self): return f"filer:{self.app_id}:{self.volume.name}" def get_server(self): + self.clean() # clean old filer pod_name = f"drycc-filer-{uuid.uuid4().hex}" k8s_volume = {"name": self.volume.name} if self.volume.type == "csi": @@ -59,6 +66,19 @@ def get_server(self): address = self.scheduler.pod.get(self.app_id, pod_name).json()["status"]["podIP"] return {"address": address, "username": username, "password": password} + def clean(self): + response = self.scheduler.pod.get( + self.app_id, labels={"app": self.app_id, "type": "filer"}) + if response.status_code != 200: + self.log("clean up old filter errors") + return False + for item in response.json()["items"]: + if item['status']['phase'] in ('Succeeded', 'Failed'): + pod_name = item['metadata']['name'] + self.scheduler.pod.delete(self.app_id, pod_name) + self.log("clean up old filter completed") + return True + def health(self, server): try: return self.request(