profile browser deletion/removal:

- ensure profile browser DELETE command is working
- ensure profile browser job expires if no initial ping
- logging: print exception for base job if init fails
This commit is contained in:
Ilya Kreymer 2022-08-02 18:31:33 -07:00
parent df905682a5
commit b11a5f136a
3 changed files with 22 additions and 20 deletions

View File

@ -3,6 +3,7 @@
import os
import asyncio
import sys
import traceback
import yaml
@ -41,7 +42,11 @@ class K8SJobMixin(K8sAPI):
data = self.templates.env.get_template(template).render(params)
await create_from_yaml(self.api_client, data, namespace=self.namespace)
try:
await create_from_yaml(self.api_client, data, namespace=self.namespace)
except Exception:
traceback.print_exc()
return
async def delete_job_objects(self, selector):
""" delete crawl stateful sets, services and pvcs """

View File

@ -135,7 +135,7 @@ class K8SManager(BaseCrawlManager, K8sAPI):
async def delete_profile_browser(self, browserid):
""" delete browser job, if it is a profile browser job """
return await self._handle_completed_job(f"job-{browserid}")
return await self._delete_job(f"job-{browserid}")
# ========================================================================
# Internal Methods
@ -148,25 +148,19 @@ class K8SManager(BaseCrawlManager, K8sAPI):
""" decode secret data """
return base64.standard_b64decode(secret.data[name]).decode()
async def _handle_completed_job(self, job_name):
""" Handle completed job: delete """
# until ttl controller is ready
if self.no_delete_jobs:
return
async def _delete_job(self, name):
""" delete job """
try:
await self._delete_job(job_name)
await self.batch_api.delete_namespaced_job(
name=name,
namespace=self.namespace,
grace_period_seconds=60,
propagation_policy="Foreground",
)
return True
# pylint: disable=bare-except
except:
pass
async def _delete_job(self, name):
await self.batch_api.delete_namespaced_job(
name=name,
namespace=self.namespace,
grace_period_seconds=60,
propagation_policy="Foreground",
)
return False
async def _create_config_map(self, crawlconfig, **kwargs):
""" Create Config Map based on CrawlConfig """

View File

@ -33,6 +33,9 @@ class ProfileJob(ABC):
self.loop.create_task(self.async_init("profilebrowser.yaml", params))
print(f"running browser for at least {self.idle_timeout} secs", flush=True)
signal.setitimer(signal.ITIMER_REAL, self.idle_timeout, 0)
async def async_init(self, template, params):
""" async init, overridable by subclass """
await self.init_job_objects(template, params)
@ -52,12 +55,12 @@ class ProfileJob(ABC):
signal.setitimer(signal.ITIMER_REAL, self.idle_timeout, 0)
def timeout_handler(self):
def exit_handler(self):
""" handle SIGTERM """
print("sigterm: shutting down browser...", flush=True)
self._do_exit()
def exit_handler(self):
def timeout_handler(self):
""" handle SIGALRM """
print("sigalrm: timer expired ending idle browser...", flush=True)
self._do_exit()