Skip to content

Commit d8a530d

Browse files
authored
Defunct connection instead of using assertion (#485)
* Defunct connection instead of using assertion Bad data could catch an existing stream in an invalid request state. It's not the best choice to have an assertion triggered by bad data from the server-side.
1 parent d5ecfca commit d8a530d

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

src/connection.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ void Connection::on_write(int status, RequestCallback* request) {
220220
break;
221221

222222
default:
223-
assert(false && "Invalid request state after write finished");
223+
LOG_ERROR("Invalid request state %s for stream ID %d", callback->state_string(),
224+
callback->stream());
225+
defunct();
224226
break;
225227
}
226228
}
@@ -284,7 +286,9 @@ void Connection::on_read(const char* buf, size_t size) {
284286
break;
285287

286288
default:
287-
assert(false && "Invalid request state after receiving response");
289+
LOG_ERROR("Invalid request state %s for stream ID %d", callback->state_string(),
290+
response->stream());
291+
defunct();
288292
break;
289293
}
290294
} else {

src/request_callback.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,22 @@ void RequestCallback::set_state(RequestCallback::State next_state) {
172172
}
173173
}
174174

175+
const char* RequestCallback::state_string() const {
176+
switch (state_) {
177+
case REQUEST_STATE_NEW:
178+
return "NEW";
179+
case REQUEST_STATE_WRITING:
180+
return "WRITING";
181+
case REQUEST_STATE_READING:
182+
return "READING";
183+
case REQUEST_STATE_READ_BEFORE_WRITE:
184+
return "READ_BEFORE_WRITE";
185+
case REQUEST_STATE_FINISHED:
186+
return "FINISHED";
187+
}
188+
return "INVALID";
189+
}
190+
175191
SimpleRequestCallback::SimpleRequestCallback(const String& query, uint64_t request_timeout_ms)
176192
: RequestCallback(
177193
RequestWrapper(Request::ConstPtr(new QueryRequest(query)), request_timeout_ms)) {}

src/request_callback.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ class RequestCallback
189189
State state() const { return state_; }
190190
void set_state(State next_state);
191191

192+
const char* state_string() const;
193+
192194
ResponseMessage* read_before_write_response() const { return read_before_write_response_.get(); }
193195

194196
void set_read_before_write_response(ResponseMessage* response) {

0 commit comments

Comments
 (0)