Merge pull request #16248 from taosdata/fix/httpReportBugf
fix http report
This commit is contained in:
commit
48a2510a2e
|
@ -21,11 +21,14 @@
|
||||||
#include "taoserror.h"
|
#include "taoserror.h"
|
||||||
#include "tlog.h"
|
#include "tlog.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define HTTP_RECV_BUF_SIZE 1024
|
||||||
typedef struct SHttpClient {
|
typedef struct SHttpClient {
|
||||||
uv_connect_t conn;
|
uv_connect_t conn;
|
||||||
uv_tcp_t tcp;
|
uv_tcp_t tcp;
|
||||||
uv_write_t req;
|
uv_write_t req;
|
||||||
uv_buf_t* buf;
|
uv_buf_t* wbuf;
|
||||||
|
char *rbuf;
|
||||||
char* addr;
|
char* addr;
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
} SHttpClient;
|
} SHttpClient;
|
||||||
|
@ -122,14 +125,30 @@ _OVER:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void destroyHttpClient(SHttpClient* cli) {
|
static void destroyHttpClient(SHttpClient* cli) {
|
||||||
taosMemoryFree(cli->buf);
|
taosMemoryFree(cli->wbuf);
|
||||||
|
taosMemoryFree(cli->rbuf);
|
||||||
taosMemoryFree(cli->addr);
|
taosMemoryFree(cli->addr);
|
||||||
taosMemoryFree(cli);
|
taosMemoryFree(cli);
|
||||||
|
|
||||||
}
|
}
|
||||||
static void clientCloseCb(uv_handle_t* handle) {
|
static void clientCloseCb(uv_handle_t* handle) {
|
||||||
SHttpClient* cli = handle->data;
|
SHttpClient* cli = handle->data;
|
||||||
destroyHttpClient(cli);
|
destroyHttpClient(cli);
|
||||||
}
|
}
|
||||||
|
static void clientAllocBuffCb(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) {
|
||||||
|
SHttpClient* cli = handle->data;
|
||||||
|
buf->base = cli->rbuf;
|
||||||
|
buf->len = HTTP_RECV_BUF_SIZE;
|
||||||
|
}
|
||||||
|
static void clientRecvCb(uv_stream_t* handle, ssize_t nread, const uv_buf_t *buf) {
|
||||||
|
SHttpClient* cli = handle->data;
|
||||||
|
if (nread < 0) {
|
||||||
|
uError("http-report read error:%s", uv_err_name(nread));
|
||||||
|
} else {
|
||||||
|
uInfo("http-report succ to read %d bytes, just ignore it", nread);
|
||||||
|
}
|
||||||
|
uv_close((uv_handle_t*)&cli->tcp, clientCloseCb);
|
||||||
|
}
|
||||||
static void clientSentCb(uv_write_t* req, int32_t status) {
|
static void clientSentCb(uv_write_t* req, int32_t status) {
|
||||||
SHttpClient* cli = req->data;
|
SHttpClient* cli = req->data;
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
|
@ -138,7 +157,7 @@ static void clientSentCb(uv_write_t* req, int32_t status) {
|
||||||
} else {
|
} else {
|
||||||
uInfo("http-report succ to send data");
|
uInfo("http-report succ to send data");
|
||||||
}
|
}
|
||||||
uv_close((uv_handle_t*)&cli->tcp, clientCloseCb);
|
uv_read_start((uv_stream_t *)&cli->tcp, clientAllocBuffCb, clientRecvCb);
|
||||||
}
|
}
|
||||||
static void clientConnCb(uv_connect_t* req, int32_t status) {
|
static void clientConnCb(uv_connect_t* req, int32_t status) {
|
||||||
SHttpClient* cli = req->data;
|
SHttpClient* cli = req->data;
|
||||||
|
@ -148,7 +167,7 @@ static void clientConnCb(uv_connect_t* req, int32_t status) {
|
||||||
uv_close((uv_handle_t*)&cli->tcp, clientCloseCb);
|
uv_close((uv_handle_t*)&cli->tcp, clientCloseCb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uv_write(&cli->req, (uv_stream_t*)&cli->tcp, cli->buf, 2, clientSentCb);
|
uv_write(&cli->req, (uv_stream_t*)&cli->tcp, cli->wbuf, 2, clientSentCb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t taosBuildDstAddr(const char* server, uint16_t port, struct sockaddr_in* dest) {
|
static int32_t taosBuildDstAddr(const char* server, uint16_t port, struct sockaddr_in* dest) {
|
||||||
|
@ -189,7 +208,8 @@ int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32
|
||||||
cli->conn.data = cli;
|
cli->conn.data = cli;
|
||||||
cli->tcp.data = cli;
|
cli->tcp.data = cli;
|
||||||
cli->req.data = cli;
|
cli->req.data = cli;
|
||||||
cli->buf = wb;
|
cli->wbuf = wb;
|
||||||
|
cli->rbuf = taosMemoryCalloc(1, HTTP_RECV_BUF_SIZE);
|
||||||
cli->addr = tstrdup(server);
|
cli->addr = tstrdup(server);
|
||||||
cli->port = port;
|
cli->port = port;
|
||||||
|
|
||||||
|
@ -199,7 +219,6 @@ int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32
|
||||||
int32_t fd = taosCreateSocketWithTimeout(5);
|
int32_t fd = taosCreateSocketWithTimeout(5);
|
||||||
uv_tcp_open((uv_tcp_t*)&cli->tcp, fd);
|
uv_tcp_open((uv_tcp_t*)&cli->tcp, fd);
|
||||||
|
|
||||||
|
|
||||||
int32_t ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&dest, clientConnCb);
|
int32_t ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&dest, clientConnCb);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
uError("http-report failed to connect to server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port);
|
uError("http-report failed to connect to server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port);
|
||||||
|
|
Loading…
Reference in New Issue