Skip to content

Commit f5a0596

Browse files
committed
CDRIVER-1193: Expose mongoc_server_description_type_t enum
This changes mongoc_server_description_type() to return the enum value instead of a string.
1 parent 44e80da commit f5a0596

6 files changed

+80
-68
lines changed

doc/mongoc_server_description_type.page

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<section id="synopsis">
1414
<title>Synopsis</title>
15-
<synopsis><code mime="text/x-csrc"><![CDATA[const char *
15+
<synopsis><code mime="text/x-csrc"><![CDATA[mongoc_server_description_type_t
1616
mongoc_server_description_type (const mongoc_server_description_t *description);
1717
1818
]]></code></synopsis>
@@ -27,18 +27,12 @@ mongoc_server_description_type (const mongoc_server_description_t *description);
2727

2828
<section id="description">
2929
<title>Description</title>
30-
<p>This function returns a string, one of the server types defined Server Discovery And Monitoring Spec:</p>
31-
<list>
32-
<item><p>Standalone</p></item>
33-
<item><p>Mongos</p></item>
34-
<item><p>PossiblePrimary</p></item>
35-
<item><p>RSPrimary</p></item>
36-
<item><p>RSSecondary</p></item>
37-
<item><p>RSArbiter</p></item>
38-
<item><p>RSOther</p></item>
39-
<item><p>RSGhost</p></item>
40-
<item><p>Unknown</p></item>
41-
</list>
30+
<p>Returns the <code xref="mongoc_server_description_type_t">mongoc_server_description_type_t</code> for the server.</p>
31+
</section>
32+
33+
<section id="return">
34+
<title>Returns</title>
35+
<p>Returns the server type.</p>
4236
</section>
4337

4438
</page>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?xml version="1.0"?>
2+
3+
<page id="mongoc_server_description_type_t"
4+
type="guide"
5+
style="class"
6+
xmlns="http://projectmallard.org/1.0/"
7+
xmlns:api="http://projectmallard.org/experimental/api/"
8+
xmlns:ui="http://projectmallard.org/experimental/ui/">
9+
<info>
10+
<link type="guide" xref="index#api-reference" />
11+
</info>
12+
<title>mongoc_server_description_type_t</title>
13+
<subtitle>Server description types</subtitle>
14+
15+
<section id="synopsis">
16+
<title>Synopsis</title>
17+
<synopsis><code mime="text/x-csrc"><![CDATA[typedef enum
18+
{
19+
MONGOC_SERVER_UNKNOWN,
20+
MONGOC_SERVER_STANDALONE,
21+
MONGOC_SERVER_MONGOS,
22+
MONGOC_SERVER_POSSIBLE_PRIMARY,
23+
MONGOC_SERVER_RS_PRIMARY,
24+
MONGOC_SERVER_RS_SECONDARY,
25+
MONGOC_SERVER_RS_ARBITER,
26+
MONGOC_SERVER_RS_OTHER,
27+
MONGOC_SERVER_RS_GHOST,
28+
} mongoc_server_description_type_t;]]></code></synopsis>
29+
</section>
30+
31+
<section id="description">
32+
<title>Description</title>
33+
<p>This enum describes server types, which are defined in the Server Discovery And Monitoring Spec.</p>
34+
</section>
35+
36+
</page>

src/mongoc/mongoc-server-description-private.h

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,9 @@
2828
/* represent a server or topology with no replica set config version */
2929
#define MONGOC_NO_SET_VERSION -1
3030

31-
typedef enum
32-
{
33-
MONGOC_SERVER_UNKNOWN,
34-
MONGOC_SERVER_STANDALONE,
35-
MONGOC_SERVER_MONGOS,
36-
MONGOC_SERVER_POSSIBLE_PRIMARY,
37-
MONGOC_SERVER_RS_PRIMARY,
38-
MONGOC_SERVER_RS_SECONDARY,
39-
MONGOC_SERVER_RS_ARBITER,
40-
MONGOC_SERVER_RS_OTHER,
41-
MONGOC_SERVER_RS_GHOST,
42-
MONGOC_SERVER_DESCRIPTION_TYPES,
43-
} mongoc_server_description_type_t;
31+
/* this is used for declaring gSDAMTransitionTable and should be defined as the
32+
* number of unique states in mongoc_server_description_type_t */
33+
#define MONGOC_SERVER_DESCRIPTION_TYPES 9
4434

4535
struct _mongoc_server_description_t
4636
{
@@ -104,6 +94,7 @@ mongoc_server_description_set_set_version (mongoc_server_description_t *descript
10494
void
10595
mongoc_server_description_set_election_id (mongoc_server_description_t *description,
10696
const bson_oid_t *election_id);
97+
10798
void
10899
mongoc_server_description_update_rtt (mongoc_server_description_t *server,
109100
int64_t new_time);

src/mongoc/mongoc-server-description.c

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -299,38 +299,15 @@ mongoc_server_description_round_trip_time (mongoc_server_description_t *descript
299299
* Discovery And Monitoring Spec.
300300
*
301301
* Returns:
302-
* A string.
302+
* A mongoc_server_description_type_t, this server's type.
303303
*
304304
*--------------------------------------------------------------------------
305305
*/
306306

307-
const char *
308-
mongoc_server_description_type (mongoc_server_description_t *description)
307+
mongoc_server_description_type_t
308+
mongoc_server_description_type (const mongoc_server_description_t *description)
309309
{
310-
switch (description->type) {
311-
case MONGOC_SERVER_UNKNOWN:
312-
return "Unknown";
313-
case MONGOC_SERVER_STANDALONE:
314-
return "Standalone";
315-
case MONGOC_SERVER_MONGOS:
316-
return "Mongos";
317-
case MONGOC_SERVER_POSSIBLE_PRIMARY:
318-
return "PossiblePrimary";
319-
case MONGOC_SERVER_RS_PRIMARY:
320-
return "RSPrimary";
321-
case MONGOC_SERVER_RS_SECONDARY:
322-
return "RSSecondary";
323-
case MONGOC_SERVER_RS_ARBITER:
324-
return "RSArbiter";
325-
case MONGOC_SERVER_RS_OTHER:
326-
return "RSOther";
327-
case MONGOC_SERVER_RS_GHOST:
328-
return "RSGhost";
329-
case MONGOC_SERVER_DESCRIPTION_TYPES:
330-
default:
331-
MONGOC_ERROR ("Invalid mongoc_server_description_t type\n");
332-
return "Invalid";
333-
}
310+
return description->type;
334311
}
335312

336313
/*

src/mongoc/mongoc-server-description.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@
2222
#include "mongoc-read-prefs.h"
2323
#include "mongoc-host-list.h"
2424

25+
typedef enum
26+
{
27+
MONGOC_SERVER_UNKNOWN,
28+
MONGOC_SERVER_STANDALONE,
29+
MONGOC_SERVER_MONGOS,
30+
MONGOC_SERVER_POSSIBLE_PRIMARY,
31+
MONGOC_SERVER_RS_PRIMARY,
32+
MONGOC_SERVER_RS_SECONDARY,
33+
MONGOC_SERVER_RS_ARBITER,
34+
MONGOC_SERVER_RS_OTHER,
35+
MONGOC_SERVER_RS_GHOST,
36+
/* Update MONGOC_SERVER_DESCRIPTION_TYPES when extending this enum */
37+
} mongoc_server_description_type_t;
38+
2539
typedef struct _mongoc_server_description_t mongoc_server_description_t;
2640

2741
void
@@ -39,8 +53,8 @@ mongoc_server_description_host (mongoc_server_description_t *description);
3953
int64_t
4054
mongoc_server_description_round_trip_time (mongoc_server_description_t *description);
4155

42-
const char *
43-
mongoc_server_description_type (mongoc_server_description_t *description);
56+
mongoc_server_description_type_t
57+
mongoc_server_description_type (const mongoc_server_description_t *description);
4458

4559
const bson_t *
4660
mongoc_server_description_ismaster (mongoc_server_description_t *description);

tests/test-mongoc-client.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,7 +1356,7 @@ _test_mongoc_client_select_server (bool pooled)
13561356
mongoc_client_t *client;
13571357
mongoc_client_pool_t *pool = NULL;
13581358
mongoc_server_description_t *sd;
1359-
const char *server_type;
1359+
mongoc_server_description_type_t server_type;
13601360
bson_error_t error;
13611361
mongoc_read_prefs_t *prefs;
13621362

@@ -1374,9 +1374,9 @@ _test_mongoc_client_select_server (bool pooled)
13741374

13751375
ASSERT (sd);
13761376
server_type = mongoc_server_description_type (sd);
1377-
ASSERT (!strcmp (server_type, "Standalone") ||
1378-
!strcmp (server_type, "RSPrimary") ||
1379-
!strcmp (server_type, "Mongos"));
1377+
ASSERT (server_type != MONGOC_SERVER_STANDALONE ||
1378+
server_type != MONGOC_SERVER_RS_PRIMARY ||
1379+
server_type != MONGOC_SERVER_MONGOS);
13801380

13811381
mongoc_server_description_destroy (sd);
13821382
sd = mongoc_client_select_server (client,
@@ -1386,9 +1386,9 @@ _test_mongoc_client_select_server (bool pooled)
13861386

13871387
ASSERT (sd);
13881388
server_type = mongoc_server_description_type (sd);
1389-
ASSERT (!strcmp (server_type, "Standalone") ||
1390-
!strcmp (server_type, "RSPrimary") ||
1391-
!strcmp (server_type, "Mongos"));
1389+
ASSERT (server_type != MONGOC_SERVER_STANDALONE ||
1390+
server_type != MONGOC_SERVER_RS_PRIMARY ||
1391+
server_type != MONGOC_SERVER_MONGOS);
13921392

13931393
mongoc_server_description_destroy (sd);
13941394
prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY);
@@ -1399,9 +1399,9 @@ _test_mongoc_client_select_server (bool pooled)
13991399

14001400
ASSERT (sd);
14011401
server_type = mongoc_server_description_type (sd);
1402-
ASSERT (!strcmp (server_type, "Standalone") ||
1403-
!strcmp (server_type, "RSSecondary") ||
1404-
!strcmp (server_type, "Mongos"));
1402+
ASSERT (server_type != MONGOC_SERVER_STANDALONE ||
1403+
server_type != MONGOC_SERVER_RS_SECONDARY ||
1404+
server_type != MONGOC_SERVER_MONGOS);
14051405

14061406
mongoc_server_description_destroy (sd);
14071407
mongoc_read_prefs_destroy (prefs);
@@ -1438,7 +1438,7 @@ _test_mongoc_client_select_server_error (bool pooled)
14381438
mongoc_server_description_t *sd;
14391439
bson_error_t error;
14401440
mongoc_read_prefs_t *prefs;
1441-
const char *server_type;
1441+
mongoc_server_description_type_t server_type;
14421442

14431443
if (pooled) {
14441444
uri = test_framework_get_uri ();
@@ -1474,8 +1474,8 @@ _test_mongoc_client_select_server_error (bool pooled)
14741474
if (client->topology->description.type == MONGOC_TOPOLOGY_SINGLE) {
14751475
ASSERT (sd);
14761476
server_type = mongoc_server_description_type (sd);
1477-
ASSERT (!strcmp (server_type, "Standalone") ||
1478-
!strcmp (server_type, "Mongos"));
1477+
ASSERT (server_type != MONGOC_SERVER_STANDALONE ||
1478+
server_type != MONGOC_SERVER_MONGOS);
14791479
mongoc_server_description_destroy (sd);
14801480
} else {
14811481
ASSERT (!sd);

0 commit comments

Comments
 (0)