Gitar Logo

See Gitar in Action

Subtle bugs Gitar caught on popular open source repositories

#7807
Severity:High

Race condition in IWRR cleanup

In a PR implementing a hierarchical weighted round-robin task scheduler, Gitar spotted that executeAtPath() released the parent write lock before calling childrenItemCount.Add(delta). This created a race window where cleanup() could delete the child node between the unlock and the counter update, leaving a permanently stale positive counter that caused tryChildren() to spin infinitely. The maintainer confirmed the bug and fixed it by adding a reference count to prevent premature cleanup.

View on GitHub →
#7792
Severity:Medium

10x timeout mismatch

A PR to limit RecordTaskStarted RPC calls during matching service overload explicitly stated “1s per attempt and 3s total” in its description. Gitar cross-referenced the description against the code and found recordTaskStartedExpirationInterval was set to 30 * time.Second — 10x the intended value. This copy-paste error would have defeated the entire purpose of the blast-radius reduction. The developer acknowledged and fixed it.

View on GitHub →
#7834
Severity:Medium

Rollup metrics not independently gated

In a PR adding GaugeMigration and CounterMigration frameworks, Gitar noticed that rollup metric emission for counters and gauges was nested inside the primary metric's EmitCounter/EmitGauge gate check. This meant suppressing a primary metric would silently suppress its rollup too, and configuring rollup names in the migration config would have no effect. This was inconsistent with histograms, which correctly gate rollups independently.

View on GitHub →
#26753
Severity:High

USER before pip install breaks Docker build

A PR fixing runtime spacy model loading for non-root containers added a USER openmetadata directive before the pip install commands. Gitar flagged that since the base image (python:3.10-bookworm) owns /usr/local/lib/python3.10/site-packages/ as root, running pip install as a non-root user would fail with Permission denied errors during docker build. The PR was merged but had to be reverted shortly after, confirming Gitar's warning was correct.

View on GitHub →
#26808
Severity:Medium

API method rename breaks test assertion

In a code cleanup PR addressing IDE warnings, a call was changed from .withPlatform(message) to .withReason(message) in the K8s pipeline client. Gitar traced the impact across the codebase and found that an existing test asserts response.getPlatform().contains("openmetadata-pipelines"), which would now fail since the platform field would return "Kubernetes" instead. It also noted that withReason() is semantically reserved for error context on unhealthy statuses.

View on GitHub →
#26808
Severity:Low

volatile to final breaks code sample

In the same cleanup PR, an IDE warning prompted changing private static volatile boolean initialized = false to private static final in a documentation file. Gitar caught that a final field initialized to false can never be set to true, making the documented thread-safe lazy-initialization pattern logically impossible. The volatile keyword was intentional to demonstrate correct concurrent access.

View on GitHub →
Try Gitar Today

Try Gitar today

AI code review that fixes your code and validates against CI. Try free for 14 days.