Skip to content

client: signal paid-download failure when the host can't invoice a chunk#775

Open
karamble wants to merge 1 commit into
companyzero:masterfrom
karamble:fix-ft-chunk-invoice-failure
Open

client: signal paid-download failure when the host can't invoice a chunk#775
karamble wants to merge 1 commit into
companyzero:masterfrom
karamble:fix-ft-chunk-invoice-failure

Conversation

@karamble

Copy link
Copy Markdown

When a getter requests a paid file chunk the host generates a per-chunk invoice; if that fails (e.g. dcrlnd has no inbound capacity), handleFTGetChunk returned the error without replying to the getter or notifying the host, so the host saw only a log line and the getter download stalled forever.

Mirror the tip-invoice path: fire OnInvoiceGenFailedNtfn on the host and reply to the getter using the existing RMFTPayForChunk.Error field. The getter now checks that field and raises a new OnFileDownloadFailed notification instead of trying to decode an empty invoice. Backwards compatible - the Error field already exists (omitempty); older peers ignore it.

Includes a regression test (TestFtPaidDownloadInvoiceGenFails) that times out without the fix.

Closes #774

When a getter requests a paid file chunk the host generates a per-chunk invoice; if that fails (e.g. dcrlnd has no inbound capacity), handleFTGetChunk returned the error without replying to the getter or notifying the host, so the host saw only a log line and the getter's download stalled forever.

Mirror the tip-invoice path: fire OnInvoiceGenFailedNtfn on the host and reply to the getter using the existing RMFTPayForChunk.Error field. The getter now checks that field and raises a new OnFileDownloadFailed notification instead of trying to decode an empty invoice. Backwards compatible - the Error field already exists (omitempty); older peers ignore it.

Adds a regression test that fails without the fix.
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.

client: paid file download stalls forever when the host can't generate a chunk invoice

1 participant