Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting max entries on OpenHTF ChronicleMap

I'm playing around with ChronicleSet, which is backed by ChronicleMap. I've done some initial testing, and it's pretty good for our needs. Much more efficient in RAM usage than other solutions, with access time a bit slower, but still pretty fast.

However, one thing I'm testing is setting the maximum number of entries, and it doesn't seem to be working as expected.

I'm using the following code:

    ChronicleSetBuilder<Long> postalSetBuilder =
            ChronicleSetBuilder.of(Long.class)
                    .name("long-map")
                    .entries(2_000_000L)
                    .maxBloatFactor(1.0);

According to the documentation, this means that the maximum number of entries allowed in this case would be 2M. However, when testing, I can reliably go up to 2x the maximum specified, and a little bit mor,e until I get an exception like this:

Error: ChronicleMap{name=city-postal-codes-map, file=null, identityHashCode=3213500}: Attempt to allocate #129 extra segment tier, 128 is maximum.
Possible reasons include:
    - you have forgotten to configure (or configured wrong) builder.entries() number
    - same regarding other sizing Chronicle Hash configurations, most likely maxBloatFactor(), averageKeySize(), or averageValueSize()
    - keys, inserted into the ChronicleHash, are distributed suspiciously bad. This might be a DOS attack

In this case, the ChronicleMap object call to size() spit out 4,079,238. So I'm wondering how I can set an explicit limit (like the 2M specified above), and have Chronicle reliably reject any requests to add additional elements after that.

like image 657
mjuarez Avatar asked Mar 18 '26 00:03

mjuarez


1 Answers

It's not possible to configure exact specific limit of entries, because of shared-nothing segmented storage, there is no single counter of entries. To make Chronicle Map to fail close to the configured entries() limit, you should configure allowSegmentTiering(false).

like image 200
leventov Avatar answered Mar 19 '26 14:03

leventov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!