Skip to content

Fix auction house bugs and redesign proxy liveness check#821

Draft
Swofty-Developments wants to merge 8 commits into
masterfrom
fix/auction-house-and-proxy-heartbeat
Draft

Fix auction house bugs and redesign proxy liveness check#821
Swofty-Developments wants to merge 8 commits into
masterfrom
fix/auction-house-and-proxy-heartbeat

Conversation

@Swofty-Developments

Copy link
Copy Markdown
Owner

No description provided.

SkyBlockService.init(...) never returns (it awaits a latch), so any setup placed
after it in a service main was dead code. AuctionService set its cache and
connected its databases after init, leaving AuctionService.cacheService null and
NPEing every auction fetch; OrchestratorService scheduled its cleanup task after
init, so it never ran. Move both setups before init.
…wire

The auction protocols Jackson-serialise AuctionItem, whose nested item carries
abstract ItemAttribute values Jackson cannot reconstruct, so listing or fetching
auctions failed to deserialize. Delegate AuctionItem (de)serialization to the
existing AuctionItemSerializer via @JsonValue/@JsonCreator.
Each game server polled the proxy with a ProxyIsOnlineProtocol request/response
once per second and shut itself down on a single missed reply within ~1s (20
ticks). Under many concurrent servers that round-trip regularly exceeded the
window and killed healthy hubs, and the timeout was coupled to the game tick
rate. The proxy now refreshes a short-lived Redis key (one write regardless of
server count) and each server reads it on an independent daemon thread, shutting
down only after several consecutive absences.
@vercel

vercel Bot commented Jul 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hypixel-skyblock Ignored Ignored Jul 6, 2026 2:56am

GUIAuctionCreateItem ran the add-item request inside the isOnline() callback and
then blocked on future.join(). That callback executes on the single Redis
subscriber thread, and the add-item reply arrives on that same thread, so the
join deadlocked and the auction UI froze on "setting up the auction". Chain the
response asynchronously instead.
Every auction GUI blocked a thread on .join(): isOnline() guards ran on the tick
thread each refresh (~150ms stalls), and the fetch/manage/bids views joined on
fetch responses. Convert the online checks and fetch renders to async
continuations (thenAccept/thenRun), and run the BIN purchase handler on a virtual
thread so its sequential joins park cheaply instead of freezing the tick.
The click handler cancelled every click on slot 45 to protect the offhand slot,
but slot 45 is a normal slot in an open chest GUI. The 6th auction category
button (TOOLS) sits there, so its clicks were swallowed before reaching the GUI
item. Scope the offhand cancel to the player's own inventory.
The players module rendered <arg:0> wrapped in literal { }, showing
'Players ({1})' instead of 'Players (1)'; the murder mystery line had a stray }.
A single malformed stored auction made the whole category fetch throw; deserialize
each document defensively and log+skip bad ones. Also surface browse failures via
exceptionally() instead of swallowing them.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant