Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Avoid per-write virtual dispatch in `DictionaryValuesWriter.shouldFallBack()` by caching the size-exceeded check

Open
#3,501 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
76/100
Issue type
Refactor
Clarity
Clearly specified
Activity status
Quiet
Tech stack
java

Research direction

Start with DictionaryValuesWriter.shouldFallBack() and FallbackValuesWriter.checkFallback(), then inspect the Binary, Long, Double, Integer, and Float typed subclass write methods, especially their id == -1 branches. Confirm that the size-exceeded state is updated only when a new dictionary entry is added and that fallback behavior remains unchanged for duplicate writes.

Written by the indexing model from the issue text.

Description

Type: enhancement
Describe the enhancement requested

DictionaryValuesWriter.shouldFallBack() is called by FallbackValuesWriter.checkFallback() after every single value write. The current implementation dispatches a virtual call to getDictionarySize() on every invocation:

public boolean shouldFallBack() {
  return dictionaryByteSize > maxDictionaryByteSize || getDictionarySize() > MAX_DICTIONARY_ENTRIES;
}

getDictionarySize() is an abstract method overridden in each typed subclass (Binary, Long, Double, Integer, Float) to return the backing map's .size(). Since shouldFallBack() is polled after every write, including writes of duplicate values that do not grow the dictionary, the virtual dispatch and map-size query are redundant work for the common case where most values are already in the dictionary.
Both dictionaryByteSize and the dictionary entry count can only increase when a new entry is added (inside the if (id == -1) branch of each subclass's write method). Therefore the size-exceeded condition can only transition from false to true at that exact point.

Proposal

Replace the per-write check with a cached boolean dictionarySizeExceeded flag. Introduce a checkDictionarySizeLimit(int newDictionarySize) method that subclass write methods call only when a new dictionary entry is actually added. shouldFallBack() then returns the cached flag directly, a simple field read with no virtual dispatch.

Component(s)

Core

Dominant language
Java
Stars
3.1k
Forks
1.6k
Avg merge
4d 12h
Merged PRs (30d)
28

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/parquet-java

All issues in apache/parquet-java

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.