Skip to content

Commit ff5771c

Browse files
committed
conf: Warn at startup if stratum.username_modifiers fails to fully distribute shares
1 parent d85f04f commit ff5771c

File tree

4 files changed

+10
-5
lines changed

4 files changed

+10
-5
lines changed

src/datum_conf.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ void datum_config_set_default(const T_DATUM_CONFIG_ITEM *c) {
251251
}
252252
}
253253

254-
int datum_config_parse_username_mods(struct datum_username_mod ** const umods_p, json_t * const item) {
254+
int datum_config_parse_username_mods(struct datum_username_mod ** const umods_p, json_t * const item, const bool log_errors) {
255255
if (!json_object_size(item)) {
256256
if (json_is_null(item) || json_is_object(item)) {
257257
free(*umods_p);
@@ -316,6 +316,11 @@ int datum_config_parse_username_mods(struct datum_username_mod ** const umods_p,
316316
++addr_range;
317317
if (nonce_max == 0xffff) break;
318318
}
319+
if (log_errors && (addr_range == umod->ranges || addr_range[-1].max != 0xffff)) {
320+
double missing_percent = 100 * (1 - sum);
321+
const unsigned int missing_percent_precision = datum_double_precision(&missing_percent);
322+
DLOG_ERROR("Username modifier '%s' is configured to not distribute %.*f%% of shares!", modname, missing_percent_precision, missing_percent);
323+
}
319324
addr_range[0].addr = NULL;
320325
assert((uint8_t*)addr_range <= &((uint8_t*)umod)[umod->sz]); // otherwise we overwrote strings!
321326
assert(p <= &((uint8_t*)*umods_p)[sz]); // otherwise we overran the buffer!
@@ -398,7 +403,7 @@ int datum_config_parse_value(const T_DATUM_CONFIG_ITEM *c, json_t *item) {
398403
}
399404

400405
case DATUM_CONF_USERNAME_MODS: {
401-
return datum_config_parse_username_mods(c->ptr, item);
406+
return datum_config_parse_username_mods(c->ptr, item, true);
402407
}
403408
}
404409

src/datum_conf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ struct datum_username_mod {
9191
struct datum_addr_range ranges[];
9292
};
9393

94-
int datum_config_parse_username_mods(struct datum_username_mod **umods_p, json_t *item);
94+
int datum_config_parse_username_mods(struct datum_username_mod **umods_p, json_t *item, bool log_errors);
9595
struct datum_username_mod *datum_username_mods_next(struct datum_username_mod *prev_umod);
9696
struct datum_username_mod *datum_username_mods_find(struct datum_username_mod *umod, const char *modname, size_t modname_len);
9797

src/datum_conf_tests.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ struct datum_test_username_mods {
5252

5353
void datum_conf_test_parse_username_mods__(const unsigned int code_line, json_t * const j_input, const char * const input, const int expected_ret, const struct datum_test_username_mods *expected_umods) {
5454
struct datum_username_mod *umods = NULL;
55-
int ret = datum_config_parse_username_mods(&umods, j_input);
55+
int ret = datum_config_parse_username_mods(&umods, j_input, false);
5656
json_decref(j_input);
5757
datum_test_(ret == expected_ret, input, code_line, "return value");
5858
if (ret != 1) {

src/datum_stratum_tests.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void datum_stratum_mod_username_tests() {
4646
json_t * const j_umods = JSON_LOADS(s_umods, &err);
4747
assert(j_umods);
4848
struct datum_username_mod *umods = NULL;
49-
int ret = datum_config_parse_username_mods(&umods, j_umods);
49+
int ret = datum_config_parse_username_mods(&umods, j_umods, false);
5050
assert(ret == 1);
5151
json_decref(j_umods);
5252
datum_config.stratum_username_mod = umods;

0 commit comments

Comments
 (0)