Skip to content

Commit 57f7f5e

Browse files
committed
fix: use multiprocess LIB to allow local functions by using dill over pickle
1 parent 8e0217c commit 57f7f5e

File tree

3 files changed

+57
-38
lines changed

3 files changed

+57
-38
lines changed

poetry.lock

+40-23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ retry2 = "^0.9.5"
120120
pytest-socket = ">=0.6,<0.8"
121121
types-redis = "^4.6.0.7"
122122
testcontainers = { extras = ["redis"], version = "^3.7.1" }
123+
multiprocess = "^0.70.16"
123124

124125
[tool.coverage.run]
125126
source = ["aws_lambda_powertools"]

tests/functional/idempotency/persistence/test_redis_layer.py

+16-15
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,33 @@
11
# ruff: noqa
22
import copy
3+
import datetime
34
import json
45
import time as t
6+
from unittest import mock
57

68
import pytest
7-
from unittest.mock import patch
8-
9-
from aws_lambda_powertools.utilities.idempotency.persistence.redis import (
10-
RedisCachePersistenceLayer,
11-
)
12-
import datetime
9+
from multiprocess import Lock, Manager, Process
1310

14-
from aws_lambda_powertools.utilities.idempotency.persistence.base import (
15-
STATUS_CONSTANTS,
16-
DataRecord,
17-
)
18-
19-
from unittest import mock
20-
from multiprocessing import Process, Manager, Lock
2111
from aws_lambda_powertools.utilities.idempotency.exceptions import (
2212
IdempotencyAlreadyInProgressError,
2313
IdempotencyItemAlreadyExistsError,
2414
IdempotencyItemNotFoundError,
25-
IdempotencyPersistenceConnectionError,
2615
IdempotencyPersistenceConfigError,
16+
IdempotencyPersistenceConnectionError,
2717
IdempotencyPersistenceConsistencyError,
2818
IdempotencyValidationError,
2919
)
3020
from aws_lambda_powertools.utilities.idempotency.idempotency import (
21+
IdempotencyConfig,
3122
idempotent,
3223
idempotent_function,
33-
IdempotencyConfig,
24+
)
25+
from aws_lambda_powertools.utilities.idempotency.persistence.base import (
26+
STATUS_CONSTANTS,
27+
DataRecord,
28+
)
29+
from aws_lambda_powertools.utilities.idempotency.persistence.redis import (
30+
RedisCachePersistenceLayer,
3431
)
3532

3633
redis_badhost = "badhost"
@@ -557,6 +554,7 @@ def test_redis_orphan_record_race_condition(lambda_context):
557554
port="63005",
558555
mock_latency_ms=50,
559556
)
557+
560558
manager = Manager()
561559
# use a thread safe dict
562560
redis_client.expire_dict = manager.dict()
@@ -576,11 +574,13 @@ def lambda_handler(event, context):
576574

577575
# run handler for the first time to create a valid record in cache
578576
lambda_handler(mock_event, lambda_context)
577+
579578
# modify the cache expiration to create the orphan record
580579
for key, item in redis_client.cache.items():
581580
json_dict = json.loads(item)
582581
json_dict["expiration"] = int(t.time()) - 4000
583582
redis_client.cache[key] = json.dumps(json_dict).encode()
583+
584584
# Given orphan idempotency record with same payload already in Redis
585585
# When running two lambda handler at the same time
586586
redis_client.cache["exec_count"] = 0
@@ -590,6 +590,7 @@ def lambda_handler(event, context):
590590
p2.start()
591591
p1.join()
592592
p2.join()
593+
593594
# Then only one handler will actually run
594595
assert redis_client.cache["exec_count"] == 1
595596

0 commit comments

Comments
 (0)