|
|
@ -3640,6 +3640,7 @@ static void auto_age_older(PGconn *conn, int64_t workinfoid, char *poolinstance, |
|
|
|
char *by, char *code, char *inet, tv_t *cd) |
|
|
|
char *by, char *code, char *inet, tv_t *cd) |
|
|
|
{ |
|
|
|
{ |
|
|
|
static int64_t last_attempted_id = -1; |
|
|
|
static int64_t last_attempted_id = -1; |
|
|
|
|
|
|
|
static int64_t prev_found = 0; |
|
|
|
static int repeat; |
|
|
|
static int repeat; |
|
|
|
|
|
|
|
|
|
|
|
char min_buf[DATE_BUFSIZ], max_buf[DATE_BUFSIZ]; |
|
|
|
char min_buf[DATE_BUFSIZ], max_buf[DATE_BUFSIZ]; |
|
|
@ -3648,29 +3649,44 @@ static void auto_age_older(PGconn *conn, int64_t workinfoid, char *poolinstance, |
|
|
|
tv_t ss_first_min, ss_last_max; |
|
|
|
tv_t ss_first_min, ss_last_max; |
|
|
|
tv_t ss_first, ss_last; |
|
|
|
tv_t ss_first, ss_last; |
|
|
|
int32_t wid_count; |
|
|
|
int32_t wid_count; |
|
|
|
|
|
|
|
SHARESUMMARY sharesummary; |
|
|
|
K_TREE_CTX ctx[1]; |
|
|
|
K_TREE_CTX ctx[1]; |
|
|
|
K_ITEM *ss_item; |
|
|
|
K_ITEM look, *ss_item; |
|
|
|
int64_t age_id, do_id, to_id; |
|
|
|
int64_t age_id, do_id, to_id; |
|
|
|
bool ok; |
|
|
|
bool ok, found; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOGDEBUG("%s(): workinfoid=%"PRId64" prev=%"PRId64, __func__, workinfoid, prev_found); |
|
|
|
|
|
|
|
|
|
|
|
LOGDEBUG("%s(): %"PRId64, __func__, workinfoid); |
|
|
|
age_id = prev_found; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Find the oldest 'unaged' sharesummary < workinfoid and >= prev_found
|
|
|
|
|
|
|
|
sharesummary.workinfoid = prev_found; |
|
|
|
|
|
|
|
sharesummary.userid = -1; |
|
|
|
|
|
|
|
sharesummary.workername[0] = '\0'; |
|
|
|
|
|
|
|
look.data = (void *)(&sharesummary); |
|
|
|
|
|
|
|
ss_item = find_after_in_ktree(sharesummary_workinfoid_root, &look, |
|
|
|
|
|
|
|
cmp_sharesummary_workinfoid, ctx); |
|
|
|
|
|
|
|
|
|
|
|
ss_first_min.tv_sec = ss_first_min.tv_usec = |
|
|
|
ss_first_min.tv_sec = ss_first_min.tv_usec = |
|
|
|
ss_last_max.tv_sec = ss_last_max.tv_usec = 0; |
|
|
|
ss_last_max.tv_sec = ss_last_max.tv_usec = 0; |
|
|
|
ss_count_tot = s_count_tot = s_diff_tot = 0; |
|
|
|
ss_count_tot = s_count_tot = s_diff_tot = 0; |
|
|
|
|
|
|
|
|
|
|
|
age_id = 0; |
|
|
|
found = false; |
|
|
|
// Find the oldest 'unaged' sharesummary < workinfoid
|
|
|
|
|
|
|
|
ss_item = first_in_ktree(sharesummary_workinfoid_root, ctx); |
|
|
|
|
|
|
|
while (ss_item && DATA_SHARESUMMARY(ss_item)->workinfoid < workinfoid) { |
|
|
|
while (ss_item && DATA_SHARESUMMARY(ss_item)->workinfoid < workinfoid) { |
|
|
|
if (DATA_SHARESUMMARY(ss_item)->complete[0] == SUMMARY_NEW) { |
|
|
|
if (DATA_SHARESUMMARY(ss_item)->complete[0] == SUMMARY_NEW) { |
|
|
|
age_id = DATA_SHARESUMMARY(ss_item)->workinfoid; |
|
|
|
age_id = DATA_SHARESUMMARY(ss_item)->workinfoid; |
|
|
|
|
|
|
|
prev_found = age_id; |
|
|
|
|
|
|
|
found = true; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
ss_item = next_in_ktree(ctx); |
|
|
|
ss_item = next_in_ktree(ctx); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LOGDEBUG("%s(): age_id=%"PRId64, __func__, age_id); |
|
|
|
LOGDEBUG("%s(): age_id=%"PRId64" found=%d", __func__, age_id, found); |
|
|
|
|
|
|
|
// Don't repeat searching old items to avoid accessing their ram
|
|
|
|
|
|
|
|
if (!found) |
|
|
|
|
|
|
|
prev_found = workinfoid; |
|
|
|
|
|
|
|
else { |
|
|
|
/* Process all the consecutive sharesummaries that's aren't aged
|
|
|
|
/* Process all the consecutive sharesummaries that's aren't aged
|
|
|
|
* This way we find each oldest 'batch' of sharesummaries that have |
|
|
|
* This way we find each oldest 'batch' of sharesummaries that have |
|
|
|
* been missed and can report the range of data that was aged, |
|
|
|
* been missed and can report the range of data that was aged, |
|
|
@ -3678,7 +3694,6 @@ static void auto_age_older(PGconn *conn, int64_t workinfoid, char *poolinstance, |
|
|
|
* from the last time ckpool stopped |
|
|
|
* from the last time ckpool stopped |
|
|
|
* Each next group of unaged sharesummaries following this, will be |
|
|
|
* Each next group of unaged sharesummaries following this, will be |
|
|
|
* picked up by each next aging */ |
|
|
|
* picked up by each next aging */ |
|
|
|
if (age_id) { |
|
|
|
|
|
|
|
wid_count = 0; |
|
|
|
wid_count = 0; |
|
|
|
do_id = age_id; |
|
|
|
do_id = age_id; |
|
|
|
to_id = 0; |
|
|
|
to_id = 0; |
|
|
|