Browse Source

ckdb - reset worker share rate every network block change

master
kanoi 9 years ago
parent
commit
be18ff41a9
  1. 3
      src/ckdb.h
  2. 17
      src/ckdb_data.c
  3. 8
      src/ckdb_dbio.c

3
src/ckdb.h

@ -55,7 +55,7 @@
#define DB_VLOCK "1" #define DB_VLOCK "1"
#define DB_VERSION "1.0.2" #define DB_VERSION "1.0.2"
#define CKDB_VERSION DB_VERSION"-1.310" #define CKDB_VERSION DB_VERSION"-1.311"
#define WHERE_FFL " - from %s %s() line %d" #define WHERE_FFL " - from %s %s() line %d"
#define WHERE_FFL_HERE __FILE__, __func__, __LINE__ #define WHERE_FFL_HERE __FILE__, __func__, __LINE__
@ -2211,6 +2211,7 @@ extern K_ITEM *_find_create_workerstatus(int64_t userid, char *workername,
bool create, const char *file2, bool create, const char *file2,
const char *func2, const int line2, const char *func2, const int line2,
WHERE_FFL_ARGS); WHERE_FFL_ARGS);
extern void zero_all_active(tv_t *when);
extern void workerstatus_ready(); extern void workerstatus_ready();
#define workerstatus_update(_auths, _shares, _userstats) \ #define workerstatus_update(_auths, _shares, _userstats) \
_workerstatus_update(_auths, _shares, _userstats, WHERE_FFL_HERE) _workerstatus_update(_auths, _shares, _userstats, WHERE_FFL_HERE)

17
src/ckdb_data.c

@ -913,6 +913,23 @@ static void zero_on_idle(tv_t *when, WORKERSTATUS *workerstatus)
workerstatus->active_sharehi = workerstatus->active_sharerej = 0.0; workerstatus->active_sharehi = workerstatus->active_sharerej = 0.0;
} }
void zero_all_active(tv_t *when)
{
WORKERSTATUS *workerstatus;
K_TREE_CTX ws_ctx[1];
K_ITEM *ws_item;
K_WLOCK(workerstatus_free);
ws_item = first_in_ktree(workerstatus_root, ws_ctx);
while (ws_item) {
DATA_WORKERSTATUS(workerstatus, ws_item);
zero_on_idle(when, workerstatus);
ws_item = next_in_ktree(ws_ctx);
}
K_WUNLOCK(workerstatus_free);
}
/* All data is loaded, now update workerstatus fields /* All data is loaded, now update workerstatus fields
TODO: combine set_block_share_counters() with this? */ TODO: combine set_block_share_counters() with this? */
void workerstatus_ready() void workerstatus_ready()

8
src/ckdb_dbio.c

@ -2623,6 +2623,7 @@ int64_t workinfo_add(PGconn *conn, char *workinfoidstr, char *poolinstance,
char *ins; char *ins;
char *params[11 + HISTORYDATECOUNT]; char *params[11 + HISTORYDATECOUNT];
int n, par = 0; int n, par = 0;
bool zero_active = false;
LOGDEBUG("%s(): add", __func__); LOGDEBUG("%s(): add", __func__);
@ -2730,14 +2731,19 @@ unparam:
if (workinfo_current) { if (workinfo_current) {
WORKINFO *wic; WORKINFO *wic;
DATA_WORKINFO(wic, workinfo_current); DATA_WORKINFO(wic, workinfo_current);
if (cmp_height(wic->coinbase1, row->coinbase1) != 0) if (cmp_height(wic->coinbase1, row->coinbase1) != 0) {
copy_tv(&last_bc, cd); copy_tv(&last_bc, cd);
zero_active = true;
}
} }
workinfo_current = item; workinfo_current = item;
} }
K_WUNLOCK(workinfo_free); K_WUNLOCK(workinfo_free);
if (zero_active)
zero_all_active(cd);
return workinfoid; return workinfoid;
} }

Loading…
Cancel
Save