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"
29class ReplicaSetMonitor;
31struct ReadPreferenceSetting;
32typedef boost::shared_ptr<ReplicaSetMonitor> ReplicaSetMonitorPtr;
44 typedef stdx::function<void(
const std::string& setName,
const std::string& newConnectionString)>
134 static void createIfNeeded(
const std::string& name,
const std::set<HostAndPort>& servers);
141 static ReplicaSetMonitorPtr
get(
const std::string& name,
bool createFromSeed =
false);
153 static void remove(
const std::string& name,
bool clearSeedCache =
false);
200 typedef boost::shared_ptr<ScanState> ScanStatePtr;
201 typedef boost::shared_ptr<SetState> SetStatePtr;
220 const SetStatePtr _state;
243 return _refreshUntilMatches(&criteria);
253 _refreshUntilMatches(NULL);
276 : step(step), host(host) {}
305 return _startedNewScan;
330 void receivedIsMasterBeforeFoundMaster(
const IsMasterReply& reply);
342 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:234
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:242
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:252
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:304
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:210
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.
bool isKnownToHaveGoodPrimary() const
Returns true if the monitor knows a usable primary from it's interal view.
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:217
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:191
Status represents an error state or the absence thereof.
Definition status.h:50
A StringData object wraps a 'const string&' or a 'const char*' without copying its contents.
Definition string_data.h:43
Utility functions for parsing numbers from strings.
Definition compare_numbers.h:20
Name of a process on the network.
Definition hostandport.h:37
Definition dbclient_rs.h:363
Definition replica_set_monitor_internal.h:89
Definition replica_set_monitor.h:268
StepKind
Definition replica_set_monitor.h:269
@ DONE
Wait on condition variable and try again.
Definition replica_set_monitor.h:272
@ WAIT
Contact the returned host.
Definition replica_set_monitor.h:271
Definition replica_set_monitor_internal.h:223
Definition replica_set_monitor_internal.h:117