milvus-io/milvus · warning

Empty payload received

Error message

Empty payload received

What it means

Raised in the config-reply parser when a command reply exists, is marked successful, but its payload is an empty or whitespace-only JSON string. The client acknowledged the get_config command yet attached no configuration body - typically the client-side handler produced an empty serialized config, or the stored string was truncated/cleared server-side before the UI read it.

Source

Thrown at internal/http/webui/telemetry.html:2184

                        throw new Error(`HTTP ${response.status}`);
                    }

                    const data = await response.json();
                    const clients = data.clients || [];

                    if (clients.length > 0) {
                        const client = clients[0];
                        const replies = client.command_replies || [];
                        const configReply = replies.find(r => r.command_id === commandId);

                        if (configReply) {
                            if (configReply.success && configReply.payload) {
                                try {
                                    // Payload is a JSON string (not base64) - parse directly
                                    // Server stores Payload as string type, so no base64 decoding needed
                                    const payloadStr = configReply.payload;
                                    if (!payloadStr || payloadStr.trim() === '') {
                                        throw new Error('Empty payload received');
                                    }
                                    const configData = JSON.parse(payloadStr);
                                    renderConfigData(configData);
                                } catch (e) {
                                    console.error('Failed to parse config response:', e, 'payload:', configReply.payload);
                                    document.getElementById('configModalContent').innerHTML = `
                                        <div class="empty-state" style="padding: 20px;">
                                            <p style="color: var(--danger);">Failed to parse config response: ${escapeHtml(e.message)}</p>
                                            <p style="font-size: 12px; color: var(--gray-400); margin-top: 8px;">Raw payload: ${escapeHtml(String(configReply.payload).substring(0, 200))}</p>
                                        </div>
                                    `;
                                }
                            } else {
                                document.getElementById('configModalContent').innerHTML = `
                                    <div class="empty-state" style="padding: 20px;">
                                        <p style="color: var(--danger);">Config request failed: ${escapeHtml(configReply.error_msg || 'Unknown error')}</p>
                                    </div>
                                `;

View on GitHub (pinned to b43a76673a)

Solutions

  1. Retry the config fetch once - transient empty payloads on the first heartbeat after client startup are common.
  2. Check the server logs where client errors/replies are dumped: the client may have logged why the config body was empty.
  3. Confirm client and server versions match; upgrade the client if it predates the get_config payload feature.
  4. Inspect the raw payload shown in the modal ('Raw payload: ...' line) to confirm it is genuinely empty rather than unparseable.
Defensive patterns

Strategy: validation

Validate before calling

// validate reply payload before parsing
const raw = typeof configReply.payload === 'string' ? configReply.payload.trim() : '';
if (!raw) {
  renderModalError('Client returned an empty config payload - retry or check client logs');
    return;
}
let configData;
try { configData = JSON.parse(raw); } catch { renderModalError('Config payload is not valid JSON'); return; }

Prevention

When it happens

Trigger: Client's get_config handler returns success with an empty payload string; reply payload field cleared after TTL; client version that acknowledges but does not implement payload serialization for the requested config section.

Common situations: Version skew between an older client binary and a newer WebUI expecting a populated payload; inspecting a reply after it has partially expired; client with an empty/failed config load that still reports success.

Related errors


AI-assisted analysis of milvus-io/milvus@b43a76673a (2026-08-15). Data as JSON: /api/errors/b8ea9fe287c76e2a. Report an issue: GitHub.