mongo 2.5.1 → 2.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +3 -2
- data.tar.gz.sig +0 -0
- data/Rakefile +1 -1
- data/lib/mongo/auth/user/view.rb +4 -4
- data/lib/mongo/bulk_write.rb +14 -19
- data/lib/mongo/cluster.rb +4 -2
- data/lib/mongo/cluster/app_metadata.rb +1 -1
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
- data/lib/mongo/collection.rb +13 -13
- data/lib/mongo/collection/view.rb +2 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +4 -4
- data/lib/mongo/collection/view/map_reduce.rb +3 -3
- data/lib/mongo/collection/view/readable.rb +26 -20
- data/lib/mongo/collection/view/writable.rb +12 -12
- data/lib/mongo/cursor.rb +4 -7
- data/lib/mongo/database.rb +2 -2
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/grid/stream/write.rb +1 -1
- data/lib/mongo/index/view.rb +3 -3
- data/lib/mongo/operation.rb +38 -24
- data/lib/mongo/operation/aggregate.rb +53 -0
- data/lib/mongo/operation/aggregate/command.rb +59 -0
- data/lib/mongo/operation/aggregate/op_msg.rb +54 -0
- data/lib/mongo/operation/aggregate/result.rb +87 -0
- data/lib/mongo/operation/collections_info.rb +62 -0
- data/lib/mongo/operation/collections_info/result.rb +39 -0
- data/lib/mongo/operation/{executable.rb → command.rb} +16 -13
- data/lib/mongo/operation/command/command.rb +38 -0
- data/lib/mongo/operation/command/op_msg.rb +53 -0
- data/lib/mongo/operation/count.rb +48 -0
- data/lib/mongo/operation/count/command.rb +38 -0
- data/lib/mongo/operation/count/op_msg.rb +38 -0
- data/lib/mongo/operation/create.rb +48 -0
- data/lib/mongo/operation/create/command.rb +38 -0
- data/lib/mongo/operation/create/op_msg.rb +37 -0
- data/lib/mongo/operation/create_index.rb +48 -0
- data/lib/mongo/operation/create_index/command.rb +42 -0
- data/lib/mongo/operation/create_index/op_msg.rb +41 -0
- data/lib/mongo/operation/create_user.rb +48 -0
- data/lib/mongo/operation/{commands → create_user}/command.rb +13 -19
- data/lib/mongo/operation/create_user/op_msg.rb +41 -0
- data/lib/mongo/operation/delete.rb +38 -0
- data/lib/mongo/operation/delete/bulk_result.rb +46 -0
- data/lib/mongo/operation/delete/command.rb +59 -0
- data/lib/mongo/operation/delete/legacy.rb +69 -0
- data/lib/mongo/operation/delete/op_msg.rb +60 -0
- data/lib/mongo/operation/{write/delete → delete}/result.rb +18 -16
- data/lib/mongo/operation/distinct.rb +48 -0
- data/lib/mongo/operation/distinct/command.rb +38 -0
- data/lib/mongo/operation/distinct/op_msg.rb +38 -0
- data/lib/mongo/operation/drop.rb +48 -0
- data/lib/mongo/operation/drop/command.rb +38 -0
- data/lib/mongo/operation/{commands/count.rb → drop/op_msg.rb} +16 -6
- data/lib/mongo/operation/drop_database.rb +48 -0
- data/lib/mongo/operation/drop_database/command.rb +38 -0
- data/lib/mongo/operation/drop_database/op_msg.rb +37 -0
- data/lib/mongo/operation/drop_index.rb +48 -0
- data/lib/mongo/operation/drop_index/command.rb +42 -0
- data/lib/mongo/operation/{limited.rb → drop_index/op_msg.rb} +19 -15
- data/lib/mongo/operation/explain.rb +52 -0
- data/lib/mongo/operation/explain/command.rb +54 -0
- data/lib/mongo/operation/explain/legacy.rb +53 -0
- data/lib/mongo/operation/explain/op_msg.rb +54 -0
- data/lib/mongo/operation/explain/result.rb +50 -0
- data/lib/mongo/operation/find.rb +52 -0
- data/lib/mongo/operation/find/command.rb +54 -0
- data/lib/mongo/operation/find/legacy.rb +55 -0
- data/lib/mongo/operation/{read/query → find/legacy}/result.rb +3 -3
- data/lib/mongo/operation/find/op_msg.rb +59 -0
- data/lib/mongo/operation/find/result.rb +60 -0
- data/lib/mongo/operation/{commands/users_info/result.rb → get_more.rb} +20 -22
- data/lib/mongo/operation/get_more/command.rb +54 -0
- data/lib/mongo/operation/{commands/find.rb → get_more/legacy.rb} +15 -8
- data/lib/mongo/operation/get_more/op_msg.rb +58 -0
- data/lib/mongo/operation/get_more/result.rb +60 -0
- data/lib/mongo/operation/indexes.rb +52 -0
- data/lib/mongo/operation/indexes/command.rb +54 -0
- data/lib/mongo/operation/indexes/legacy.rb +57 -0
- data/lib/mongo/operation/indexes/op_msg.rb +54 -0
- data/lib/mongo/operation/indexes/result.rb +97 -0
- data/lib/mongo/operation/insert.rb +40 -0
- data/lib/mongo/operation/insert/bulk_result.rb +70 -0
- data/lib/mongo/operation/insert/command.rb +65 -0
- data/lib/mongo/operation/insert/legacy.rb +72 -0
- data/lib/mongo/operation/insert/op_msg.rb +61 -0
- data/lib/mongo/operation/insert/result.rb +64 -0
- data/lib/mongo/operation/kill_cursors.rb +25 -14
- data/lib/mongo/operation/{takes_write_concern.rb → kill_cursors/command.rb} +14 -12
- data/lib/mongo/operation/kill_cursors/legacy.rb +37 -0
- data/lib/mongo/operation/kill_cursors/op_msg.rb +37 -0
- data/lib/mongo/operation/list_collections.rb +49 -0
- data/lib/mongo/operation/list_collections/command.rb +60 -0
- data/lib/mongo/operation/list_collections/op_msg.rb +53 -0
- data/lib/mongo/operation/list_collections/result.rb +92 -0
- data/lib/mongo/operation/map_reduce.rb +49 -0
- data/lib/mongo/operation/map_reduce/command.rb +55 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +54 -0
- data/lib/mongo/operation/map_reduce/result.rb +129 -0
- data/lib/mongo/operation/parallel_scan.rb +49 -0
- data/lib/mongo/operation/parallel_scan/command.rb +67 -0
- data/lib/mongo/operation/parallel_scan/op_msg.rb +61 -0
- data/lib/mongo/operation/parallel_scan/result.rb +61 -0
- data/lib/mongo/operation/remove_user.rb +48 -0
- data/lib/mongo/operation/remove_user/command.rb +42 -0
- data/lib/mongo/operation/remove_user/op_msg.rb +41 -0
- data/lib/mongo/operation/result.rb +3 -1
- data/lib/mongo/operation/shared/bypass_document_validation.rb +36 -0
- data/lib/mongo/operation/{causally_consistent.rb → shared/causal_consistency_supported.rb} +5 -5
- data/lib/mongo/operation/shared/executable.rb +45 -0
- data/lib/mongo/operation/shared/idable.rb +64 -0
- data/lib/mongo/operation/{commands/distinct.rb → shared/limited.rb} +10 -7
- data/lib/mongo/operation/{object_id_generator.rb → shared/object_id_generator.rb} +2 -2
- data/lib/mongo/operation/{read_preference.rb → shared/read_preference_supported.rb} +14 -24
- data/lib/mongo/operation/shared/result/aggregatable.rb +75 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +79 -0
- data/lib/mongo/operation/{specifiable.rb → shared/specifiable.rb} +40 -4
- data/lib/mongo/operation/shared/write.rb +81 -0
- data/lib/mongo/operation/shared/write_concern_supported.rb +39 -0
- data/lib/mongo/operation/update.rb +38 -0
- data/lib/mongo/operation/update/bulk_result.rb +126 -0
- data/lib/mongo/operation/update/command.rb +60 -0
- data/lib/mongo/operation/update/legacy.rb +80 -0
- data/lib/mongo/operation/{write/update → update/legacy}/result.rb +4 -82
- data/lib/mongo/operation/update/op_msg.rb +60 -0
- data/lib/mongo/operation/update/result.rb +102 -0
- data/lib/mongo/operation/update_user.rb +48 -0
- data/lib/mongo/operation/update_user/command.rb +41 -0
- data/lib/mongo/operation/update_user/op_msg.rb +41 -0
- data/lib/mongo/operation/users_info.rb +49 -0
- data/lib/mongo/operation/users_info/command.rb +58 -0
- data/lib/mongo/operation/users_info/op_msg.rb +57 -0
- data/lib/mongo/operation/{commands/collections_info → users_info}/result.rb +18 -17
- data/lib/mongo/server.rb +3 -5
- data/lib/mongo/server/connectable.rb +3 -3
- data/lib/mongo/server/connection.rb +14 -0
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/server_selector/selectable.rb +3 -12
- data/lib/mongo/session.rb +13 -1
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/client_spec.rb +15 -22
- data/spec/mongo/cluster/app_metadata_spec.rb +19 -3
- data/spec/mongo/cluster/cursor_reaper_spec.rb +37 -0
- data/spec/mongo/cluster_spec.rb +2 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection_spec.rb +105 -14
- data/spec/mongo/cursor_spec.rb +11 -11
- data/spec/mongo/grid/fs_bucket_spec.rb +5 -0
- data/spec/mongo/max_staleness_spec.rb +3 -1
- data/spec/mongo/operation/{commands/aggregate → aggregate}/result_spec.rb +1 -1
- data/spec/mongo/operation/{commands/aggregate_spec.rb → aggregate_spec.rb} +1 -1
- data/spec/mongo/operation/{commands/collections_info_spec.rb → collections_info_spec.rb} +4 -2
- data/spec/mongo/operation/{commands/command_spec.rb → command_spec.rb} +1 -1
- data/spec/mongo/operation/{write/command/create_index_spec.rb → create_index_spec.rb} +1 -1
- data/spec/mongo/operation/{write/create_user_spec.rb → create_user_spec.rb} +1 -1
- data/spec/mongo/operation/{write/bulk/delete_spec.rb → delete/bulk_spec.rb} +8 -8
- data/spec/mongo/operation/delete/command_spec.rb +111 -0
- data/spec/mongo/operation/{write/command/delete_spec.rb → delete/op_msg_spec.rb} +40 -34
- data/spec/mongo/operation/{write/delete_spec.rb → delete_spec.rb} +7 -7
- data/spec/mongo/operation/{write/command/drop_index_spec.rb → drop_index_spec.rb} +1 -1
- data/spec/mongo/operation/{read/query_spec.rb → find/legacy_spec.rb} +2 -2
- data/spec/mongo/operation/{read/get_more_spec.rb → get_more_spec.rb} +3 -3
- data/spec/mongo/operation/{commands/indexes_spec.rb → indexes_spec.rb} +6 -4
- data/spec/mongo/operation/{write/bulk/insert_spec.rb → insert/bulk_spec.rb} +9 -9
- data/spec/mongo/operation/insert/command_spec.rb +110 -0
- data/spec/mongo/operation/{write/command/insert_spec.rb → insert/op_msg_spec.rb} +51 -41
- data/spec/mongo/operation/{write/insert_spec.rb → insert_spec.rb} +2 -2
- data/spec/mongo/operation/kill_cursors_spec.rb +2 -2
- data/spec/mongo/operation/limited_spec.rb +3 -3
- data/spec/mongo/operation/{commands/map_reduce_spec.rb → map_reduce_spec.rb} +1 -1
- data/spec/mongo/operation/read_preference_spec.rb +2 -2
- data/spec/mongo/operation/{write/command/remove_user_spec.rb → remove_user_spec.rb} +1 -1
- data/spec/mongo/operation/{write/bulk/update_spec.rb → update/bulk_spec.rb} +8 -8
- data/spec/mongo/operation/update/command_spec.rb +114 -0
- data/spec/mongo/operation/{write/command/update_spec.rb → update/op_msg_spec.rb} +49 -40
- data/spec/mongo/operation/{write/update_spec.rb → update_spec.rb} +6 -6
- data/spec/mongo/operation/{write/command/update_user_spec.rb → update_user_spec.rb} +1 -1
- data/spec/mongo/server/connection_spec.rb +0 -22
- data/spec/mongo/server_selector_spec.rb +55 -0
- data/spec/mongo/server_spec.rb +0 -42
- data/spec/mongo/session/session_pool_spec.rb +1 -1
- data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
- data/spec/mongo/uri_spec.rb +2 -2
- data/spec/support/gridfs_tests/delete.yml +4 -38
- data/spec/support/gridfs_tests/download.yml +12 -30
- data/spec/support/server_selection.rb +1 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +15 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +15 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +0 -3
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +0 -3
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/Sharded/read/Nearest.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/Primary.yml +19 -0
- data/spec/support/server_selection/selection/Sharded/read/PrimaryPreferred.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/Secondary.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +0 -5
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -1
- data/spec/support/shared/session.rb +46 -5
- metadata +174 -116
- metadata.gz.sig +1 -2
- data/lib/mongo/operation/commands.rb +0 -31
- data/lib/mongo/operation/commands/aggregate.rb +0 -63
- data/lib/mongo/operation/commands/aggregate/result.rb +0 -89
- data/lib/mongo/operation/commands/collections_info.rb +0 -71
- data/lib/mongo/operation/commands/create.rb +0 -49
- data/lib/mongo/operation/commands/drop.rb +0 -49
- data/lib/mongo/operation/commands/drop_database.rb +0 -49
- data/lib/mongo/operation/commands/explain.rb +0 -27
- data/lib/mongo/operation/commands/explain/result.rb +0 -52
- data/lib/mongo/operation/commands/find/result.rb +0 -62
- data/lib/mongo/operation/commands/get_more.rb +0 -27
- data/lib/mongo/operation/commands/get_more/result.rb +0 -62
- data/lib/mongo/operation/commands/indexes.rb +0 -73
- data/lib/mongo/operation/commands/list_collections.rb +0 -48
- data/lib/mongo/operation/commands/list_collections/result.rb +0 -94
- data/lib/mongo/operation/commands/list_indexes.rb +0 -48
- data/lib/mongo/operation/commands/list_indexes/result.rb +0 -98
- data/lib/mongo/operation/commands/map_reduce.rb +0 -65
- data/lib/mongo/operation/commands/map_reduce/result.rb +0 -131
- data/lib/mongo/operation/commands/parallel_scan.rb +0 -54
- data/lib/mongo/operation/commands/parallel_scan/result.rb +0 -64
- data/lib/mongo/operation/commands/users_info.rb +0 -52
- data/lib/mongo/operation/read.rb +0 -16
- data/lib/mongo/operation/read/get_more.rb +0 -52
- data/lib/mongo/operation/read/query.rb +0 -55
- data/lib/mongo/operation/uses_command_op_msg.rb +0 -78
- data/lib/mongo/operation/write.rb +0 -22
- data/lib/mongo/operation/write/bulk.rb +0 -20
- data/lib/mongo/operation/write/bulk/bulkable.rb +0 -82
- data/lib/mongo/operation/write/bulk/delete.rb +0 -71
- data/lib/mongo/operation/write/bulk/delete/result.rb +0 -71
- data/lib/mongo/operation/write/bulk/insert.rb +0 -96
- data/lib/mongo/operation/write/bulk/insert/result.rb +0 -129
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +0 -87
- data/lib/mongo/operation/write/bulk/mergable.rb +0 -73
- data/lib/mongo/operation/write/bulk/update.rb +0 -81
- data/lib/mongo/operation/write/bulk/update/result.rb +0 -196
- data/lib/mongo/operation/write/command.rb +0 -23
- data/lib/mongo/operation/write/command/create_index.rb +0 -79
- data/lib/mongo/operation/write/command/create_user.rb +0 -61
- data/lib/mongo/operation/write/command/delete.rb +0 -79
- data/lib/mongo/operation/write/command/drop_index.rb +0 -80
- data/lib/mongo/operation/write/command/insert.rb +0 -69
- data/lib/mongo/operation/write/command/remove_user.rb +0 -60
- data/lib/mongo/operation/write/command/update.rb +0 -77
- data/lib/mongo/operation/write/command/update_user.rb +0 -61
- data/lib/mongo/operation/write/command/writable.rb +0 -70
- data/lib/mongo/operation/write/delete.rb +0 -75
- data/lib/mongo/operation/write/gle.rb +0 -49
- data/lib/mongo/operation/write/idable.rb +0 -63
- data/lib/mongo/operation/write/insert.rb +0 -74
- data/lib/mongo/operation/write/insert/result.rb +0 -62
- data/lib/mongo/operation/write/update.rb +0 -91
- data/lib/mongo/operation/write/write_command_enabled.rb +0 -77
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,26 +14,27 @@
|
|
14
14
|
|
15
15
|
module Mongo
|
16
16
|
module Operation
|
17
|
-
|
18
|
-
class CollectionsInfo
|
17
|
+
class UsersInfo
|
19
18
|
|
20
|
-
|
21
|
-
|
19
|
+
# Defines custom behaviour of results when using the
|
20
|
+
# usersInfo command.
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
23
|
+
class Result < Operation::Result
|
24
|
+
|
25
|
+
# The field name for the users document in a usersInfo result.
|
22
26
|
#
|
23
27
|
# @since 2.1.0
|
24
|
-
|
28
|
+
USERS = 'users'.freeze
|
29
|
+
|
30
|
+
def documents
|
31
|
+
reply.documents.first[USERS]
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
25
35
|
|
26
|
-
|
27
|
-
|
28
|
-
# @example Get the namespace.
|
29
|
-
# result.namespace
|
30
|
-
#
|
31
|
-
# @return [ String ] The namespace.
|
32
|
-
#
|
33
|
-
# @since 2.1.0
|
34
|
-
def namespace
|
35
|
-
Database::NAMESPACES
|
36
|
-
end
|
36
|
+
def first_document
|
37
|
+
@first_document ||= reply.documents[0]
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
data/lib/mongo/server.rb
CHANGED
@@ -122,11 +122,9 @@ module Mongo
|
|
122
122
|
# @return [ true, false ] If the server is connectable.
|
123
123
|
#
|
124
124
|
# @since 2.1.0
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
end
|
129
|
-
end
|
125
|
+
#
|
126
|
+
# @deprecated No longer necessary with Server Selection specification.
|
127
|
+
def connectable?; end
|
130
128
|
|
131
129
|
# Disconnect the server from the connection.
|
132
130
|
#
|
@@ -52,9 +52,9 @@ module Mongo
|
|
52
52
|
# @return [ true, false ] If the connection is connectable.
|
53
53
|
#
|
54
54
|
# @since 2.1.0
|
55
|
-
|
56
|
-
|
57
|
-
end
|
55
|
+
#
|
56
|
+
# @deprecated No longer necessary with Server Selection specification.
|
57
|
+
def connectable?; end
|
58
58
|
|
59
59
|
# Determine if the connection is currently connected.
|
60
60
|
#
|
@@ -27,31 +27,43 @@ module Mongo
|
|
27
27
|
# The ping command.
|
28
28
|
#
|
29
29
|
# @since 2.1.0
|
30
|
+
#
|
31
|
+
# @deprecated No longer necessary with Server Selection specification.
|
30
32
|
PING = { :ping => 1 }.freeze
|
31
33
|
|
32
34
|
# The ping command for an OP_MSG (server versions >= 3.6).
|
33
35
|
#
|
34
36
|
# @since 2.5.0
|
37
|
+
#
|
38
|
+
# @deprecated No longer necessary with Server Selection specification.
|
35
39
|
PING_OP_MSG = { :ping => 1, '$db' => Database::ADMIN }.freeze
|
36
40
|
|
37
41
|
# Ping message.
|
38
42
|
#
|
39
43
|
# @since 2.1.0
|
44
|
+
#
|
45
|
+
# @deprecated No longer necessary with Server Selection specification.
|
40
46
|
PING_MESSAGE = Protocol::Query.new(Database::ADMIN, Database::COMMAND, PING, :limit => -1)
|
41
47
|
|
42
48
|
# Ping message as an OP_MSG (server versions >= 3.6).
|
43
49
|
#
|
44
50
|
# @since 2.5.0
|
51
|
+
#
|
52
|
+
# @deprecated No longer necessary with Server Selection specification.
|
45
53
|
PING_OP_MSG_MESSAGE = Protocol::Msg.new([:none], {}, PING_OP_MSG)
|
46
54
|
|
47
55
|
# The ping message as raw bytes.
|
48
56
|
#
|
49
57
|
# @since 2.1.0
|
58
|
+
#
|
59
|
+
# @deprecated No longer necessary with Server Selection specification.
|
50
60
|
PING_BYTES = PING_MESSAGE.serialize.to_s.freeze
|
51
61
|
|
52
62
|
# The ping OP_MSG message as raw bytes (server versions >= 3.6).
|
53
63
|
#
|
54
64
|
# @since 2.5.0
|
65
|
+
#
|
66
|
+
# @deprecated No longer necessary with Server Selection specification.
|
55
67
|
PING_OP_MSG_BYTES = PING_OP_MSG_MESSAGE.serialize.to_s.freeze
|
56
68
|
|
57
69
|
# The last time the connection was checked back into a pool.
|
@@ -173,6 +185,8 @@ module Mongo
|
|
173
185
|
# @return [ true, false ] If the server is accepting connections.
|
174
186
|
#
|
175
187
|
# @since 2.1.0
|
188
|
+
#
|
189
|
+
# @deprecated No longer necessary with Server Selection specification.
|
176
190
|
def ping
|
177
191
|
bytes = features.op_msg_enabled? ? PING_OP_MSG_BYTES : PING_BYTES
|
178
192
|
ensure_connected do |socket|
|
@@ -71,7 +71,7 @@ module Mongo
|
|
71
71
|
# @since 2.0.0
|
72
72
|
def get(preference = {})
|
73
73
|
return preference if PREFERENCES.values.include?(preference.class)
|
74
|
-
PREFERENCES.fetch(preference[:mode] || :primary).new(preference)
|
74
|
+
PREFERENCES.fetch((preference[:mode] || :primary).to_sym).new(preference)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
@@ -94,7 +94,7 @@ module Mongo
|
|
94
94
|
# @return [ Mongo::Server ] A server matching the server preference.
|
95
95
|
#
|
96
96
|
# @since 2.0.0
|
97
|
-
def select_server(cluster, ping =
|
97
|
+
def select_server(cluster, ping = nil)
|
98
98
|
@local_threshold = cluster.options[:local_threshold] || LOCAL_THRESHOLD
|
99
99
|
@server_selection_timeout = cluster.options[:server_selection_timeout] || SERVER_SELECTION_TIMEOUT
|
100
100
|
deadline = Time.now + server_selection_timeout
|
@@ -102,17 +102,8 @@ module Mongo
|
|
102
102
|
servers = candidates(cluster)
|
103
103
|
if servers && !servers.compact.empty?
|
104
104
|
server = servers.first
|
105
|
-
|
106
|
-
|
107
|
-
if ping && !cluster.single?
|
108
|
-
if server.connectable?
|
109
|
-
server.check_driver_support!
|
110
|
-
return server
|
111
|
-
end
|
112
|
-
else
|
113
|
-
server.check_driver_support!
|
114
|
-
return server
|
115
|
-
end
|
105
|
+
server.check_driver_support!
|
106
|
+
return server
|
116
107
|
end
|
117
108
|
cluster.scan!
|
118
109
|
end
|
data/lib/mongo/session.rb
CHANGED
@@ -252,7 +252,19 @@ module Mongo
|
|
252
252
|
#
|
253
253
|
# @since 2.5.1
|
254
254
|
def implicit?
|
255
|
-
@
|
255
|
+
@implicit ||= !!(@options.key?(:implicit) && @options[:implicit] == true)
|
256
|
+
end
|
257
|
+
|
258
|
+
# Is this session an explicit one (i.e. user-created).
|
259
|
+
#
|
260
|
+
# @example Is the session explicit?
|
261
|
+
# session.explicit?
|
262
|
+
#
|
263
|
+
# @return [ true, false ] Whether this session is explicit.
|
264
|
+
#
|
265
|
+
# @since 2.5.2
|
266
|
+
def explicit?
|
267
|
+
@explicit ||= !implicit?
|
256
268
|
end
|
257
269
|
|
258
270
|
private
|
@@ -113,7 +113,7 @@ module Mongo
|
|
113
113
|
def end_sessions
|
114
114
|
while !@queue.empty?
|
115
115
|
server = ServerSelector.get(mode: :primary_preferred).select_server(@cluster)
|
116
|
-
Operation::
|
116
|
+
Operation::Command.new(
|
117
117
|
:selector => {endSessions: @queue.shift(10_000).collect { |s| s.session_id }},
|
118
118
|
:db_name => Database::ADMIN).execute(server)
|
119
119
|
end
|
data/lib/mongo/version.rb
CHANGED
data/spec/mongo/client_spec.rb
CHANGED
@@ -2,6 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongo::Client do
|
4
4
|
|
5
|
+
after do
|
6
|
+
begin; client.close; rescue; end
|
7
|
+
end
|
8
|
+
|
5
9
|
describe '#==' do
|
6
10
|
|
7
11
|
let(:client) do
|
@@ -12,12 +16,12 @@ describe Mongo::Client do
|
|
12
16
|
)
|
13
17
|
end
|
14
18
|
|
15
|
-
after do
|
16
|
-
client.close
|
17
|
-
end
|
18
|
-
|
19
19
|
context 'when the other is a client' do
|
20
20
|
|
21
|
+
after do
|
22
|
+
other.close
|
23
|
+
end
|
24
|
+
|
21
25
|
context 'when the options and cluster are equal' do
|
22
26
|
|
23
27
|
let(:other) do
|
@@ -105,6 +109,10 @@ describe Mongo::Client do
|
|
105
109
|
|
106
110
|
context 'when the other is a client' do
|
107
111
|
|
112
|
+
after do
|
113
|
+
other.close
|
114
|
+
end
|
115
|
+
|
108
116
|
context 'when the options and cluster are equal' do
|
109
117
|
|
110
118
|
let(:other) do
|
@@ -228,10 +236,6 @@ describe Mongo::Client do
|
|
228
236
|
described_class.new([default_address.seed], authorized_client.options.merge(options))
|
229
237
|
end
|
230
238
|
|
231
|
-
after do
|
232
|
-
client.close
|
233
|
-
end
|
234
|
-
|
235
239
|
it 'sets the option' do
|
236
240
|
expect(client.options['retry_writes']).to eq(options[:retry_writes])
|
237
241
|
end
|
@@ -243,10 +247,6 @@ describe Mongo::Client do
|
|
243
247
|
described_class.new([default_address.seed], authorized_client.options.merge(options))
|
244
248
|
end
|
245
249
|
|
246
|
-
after do
|
247
|
-
client.close
|
248
|
-
end
|
249
|
-
|
250
250
|
context 'when the compressor is supported' do
|
251
251
|
|
252
252
|
let(:options) do
|
@@ -456,10 +456,6 @@ describe Mongo::Client do
|
|
456
456
|
authorized_client.with(logger: logger)
|
457
457
|
end
|
458
458
|
|
459
|
-
after do
|
460
|
-
client.close
|
461
|
-
end
|
462
|
-
|
463
459
|
it 'does not use the global logger' do
|
464
460
|
expect(client.cluster.logger).to_not eq(Mongo::Logger.logger)
|
465
461
|
end
|
@@ -1123,7 +1119,7 @@ describe Mongo::Client do
|
|
1123
1119
|
end
|
1124
1120
|
|
1125
1121
|
let(:new_options) do
|
1126
|
-
{ app_name: '
|
1122
|
+
{ app_name: 'client_test' }
|
1127
1123
|
end
|
1128
1124
|
|
1129
1125
|
let!(:new_client) do
|
@@ -1373,10 +1369,6 @@ describe Mongo::Client do
|
|
1373
1369
|
client.list_databases({}, true)
|
1374
1370
|
end
|
1375
1371
|
|
1376
|
-
after do
|
1377
|
-
client.close
|
1378
|
-
end
|
1379
|
-
|
1380
1372
|
it 'sends the command with the nameOnly flag set to true' do
|
1381
1373
|
expect(command[:nameOnly]).to be(true)
|
1382
1374
|
end
|
@@ -1429,7 +1421,8 @@ describe Mongo::Client do
|
|
1429
1421
|
end
|
1430
1422
|
|
1431
1423
|
before do
|
1432
|
-
|
1424
|
+
# note that disconnect! is called also in the after block
|
1425
|
+
expect(client.cluster).to receive(:disconnect!).twice.and_call_original
|
1433
1426
|
end
|
1434
1427
|
|
1435
1428
|
it 'disconnects the cluster and returns true' do
|
@@ -14,18 +14,34 @@ describe Mongo::Cluster::AppMetadata do
|
|
14
14
|
|
15
15
|
context 'when the cluster has an app name option set' do
|
16
16
|
|
17
|
+
let(:client) do
|
18
|
+
authorized_client.with(app_name: :app_metadata_test)
|
19
|
+
end
|
20
|
+
|
17
21
|
let(:cluster) do
|
18
|
-
|
22
|
+
client.cluster
|
23
|
+
end
|
24
|
+
|
25
|
+
after do
|
26
|
+
client.close
|
19
27
|
end
|
20
28
|
|
21
29
|
it 'sets the app name' do
|
22
|
-
expect(app_metadata.send(:full_client_document)[:application][:name]).to eq(
|
30
|
+
expect(app_metadata.send(:full_client_document)[:application][:name]).to eq('app_metadata_test')
|
23
31
|
end
|
24
32
|
|
25
33
|
context 'when the app name exceeds the max length of 128' do
|
26
34
|
|
35
|
+
let(:client) do
|
36
|
+
authorized_client.with(app_name: "\u3042"*43)
|
37
|
+
end
|
38
|
+
|
27
39
|
let(:cluster) do
|
28
|
-
|
40
|
+
client.cluster
|
41
|
+
end
|
42
|
+
|
43
|
+
after do
|
44
|
+
client.close
|
29
45
|
end
|
30
46
|
|
31
47
|
it 'raises an error' do
|
@@ -143,4 +143,41 @@ describe Mongo::Cluster::CursorReaper do
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
end
|
146
|
+
|
147
|
+
context 'when a non-exhausted cursor goes out of scope' do
|
148
|
+
|
149
|
+
let(:docs) do
|
150
|
+
103.times.collect { |i| { a: i } }
|
151
|
+
end
|
152
|
+
|
153
|
+
let(:periodic_executor) do
|
154
|
+
cluster.instance_variable_get(:@periodic_executor)
|
155
|
+
end
|
156
|
+
|
157
|
+
let(:cluster) do
|
158
|
+
authorized_client.cluster
|
159
|
+
end
|
160
|
+
|
161
|
+
let(:cursor) do
|
162
|
+
view = authorized_collection.find
|
163
|
+
view.to_enum.next
|
164
|
+
cursor = view.instance_variable_get(:@cursor)
|
165
|
+
end
|
166
|
+
|
167
|
+
around do |example|
|
168
|
+
authorized_collection.insert_many(docs)
|
169
|
+
periodic_executor.stop!
|
170
|
+
cluster.schedule_kill_cursor(cursor.id, cursor.send(:kill_cursors_op_spec),
|
171
|
+
cursor.instance_variable_get(:@server))
|
172
|
+
periodic_executor.flush
|
173
|
+
example.run
|
174
|
+
periodic_executor.run!
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'schedules the kill cursor op' do
|
178
|
+
expect {
|
179
|
+
cursor.to_a
|
180
|
+
}.to raise_exception(Mongo::Error::OperationFailure)
|
181
|
+
end
|
182
|
+
end
|
146
183
|
end
|
data/spec/mongo/cluster_spec.rb
CHANGED
@@ -491,11 +491,11 @@ describe Mongo::Cluster do
|
|
491
491
|
context 'when the client has an app_name set' do
|
492
492
|
|
493
493
|
let(:cluster) do
|
494
|
-
authorized_client.with(app_name: '
|
494
|
+
authorized_client.with(app_name: 'cluster_test').cluster
|
495
495
|
end
|
496
496
|
|
497
497
|
it 'constructs an AppMetadata object with the app_name' do
|
498
|
-
expect(cluster.app_metadata.send(:full_client_document)[:application]).to eq('name' => '
|
498
|
+
expect(cluster.app_metadata.send(:full_client_document)[:application]).to eq('name' => 'cluster_test')
|
499
499
|
end
|
500
500
|
end
|
501
501
|
|
@@ -567,7 +567,7 @@ describe Mongo::Collection::View::ChangeStream, if: test_change_streams? do
|
|
567
567
|
authorized_collection.insert_one(a: 2)
|
568
568
|
expect(cursor).to receive(:get_more).once.and_raise(error)
|
569
569
|
expect(cursor).to receive(:kill_cursors).and_call_original
|
570
|
-
expect(Mongo::Operation::
|
570
|
+
expect(Mongo::Operation::Aggregate).to receive(:new).and_call_original
|
571
571
|
end
|
572
572
|
|
573
573
|
let(:enum) do
|
@@ -649,7 +649,7 @@ describe Mongo::Collection::View::ChangeStream, if: test_change_streams? do
|
|
649
649
|
authorized_collection.insert_one(a: 2)
|
650
650
|
expect(cursor).to receive(:get_more).and_raise(Mongo::Error::OperationFailure)
|
651
651
|
expect(cursor).to receive(:kill_cursors).and_call_original
|
652
|
-
expect(Mongo::Operation::
|
652
|
+
expect(Mongo::Operation::Aggregate).not_to receive(:new)
|
653
653
|
end
|
654
654
|
|
655
655
|
let(:enum) do
|
@@ -1113,7 +1113,7 @@ describe Mongo::Collection do
|
|
1113
1113
|
it_behaves_like 'a failed operation using a session'
|
1114
1114
|
end
|
1115
1115
|
|
1116
|
-
context 'when unacknowledged writes is used' do
|
1116
|
+
context 'when unacknowledged writes is used with an explicit session' do
|
1117
1117
|
|
1118
1118
|
let(:collection_with_unacknowledged_write_concern) do
|
1119
1119
|
authorized_collection.with(write: { w: 0 })
|
@@ -1123,7 +1123,20 @@ describe Mongo::Collection do
|
|
1123
1123
|
collection_with_unacknowledged_write_concern.insert_many([{ name: 'test1' }, { name: 'test2' }], session: session)
|
1124
1124
|
end
|
1125
1125
|
|
1126
|
-
it_behaves_like '
|
1126
|
+
it_behaves_like 'an explicit session with an unacknowledged write'
|
1127
|
+
end
|
1128
|
+
|
1129
|
+
context 'when unacknowledged writes is used with an implicit session' do
|
1130
|
+
|
1131
|
+
let(:collection_with_unacknowledged_write_concern) do
|
1132
|
+
subscribed_client.with(write: { w: 0 })[TEST_COLL]
|
1133
|
+
end
|
1134
|
+
|
1135
|
+
let(:operation) do
|
1136
|
+
collection_with_unacknowledged_write_concern.insert_many([{ name: 'test1' }, { name: 'test2' }])
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
it_behaves_like 'an implicit session with an unacknowledged write'
|
1127
1140
|
end
|
1128
1141
|
|
1129
1142
|
context 'when a document contains invalid keys' do
|
@@ -1345,7 +1358,7 @@ describe Mongo::Collection do
|
|
1345
1358
|
it_behaves_like 'a failed operation using a session'
|
1346
1359
|
end
|
1347
1360
|
|
1348
|
-
context 'when unacknowledged writes is used' do
|
1361
|
+
context 'when unacknowledged writes is used with an explicit session' do
|
1349
1362
|
|
1350
1363
|
let(:collection_with_unacknowledged_write_concern) do
|
1351
1364
|
authorized_collection.with(write: { w: 0 })
|
@@ -1355,7 +1368,20 @@ describe Mongo::Collection do
|
|
1355
1368
|
collection_with_unacknowledged_write_concern.insert_one({ name: 'testing' }, session: session)
|
1356
1369
|
end
|
1357
1370
|
|
1358
|
-
it_behaves_like '
|
1371
|
+
it_behaves_like 'an explicit session with an unacknowledged write'
|
1372
|
+
end
|
1373
|
+
|
1374
|
+
context 'when unacknowledged writes is used with an implicit session' do
|
1375
|
+
|
1376
|
+
let(:collection_with_unacknowledged_write_concern) do
|
1377
|
+
subscribed_client.with(write: { w: 0 })[TEST_COLL]
|
1378
|
+
end
|
1379
|
+
|
1380
|
+
let(:operation) do
|
1381
|
+
collection_with_unacknowledged_write_concern.insert_one({ name: 'testing' })
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
it_behaves_like 'an implicit session with an unacknowledged write'
|
1359
1385
|
end
|
1360
1386
|
|
1361
1387
|
context 'when the document contains invalid keys' do
|
@@ -1993,7 +2019,20 @@ describe Mongo::Collection do
|
|
1993
2019
|
collection_with_unacknowledged_write_concern.delete_one({}, session: session)
|
1994
2020
|
end
|
1995
2021
|
|
1996
|
-
it_behaves_like '
|
2022
|
+
it_behaves_like 'an explicit session with an unacknowledged write'
|
2023
|
+
end
|
2024
|
+
|
2025
|
+
context 'when unacknowledged writes is used with an implicit session' do
|
2026
|
+
|
2027
|
+
let(:collection_with_unacknowledged_write_concern) do
|
2028
|
+
subscribed_client.with(write: { w: 0 })[TEST_COLL]
|
2029
|
+
end
|
2030
|
+
|
2031
|
+
let(:operation) do
|
2032
|
+
collection_with_unacknowledged_write_concern.delete_one
|
2033
|
+
end
|
2034
|
+
|
2035
|
+
it_behaves_like 'an implicit session with an unacknowledged write'
|
1997
2036
|
end
|
1998
2037
|
|
1999
2038
|
context 'when a collation is provided' do
|
@@ -2155,7 +2194,7 @@ describe Mongo::Collection do
|
|
2155
2194
|
it_behaves_like 'a failed operation using a session'
|
2156
2195
|
end
|
2157
2196
|
|
2158
|
-
context 'when unacknowledged writes is used' do
|
2197
|
+
context 'when unacknowledged writes is used with an explicit session' do
|
2159
2198
|
|
2160
2199
|
let(:collection_with_unacknowledged_write_concern) do
|
2161
2200
|
authorized_collection.with(write: { w: 0 })
|
@@ -2165,7 +2204,20 @@ describe Mongo::Collection do
|
|
2165
2204
|
collection_with_unacknowledged_write_concern.delete_many({ '$._id' => 1}, session: session)
|
2166
2205
|
end
|
2167
2206
|
|
2168
|
-
it_behaves_like '
|
2207
|
+
it_behaves_like 'an explicit session with an unacknowledged write'
|
2208
|
+
end
|
2209
|
+
|
2210
|
+
context 'when unacknowledged writes is used with an implicit session' do
|
2211
|
+
|
2212
|
+
let(:collection_with_unacknowledged_write_concern) do
|
2213
|
+
subscribed_client.with(write: { w: 0 })[TEST_COLL]
|
2214
|
+
end
|
2215
|
+
|
2216
|
+
let(:operation) do
|
2217
|
+
collection_with_unacknowledged_write_concern.delete_many({ '$._id' => 1 })
|
2218
|
+
end
|
2219
|
+
|
2220
|
+
it_behaves_like 'an implicit session with an unacknowledged write'
|
2169
2221
|
end
|
2170
2222
|
|
2171
2223
|
context 'when a collation is specified' do
|
@@ -2714,7 +2766,7 @@ describe Mongo::Collection do
|
|
2714
2766
|
it_behaves_like 'a failed operation using a session'
|
2715
2767
|
end
|
2716
2768
|
|
2717
|
-
context 'when unacknowledged writes is used' do
|
2769
|
+
context 'when unacknowledged writes is used with an explicit session' do
|
2718
2770
|
|
2719
2771
|
let(:collection_with_unacknowledged_write_concern) do
|
2720
2772
|
authorized_collection.with(write: { w: 0 })
|
@@ -2724,7 +2776,20 @@ describe Mongo::Collection do
|
|
2724
2776
|
collection_with_unacknowledged_write_concern.replace_one({ a: 1 }, { x: 5 }, session: session)
|
2725
2777
|
end
|
2726
2778
|
|
2727
|
-
it_behaves_like '
|
2779
|
+
it_behaves_like 'an explicit session with an unacknowledged write'
|
2780
|
+
end
|
2781
|
+
|
2782
|
+
context 'when unacknowledged writes is used with an implicit session' do
|
2783
|
+
|
2784
|
+
let(:collection_with_unacknowledged_write_concern) do
|
2785
|
+
subscribed_client.with(write: { w: 0 })[TEST_COLL]
|
2786
|
+
end
|
2787
|
+
|
2788
|
+
let(:operation) do
|
2789
|
+
collection_with_unacknowledged_write_concern.replace_one({ a: 1 }, { x: 5 })
|
2790
|
+
end
|
2791
|
+
|
2792
|
+
it_behaves_like 'an implicit session with an unacknowledged write'
|
2728
2793
|
end
|
2729
2794
|
end
|
2730
2795
|
|
@@ -3118,7 +3183,7 @@ describe Mongo::Collection do
|
|
3118
3183
|
it_behaves_like 'a failed operation using a session'
|
3119
3184
|
end
|
3120
3185
|
|
3121
|
-
context 'when unacknowledged writes is used' do
|
3186
|
+
context 'when unacknowledged writes is used with an explicit session' do
|
3122
3187
|
|
3123
3188
|
let(:collection_with_unacknowledged_write_concern) do
|
3124
3189
|
authorized_collection.with(write: { w: 0 })
|
@@ -3128,7 +3193,20 @@ describe Mongo::Collection do
|
|
3128
3193
|
collection_with_unacknowledged_write_concern.update_many({a: 1}, { '$set' => {x: 1} }, session: session)
|
3129
3194
|
end
|
3130
3195
|
|
3131
|
-
it_behaves_like '
|
3196
|
+
it_behaves_like 'an explicit session with an unacknowledged write'
|
3197
|
+
end
|
3198
|
+
|
3199
|
+
context 'when unacknowledged writes is used with an implicit session' do
|
3200
|
+
|
3201
|
+
let(:collection_with_unacknowledged_write_concern) do
|
3202
|
+
subscribed_client.with(write: { w: 0 })[TEST_COLL]
|
3203
|
+
end
|
3204
|
+
|
3205
|
+
let(:operation) do
|
3206
|
+
collection_with_unacknowledged_write_concern.update_many({a: 1}, {'$set' => {x: 1}})
|
3207
|
+
end
|
3208
|
+
|
3209
|
+
it_behaves_like 'an implicit session with an unacknowledged write'
|
3132
3210
|
end
|
3133
3211
|
end
|
3134
3212
|
|
@@ -3525,17 +3603,30 @@ describe Mongo::Collection do
|
|
3525
3603
|
it_behaves_like 'a failed operation using a session'
|
3526
3604
|
end
|
3527
3605
|
|
3528
|
-
context 'when unacknowledged writes is used' do
|
3606
|
+
context 'when unacknowledged writes is used with an explicit session' do
|
3529
3607
|
|
3530
3608
|
let(:collection_with_unacknowledged_write_concern) do
|
3531
3609
|
authorized_collection.with(write: { w: 0 })
|
3532
3610
|
end
|
3533
3611
|
|
3534
3612
|
let(:operation) do
|
3535
|
-
collection_with_unacknowledged_write_concern.update_one({a: 1}, { '$set' => {x: 1} }, session: session)
|
3613
|
+
collection_with_unacknowledged_write_concern.update_one({ a: 1 }, { '$set' => { x: 1 } }, session: session)
|
3614
|
+
end
|
3615
|
+
|
3616
|
+
it_behaves_like 'an explicit session with an unacknowledged write'
|
3617
|
+
end
|
3618
|
+
|
3619
|
+
context 'when unacknowledged writes is used with an implicit session' do
|
3620
|
+
|
3621
|
+
let(:collection_with_unacknowledged_write_concern) do
|
3622
|
+
subscribed_client.with(write: { w: 0 })[TEST_COLL]
|
3623
|
+
end
|
3624
|
+
|
3625
|
+
let(:operation) do
|
3626
|
+
collection_with_unacknowledged_write_concern.update_one({ a: 1 }, { '$set' => { x: 1 }})
|
3536
3627
|
end
|
3537
3628
|
|
3538
|
-
it_behaves_like '
|
3629
|
+
it_behaves_like 'an implicit session with an unacknowledged write'
|
3539
3630
|
end
|
3540
3631
|
end
|
3541
3632
|
|