@@ -25,6 +25,7 @@ defmodule Mongo.MongoDBConnection do
25
25
database: Keyword . fetch! ( opts , :database ) ,
26
26
write_concern: Map . new ( write_concern ) ,
27
27
wire_version: nil ,
28
+ limits: nil ,
28
29
auth_mechanism: opts [ :auth_mechanism ] || nil ,
29
30
connection_type: Keyword . fetch! ( opts , :connection_type ) ,
30
31
topology_pid: Keyword . fetch! ( opts , :topology_pid ) ,
@@ -55,7 +56,9 @@ defmodule Mongo.MongoDBConnection do
55
56
end
56
57
57
58
case result do
58
- { :ok , state } -> { :ok , state }
59
+ { :ok , state } ->
60
+ # IO.puts inspect state
61
+ { :ok , state }
59
62
60
63
{ :disconnect , reason , state } ->
61
64
reason = case reason do
@@ -118,13 +121,38 @@ defmodule Mongo.MongoDBConnection do
118
121
# wire version
119
122
# https://github.com/mongodb/mongo/blob/master/src/mongo/db/wire_version.h
120
123
case Utils . command ( - 1 , [ ismaster: 1 ] , state ) do
121
- { :ok , % { "ok" => ok , "maxWireVersion" => version } } when ok == 1 -> { :ok , % { state | wire_version: version } }
124
+ { :ok , % { "ok" => ok , "maxWireVersion" => version } = response } when ok == 1 -> { :ok , % { update_limits ( state , response ) | wire_version: version } }
122
125
{ :ok , % { "ok" => ok } } when ok == 1 -> { :ok , % { state | wire_version: 0 } }
123
126
{ :ok , % { "ok" => ok , "errmsg" => msg , "code" => code } } when ok == 0 ->
124
127
err = Mongo.Error . exception ( message: msg , code: code )
125
128
{ :disconnect , err , state }
126
129
{ :disconnect , _ , _ } = error -> error
127
130
end
131
+
132
+
133
+ end
134
+
135
+ ##
136
+ #
137
+ # Updates the limits from the isMaster response:
138
+ #
139
+ # isMaster.maxBsonObjectSize / 16 * 1024 * 1024
140
+ # isMaster.maxMessageSizeBytes / 48000000
141
+ # isMaster.maxWriteBatchSize / 100,000
142
+ # isMaster.localTime
143
+ # isMaster.compression
144
+ # isMaster.readOnly
145
+ # isMaster.logicalSessionTimeoutMinutes
146
+ #
147
+ defp update_limits ( state , result ) do
148
+ limits = % { max_bson_object_size: ( result [ "maxBsonObjectSize" ] || 16_777_216 ) ,
149
+ max_message_size_bytes: ( result [ "maxMessageSizeBytes" ] || 48_000_000 ) ,
150
+ max_write_batch_size: ( result [ "maxWriteBatchSize" ] || 100_000 ) ,
151
+ compression: result [ "compression" ] ,
152
+ read_only: ( result [ "readOnly" ] || false ) ,
153
+ logical_session_timeout_minutes: result [ "logicalSessionTimeoutMinutes" ] }
154
+
155
+ % { state | limits: limits }
128
156
end
129
157
130
158
@ impl true
0 commit comments