Skip to content

Commit 4adb720

Browse files
committed
fixed redis_client
1 parent 6ff999b commit 4adb720

File tree

5 files changed

+19
-13
lines changed

5 files changed

+19
-13
lines changed

lambdas/redis_sync/src/redis_cacher.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import json
44
from transform_map import transform_map
5-
from common.clients import redis_client, logger
5+
from common.clients import get_redis_client, logger
66
from common.s3_reader import S3Reader
77

88

@@ -24,6 +24,7 @@ def upload(bucket_name: str, file_key: str) -> dict:
2424
# Transform
2525
redis_mappings = transform_map(config_file_content, file_key)
2626

27+
redis_client = get_redis_client()
2728
for key, mapping in redis_mappings.items():
2829
safe_mapping = {
2930
k: json.dumps(v) if isinstance(v, list) else v

lambdas/redis_sync/src/redis_sync.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from event_read import read_event
22
from record_processor import process_record
3-
from common.clients import redis_client, STREAM_NAME, logger
3+
from common.clients import get_redis_client, STREAM_NAME, logger
44
from common.log_decorator import logging_decorator
55
from common.s3_event import S3Event
66
'''
@@ -35,7 +35,7 @@ def handler(event, _):
3535
no_records = "No records found in event"
3636
# check if the event requires a read, ie {"read": "my-hashmap"}
3737
if "read" in event:
38-
return read_event(redis_client, event, logger)
38+
return read_event(get_redis_client(), event, logger)
3939
elif "Records" in event:
4040
logger.info("Processing S3 event with %d records", len(event.get('Records', [])))
4141
s3_records = S3Event(event).get_s3_records()

lambdas/redis_sync/tests/test_redis_cacher.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def setUp(self):
1111
self.mock_s3_reader = self.s3_reader_patcher.start()
1212
self.transform_map_patcher = patch("redis_cacher.transform_map")
1313
self.mock_transform_map = self.transform_map_patcher.start()
14-
self.redis_client_patcher = patch("redis_cacher.redis_client")
14+
self.redis_client_patcher = patch("common.clients.redis_client")
1515
self.mock_redis_client = self.redis_client_patcher.start()
1616
self.logger_info_patcher = patch("logging.Logger.info")
1717
self.mock_logger_info = self.logger_info_patcher.start()

lambdas/shared/src/common/clients.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,12 @@
2222
dynamodb_resource = boto3_resource("dynamodb", region_name=REGION_NAME)
2323
dynamodb_client = boto3_client("dynamodb", region_name=REGION_NAME)
2424

25-
logger.info(f"Connecting to Redis at {REDIS_HOST}:{REDIS_PORT}")
26-
redis_client = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, decode_responses=True)
25+
redis_client = None
26+
27+
28+
def get_redis_client():
29+
global redis_client
30+
if redis_client is None:
31+
logger.info(f"Connecting to Redis at {REDIS_HOST}:{REDIS_PORT}")
32+
redis_client = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, decode_responses=True)
33+
return redis_client

lambdas/shared/tests/test_common/test_clients.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,9 @@ def test_firehose_client(self):
5656
self.mock_boto3_client.assert_any_call("firehose", region_name=self.AWS_REGION)
5757

5858
def test_redis_client(self):
59-
''' Test redis client is created with correct parameters '''
59+
''' Test redis client is not initialized on import '''
6060
importlib.reload(clients)
61-
self.mock_redis.assert_called_once_with(
62-
host=self.REDIS_HOST,
63-
port=self.REDIS_PORT,
64-
decode_responses=True
65-
)
61+
self.mock_redis.assert_not_called()
6662

6763
def test_logging_setup(self):
6864
''' Test logging is set up correctly '''
@@ -75,8 +71,10 @@ def test_logging_configuration(self):
7571
clients.logger.setLevel.assert_called_once_with("INFO")
7672

7773
def test_redis_client_initialization(self):
78-
''' Test redis client initialization '''
74+
''' Test redis client is initialized exactly once even with multiple invocations'''
7975
importlib.reload(clients)
76+
clients.get_redis_client()
77+
clients.get_redis_client()
8078
self.mock_redis.assert_called_once_with(host=self.REDIS_HOST, port=self.REDIS_PORT, decode_responses=True)
8179
self.assertTrue(hasattr(clients, 'redis_client'))
8280
self.assertIsInstance(clients.redis_client, self.mock_redis.return_value.__class__)

0 commit comments

Comments
 (0)