Skip to content

Commit

Permalink
OpenConceptLab/ocl_issues#1777 | using SHA-256 to fix the queue for s…
Browse files Browse the repository at this point in the history
…ame user and import queue
  • Loading branch information
snyaggarwal committed Apr 23, 2024
1 parent 20e9298 commit d2a0ffe
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 5 deletions.
67 changes: 66 additions & 1 deletion core/common/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
get_resource_class_from_resource_name, flatten_dict, is_csv_file, is_url_encoded_string, to_parent_uri_from_kwargs,
set_current_user, get_current_user, set_request_url, get_request_url, nested_dict_values, chunks, api_get,
split_list_by_condition, is_zip_file, get_date_range_label, get_prev_month, from_string_to_date, get_end_of_month,
get_start_of_month, es_id_in, web_url)
get_start_of_month, es_id_in, web_url, get_queue_task_names)
from core.concepts.models import Concept
from core.orgs.models import Organization
from core.sources.models import Source
Expand Down Expand Up @@ -891,6 +891,71 @@ def test_from_string_to_date(self):
self.assertEqual(
from_string_to_date('2023-02-29'), None)

@patch('core.tasks.models.Task.make_new')
def test_get_queue_task_names(self, task_new_mock):
task_new_mock.return_value = 'task'

self.assertEqual(get_queue_task_names(None, 'ocladmin'), 'task')
self.assertEqual(
task_new_mock.mock_calls[0],
call(queue='bulk_import_root', username='ocladmin', import_queue=None)
)

self.assertEqual(get_queue_task_names('foobar', 'ocladmin'), 'task')
self.assertEqual(
task_new_mock.mock_calls[1],
call(queue='bulk_import_root', username='ocladmin', import_queue='foobar')
)

self.assertEqual(get_queue_task_names('concurrent', 'ocladmin'), 'task')
self.assertEqual(
task_new_mock.mock_calls[2],
call(queue='concurrent', username='ocladmin', import_queue='concurrent')
)

self.assertEqual(
get_queue_task_names('concurrent', 'ocladmin', foo='bar'), 'task')
self.assertEqual(
task_new_mock.mock_calls[3],
call(queue='concurrent', username='ocladmin', import_queue='concurrent', foo='bar')
)

self.assertEqual(get_queue_task_names(None, 'datim-admin'), 'task')
self.assertEqual(
task_new_mock.mock_calls[4],
call(queue=ANY, username='datim-admin', import_queue=None)
)

self.assertEqual(get_queue_task_names('merfy24', 'datim-admin'), 'task') # first
self.assertEqual(
task_new_mock.mock_calls[5],
call(queue='bulk_import_3', username='datim-admin', import_queue='merfy24')
)

self.assertEqual(get_queue_task_names('merfy24', 'datim-admin'), 'task') # second
self.assertEqual(
task_new_mock.mock_calls[6],
call(queue='bulk_import_3', username='datim-admin', import_queue='merfy24')
)

self.assertEqual(get_queue_task_names('merfy24', 'datim-admin'), 'task') # third
self.assertEqual(
task_new_mock.mock_calls[7],
call(queue='bulk_import_3', username='datim-admin', import_queue='merfy24')
)

self.assertEqual(get_queue_task_names('merfy25', 'datim-admin'), 'task')
self.assertEqual(
task_new_mock.mock_calls[8],
call(queue='bulk_import_1', username='datim-admin', import_queue='merfy25')
)

self.assertEqual(get_queue_task_names('merfy25', 'datim-admin'), 'task')
self.assertEqual(
task_new_mock.mock_calls[9],
call(queue='bulk_import_1', username='datim-admin', import_queue='merfy25')
)


class BaseModelTest(OCLTestCase):
def test_model_name(self):
Expand Down
9 changes: 5 additions & 4 deletions core/common/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# pylint: disable=cyclic-import # only occurring in dev env

import hashlib
import json
import mimetypes
import os
Expand Down Expand Up @@ -457,10 +457,11 @@ def get_queue_task_names(import_queue, username, **kwargs):
elif import_queue == 'concurrent':
queue_id = import_queue
elif import_queue:
# assigning to one of 5 queues processed in order
queue_id = 'bulk_import_' + str(hash(username + import_queue) % BULK_IMPORT_QUEUES_COUNT)
# assigning to one of 4 queues processed in order
hash_value = hashlib.sha256((username + import_queue).encode()).hexdigest()
queue_id = 'bulk_import_' + str(int(hash_value[:2], 16) % BULK_IMPORT_QUEUES_COUNT)
else:
# assigning randomly to one of 5 queues processed in order
# assigning randomly to one of 4 queues processed in order
queue_id = 'bulk_import_' + str(random.randrange(0, BULK_IMPORT_QUEUES_COUNT))

from core.tasks.models import Task
Expand Down

0 comments on commit d2a0ffe

Please sign in to comment.