Move retry delay calculation into wakeup, since it's only used there.
This commit is contained in:
@@ -11,7 +11,6 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "rand.h"
|
|
||||||
#include "uuid.h"
|
#include "uuid.h"
|
||||||
#include "wakeup.h"
|
#include "wakeup.h"
|
||||||
|
|
||||||
@@ -229,16 +228,3 @@ void hex_from_int_upper(char *out, uint64_t in, size_t bytes) {
|
|||||||
void hex_from_int_lower(char *out, uint64_t in, size_t bytes) {
|
void hex_from_int_lower(char *out, uint64_t in, size_t bytes) {
|
||||||
hex_from_int(out, in, bytes, hex_lower_table);
|
hex_from_int(out, in, bytes, hex_lower_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define RETRY_MIN_MS 2000
|
|
||||||
#define RETRY_MAX_MS 60000
|
|
||||||
uint32_t retry_get_delay_ms(uint32_t attempt) {
|
|
||||||
uint32_t max_delay = RETRY_MIN_MS * (1 << attempt);
|
|
||||||
max_delay = max_delay > RETRY_MAX_MS ? RETRY_MAX_MS : max_delay;
|
|
||||||
|
|
||||||
uint32_t jitter;
|
|
||||||
rand_fill(&jitter, sizeof(jitter));
|
|
||||||
|
|
||||||
return jitter % max_delay;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -87,10 +87,3 @@ void hex_from_bin_upper(char *, const uint8_t *, size_t);
|
|||||||
void hex_from_bin_lower(char *, const uint8_t *, size_t);
|
void hex_from_bin_lower(char *, const uint8_t *, size_t);
|
||||||
void hex_from_int_upper(char *, uint64_t, size_t);
|
void hex_from_int_upper(char *, uint64_t, size_t);
|
||||||
void hex_from_int_lower(char *, uint64_t, size_t);
|
void hex_from_int_lower(char *, uint64_t, size_t);
|
||||||
|
|
||||||
|
|
||||||
///////// retry timing
|
|
||||||
|
|
||||||
void retry_init();
|
|
||||||
void retry_cleanup();
|
|
||||||
uint32_t retry_get_delay_ms(uint32_t);
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ static struct incoming *incoming_head = NULL;
|
|||||||
static void incoming_resolve_wrapper(struct peer *);
|
static void incoming_resolve_wrapper(struct peer *);
|
||||||
|
|
||||||
static void incoming_retry(struct incoming *incoming) {
|
static void incoming_retry(struct incoming *incoming) {
|
||||||
uint32_t delay = retry_get_delay_ms(incoming->attempt++);
|
uint32_t delay = wakeup_get_retry_delay_ms(incoming->attempt++);
|
||||||
fprintf(stderr, "I %s: Will retry in %ds\n", incoming->id, delay / 1000);
|
fprintf(stderr, "I %s: Will retry in %ds\n", incoming->id, delay / 1000);
|
||||||
incoming->peer.event_handler = incoming_resolve_wrapper;
|
incoming->peer.event_handler = incoming_resolve_wrapper;
|
||||||
wakeup_add((struct peer *) incoming, delay);
|
wakeup_add((struct peer *) incoming, delay);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ static void outgoing_resolve(struct outgoing *);
|
|||||||
static void outgoing_resolve_wrapper(struct peer *);
|
static void outgoing_resolve_wrapper(struct peer *);
|
||||||
|
|
||||||
static void outgoing_retry(struct outgoing *outgoing) {
|
static void outgoing_retry(struct outgoing *outgoing) {
|
||||||
uint32_t delay = retry_get_delay_ms(outgoing->attempt++);
|
uint32_t delay = wakeup_get_retry_delay_ms(outgoing->attempt++);
|
||||||
fprintf(stderr, "O %s: Will retry in %ds\n", outgoing->id, delay / 1000);
|
fprintf(stderr, "O %s: Will retry in %ds\n", outgoing->id, delay / 1000);
|
||||||
outgoing->peer.event_handler = outgoing_resolve_wrapper;
|
outgoing->peer.event_handler = outgoing_resolve_wrapper;
|
||||||
wakeup_add((struct peer *) outgoing, delay);
|
wakeup_add((struct peer *) outgoing, delay);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#include <sys/epoll.h>
|
#include <sys/epoll.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "rand.h"
|
||||||
|
|
||||||
#include "wakeup.h"
|
#include "wakeup.h"
|
||||||
|
|
||||||
@@ -83,3 +84,15 @@ void wakeup_add(struct peer *peer, uint32_t delay_ms) {
|
|||||||
head = entry;
|
head = entry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define RETRY_MIN_MS 2000
|
||||||
|
#define RETRY_MAX_MS 60000
|
||||||
|
uint32_t wakeup_get_retry_delay_ms(uint32_t attempt) {
|
||||||
|
uint32_t max_delay = RETRY_MIN_MS * (1 << attempt);
|
||||||
|
max_delay = max_delay > RETRY_MAX_MS ? RETRY_MAX_MS : max_delay;
|
||||||
|
|
||||||
|
uint32_t jitter;
|
||||||
|
rand_fill(&jitter, sizeof(jitter));
|
||||||
|
|
||||||
|
return jitter % max_delay;
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ void wakeup_cleanup();
|
|||||||
int wakeup_get_delay();
|
int wakeup_get_delay();
|
||||||
void wakeup_dispatch();
|
void wakeup_dispatch();
|
||||||
void wakeup_add(struct peer *, uint32_t);
|
void wakeup_add(struct peer *, uint32_t);
|
||||||
|
uint32_t wakeup_get_retry_delay_ms(uint32_t);
|
||||||
|
|||||||
Reference in New Issue
Block a user