summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8c08b69)
raw | patch | inline | side by side (parent: 8c08b69)
author | Florian Forster <octo@collectd.org> | |
Fri, 9 Mar 2012 15:58:15 +0000 (16:58 +0100) | ||
committer | Florian Forster <octo@collectd.org> | |
Fri, 9 Mar 2012 15:58:15 +0000 (16:58 +0100) |
The previous code would never detect a disconnect and act appropriately. In the
process, manual tracking of the connection state is removed in favor of
mongo_is_connected().
process, manual tracking of the connection state is removed in favor of
mongo_is_connected().
src/write_mongodb.c | patch | blob | history |
diff --git a/src/write_mongodb.c b/src/write_mongodb.c
index 9939c914e124e4c66a2868bd54453156c3b8e4f4..8d76b608affa4c58d1a3c23cfbeda4f16cc8f5bc 100644 (file)
--- a/src/write_mongodb.c
+++ b/src/write_mongodb.c
int port;
int timeout;
- int connected;
-
_Bool store_rates;
mongo conn[1];
pthread_mutex_lock (&node->lock);
- if (node->connected == 0)
+ if (!mongo_is_connected (node->conn))
{
- status = mongo_connect(node->conn, node->host, node->port);
+ INFO ("write_mongodb plugin: Connecting to [%s]:%i",
+ (node->host != NULL) ? node->host : "localhost",
+ (node->port != 0) ? node->port : MONGO_DEFAULT_PORT);
+ status = mongo_connect (node->conn, node->host, node->port);
if (status != MONGO_OK) {
- ERROR ("write_mongodb plugin: Connecting to host \"%s\" (port %i) failed.",
+ ERROR ("write_mongodb plugin: Connecting to [%s]:%i failed.",
(node->host != NULL) ? node->host : "localhost",
(node->port != 0) ? node->port : MONGO_DEFAULT_PORT);
- mongo_destroy(node->conn);
+ mongo_destroy (node->conn);
pthread_mutex_unlock (&node->lock);
return (-1);
}
node->timeout, node->conn->errstr);
}
}
-
- node->connected = 1;
}
/* Assert if the connection has been established */
- assert (node->connected == 1);
+ assert (mongo_is_connected (node->conn));
status = mongo_insert (node->conn, collection_name, bson_record);
if(status != MONGO_OK)
{
ERROR ( "write_mongodb plugin: error inserting record: %d", node->conn->err);
- if (node->conn->err == MONGO_BSON_INVALID)
+ if (node->conn->err != MONGO_BSON_INVALID)
ERROR ("write_mongodb plugin: %s", node->conn->errstr);
else if (bson_record->err)
ERROR ("write_mongodb plugin: %s", bson_record->errstr);
+
+ /* Disconnect except on data errors. */
+ if ((node->conn->err != MONGO_BSON_INVALID)
+ && (node->conn->err != MONGO_BSON_NOT_FINISHED))
+ mongo_destroy (node->conn);
}
pthread_mutex_unlock (&node->lock);
if (node == NULL)
return;
- if (node->connected != 0)
- {
- mongo_destroy(node->conn);
- node->connected = 0;
- }
+ if (mongo_is_connected (node->conn))
+ mongo_destroy (node->conn);
sfree (node->host);
sfree (node);
if (node == NULL)
return (ENOMEM);
memset (node, 0, sizeof (*node));
+ mongo_init (node->conn);
node->host = NULL;
node->store_rates = 1;
pthread_mutex_init (&node->lock, /* attr = */ NULL);