From: Florian Forster Date: Wed, 16 Dec 2009 09:45:54 +0000 (+0100) Subject: oracle plugin: Check the connection status and reconnect if required. X-Git-Tag: collectd-4.7.5~3 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=f3aa145da46d4acc19cfcb105716ff9c0cf41cbe;p=collectd.git oracle plugin: Check the connection status and reconnect if required. --- diff --git a/src/oracle.c b/src/oracle.c index 78a09ffd..49cf6571 100644 --- a/src/oracle.c +++ b/src/oracle.c @@ -598,6 +598,41 @@ static int o_read_database (o_database_t *db) /* {{{ */ size_t i; int status; + if (db->oci_service_context != NULL) + { + OCIServer *server_handle; + ub4 connection_status; + + server_handle = NULL; + status = OCIAttrGet ((void *) db->oci_service_context, OCI_HTYPE_SVCCTX, + (void *) &server_handle, /* size pointer = */ NULL, + OCI_ATTR_SERVER, oci_error); + if (status != OCI_SUCCESS) + { + o_report_error ("o_read_database", "OCIAttrGet", oci_error); + return (-1); + } + assert (server_handle != NULL); + + connection_status = 0; + status = OCIAttrGet ((void *) server_handle, OCI_HTYPE_SERVER, + (void *) &connection_status, /* size pointer = */ NULL, + OCI_ATTR_SERVER_STATUS, oci_error); + if (status != OCI_SUCCESS) + { + o_report_error ("o_read_database", "OCIAttrGet", oci_error); + return (-1); + } + + if (connection_status != OCI_SERVER_NORMAL) + { + INFO ("oracle plugin: Connection to %s lost. Trying to reconnect.", + db->name); + OCIHandleFree (db->oci_service_context, OCI_HTYPE_SVCCTX); + db->oci_service_context = NULL; + } + } /* if (db->oci_service_context != NULL) */ + if (db->oci_service_context == NULL) { status = OCILogon (oci_env, oci_error,