Skip to content

websocket: terminate flushThread on Close() without writeTimeout#5

Merged
zeldovich merged 1 commit intoalgorand:masterfrom
zeldovich:websocket-flushthread
Jun 13, 2019
Merged

websocket: terminate flushThread on Close() without writeTimeout#5
zeldovich merged 1 commit intoalgorand:masterfrom
zeldovich:websocket-flushthread

Conversation

@zeldovich
Copy link
Copy Markdown
Contributor

No description provided.

@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Jun 12, 2019

CLA assistant check
All committers have signed the CLA.

@derbear derbear added the bug Something isn't working label Jun 12, 2019
@zeldovich zeldovich merged commit 788cbc0 into algorand:master Jun 13, 2019
@zeldovich zeldovich deleted the websocket-flushthread branch June 13, 2019 17:26
pzbitskiy pushed a commit to pzbitskiy/go-algorand that referenced this pull request Mar 9, 2020
bricerisingalgorand referenced this pull request in bricerisingalgorand/go-algorand Jun 10, 2020
Change waitForRoundOne timeout back to 1 minute
algorandskiy referenced this pull request in algorandskiy/go-algorand Jan 14, 2022
onetechnical added a commit that referenced this pull request Nov 16, 2022
cce pushed a commit that referenced this pull request Nov 8, 2024
…asswd

goal: add "wallet new" non-interactive flag (no password)
btcgenz added a commit to Swarm-Cool/swm-miner that referenced this pull request Apr 7, 2025
garyrob pushed a commit to garyrob/go-hedgecoin that referenced this pull request Feb 22, 2026
## Changes to spec.md

### Issue algorand#1: HTTP Status Code Handling
Added proper status code checking in `doRequest()`:
- Read full body with `io.ReadAll` before checking status
- Handle non-2xx responses by trying to parse JSON error, otherwise return generic HTTP error

### Issue algorand#2 & algorand#3: Request Body Type Field
- Explicitly stated that the `type` field is **removed** from request bodies
- Added new section showing simplified request structs without `Type` field
- Updated request/response documentation to note this change

### Issue algorand#4: Response Body Draining
- Changed from `json.Decoder.Decode()` to `io.ReadAll()` + `json.Unmarshal()`
- This ensures full body consumption for connection reuse even on error paths

### Issue algorand#5: Error Response Handling
- Added structured error handling that distinguishes:
  - Non-2xx HTTP status: Try to parse JSON error from body, wrap as `DaemonError` or generic error
  - Connection errors: Return as-is

### Issue algorand#6: Python Daemon Error Format
- Added `_send_json_response()` and `_send_json_error()` helper methods
- All errors return JSON responses, not HTML
- Error codes map to appropriate HTTP status codes

### Issue algorand#7: SetTimeouts() Implementation
- Changed to use per-request context with timeout (`http.NewRequestWithContext`)
- Dial timeout configured in Transport, query timeout used in context

### Issue algorand#8: Implementation Steps Order
- Combined "Update Go Client" and "Update Go Test Server" into a single step
- Updated plan.md to reflect this consolidation (now 3 implementation steps instead of 4)

### Additional Improvements
- Added graceful shutdown documentation for Python daemon using `HTTPServer.shutdown()`
- Added dial timeout configuration in Transport's DialContext
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants