Skip to content

Commit 7a07b16

Browse files
authored
docs: Add Thread safety section to README (#562)
1 parent b378508 commit 7a07b16

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

Diff for: README.rst

+15
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,21 @@ Processing each frame in a framed message involves a certain amount of overhead.
307307
increasing the frame size can offer potentially significant performance gains. We recommend that you tune these values
308308
to your use-case in order to obtain peak performance.
309309

310+
Thread safety
311+
==========================
312+
The ``EncryptionSDKClient`` and all provided ``CryptoMaterialsManager`` are thread safe.
313+
But instances of ``BaseKMSMasterKeyProvider`` MUST not be shared between threads,
314+
for the reasons outlined in `the boto3 docs <https://boto3.amazonaws.com/v1/documentation/api/latest/guide/resources.html#multithreading-or-multiprocessing-with-resources>`_.
315+
316+
Because the ``BaseKMSMaterKeyProvider`` creates a `new boto3 sessions <https://github.com/aws/aws-encryption-sdk-python/blob/08f305a9b7b5fc897d9cafac55fb98f3f2a6fe13/src/aws_encryption_sdk/key_providers/kms.py#L665-L674>`_ per region,
317+
users do not need to create a client for every region in every thread;
318+
a new ``BaseKMSMasterKeyProvider`` per thread is sufficient.
319+
320+
(The ``BaseKMSMasterKeyProvider`` is the internal parent class of all the KMS Providers.)
321+
322+
Finally, while the ``CryptoMaterialsCache`` is thread safe,
323+
sharing entries in that cache across threads needs to be done carefully
324+
(see the !Note about partition name `in the API Docs <https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.materials_managers.caching.html#aws_encryption_sdk.materials_managers.caching.CachingCryptoMaterialsManager>`_).
310325

311326
.. _AWS Encryption SDK: https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html
312327
.. _cryptography: https://cryptography.io/en/latest/

0 commit comments

Comments
 (0)