Commit 6de8be9f authored by Geoff Simmons's avatar Geoff Simmons

trackrdrd: reader thread reads and stores shard keys

parent 9d137a61
......@@ -644,6 +644,27 @@ append(dataentry *entry, enum VSL_tag_e tag, unsigned xid, char *data,
return;
}
static inline void
addkey(dataentry *entry, enum VSL_tag_e tag, unsigned xid, char *key,
int keylen)
{
CHECK_OBJ_NOTNULL(entry, DATA_MAGIC);
if (keylen > config.maxkeylen) {
LOG_Log(LOG_ALERT,
"%s: Key too long, XID=%d, length=%d, "
"DISCARDING key=[%.*s]", VSL_tags[tag], xid, keylen,
keylen, key);
dtbl.w_stats.key_overflows++;
return;
}
memcpy(entry->key, key, keylen);
entry->keylen = keylen;
if (keylen > dtbl.w_stats.key_hi)
dtbl.w_stats.key_hi = keylen;
return;
}
/*
* rules for reading VSL:
*
......@@ -735,9 +756,15 @@ OSL_Track(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
err = Parse_VCL_Log(&ptr[TRACKLOG_PREFIX_LEN], len-TRACKLOG_PREFIX_LEN,
&xid, &data, &datalen, &data_type);
AZ(err);
LOG_Log(LOG_DEBUG, "%s: XID=%u, data=[%.*s]", VSL_tags[tag],
xid, datalen, data);
if (err != 0) {
LOG_Log(LOG_ERR,
"Cannot parse VCL_Log entry, DISCARDING [%.*s]: %s",
datalen, data, strerror(err));
htbl.drop_vcl_log++;
}
LOG_Log(LOG_DEBUG, "%s: XID=%u, %s=[%.*s]", VSL_tags[tag],
xid, data_type == VCL_LOG_DATA ? "data" : "key", datalen, data);
he = hash_find(xid);
if (he == NULL) {
......@@ -751,8 +778,14 @@ OSL_Track(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
check_entry(he, xid, fd);
de = he->de;
append(de, tag, xid, data, datalen);
de->hasdata = true;
if (data_type == VCL_LOG_DATA) {
append(de, tag, xid, data, datalen);
de->hasdata = true;
}
else
addkey(de, tag, xid, data, datalen);
break;
case SLT_ReqEnd:
......
......@@ -56,7 +56,9 @@ log_output(void)
"submitted=%u "
"wait_room=%u "
"data_hi=%u "
"key_hi=%u "
"data_overflows=%u "
"key_overflows=%u "
"done=%u "
"open=%u "
"load=%.2f "
......@@ -72,7 +74,9 @@ log_output(void)
dtbl.w_stats.submitted,
dtbl.w_stats.wait_room,
dtbl.w_stats.data_hi,
dtbl.w_stats.key_hi,
dtbl.w_stats.data_overflows,
dtbl.w_stats.key_overflows,
dtbl.r_stats.done,
dtbl.r_stats.open,
(100.0 * (1.0 * dtbl.r_stats.done + 1.0 * dtbl.r_stats.open) / dtbl.len),
......
......@@ -148,7 +148,9 @@ struct data_writer_stats_s {
unsigned submitted; /* Submitted to worker threads */
unsigned wait_room; /* waits for space in dtbl */
unsigned data_hi; /* max string length of entry->data */
unsigned key_hi; /* max string length of entry->key */
unsigned data_overflows; /* config.maxdata exceeded */
unsigned key_overflows; /* config.maxkeylen exceeded */
unsigned abandoned; /* Worker threads abandoned */
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment