ソースを参照

fix: Use bench path as default bench_id

version-14
leela 4年前
コミット
ff973477a3
3個のファイルの変更14行の追加14行の削除
  1. +3
    -3
      frappe/tests/test_background_jobs.py
  2. +1
    -1
      frappe/utils/__init__.py
  3. +10
    -10
      frappe/utils/background_jobs.py

+ 3
- 3
frappe/tests/test_background_jobs.py ファイルの表示

@@ -4,7 +4,7 @@ from rq import Queue

import frappe
from frappe.core.page.background_jobs.background_jobs import remove_failed_jobs
from frappe.utils.background_jobs import get_redis_conn, rename_queue
from frappe.utils.background_jobs import get_redis_conn, generate_qname
import time


@@ -17,14 +17,14 @@ class TestBackgroundJobs(unittest.TestCase):
queues = Queue.all(conn)

for queue in queues:
if queue.name == rename_queue("short"):
if queue.name == generate_qname("short"):
fail_registry = queue.failed_job_registry
self.assertGreater(fail_registry.count, 0)

remove_failed_jobs()

for queue in queues:
if queue.name == rename_queue("short"):
if queue.name == generate_qname("short"):
fail_registry = queue.failed_job_registry
self.assertEqual(fail_registry.count, 0)



+ 1
- 1
frappe/utils/__init__.py ファイルの表示

@@ -384,7 +384,7 @@ def get_bench_path():
return os.path.realpath(os.path.join(os.path.dirname(frappe.__file__), '..', '..', '..'))

def get_bench_id():
return frappe.get_conf().get('bench_id', 'DefaultBench')
return frappe.get_conf().get('bench_id', get_bench_path().strip('/').replace('/', '-'))

def get_site_id(site=None):
return f"{site or frappe.local.site}@{get_bench_id()}"


+ 10
- 10
frappe/utils/background_jobs.py ファイルの表示

@@ -145,7 +145,7 @@ def start_worker(queue=None, quiet = False, rq_username=None, rq_password=None):
# empty init is required to get redis_queue from common_site_config.json
redis_connection = get_redis_conn(username=rq_username, password=rq_password)
queues = get_queue_list(queue, build_queue_name=True)
queue_name = queue and rename_queue(queue)
queue_name = queue and generate_qname(queue)

if os.environ.get('CI'):
setup_loghandlers('ERROR')
@@ -206,7 +206,7 @@ def get_queue_list(queue_list=None, build_queue_name=False):
validate_queue(queue, default_queue_list)
else:
queue_list = default_queue_list
return [rename_queue(q) for q in queue_list] if build_queue_name else queue_list
return [generate_qname(qtype) for qtype in queue_list] if build_queue_name else queue_list

def get_workers(queue):
'''Returns a list of Worker objects tied to a queue object'''
@@ -222,10 +222,10 @@ def get_running_jobs_in_queue(queue):
jobs.append(current_job)
return jobs

def get_queue(queue, is_async=True):
def get_queue(qtype, is_async=True):
'''Returns a Queue object tied to a redis connection'''
validate_queue(queue)
return Queue(rename_queue(queue), connection=get_redis_conn(), is_async=is_async)
validate_queue(qtype)
return Queue(generate_qname(qtype), connection=get_redis_conn(), is_async=is_async)

def validate_queue(queue, default_queue_list=None):
if not default_queue_list:
@@ -274,17 +274,17 @@ def get_queues() -> List[Queue]:
queues = Queue.all(connection=get_redis_conn())
return [q for q in queues if is_queue_accessible(q)]

def rename_queue(qname: str) -> str:
"""Rename qname by adding bench name as prefix.
def generate_qname(qtype: str) -> str:
"""Generate qname by combining bench ID and queue type.

Renamed queues are useful to define namespaces of customers.
qnames are useful to define namespaces of customers.
"""
return f"{get_bench_id()}:{qname}"
return f"{get_bench_id()}:{qtype}"

def is_queue_accessible(qobj: Queue) -> bool:
"""Checks whether queue is relate to current bench or not.
"""
accessible_queues = [rename_queue(q) for q in list(queue_timeout)]
accessible_queues = [generate_qname(q) for q in list(queue_timeout)]
return qobj.name in accessible_queues

def enqueue_test_job():


読み込み中…
キャンセル
保存