Poco::MongoDB

class ServerDescription

Library: MongoDB
Package: MongoDB
Header: Poco/MongoDB/ServerDescription.h

Description

Represents the state of a single MongoDB server in a replica set.

This class stores metadata about a MongoDB server obtained from the 'hello' command response (requires MongoDB 5.1 or later), including: - Server type (primary, secondary, arbiter, etc.) - Replica set membership information - Round-trip time for server selection - Server tags for tag-based read preferences

THREAD SAFETY: This class is NOT thread-safe. External synchronization is required if instances are accessed from multiple threads.

Member Summary

Member Functions: address, error, hasError, isPrimary, isSecondary, isWritable, lastUpdateTime, lastWriteDate, markError, operator !=, operator =, operator ==, reset, roundTripTime, setAddress, setName, tags, type, typeToString, updateFromHelloResponse

Enumerations

ServerType

MongoDB server type enumeration

Unknown

Server type not yet determined

Standalone

Standalone MongoDB instance (not in a replica set)

RsPrimary

Replica set primary (writable)

RsSecondary

Replica set secondary (read-only)

RsArbiter

Replica set arbiter (no data, votes only)

RsOther

Other replica set member type

RsGhost

Ghost member (removed or not yet initialized)

Mongos

MongoDB sharding router

Constructors

ServerDescription

ServerDescription();

Creates an Unknown server description.

ServerDescription

explicit ServerDescription(
    const Net::SocketAddress & address
);

Creates an Unknown server description for the given address.

ServerDescription

ServerDescription(
    const ServerDescription & other
);

Copy constructor.

ServerDescription

ServerDescription(
    ServerDescription && other
) noexcept;

Move constructor.

Destructor

~ServerDescription

~ServerDescription();

Destroys the ServerDescription.

Member Functions

address

[[nodiscard]]
const Net::SocketAddress & address() const;

Returns the server address.

error

[[nodiscard]]
const std::string & error() const;

Returns the last error message, or empty string if no error.

hasError

[[nodiscard]]
bool hasError() const;

Returns true if the last update attempt resulted in an error.

isPrimary

[[nodiscard]]
bool isPrimary() const;

Returns true if this is a primary server (RsPrimary) or a standalone server. Standalone servers are treated as primaries for read preference purposes.

isSecondary

[[nodiscard]]
bool isSecondary() const;

Returns true if this is a secondary server.

isWritable

[[nodiscard]]
bool isWritable() const;

Returns true if this server can accept write operations. Only primary servers are writable.

lastUpdateTime

[[nodiscard]]
Timestamp lastUpdateTime() const;

Returns the timestamp of the last successful update from the driver.

lastWriteDate

[[nodiscard]]
Poco::Int64 lastWriteDate() const;

Returns the server's last write date in microseconds since epoch. Parsed from lastWrite.lastWriteDate in the hello response. See: https://www.mongodb.com/docs/manual/reference/command/hello/#std-label-hello-lastWrite Returns 0 if not available (server didn't report it).

markError

void markError(
    const std::string & errorMessage
);

Marks this server as having an error. This sets the type to Unknown and stores the error message.

operator !=

bool operator != (
    const ServerDescription & other
) const;

Inequality comparison operator.

operator =

ServerDescription & operator = (
    const ServerDescription & other
);

Assignment operator.

operator =

ServerDescription & operator = (
    ServerDescription && other
) noexcept;

Move assignment operator.

operator ==

bool operator == (
    const ServerDescription & other
) const;

Equality comparison operator. Compares type, address, setName, and error state.

reset

void reset();

Resets the server description to Unknown state.

roundTripTime

[[nodiscard]]
Poco::Int64 roundTripTime() const;

Returns the round-trip time in microseconds. This is used for "nearest" read preference selection.

setAddress

void setAddress(
    const Net::SocketAddress & address
);

Sets the server address.

setName

[[nodiscard]]
const std::string & setName() const;

Returns the replica set name, or empty string if not in a replica set.

tags

[[nodiscard]]
const Document & tags() const;

Returns the server tags for tag-based read preferences. Returns an empty document if no tags are configured.

type

[[nodiscard]]
ServerType type() const;

Returns the server type.

typeToString static

[[nodiscard]]
static std::string typeToString(
    ServerType type
);

Converts a server type enum to a human-readable string. Returns "PRIMARY", "SECONDARY", "ARBITER", "STANDALONE", "MONGOS", "OTHER", "GHOST", or "UNKNOWN".

updateFromHelloResponse

[[nodiscard]]
std::vector < Net::SocketAddress > updateFromHelloResponse(
    const Document & helloResponse,
    Poco::Int64 rttMicros
);

Updates the server description from a 'hello' command response. The rttMicros parameter should contain the round-trip time of the hello command in microseconds. Returns a list of all replica set members (hosts, passives, arbiters) discovered in the hello response.