Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Add the ability to use G (GiB) and T (TiB) suffixes in configuration options that refer to numbers of bytes. #16219

Merged
merged 2 commits into from
Sep 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/16219.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add the ability to use `G` (GiB) and `T` (TiB) suffixes in configuration options that refer to numbers of bytes.
4 changes: 3 additions & 1 deletion docs/usage/configuration/config_documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ messages from the database after 5 minutes, rather than 5 months.

In addition, configuration options referring to size use the following suffixes:

* `M` = MiB, or 1,048,576 bytes
* `K` = KiB, or 1024 bytes
* `M` = MiB, or 1,048,576 bytes
* `G` = GiB, or 1,073,741,824 bytes
* `T` = TiB, or 1,099,511,627,776 bytes

For example, setting `max_avatar_size: 10M` means that Synapse will not accept files larger than 10,485,760 bytes
for a user avatar.
Expand Down
7 changes: 4 additions & 3 deletions synapse/config/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,9 @@ def parse_size(value: Union[str, int]) -> int:

If an integer is provided it is treated as bytes and is unchanged.

String byte sizes can have a suffix of 'K' or `M`, representing kibibytes and
mebibytes respectively. No suffix is understood as a plain byte count.
String byte sizes can have a suffix of 'K', `M`, `G` or `T`,
representing kibibytes, mebibytes, gibibytes and tebibytes respectively.
No suffix is understood as a plain byte count.

Raises:
TypeError, if given something other than an integer or a string
Expand All @@ -189,7 +190,7 @@ def parse_size(value: Union[str, int]) -> int:
if type(value) is int: # noqa: E721
return value
elif isinstance(value, str):
sizes = {"K": 1024, "M": 1024 * 1024}
sizes = {"K": 1024, "M": 1024 * 1024, "G": 1024**3, "T": 1024**4}
size = 1
suffix = value[-1]
if suffix in sizes:
Expand Down
Loading