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:
parent
df905682a5
commit
b11a5f136a
@ -3,6 +3,7 @@
|
|||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
@ -41,7 +42,11 @@ class K8SJobMixin(K8sAPI):
|
|||||||
|
|
||||||
data = self.templates.env.get_template(template).render(params)
|
data = self.templates.env.get_template(template).render(params)
|
||||||
|
|
||||||
|
try:
|
||||||
await create_from_yaml(self.api_client, data, namespace=self.namespace)
|
await create_from_yaml(self.api_client, data, namespace=self.namespace)
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
return
|
||||||
|
|
||||||
async def delete_job_objects(self, selector):
|
async def delete_job_objects(self, selector):
|
||||||
""" delete crawl stateful sets, services and pvcs """
|
""" delete crawl stateful sets, services and pvcs """
|
||||||
|
@ -135,7 +135,7 @@ class K8SManager(BaseCrawlManager, K8sAPI):
|
|||||||
|
|
||||||
async def delete_profile_browser(self, browserid):
|
async def delete_profile_browser(self, browserid):
|
||||||
""" delete browser job, if it is a profile browser job """
|
""" 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
|
# Internal Methods
|
||||||
@ -148,25 +148,19 @@ class K8SManager(BaseCrawlManager, K8sAPI):
|
|||||||
""" decode secret data """
|
""" decode secret data """
|
||||||
return base64.standard_b64decode(secret.data[name]).decode()
|
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
|
|
||||||
|
|
||||||
try:
|
|
||||||
await self._delete_job(job_name)
|
|
||||||
# pylint: disable=bare-except
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
async def _delete_job(self, name):
|
async def _delete_job(self, name):
|
||||||
|
""" delete job """
|
||||||
|
try:
|
||||||
await self.batch_api.delete_namespaced_job(
|
await self.batch_api.delete_namespaced_job(
|
||||||
name=name,
|
name=name,
|
||||||
namespace=self.namespace,
|
namespace=self.namespace,
|
||||||
grace_period_seconds=60,
|
grace_period_seconds=60,
|
||||||
propagation_policy="Foreground",
|
propagation_policy="Foreground",
|
||||||
)
|
)
|
||||||
|
return True
|
||||||
|
# pylint: disable=bare-except
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
async def _create_config_map(self, crawlconfig, **kwargs):
|
async def _create_config_map(self, crawlconfig, **kwargs):
|
||||||
""" Create Config Map based on CrawlConfig """
|
""" Create Config Map based on CrawlConfig """
|
||||||
|
@ -33,6 +33,9 @@ class ProfileJob(ABC):
|
|||||||
|
|
||||||
self.loop.create_task(self.async_init("profilebrowser.yaml", params))
|
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 def async_init(self, template, params):
|
||||||
""" async init, overridable by subclass """
|
""" async init, overridable by subclass """
|
||||||
await self.init_job_objects(template, params)
|
await self.init_job_objects(template, params)
|
||||||
@ -52,12 +55,12 @@ class ProfileJob(ABC):
|
|||||||
|
|
||||||
signal.setitimer(signal.ITIMER_REAL, self.idle_timeout, 0)
|
signal.setitimer(signal.ITIMER_REAL, self.idle_timeout, 0)
|
||||||
|
|
||||||
def timeout_handler(self):
|
def exit_handler(self):
|
||||||
""" handle SIGTERM """
|
""" handle SIGTERM """
|
||||||
print("sigterm: shutting down browser...", flush=True)
|
print("sigterm: shutting down browser...", flush=True)
|
||||||
self._do_exit()
|
self._do_exit()
|
||||||
|
|
||||||
def exit_handler(self):
|
def timeout_handler(self):
|
||||||
""" handle SIGALRM """
|
""" handle SIGALRM """
|
||||||
print("sigalrm: timer expired ending idle browser...", flush=True)
|
print("sigalrm: timer expired ending idle browser...", flush=True)
|
||||||
self._do_exit()
|
self._do_exit()
|
||||||
|
Loading…
Reference in New Issue
Block a user