The shell now supports parsing and handling `mongo+srv://` style URIs,
as part of the DNS Seedlist support. These URIs require DNS SRV and
TXT record lookups, for extra configuration options. The shell also
supports a (limited) form of connection-failover -- when initially
connecting to a non-replica-set cluster, the shell will try each
host listed, in order, until a connection can be established.
Restricts the base AtomicWord template to integral types and adds
another specialization which uses a std::atomic<uint64_t> for
non-integral types (by doing atomic 64 bit ops, then copying bytes in
and out of the user type assuming it's Trivially copyable).
Added an option to permit specifying a Diffie Hellman parameters file
in PEM format which will be passed to OpenSSL. We also now indicate
to OpenSSL that we'd like Elliptic Curve Diffie Hellman Exchange,
if the client supports it.
This change activates the compile-time checking for unused
`mongo::Status` results. A few more `transitional_ignore`
calls were needed for a few more tests which appeared.
This refactors the thin_archive tool to use emitters and scanners
to note that when linking to a thin archive, you must also depend on
the children of that thin archive. Failing to do so is an error,
because a changed .o does not necessarily lead to a different .a,
which would subvert the SCons dependency mechanism.
This also includes a refactoring of the ABILINK tool to use a similar
mechanism, to achieve the opposite effect. For ABILINK, we want to
depend not on the actual .so, but on the hash of its abidw result. We
use emitters, actions, and scanners to produce an associated .abidw
file for each .so we build, and then update the scanner to depend on
the .abidw of our libraries, not the library itself. This allows us to
elide needless relinks.
The MSVC compiler has warnings which alert users that the behavior
of the compiler has changed. In the case of C4383, the compiler
used to have non-conforming behavior to C++98. At some point this
behavior was fixed. MongoDB's code base should not have any code
which would be adversely affected by this change, as the code is
also compiled on platforms where the native compiler is conformant
to the standard in this point. Therefore it should be safe to
disable this warning.
The specific warning cautions that a derived class's inline
definition of a virtual function will now override a parent's
implementation, where formerly it would not. This would happen
when the derived class's implementation specified at least one
of the parameters `const` (in such a way that the actual signature
of the function isn't changed). MSVC incorrectly determines that
if there are two functions that differ only in a non-observable
`const` specifier, then they would have different signatures, in
many circumstances. This would mean that the compiler resorts to
treating such functions as overloads. The compiler now behaves
correctly for the case of override in a derived class; however,
it issues a warning. The warning is irrelevant to us.