Browse Source

ckdb - use pointers for sharesummary create/modify fields

master
kanoi 10 years ago
parent
commit
da595c6856
  1. 2
      pool/page_ckp.php
  2. 82
      src/ckdb.h
  3. 8
      src/ckdb_cmd.c
  4. 20
      src/ckdb_dbio.c

2
pool/page_ckp.php

@ -33,6 +33,7 @@ function dockp($data, $user)
$pg .= '<td class=dr>Allocated</td>'; $pg .= '<td class=dr>Allocated</td>';
$pg .= '<td class=dr>Store</td>'; $pg .= '<td class=dr>Store</td>';
$pg .= '<td class=dr>RAM</td>'; $pg .= '<td class=dr>RAM</td>';
$pg .= '<td class=dr>RAM2</td>';
$pg .= '<td class=dr>Cull</td>'; $pg .= '<td class=dr>Cull</td>';
$pg .= "</tr>\n"; $pg .= "</tr>\n";
if ($ans['STATUS'] == 'ok') if ($ans['STATUS'] == 'ok')
@ -51,6 +52,7 @@ function dockp($data, $user)
$pg .= '<td class=dr>'.stnum($ans['allocated:'.$i]).'</td>'; $pg .= '<td class=dr>'.stnum($ans['allocated:'.$i]).'</td>';
$pg .= '<td class=dr>'.stnum($ans['store:'.$i]).'</td>'; $pg .= '<td class=dr>'.stnum($ans['store:'.$i]).'</td>';
$pg .= '<td class=dr>'.stnum($ans['ram:'.$i]).'</td>'; $pg .= '<td class=dr>'.stnum($ans['ram:'.$i]).'</td>';
$pg .= '<td class=dr>'.stnum($ans['ram2:'.$i]).'</td>';
$pg .= '<td class=dr>'.stnum($ans['cull:'.$i]).'</td>'; $pg .= '<td class=dr>'.stnum($ans['cull:'.$i]).'</td>';
$pg .= "</tr>\n"; $pg .= "</tr>\n";
} }

82
src/ckdb.h

@ -52,7 +52,7 @@
#define DB_VLOCK "1" #define DB_VLOCK "1"
#define DB_VERSION "0.9.2" #define DB_VERSION "0.9.2"
#define CKDB_VERSION DB_VERSION"-0.566" #define CKDB_VERSION DB_VERSION"-0.572"
#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__
@ -327,6 +327,46 @@ enum cmd_values {
// *** klists/ktrees *** // *** klists/ktrees ***
// *** // ***
// The size strdup will allocate multiples of
#define MEMBASE 4
#define SET_POINTER(_list, _fld, _val, _def) do { \
size_t _siz; \
if ((_fld) && ((_fld) != EMPTY) && ((_fld) != (_def))) { \
if (_list) { \
_siz = strlen(_fld) + 1; \
if (_siz % MEMBASE) \
_siz += MEMBASE - (_siz % MEMBASE); \
_list->ram -= (int)_siz; \
} \
free(_fld); \
} \
if (!(_val) || !(*(_val))) \
(_fld) = EMPTY; \
else { \
if (((_val) == (_def)) || (strcmp(_val, _def) == 0)) \
(_fld) = (_def); \
else { \
if (_list) { \
_siz = strlen(_val) + 1; \
if (_siz % MEMBASE) \
_siz += MEMBASE - (_siz % MEMBASE); \
_list->ram += (int)_siz; \
} \
_fld = strdup(_val); \
if (!(_fld)) \
quithere(1, "malloc OOM"); \
} \
} \
} while (0)
#define SET_CREATEBY(_list, _fld, _val) SET_POINTER(_list, _fld, _val, by_default)
#define SET_CREATECODE(_list, _fld, _val) SET_POINTER(_list, _fld, _val, EMPTY)
#define SET_CREATEINET(_list, _fld, _val) SET_POINTER(_list, _fld, _val, inet_default)
#define SET_MODIFYBY(_list, _fld, _val) SET_POINTER(_list, _fld, _val, by_default)
#define SET_MODIFYCODE(_list, _fld, _val) SET_POINTER(_list, _fld, _val, EMPTY)
#define SET_MODIFYINET(_list, _fld, _val) SET_POINTER(_list, _fld, _val, inet_default)
#define HISTORYDATECONTROL ",createdate,createby,createcode,createinet,expirydate" #define HISTORYDATECONTROL ",createdate,createby,createcode,createinet,expirydate"
#define HISTORYDATECOUNT 5 #define HISTORYDATECOUNT 5
#define HISTORYDATECONTROLFIELDS \ #define HISTORYDATECONTROLFIELDS \
@ -384,7 +424,18 @@ enum cmd_values {
tv_t modifydate; \ tv_t modifydate; \
char modifyby[TXT_SML+1]; \ char modifyby[TXT_SML+1]; \
char modifycode[TXT_MED+1]; \ char modifycode[TXT_MED+1]; \
char modifyinet[TXT_MED+1] char modifyinet[TXT_MED+1]; \
bool buffers;
#define MODIFYDATECONTROLPOINTERS \
tv_t createdate; \
char *createby; \
char *createcode; \
char *createinet; \
tv_t modifydate; \
char *modifyby; \
char *modifycode; \
char *modifyinet; \
bool pointers;
#define MODIFYDATEINIT(_row, _cd, _by, _code, _inet) do { \ #define MODIFYDATEINIT(_row, _cd, _by, _code, _inet) do { \
_row->createdate.tv_sec = (_cd)->tv_sec; \ _row->createdate.tv_sec = (_cd)->tv_sec; \
@ -397,6 +448,7 @@ enum cmd_values {
_row->modifyby[0] = '\0'; \ _row->modifyby[0] = '\0'; \
_row->modifycode[0] = '\0'; \ _row->modifycode[0] = '\0'; \
_row->modifyinet[0] = '\0'; \ _row->modifyinet[0] = '\0'; \
_row->buffers = _row->buffers; \
} while (0) } while (0)
#define MODIFYUPDATE(_row, _cd, _by, _code, _inet) do { \ #define MODIFYUPDATE(_row, _cd, _by, _code, _inet) do { \
@ -405,6 +457,30 @@ enum cmd_values {
STRNCPY(_row->modifyby, _by); \ STRNCPY(_row->modifyby, _by); \
STRNCPY(_row->modifycode, _code); \ STRNCPY(_row->modifycode, _code); \
STRNCPY(_row->modifyinet, _inet); \ STRNCPY(_row->modifyinet, _inet); \
_row->buffers = _row->buffers; \
} while (0)
#define MODIFYDATEPOINTERS(_list, _row, _cd, _by, _code, _inet) do { \
_row->createdate.tv_sec = (_cd)->tv_sec; \
_row->createdate.tv_usec = (_cd)->tv_usec; \
SET_CREATEBY(_list, _row->createby, _by); \
SET_CREATECODE(_list, _row->createcode, _code); \
SET_CREATEINET(_list, _row->createinet, _inet); \
_row->modifydate.tv_sec = 0; \
_row->modifydate.tv_usec = 0; \
SET_MODIFYBY(_list, _row->modifyby, EMPTY); \
SET_MODIFYCODE(_list, _row->modifycode, EMPTY); \
SET_MODIFYINET(_list, _row->modifyinet, EMPTY); \
_row->pointers = _row->pointers; \
} while (0)
#define MODIFYUPDATEPOINTERS(_list, _row, _cd, _by, _code, _inet) do { \
_row->modifydate.tv_sec = (_cd)->tv_sec; \
_row->modifydate.tv_usec = (_cd)->tv_usec; \
SET_MODIFYBY(_list, _row->modifyby, _by); \
SET_MODIFYCODE(_list, _row->modifycode, _code); \
SET_MODIFYINET(_list, _row->modifyinet, _inet); \
_row->pointers = _row->pointers; \
} while (0) } while (0)
#define SIMPLEDATECONTROL ",createdate,createby,createcode,createinet" #define SIMPLEDATECONTROL ",createdate,createby,createcode,createinet"
@ -864,7 +940,7 @@ typedef struct sharesummary {
tv_t lastshare; tv_t lastshare;
double lastdiffacc; double lastdiffacc;
char complete[TXT_FLAG+1]; char complete[TXT_FLAG+1];
MODIFYDATECONTROLFIELDS; MODIFYDATECONTROLPOINTERS;
} SHARESUMMARY; } SHARESUMMARY;
/* After this many shares added, we need to update the DB record /* After this many shares added, we need to update the DB record

8
src/ckdb_cmd.c

@ -3295,7 +3295,7 @@ static char *cmd_stats(__maybe_unused PGconn *conn, char *cmd, char *id,
{ {
char tmp[1024], *buf; char tmp[1024], *buf;
size_t len, off; size_t len, off;
uint64_t ram, tot = 0; uint64_t ram, ram2, tot = 0;
K_LIST *klist; K_LIST *klist;
int rows = 0; int rows = 0;
@ -3311,19 +3311,21 @@ static char *cmd_stats(__maybe_unused PGconn *conn, char *cmd, char *id,
ram = sizeof(K_LIST) + _stores * sizeof(K_STORE) + \ ram = sizeof(K_LIST) + _stores * sizeof(K_STORE) + \
klist->allocate * klist->item_mem_count * klist->siz + \ klist->allocate * klist->item_mem_count * klist->siz + \
sizeof(K_TREE) * (klist->total - klist->count) * _trees; \ sizeof(K_TREE) * (klist->total - klist->count) * _trees; \
ram2 = klist->ram; \
snprintf(tmp, sizeof(tmp), \ snprintf(tmp, sizeof(tmp), \
"name:%d=" #_obj "%cinitial:%d=%d%callocated:%d=%d%c" \ "name:%d=" #_obj "%cinitial:%d=%d%callocated:%d=%d%c" \
"store:%d=%d%ctrees:%d=%d%cram:%d=%"PRIu64"%c" \ "store:%d=%d%ctrees:%d=%d%cram:%d=%"PRIu64"%c" \
"cull:%d=%d%c", \ "ram2:%d=%"PRIu64"%ccull:%d=%d%c", \
rows, FLDSEP, \ rows, FLDSEP, \
rows, klist->allocate, FLDSEP, \ rows, klist->allocate, FLDSEP, \
rows, klist->total, FLDSEP, \ rows, klist->total, FLDSEP, \
rows, klist->total - klist->count, FLDSEP, \ rows, klist->total - klist->count, FLDSEP, \
rows, _trees, FLDSEP, \ rows, _trees, FLDSEP, \
rows, ram, FLDSEP, \ rows, ram, FLDSEP, \
rows, ram2, FLDSEP, \
rows, klist->cull_count, FLDSEP); \ rows, klist->cull_count, FLDSEP); \
APPEND_REALLOC(buf, off, len, tmp); \ APPEND_REALLOC(buf, off, len, tmp); \
tot += ram; \ tot += ram + ram2; \
rows++; rows++;
USEINFO(users, 1, 2); USEINFO(users, 1, 2);

20
src/ckdb_dbio.c

@ -68,7 +68,7 @@ char *pqerrmsg(PGconn *conn)
} while (0) } while (0)
// MODIFY FIELDS // MODIFY FIELDS
#define MODIFYDATEFLDS(_res, _row, _data, _ok) do { \ #define MODIFYDATEFLDPOINTERS(_list, _res, _row, _data, _ok) do { \
char *_fld; \ char *_fld; \
PQ_GET_FLD(_res, _row, "createdate", _fld, _ok); \ PQ_GET_FLD(_res, _row, "createdate", _fld, _ok); \
if (!_ok) \ if (!_ok) \
@ -77,15 +77,15 @@ char *pqerrmsg(PGconn *conn)
PQ_GET_FLD(_res, _row, "createby", _fld, _ok); \ PQ_GET_FLD(_res, _row, "createby", _fld, _ok); \
if (!_ok) \ if (!_ok) \
break; \ break; \
TXT_TO_STR("createby", _fld, (_data)->createby); \ SET_CREATEBY(_list, (_data)->createby, _fld); \
PQ_GET_FLD(_res, _row, "createcode", _fld, _ok); \ PQ_GET_FLD(_res, _row, "createcode", _fld, _ok); \
if (!_ok) \ if (!_ok) \
break; \ break; \
TXT_TO_STR("createcode", _fld, (_data)->createcode); \ SET_CREATECODE(_list, (_data)->createcode, _fld); \
PQ_GET_FLD(_res, _row, "createinet", _fld, _ok); \ PQ_GET_FLD(_res, _row, "createinet", _fld, _ok); \
if (!_ok) \ if (!_ok) \
break; \ break; \
TXT_TO_STR("createinet", _fld, (_data)->createinet); \ SET_CREATEINET(_list, (_data)->createinet, _fld); \
PQ_GET_FLD(_res, _row, "modifydate", _fld, _ok); \ PQ_GET_FLD(_res, _row, "modifydate", _fld, _ok); \
if (!_ok) \ if (!_ok) \
break; \ break; \
@ -93,15 +93,15 @@ char *pqerrmsg(PGconn *conn)
PQ_GET_FLD(_res, _row, "modifyby", _fld, _ok); \ PQ_GET_FLD(_res, _row, "modifyby", _fld, _ok); \
if (!_ok) \ if (!_ok) \
break; \ break; \
TXT_TO_STR("modifyby", _fld, (_data)->modifyby); \ SET_MODIFYBY(_list, (_data)->modifyby, _fld); \
PQ_GET_FLD(_res, _row, "modifycode", _fld, _ok); \ PQ_GET_FLD(_res, _row, "modifycode", _fld, _ok); \
if (!_ok) \ if (!_ok) \
break; \ break; \
TXT_TO_STR("modifycode", _fld, (_data)->modifycode); \ SET_MODIFYCODE(_list, (_data)->modifycode, _fld); \
PQ_GET_FLD(_res, _row, "modifyinet", _fld, _ok); \ PQ_GET_FLD(_res, _row, "modifyinet", _fld, _ok); \
if (!_ok) \ if (!_ok) \
break; \ break; \
TXT_TO_STR("modifyinet", _fld, (_data)->modifyinet); \ SET_MODIFYINET(_list, (_data)->modifyinet, _fld); \
} while (0) } while (0)
#define MODIFYDATEPARAMS(_params, _mod_pos, _row) do { \ #define MODIFYDATEPARAMS(_params, _mod_pos, _row) do { \
@ -2753,7 +2753,7 @@ bool _sharesummary_update(PGconn *conn, SHARES *s_row, SHAREERRORS *e_row, K_ITE
} }
if (new || !(row->inserted)) { if (new || !(row->inserted)) {
MODIFYDATEINIT(row, cd, by, code, inet); MODIFYDATEPOINTERS(sharesummary_free, row, cd, by, code, inet);
if (!confirm_sharesummary) { if (!confirm_sharesummary) {
par = 0; par = 0;
@ -2801,7 +2801,7 @@ bool _sharesummary_update(PGconn *conn, SHARES *s_row, SHAREERRORS *e_row, K_ITE
} else { } else {
bool stats_update = false; bool stats_update = false;
MODIFYUPDATE(row, cd, by, code, inet); MODIFYUPDATEPOINTERS(sharesummary_free, row, cd, by, code, inet);
if ((row->countlastupdate + SHARESUMMARY_UPDATE_EVERY) < if ((row->countlastupdate + SHARESUMMARY_UPDATE_EVERY) <
(row->sharecount + row->errorcount)) (row->sharecount + row->errorcount))
@ -3059,7 +3059,7 @@ bool sharesummary_fill(PGconn *conn)
break; break;
TXT_TO_STR("complete", field, row->complete); TXT_TO_STR("complete", field, row->complete);
MODIFYDATEFLDS(res, i, row, ok); MODIFYDATEFLDPOINTERS(sharesummary_free, res, i, row, ok);
if (!ok) if (!ok)
break; break;

Loading…
Cancel
Save