127 lines
4.5 KiB
YAML
127 lines
4.5 KiB
YAML
description: "replica-set-logging"
|
|
|
|
schemaVersion: "1.14"
|
|
|
|
runOnRequirements:
|
|
- topologies:
|
|
- replicaset
|
|
|
|
createEntities:
|
|
- client:
|
|
id: &client client
|
|
uriOptions:
|
|
retryWrites: false # so we don't retry after hitting a failpoint
|
|
heartbeatFrequencyMS: 500
|
|
serverSelectionTimeoutMS: 2000 # avoid hanging for 30s in test expecting SS failure due to timeout
|
|
observeLogMessages:
|
|
serverSelection: debug
|
|
observeEvents:
|
|
- serverDescriptionChangedEvent
|
|
- topologyDescriptionChangedEvent
|
|
- database:
|
|
id: &database database
|
|
client: *client
|
|
databaseName: &databaseName logging-tests
|
|
- collection:
|
|
id: &collection collection
|
|
database: *database
|
|
collectionName: &collectionName server-selection
|
|
- client:
|
|
id: &failPointClient failPointClient
|
|
- collection:
|
|
id: &unsatisfiableRPColl unsatisfiableRPColl
|
|
database: *database
|
|
collectionName: &unsatisfiableRPColl unsatisfiableRPColl
|
|
collectionOptions:
|
|
readPreference:
|
|
mode: Secondary
|
|
tagSets:
|
|
- { nonexistenttag : a }
|
|
|
|
tests:
|
|
- description: "A successful operation"
|
|
operations:
|
|
# ensure we've discovered the primary before starting, so we don't get an unexpected "waiting" message
|
|
# when server selection happens for the insert, or have extra logs from the driver performing server
|
|
# expected events are initial cluster type change from unknown to ReplicaSet, and connect events for each of 3 servers.
|
|
- name: waitForEvent
|
|
object: testRunner
|
|
arguments:
|
|
client: *client
|
|
event:
|
|
topologyDescriptionChangedEvent: {}
|
|
count: 4
|
|
- name: insertOne
|
|
object: *collection
|
|
arguments:
|
|
document: { x : 1 }
|
|
expectLogMessages:
|
|
- client: *client
|
|
messages:
|
|
- level: debug
|
|
component: serverSelection
|
|
data:
|
|
message: "Server selection started"
|
|
selector: { $$exists: true }
|
|
operation: insert
|
|
topologyDescription: { $$exists: true }
|
|
- level: debug
|
|
component: serverSelection
|
|
data:
|
|
message: "Server selection succeeded"
|
|
selector: { $$exists: true }
|
|
operation: insert
|
|
topologyDescription: { $$exists: true }
|
|
serverHost: { $$type: string }
|
|
serverPort: { $$type: [int, long] }
|
|
|
|
- description: "Server selection fails due to unsatisfiable read preference"
|
|
runOnRequirements:
|
|
- minServerVersion: "4.0" # min version for failCommand on mongod
|
|
operations:
|
|
# ensure we've discovered the primary before starting, so we don't get an unexpected "waiting" message
|
|
# when server selection happens for the insert, or have extra logs from the driver performing server
|
|
# expected events are initial cluster type change from unknown to ReplicaSet, and connect events for each of 3 servers.
|
|
- name: waitForEvent
|
|
object: testRunner
|
|
arguments:
|
|
client: *client
|
|
event:
|
|
topologyDescriptionChangedEvent: {}
|
|
count: 4
|
|
# the `find` should never succeed due to the unsatisfiable read preference.
|
|
- name: find
|
|
object: *unsatisfiableRPColl
|
|
arguments:
|
|
filter: { x : 1 }
|
|
expectError:
|
|
isClientError: true # server selection error
|
|
expectLogMessages:
|
|
# the topology won't change during this time, so although we exhaust
|
|
# serverSelectionTimeoutMS we only expect a single message.
|
|
- client: *client
|
|
messages:
|
|
- level: debug
|
|
component: serverSelection
|
|
data:
|
|
message: "Server selection started"
|
|
selector: { $$exists: true }
|
|
operation: find
|
|
topologyDescription: { $$exists: true }
|
|
- level: info
|
|
component: serverSelection
|
|
data:
|
|
message: "Waiting for suitable server to become available"
|
|
selector: { $$exists: true }
|
|
operation: find
|
|
topologyDescription: { $$exists: true }
|
|
remainingTimeMS: { $$type: [int, long] }
|
|
- level: debug
|
|
component: serverSelection
|
|
data:
|
|
message: "Server selection failed"
|
|
selector: { $$exists: true }
|
|
operation: find
|
|
topologyDescription: { $$exists: true }
|
|
failure: { $$exists: true }
|