Add callback function for request by CollectBasicUsageStatistics().

Curl writes the received response to stdout if we don't specify a response
callback or an output file. This can pollute the PostgreSQL log. In this change
we add a callback function so the response messages aren't added to the log file.
pull/1751/head
Hadi Moshayedi 2017-10-31 21:29:28 -04:00 committed by Hadi Moshayedi
parent 747e439601
commit acaf085a80
1 changed files with 22 additions and 4 deletions

View File

@ -42,6 +42,8 @@ PG_FUNCTION_INFO_V1(citus_server_id);
#include "utils/fmgrprotos.h" #include "utils/fmgrprotos.h"
#endif #endif
static size_t StatisticsCallback(char *contents, size_t size, size_t count,
void *userData);
static size_t CheckForUpdatesCallback(char *contents, size_t size, size_t count, static size_t CheckForUpdatesCallback(char *contents, size_t size, size_t count,
void *userData); void *userData);
static bool JsonbFieldInt32(Jsonb *jsonb, const char *fieldName, int32 *result); static bool JsonbFieldInt32(Jsonb *jsonb, const char *fieldName, int32 *result);
@ -50,7 +52,8 @@ static uint64 NextPow2(uint64 n);
static uint64 DistributedTablesSize(List *distTableOids); static uint64 DistributedTablesSize(List *distTableOids);
static bool UrlEncode(StringInfo buf, const char *str); static bool UrlEncode(StringInfo buf, const char *str);
static bool SendHttpPostJsonRequest(const char *url, const char *postFields, static bool SendHttpPostJsonRequest(const char *url, const char *postFields,
long timeoutSeconds); long timeoutSeconds,
curl_write_callback responseCallback);
static bool SendHttpGetJsonRequest(const char *url, long timeoutSeconds, static bool SendHttpGetJsonRequest(const char *url, long timeoutSeconds,
curl_write_callback responseCallback); curl_write_callback responseCallback);
static bool PerformHttpRequest(CURL *curl); static bool PerformHttpRequest(CURL *curl);
@ -145,7 +148,20 @@ CollectBasicUsageStatistics(void)
appendStringInfoString(fields, "}"); appendStringInfoString(fields, "}");
return SendHttpPostJsonRequest(STATS_COLLECTION_HOST "/v1/usage_reports", return SendHttpPostJsonRequest(STATS_COLLECTION_HOST "/v1/usage_reports",
fields->data, HTTP_TIMEOUT_SECONDS); fields->data, HTTP_TIMEOUT_SECONDS,
StatisticsCallback);
}
/*
* StatisticsCallback receives the response for the request sent by
* CollectBasicUsageStatistics. For now, it doesn't check the contents of the
* response and succeeds for any response.
*/
static size_t
StatisticsCallback(char *contents, size_t size, size_t count, void *userData)
{
return size * count;
} }
@ -424,10 +440,11 @@ UrlEncode(StringInfo buf, const char *str)
/* /*
* SendHttpPostJsonRequest sends a HTTP/HTTPS POST request to the given URL with * SendHttpPostJsonRequest sends a HTTP/HTTPS POST request to the given URL with
* the given json object. * the given json object. responseCallback is called with the content of response.
*/ */
static bool static bool
SendHttpPostJsonRequest(const char *url, const char *jsonObj, long timeoutSeconds) SendHttpPostJsonRequest(const char *url, const char *jsonObj, long timeoutSeconds,
curl_write_callback responseCallback)
{ {
bool success = false; bool success = false;
CURL *curl = NULL; CURL *curl = NULL;
@ -445,6 +462,7 @@ SendHttpPostJsonRequest(const char *url, const char *jsonObj, long timeoutSecond
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonObj); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonObj);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeoutSeconds); curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeoutSeconds);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, responseCallback);
success = PerformHttpRequest(curl); success = PerformHttpRequest(curl);