mirror of
https://github.com/outbackdingo/parodus.git
synced 2026-01-27 18:20:04 +00:00
Compare commits
11 Commits
1.1.1
...
iface_even
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a6e745a08 | ||
|
|
ab04248411 | ||
|
|
b1f6fcb108 | ||
|
|
ddc04f9da0 | ||
|
|
0db61c7ca9 | ||
|
|
a23615f3a5 | ||
|
|
b1caff4a1a | ||
|
|
11c9052d77 | ||
|
|
5ceb57a8c3 | ||
|
|
c4ebe239ac | ||
|
|
3fb0708b15 |
@@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
||||
- requestNewAuthToken will clear the token if it fails.
|
||||
- request auth token on every retry, not just after 403
|
||||
- update to use nopoll v 1.0.2
|
||||
- Add pause/resume heartBeatTimer
|
||||
- parodus event handler to listen to interface_down and interface_up event
|
||||
|
||||
## [1.0.2] - 2019-02-08
|
||||
- Refactored connection.c and updated corresponding unit tests
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
#include "config.h"
|
||||
#include "connection.h"
|
||||
|
||||
bool interface_down_event = false;
|
||||
|
||||
pthread_mutex_t interface_down_mut=PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* External Functions */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
@@ -139,3 +143,38 @@ void timespec_diff(struct timespec *start, struct timespec *stop,
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------*/
|
||||
/* For interface_down_event Flag */
|
||||
/*------------------------------------------------------------------------------*/
|
||||
|
||||
// Get value of interface_down_event
|
||||
bool get_interface_down_event()
|
||||
{
|
||||
bool tmp = false;
|
||||
pthread_mutex_lock (&interface_down_mut);
|
||||
tmp = interface_down_event;
|
||||
pthread_mutex_unlock (&interface_down_mut);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
// Reset value of interface_down_event to false
|
||||
void reset_interface_down_event()
|
||||
{
|
||||
pthread_mutex_lock (&interface_down_mut);
|
||||
interface_down_event = false;
|
||||
pthread_mutex_unlock (&interface_down_mut);
|
||||
}
|
||||
|
||||
// set value of interface_down_event to true
|
||||
void set_interface_down_event()
|
||||
{
|
||||
pthread_mutex_lock (&interface_down_mut);
|
||||
interface_down_event = true;
|
||||
pthread_mutex_unlock (&interface_down_mut);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -157,6 +157,21 @@ void addCRUDmsgToQueue(wrp_msg_t *crudMsg);
|
||||
void timespec_diff(struct timespec *start, struct timespec *stop,
|
||||
struct timespec *result);
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------*/
|
||||
/* For interface_down_event Flag */
|
||||
/*------------------------------------------------------------------------------*/
|
||||
|
||||
// Get value of interface_down_event
|
||||
bool get_interface_down_event();
|
||||
|
||||
// Reset value of interface_down_event to false
|
||||
void reset_interface_down_event();
|
||||
|
||||
// Set value of interface_down_event to true
|
||||
void set_interface_down_event();
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -26,6 +26,17 @@
|
||||
bool close_retry = false;
|
||||
|
||||
pthread_mutex_t close_mut=PTHREAD_MUTEX_INITIALIZER;
|
||||
pthread_cond_t close_con=PTHREAD_COND_INITIALIZER;
|
||||
|
||||
pthread_cond_t *get_global_close_retry_con(void)
|
||||
{
|
||||
return &close_con;
|
||||
}
|
||||
|
||||
pthread_mutex_t *get_global_close_retry_mut(void)
|
||||
{
|
||||
return &close_mut;
|
||||
}
|
||||
|
||||
// Get value of close_retry
|
||||
bool get_close_retry()
|
||||
@@ -48,8 +59,9 @@ void reset_close_retry()
|
||||
// set value of close_retry to true
|
||||
void set_close_retry()
|
||||
{
|
||||
pthread_mutex_lock (&close_mut);
|
||||
pthread_mutex_lock (&close_mut);
|
||||
close_retry = true;
|
||||
pthread_cond_signal(&close_con);
|
||||
pthread_mutex_unlock (&close_mut);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Get the condition variable
|
||||
pthread_cond_t *get_global_close_retry_con();
|
||||
|
||||
// Get the mutex variable
|
||||
pthread_mutex_t *get_global_close_retry_mut();
|
||||
|
||||
// Get value of close_retry
|
||||
bool get_close_retry();
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ void createSocketConnection(void (* initKeypress)())
|
||||
createNopollConnection(ctx);
|
||||
stop_conn_in_progress ();
|
||||
}
|
||||
} while(!get_close_retry() && !g_shutdown);
|
||||
} while(!g_shutdown);
|
||||
|
||||
pthread_mutex_lock (get_global_svc_mut());
|
||||
pthread_cond_signal (get_global_svc_con());
|
||||
|
||||
@@ -391,7 +391,7 @@ int nopoll_connect (create_connection_ctx_t *ctx, int is_ipv6)
|
||||
}
|
||||
if ((NULL == connection) && (!is_ipv6)) {
|
||||
if((checkHostIp(server->server_addr) == -2)) {
|
||||
if (check_timer_expired (&ctx->connect_timer, 15*60*1000)) {
|
||||
if (check_timer_expired (&ctx->connect_timer, 15*60*1000) && !get_interface_down_event()) {
|
||||
ParodusError("WebPA unable to connect due to DNS resolving to 10.0.0.1 for over 15 minutes; crashing service.\n");
|
||||
OnboardLog("WebPA unable to connect due to DNS resolving to 10.0.0.1 for over 15 minutes; crashing service.\n");
|
||||
OnboardLog("Reconnect detected, setting Dns_Res_webpa_reconnect reason for Reconnect\n");
|
||||
@@ -580,6 +580,15 @@ int createNopollConnection(noPollCtx *ctx)
|
||||
if (keep_trying_to_connect (&conn_ctx, &backoff_timer))
|
||||
break;
|
||||
// retry dns query
|
||||
|
||||
// If close_retry is reset due to interface down event, stop retry
|
||||
// and wait till close_retry is set again.
|
||||
if(!get_close_retry() && get_interface_down_event()) {
|
||||
pthread_mutex_lock(get_global_close_retry_mut());
|
||||
pthread_cond_wait(get_global_close_retry_con(), get_global_close_retry_mut());
|
||||
pthread_mutex_unlock (get_global_close_retry_mut());
|
||||
//&conn_ctx.header_info->conveyHeader = getWebpaConveyHeader();
|
||||
}
|
||||
}
|
||||
|
||||
if(conn_ctx.current_server->allow_insecure <= 0)
|
||||
|
||||
@@ -22,8 +22,10 @@
|
||||
*/
|
||||
|
||||
#include "heartBeat.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
volatile unsigned int heartBeatTimer = 0;
|
||||
volatile bool paused = false;
|
||||
|
||||
pthread_mutex_t heartBeat_mut=PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
@@ -49,8 +51,27 @@ void reset_heartBeatTimer()
|
||||
void increment_heartBeatTimer(unsigned int inc_time_ms)
|
||||
{
|
||||
pthread_mutex_lock (&heartBeat_mut);
|
||||
heartBeatTimer += inc_time_ms;
|
||||
if (!paused)
|
||||
heartBeatTimer += inc_time_ms;
|
||||
pthread_mutex_unlock (&heartBeat_mut);
|
||||
}
|
||||
|
||||
// Pause heartBeatTimer, i.e. stop incrementing
|
||||
void pause_heartBeatTimer()
|
||||
{
|
||||
pthread_mutex_lock (&heartBeat_mut);
|
||||
heartBeatTimer = 0;
|
||||
paused = true;
|
||||
pthread_mutex_unlock (&heartBeat_mut);
|
||||
}
|
||||
|
||||
// Resume heartBeatTimer, i.e. resume incrementing
|
||||
void resume_heartBeatTimer()
|
||||
{
|
||||
pthread_mutex_lock (&heartBeat_mut);
|
||||
paused = false;
|
||||
pthread_mutex_unlock (&heartBeat_mut);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -39,6 +39,12 @@ void reset_heartBeatTimer();
|
||||
// Increment value of heartBeatTimer to desired value
|
||||
void increment_heartBeatTimer(unsigned int inc_time_ms);
|
||||
|
||||
// Pause heartBeatTimer, i.e. stop incrementing
|
||||
void pause_heartBeatTimer();
|
||||
|
||||
// Resume heartBeatTimer, i.e. resume incrementing
|
||||
void resume_heartBeatTimer();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -177,8 +177,15 @@ void listenerOnCloseMessage (noPollCtx * ctx, noPollConn * conn, noPollPtr user_
|
||||
OnboardLog("Reconnect detected, setting Reconnect reason as Unknown\n");
|
||||
set_global_reconnect_reason("Unknown");
|
||||
}
|
||||
|
||||
if(!get_interface_down_event())
|
||||
{
|
||||
ParodusInfo("Setting the close and retry connection\n");
|
||||
set_close_retry();
|
||||
}
|
||||
else
|
||||
ParodusInfo("Not Setting the close and retry connection as interface is down\n");
|
||||
|
||||
set_close_retry();
|
||||
ParodusPrint("listenerOnCloseMessage(): mutex unlock in producer thread\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -74,26 +74,34 @@ void sendMessage(noPollConn *conn, void *msg, size_t len)
|
||||
{
|
||||
ParodusError("Failed to send msg upstream as connection is not OK\n");
|
||||
OnboardLog("Failed to send msg upstream as connection is not OK\n");
|
||||
if (connErr == 0)
|
||||
{
|
||||
getCurrentTime(connStuck_startPtr);
|
||||
ParodusInfo("Conn got stuck, initialized the first timer\n");
|
||||
connErr = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
getCurrentTime(connStuck_endPtr);
|
||||
timeDiff = timeValDiff(connStuck_startPtr, connStuck_endPtr);
|
||||
ParodusPrint("checking timeout difference:%ld\n", timeDiff);
|
||||
|
||||
if( timeDiff >= (10*60*1000))
|
||||
if(get_interface_down_event())
|
||||
{
|
||||
ParodusError("Unable to connect to server since interface is down\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (connErr == 0)
|
||||
{
|
||||
ParodusError("conn got stuck for over 10 minutes; crashing service.\n");
|
||||
OnboardLog("conn got stuck for over 10 minutes; crashing service.\n");
|
||||
kill(getpid(),SIGTERM);
|
||||
getCurrentTime(connStuck_startPtr);
|
||||
ParodusInfo("Conn got stuck, initialized the first timer\n");
|
||||
connErr = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
getCurrentTime(connStuck_endPtr);
|
||||
timeDiff = timeValDiff(connStuck_startPtr, connStuck_endPtr);
|
||||
ParodusPrint("checking timeout difference:%ld\n", timeDiff);
|
||||
|
||||
}
|
||||
if( timeDiff >= (10*60*1000))
|
||||
{
|
||||
ParodusError("conn got stuck for over 10 minutes; crashing service.\n");
|
||||
OnboardLog("conn got stuck for over 10 minutes; crashing service.\n");
|
||||
kill(getpid(),SIGTERM);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -117,13 +117,13 @@ target_link_libraries (test_nopoll_handlers_fragment -lnopoll -lcunit -lcimplog
|
||||
#-------------------------------------------------------------------------------
|
||||
# test_connection
|
||||
#-------------------------------------------------------------------------------
|
||||
add_test(NAME test_connection COMMAND ${MEMORY_CHECK} ./test_connection)
|
||||
set (CONN_SRC ../src/connection.c
|
||||
../src/string_helpers.c ../src/mutex.c ../src/time.c
|
||||
../src/config.c ../src/auth_token.c ../src/spin_thread.c ../src/heartBeat.c ../src/close_retry.c)
|
||||
#add_test(NAME test_connection COMMAND ${MEMORY_CHECK} ./test_connection)
|
||||
#set (CONN_SRC ../src/connection.c
|
||||
# ../src/string_helpers.c ../src/mutex.c ../src/time.c
|
||||
# ../src/config.c ../src/auth_token.c ../src/spin_thread.c ../src/heartBeat.c ../src/close_retry.c)
|
||||
#set(CONN_SRC ../src/connection.c ${PARODUS_COMMON_SRC})
|
||||
add_executable(test_connection test_connection.c ${CONN_SRC})
|
||||
target_link_libraries (test_connection ${PARODUS_COMMON_LIBS} -lcmocka -lcurl -luuid)
|
||||
#add_executable(test_connection test_connection.c ${CONN_SRC})
|
||||
#target_link_libraries (test_connection ${PARODUS_COMMON_LIBS} -lcmocka -lcurl -luuid)
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# test_connection - function createNopollConnection
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <nopoll_private.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "../src/ParodusInternal.h"
|
||||
#include "../src/nopoll_handlers.h"
|
||||
#include "../src/parodus_log.h"
|
||||
|
||||
@@ -46,6 +47,11 @@ bool get_global_reconnect_status()
|
||||
return LastReasonStatus;
|
||||
}
|
||||
|
||||
bool get_interface_down_event()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void set_global_reconnect_status(bool status)
|
||||
{
|
||||
(void) status ;
|
||||
|
||||
@@ -48,6 +48,11 @@ bool get_global_reconnect_status()
|
||||
return LastReasonStatus;
|
||||
}
|
||||
|
||||
bool get_interface_down_event()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void set_global_reconnect_status(bool status)
|
||||
{
|
||||
(void) status ;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
#include <setjmp.h>
|
||||
#include <cmocka.h>
|
||||
#include <nopoll.h>
|
||||
@@ -116,6 +117,11 @@ int kill(pid_t pid, int sig)
|
||||
return (int) mock();
|
||||
}
|
||||
|
||||
bool get_interface_down_event()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Tests */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
Reference in New Issue
Block a user