Skip to content

Commit e100f20

Browse files
CDRIVER-3821 implement versioned api
1 parent 43f5997 commit e100f20

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+3753
-39
lines changed

src/libmongoc/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,7 @@ set (SOURCES ${SOURCES}
534534
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-read-concern.c
535535
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-read-prefs.c
536536
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-rpc.c
537+
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-server-api.c
537538
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-server-description.c
538539
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-server-stream.c
539540
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-client-session.c
@@ -598,6 +599,7 @@ set (HEADERS
598599
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-prelude.h
599600
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-read-concern.h
600601
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-read-prefs.h
602+
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-server-api.h
601603
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-server-description.h
602604
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-client-session.h
603605
${PROJECT_SOURCE_DIR}/src/mongoc/mongoc-socket.h
@@ -993,6 +995,7 @@ set (test-libmongoc-sources
993995
${PROJECT_SOURCE_DIR}/tests/test-mongoc-usleep.c
994996
${PROJECT_SOURCE_DIR}/tests/test-mongoc-util.c
995997
${PROJECT_SOURCE_DIR}/tests/test-mongoc-version.c
998+
${PROJECT_SOURCE_DIR}/tests/test-mongoc-versioned-api.c
996999
${PROJECT_SOURCE_DIR}/tests/test-mongoc-with-transaction.c
9971000
${PROJECT_SOURCE_DIR}/tests/test-mongoc-write-commands.c
9981001
${PROJECT_SOURCE_DIR}/tests/test-mongoc-write-concern.c

src/libmongoc/doc/api.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ API Reference
4545
mongoc_read_prefs_t
4646
mongoc_remove_flags_t
4747
mongoc_reply_flags_t
48+
mongoc_server_api_t
49+
mongoc_server_api_version_t
4850
mongoc_server_description_t
4951
mongoc_session_opt_t
5052
mongoc_socket_t
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
:man_page: mongoc_client_pool_set_server_api
2+
3+
mongoc_client_pool_set_server_api()
4+
===================================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
bool
12+
mongoc_client_pool_set_server_api (mongoc_client_pool_t *pool,
13+
const mongoc_server_api_t *api,
14+
bson_error_t *error);
15+
16+
Set the API version to use for clients created through ``pool``. Once the API version is set on a pool, it may not be changed to a new value. Attempting to do so will cause this method to fail and set ``error``.
17+
18+
Parameters
19+
----------
20+
21+
* ``pool``: A :symbol:`mongoc_client_pool_t`.
22+
* ``api``: A :symbol:`mongoc_server_api_t`.
23+
* ``error``: A :symbol:`bson_error_t`.
24+
25+
Returns
26+
-------
27+
28+
True if the version was successfully set, false if not. On failure, ``error`` will be set.

src/libmongoc/doc/mongoc_client_pool_t.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Example
4040
mongoc_client_pool_set_apm_callbacks
4141
mongoc_client_pool_set_appname
4242
mongoc_client_pool_set_error_api
43+
mongoc_client_pool_set_server_api
4344
mongoc_client_pool_set_ssl_opts
4445
mongoc_client_pool_try_pop
4546

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
:man_page: mongoc_client_set_server_api
2+
3+
mongoc_client_set_server_api()
4+
==============================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
bool
12+
mongoc_client_set_server_api (mongoc_client_t *client,
13+
const mongoc_server_api_t *api,
14+
bson_error_t *error);
15+
16+
Set the API version to use for ``client``. Once the API version is set on a client, it may not be changed to a new value. Attempting to do so will cause this method to fail and set ``error``.
17+
18+
Parameters
19+
----------
20+
21+
* ``client``: A :symbol:`mongoc_client_t`.
22+
* ``api``: A :symbol:`mongoc_server_api_t`.
23+
* ``error``: A :symbol:`bson_error_t`.
24+
25+
Returns
26+
-------
27+
28+
True if the version was successfully set, false if not. On failure, ``error`` will be set.

src/libmongoc/doc/mongoc_client_t.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Example
8282
mongoc_client_set_error_api
8383
mongoc_client_set_read_concern
8484
mongoc_client_set_read_prefs
85+
mongoc_client_set_server_api
8586
mongoc_client_set_ssl_opts
8687
mongoc_client_set_stream_initiator
8788
mongoc_client_set_write_concern
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
:man_page: mongoc_server_api_copy
2+
3+
mongoc_server_api_copy()
4+
========================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
mongoc_server_api_t *
12+
mongoc_server_api_copy (const mongoc_server_api_t *api);
13+
14+
Creates a deep copy of ``api``.
15+
16+
Parameters
17+
----------
18+
19+
* ``api``: A :symbol:`mongoc_server_api_t`.
20+
21+
Returns
22+
-------
23+
24+
Returns a newly allocated copy of ``api`` that must be freed with :symbol:`mongoc_server_api_destroy()` when no longer in use.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
:man_page: mongoc_server_api_deprecation_errors
2+
3+
mongoc_server_api_deprecation_errors()
4+
======================================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
void
12+
mongoc_server_api_deprecation_errors (mongoc_server_api_t *api,
13+
bool deprecation_errors);
14+
15+
Set whether or not to error on commands that are deprecated in this API version.
16+
17+
Parameters
18+
----------
19+
20+
* ``api``: A :symbol:`mongoc_server_api_t`.
21+
* ``deprecation_errors``: Whether or not to error on commands that are deprecated.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
:man_page: mongoc_server_api_destroy
2+
3+
mongoc_server_api_destroy()
4+
===========================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
void
12+
mongoc_server_api_destroy (mongoc_server_api_t *api);
13+
14+
Free a :symbol:`mongoc_server_api_t`. Does nothing if ``api`` is NULL.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
:man_page: mongoc_server_api_new
2+
3+
mongoc_server_api_new()
4+
=======================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
mongoc_server_api_t *
12+
mongoc_server_api_new (mongoc_server_api_version_t version);
13+
14+
Create a struct to hold server API preferences.
15+
16+
Returns
17+
-------
18+
19+
A new ``mongoc_server_api_t`` you must free with :symbol:`mongoc_server_api_destroy`.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
:man_page: mongoc_server_api_strict
2+
3+
mongoc_server_api_strict()
4+
==========================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
void
12+
mongoc_server_api_strict (mongoc_server_api_t *api, bool strict);
13+
14+
Set whether to be strict about the list of allowed commands in this API version.
15+
16+
Parameters
17+
----------
18+
19+
* ``api``: A :symbol:`mongoc_server_api_t`.
20+
* ``strict``: Whether or not to be struct about the list of allowed API commands.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
:man_page: mongoc_server_api_t
2+
3+
mongoc_server_api_t
4+
===================
5+
6+
A versioned API to use for connections.
7+
8+
Synopsis
9+
--------
10+
11+
Used to specify which version of the MongoDB server's API to use for driver connections.
12+
13+
The server API type takes a :symbol:`mongoc_server_api_version_t`. It can optionally be strict about the list of allowed commands in that API version, and can also optionally provide errors for deprecated commands in that API version.
14+
15+
A :symbol:`mongoc_server_api_t` can be set on a client, and will then be sent to MongoDB for most commands run using that client.
16+
17+
.. only:: html
18+
19+
Functions
20+
---------
21+
22+
.. toctree::
23+
:titlesonly:
24+
:maxdepth: 1
25+
26+
mongoc_server_api_copy
27+
mongoc_server_api_deprecation_errors
28+
mongoc_server_api_destroy
29+
mongoc_server_api_new
30+
mongoc_server_api_strict
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
:man_page: mongoc_server_api_version_from_string
2+
3+
mongoc_server_api_version_from_string()
4+
=======================================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
bool
12+
mongoc_server_api_version_from_string (const char *version,
13+
mongoc_server_api_version_t *out);
14+
15+
Given a string ``version``, populates ``out`` with the equivalent :symbol:`mongoc_server_api_version_t` if ``version`` represents a valid API version.
16+
17+
Paremeters
18+
----------
19+
20+
* ``version``: A string representing the version identifier.
21+
* ``out``: A pointer to a :symbol:`mongoc_server_api_version_t`.
22+
23+
Returns
24+
-------
25+
26+
True on success, false on failure. On success, ``out`` is populated with the converted version string. On failure, ``out`` is not altered.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
:man_page: mongoc_server_api_version_t
2+
3+
mongoc_server_api_version_t
4+
===========================
5+
6+
A representation of server API version numbers.
7+
8+
Synopsis
9+
--------
10+
11+
Used to specify which version of the MongoDB server's API to use for driver connections.
12+
13+
Supported API Versions
14+
----------------------
15+
16+
The driver currently supports the following MongoDB API versions:
17+
18+
==================== ======================
19+
Enum value MongoDB version string
20+
==================== ======================
21+
MONGOC_SERVER_API_V1 "1"
22+
==================== ======================
23+
24+
.. only:: html
25+
26+
Functions
27+
---------
28+
29+
.. toctree::
30+
:titlesonly:
31+
:maxdepth: 1
32+
33+
mongoc_server_api_version_from_string
34+
mongoc_server_api_version_to_string
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
:man_page: mongoc_server_api_version_to_string
2+
3+
mongoc_server_api_version_to_string()
4+
=====================================
5+
6+
Synopsis
7+
--------
8+
9+
.. code-block:: c
10+
11+
const char *
12+
mongoc_server_api_version_to_string (mongoc_server_api_version_t version);
13+
14+
Returns the string representation of ``version``, or NULL if ``version`` has no string representation.
15+
16+
Parameters
17+
----------
18+
19+
* ``version``: A :symbol:`mongoc_server_api_version_t`
20+
21+
Returns
22+
-------
23+
24+
Returns the string representation of ``version`` or NULL. The returned string should not be freed.

src/libmongoc/src/mongoc/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ set (src_libmongoc_src_mongoc_DIST_hs
4545
mongoc-rand.h
4646
mongoc-read-concern.h
4747
mongoc-read-prefs.h
48+
mongoc-server-api.h
4849
mongoc-server-description.h
4950
mongoc-client-session.h
5051
mongoc-socket.h
@@ -140,6 +141,7 @@ set (src_libmongoc_src_mongoc_DIST_noinst_hs
140141
mongoc-scram-private.h
141142
mongoc-secure-channel-private.h
142143
mongoc-secure-transport-private.h
144+
mongoc-server-api-private.h
143145
mongoc-server-description-private.h
144146
mongoc-server-stream-private.h
145147
mongoc-server-monitor-private.h
@@ -228,6 +230,7 @@ set (src_libmongoc_src_mongoc_DIST_cs
228230
mongoc-read-concern.c
229231
mongoc-read-prefs.c
230232
mongoc-rpc.c
233+
mongoc-server-api.c
231234
mongoc-server-description.c
232235
mongoc-server-stream.c
233236
mongoc-client-session.c

0 commit comments

Comments
 (0)