]> git.ipfire.org Git - thirdparty/zstd.git/commit
[zdict] Remove ZDICT_CONTENTSIZE_MIN restriction for ZDICT_finalizeDictionary 2887/head
authorNick Terrell <terrelln@fb.com>
Wed, 1 Dec 2021 00:51:16 +0000 (16:51 -0800)
committerNick Terrell <terrelln@fb.com>
Wed, 1 Dec 2021 02:02:26 +0000 (18:02 -0800)
commit0356e05f0741181e6dc3354dc323e889065c4684
treee6ecdcf5e074e6090fae6c39f3d354bc6ebe6d7e
parent7847c2fd687be41b5b5c2c402764c631320ad6d0
[zdict] Remove ZDICT_CONTENTSIZE_MIN restriction for ZDICT_finalizeDictionary

Allow the `dictContentSize` to be any size. The finalized dictionary
content size must be at least as large as the maximum repcode (8). So we
add zero bytes to the dictionary to ensure that we meet that
requirement.

I've removed this restriction because its been causing us headaches when
people complain that dictionary training failed. It fails because there
isn't enough useful content to put in the dictionary. Either because
every sample is exactly the same and less than ZDICT_CONTENTSIZE_MIN bytes,
or there isn't enough content. Instead, we should succeed in creating
the dictionary, and it is up to the user to decide if it is worthwhile.
It is possible that the tables alone provide enough value.

NOTE: This allows us to produce dictionaries with finalized
`dictContentSize < ZDICT_CONTENTSIZE_MIN`. But, they are still valid
zstd dictionaries. We could remove the `ZDICT_CONTENTSIZE_MIN` macro,
but I've decided to leave that for now, so we don't break users.
lib/dictBuilder/zdict.c
lib/zdict.h
tests/playTests.sh