18#include <boost/shared_ptr.hpp>
22#include "mongo/base/disallow_copying.h"
23#include "mongo/base/string_data.h"
24#include "mongo/stdx/functional.h"
25#include "mongo/util/net/hostandport.h"
29 class ReplicaSetMonitor;
31 struct ReadPreferenceSetting;
32 typedef boost::shared_ptr<ReplicaSetMonitor> ReplicaSetMonitorPtr;
43 typedef stdx::function<void(
const std::string& setName,
44 const std::string& newConnectionString)>
129 static void createIfNeeded(
const std::string& name ,
const std::set<HostAndPort>& servers);
136 static ReplicaSetMonitorPtr
get(
const std::string& name,
bool createFromSeed =
false);
148 static void remove(
const std::string& name,
bool clearSeedCache =
false);
195 typedef boost::shared_ptr<ScanState> ScanStatePtr;
196 typedef boost::shared_ptr<SetState> SetStatePtr;
206 : _state(initialState)
217 const SetStatePtr _state;
240 return _refreshUntilMatches(&criteria);
326 void receivedIsMasterBeforeFoundMaster(
const IsMasterReply& reply);
338 bool _startedNewScan;
Utility for creating a BSONObj.
Definition bsonobjbuilder.h:53
C++ representation of a "BSON" object – that is, an extended JSON-style object in a binary representa...
Definition bsonobj.h:78
Refreshes the local view of a replica set.
Definition replica_set_monitor.h:231
HostAndPort refreshUntilMatches(const ReadPreferenceSetting &criteria)
Contact hosts in the set to refresh our view, but stop once a host matches criteria.
Definition replica_set_monitor.h:239
Refresher(const SetStatePtr &setState)
Any passed-in pointers are shared with caller.
static ScanStatePtr startNewScan(const SetState *set)
Starts a new scan over the hosts in set.
void receivedIsMaster(const HostAndPort &from, int64_t latencyMicros, const BSONObj &reply)
Call this if a host returned from getNextStep successfully replied to an isMaster call.
void refreshAll()
Refresh all hosts.
Definition replica_set_monitor.h:249
void failedHost(const HostAndPort &host)
Call this if a host returned from getNextStep failed to reply to an isMaster call.
bool startedNewScan() const
True if this Refresher started a new full scan rather than joining an existing one.
Definition replica_set_monitor.h:301
NextStep getNextStep()
Returns the next step to take.
Holds state about a replica set and provides a means to refresh the local view.
Definition replica_set_monitor.h:38
void failedHost(const HostAndPort &host)
Notifies this Monitor that a host has failed and should be considered down.
bool isPrimary(const HostAndPort &host) const
Returns true if this node is the master based ONLY on local data.
static void setConfigChangeHook(ConfigChangeHook hook)
Sets the hook to be called whenever the config of any replica set changes.
static void createIfNeeded(const std::string &name, const std::set< HostAndPort > &servers)
Creates a new ReplicaSetMonitor, if it doesn't already exist.
ReplicaSetMonitor(const SetStatePtr &initialState)
Allows tests to set initial conditions and introspect the current state.
Definition replica_set_monitor.h:205
static std::set< std::string > getAllTrackedSets()
Returns all the currently tracked replica set names.
std::string getName() const
The name of the set.
bool contains(const HostAndPort &server) const
Is server part of this set? Uses only cached information.
static Status shutdown(int gracePeriodMillis=0)
Permanently stops all monitoring on replica sets and clears all cached information as well.
void appendInfo(BSONObjBuilder &b) const
Writes information about our cached view of the set to a BSONObjBuilder.
int getConsecutiveFailedScans() const
How may times in a row have we tried to refresh without successfully contacting any hosts who claim t...
Refresher startOrContinueRefresh()
Returns a refresher object that can be used to update our view of the set.
HostAndPort getHostOrRefresh(const ReadPreferenceSetting &criteria)
Returns a host matching criteria or an empty HostAndPort if no host matches.
static ReplicaSetMonitorPtr get(const std::string &name, bool createFromSeed=false)
gets a cached Monitor per name.
bool isHostUp(const HostAndPort &host) const
Returns true if host is part of this set and is considered up (meaning it can accept queries).
static void remove(const std::string &name, bool clearSeedCache=false)
Removes the ReplicaSetMonitor for the given set name from _sets, which will delete it.
ReplicaSetMonitor(StringData name, const std::set< HostAndPort > &seeds)
Initializes local state.
static Status initialize()
Starts the ReplicaSetMonitorWatcher.
HostAndPort getMasterOrUassert()
Returns the host we think is the current master or uasserts.
std::string getServerAddress() const
Returns a string with the format name/server1,server2.
static bool useDeterministicHostSelection
Defaults to false, meaning that if multiple hosts meet a criteria we pick one at random.
Definition replica_set_monitor.h:214
static int maxConsecutiveFailedChecks
If a ReplicaSetMonitor has been refreshed more than this many times in a row without finding any live...
Definition replica_set_monitor.h:186
the main MongoDB namespace
Definition bulk_operation_builder.h:24
MONGO_CLIENT_API Status(MONGO_CLIENT_FUNC *saslClientAuthenticate)(DBClientWithCommands *client
Attempts to authenticate "client" using the SASL protocol.
Name of a process on the network.
Definition hostandport.h:36
Definition dbclient_rs.h:316
Definition replica_set_monitor_internal.h:93
Definition replica_set_monitor.h:263
StepKind
Definition replica_set_monitor.h:264
@ DONE
Wait on condition variable and try again.
Definition replica_set_monitor.h:267
@ WAIT
Contact the returned host.
Definition replica_set_monitor.h:266
Definition replica_set_monitor_internal.h:231
Definition replica_set_monitor_internal.h:123