At v1.8.2, when "socketTimeoutMS" expires, function "mongoc_database_command_simple" returns following error.
Failed to send "<COMMAND_NAME>" command with database "<DB_NAME>": socket error or timeout (e.g. Failed to send "saslStart" command with database "my_db": socket error or timeout)
But, at v1.9.3, this function returns following error.
Failed to read 4 bytes: socket error or timeout
It seems that amount of error information is reduced.
Is this change intentional?
stack trace (v1.9.3)
#0 bson_set_error (error=0x7fffffff30c0, domain=2, code=4, format=0x7ffff3144847 "Failed to buffer %u bytes") at src/bson/bson-error.c:69 #1 0x00007ffff30ef65e in _mongoc_buffer_fill (buffer=0x8b8778, stream=0x8b8660, min_bytes=4, timeout_msec=3000, error=0x7fffffff30c0) at src/mongoc/mongoc-buffer.c:290 #2 0x00007ffff3129404 in mongoc_stream_buffered_readv (stream=0x8b86f0, iov=0x7fffffff3370, iovcnt=1, min_bytes=4, timeout_msec=3000) at src/mongoc/mongoc-stream-buffered.c:239 #3 0x00007ffff31286eb in mongoc_stream_readv (stream=0x8b86f0, iov=0x7fffffff3370, iovcnt=1, min_bytes=4, timeout_msec=3000) at src/mongoc/mongoc-stream.c:235 #4 0x00007ffff3128830 in mongoc_stream_read (stream=0x8b86f0, buf=0x8bba60, count=4, min_bytes=4, timeout_msec=3000) at src/mongoc/mongoc-stream.c:279 #5 0x00007ffff30ef33d in _mongoc_buffer_append_from_stream ( buffer=0x7fffffff3570, stream=0x8b86f0, size=4, timeout_msec=3000, error=0x7fffffff5b00) at src/mongoc/mongoc-buffer.c:217 #6 0x00007ffff30fe1d2 in mongoc_cluster_run_opmsg (cluster=0x8ac978, cmd=0x7fffffff4d00, reply=0x7fffffff3a80, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:2585 #7 0x00007ffff30fa38e in mongoc_cluster_run_command_private ( cluster=0x8ac978, cmd=0x7fffffff4d00, reply=0x7fffffff3a80, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:552 #8 0x00007ffff30fa4c6 in mongoc_cluster_run_command_parts (cluster=0x8ac978, server_stream=0x8b9450, parts=0x7fffffff4d00, reply=0x7fffffff3a80, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:605 #9 0x00007ffff30fbae0 in _mongoc_cluster_auth_node_scram (cluster=0x8ac978, stream=0x8b86f0, sd=0x8ba1c0, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:1161 #10 0x00007ffff30fbfce in _mongoc_cluster_auth_node (cluster=0x8ac978, stream=0x8b86f0, sd=0x8ba1c0, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:1297 #11 0x00007ffff30fc41f in _mongoc_cluster_add_node (cluster=0x8ac978, server_id=1, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:1495 #12 0x00007ffff30fcd87 in mongoc_cluster_fetch_stream_pooled ( cluster=0x8ac978, server_id=1, reconnect_ok=true, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:1834 #13 0x00007ffff30fc6cf in _mongoc_cluster_stream_for_server (cluster=0x8ac978, server_id=1, reconnect_ok=true, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:1601 #14 0x00007ffff30fd0e9 in _mongoc_cluster_stream_for_optype (cluster=0x8ac978, optype=MONGOC_SS_READ, read_prefs=0x0, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:1981 #15 0x00007ffff30fd120 in mongoc_cluster_stream_for_reads (cluster=0x8ac978, read_prefs=0x0, error=0x7fffffff5b00) at src/mongoc/mongoc-cluster.c:2011 #16 0x00007ffff30f6241 in _mongoc_client_command_with_opts (client=0x8ac970, db_name=0x8b7dc8 "my_db", command=0x7fffffff5a00, mode=MONGOC_CMD_READ, opts=0x0, flags=MONGOC_QUERY_NONE, default_prefs=0x0, default_rc=0x0, default_wc=0x0, reply=0x7fffffff5980, error=0x7fffffff5b00) at src/mongoc/mongoc-client.c:1778 #17 0x00007ffff310d4e8 in mongoc_database_command_simple (database=0x8b7dc0, command=0x7fffffff5a00, read_prefs=0x0, reply=0x7fffffff5980, error=0x7fffffff5b00) at src/mongoc/mongoc-database.c:214
After #0-#4, #5"_mongoc_buffer_append_from_stream" calls "bson_set_error" at the line 219,
and updates the error message.
181 bool 182 _mongoc_buffer_append_from_stream (mongoc_buffer_t *buffer, 183 mongoc_stream_t *stream, 184 size_t size, 185 int32_t timeout_msec, 186 bson_error_t *error) 187 { ... 217 ret = mongoc_stream_read (stream, buf, size, size, timeout_msec); //#4 218 if (ret != size) { 219 bson_set_error (error, 220 MONGOC_ERROR_STREAM, 221 MONGOC_ERROR_STREAM_SOCKET, 222 "Failed to read %" PRIu64 223 " bytes: socket error or timeout", 224 (uint64_t) size); 225 RETURN (false); 226 } 227 228 buffer->len += ret; 229 230 RETURN (true); 231 }
#6"mongoc_cluster_run_opmsg" calls #5"_mongoc_buffer_append_from_stream"
at the line 2585, passing a constant argument "4".
#5"_mongoc_buffer_append_from_stream" returns false.
2495 static bool 2496 mongoc_cluster_run_opmsg (mongoc_cluster_t *cluster, 2497 mongoc_cmd_t *cmd, 2498 bson_t *reply, 2499 bson_error_t *error) 2500 { ... 2585 ok = _mongoc_buffer_append_from_stream ( 2586 &buffer, server_stream->stream, 4, cluster->sockettimeoutms, error); 2587 if (!ok) { 2588 mongoc_cluster_disconnect_node ( 2589 cluster, server_stream->sd->id, true, error); 2590 bson_free (output); 2591 _mongoc_bson_init_if_set (reply); 2592 _mongoc_buffer_destroy (&buffer); 2593 return false; 2594 } ... 2683 }