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 "common.h"
|
||||
#include "rand.h"
|
||||
#include "uuid.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) {
|
||||
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_int_upper(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_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);
|
||||
incoming->peer.event_handler = incoming_resolve_wrapper;
|
||||
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_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);
|
||||
outgoing->peer.event_handler = outgoing_resolve_wrapper;
|
||||
wakeup_add((struct peer *) outgoing, delay);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <sys/epoll.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "rand.h"
|
||||
|
||||
#include "wakeup.h"
|
||||
|
||||
@@ -83,3 +84,15 @@ void wakeup_add(struct peer *peer, uint32_t delay_ms) {
|
||||
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();
|
||||
void wakeup_dispatch();
|
||||
void wakeup_add(struct peer *, uint32_t);
|
||||
uint32_t wakeup_get_retry_delay_ms(uint32_t);
|
||||
|
||||
Reference in New Issue
Block a user