#define CACHE_PREFETCH IO_BLOCK_SIZE
+static struct event *mail_cache_lookup_event(struct mail_cache_view *view,
+ uint32_t seq)
+{
+ struct event *e = event_create(view->cache->event);
+ uint32_t uid;
+ mail_index_lookup_uid(view->view, seq, &uid);
+ event_set_name(e, "mail_cache_lookup_finished");
+ event_add_int(e, "seq", seq);
+ event_add_int(e, "uid", uid);
+ event_set_append_log_prefix(e, t_strdup_printf("UID %u: ", uid));
+ return e;
+}
+
int mail_cache_get_record(struct mail_cache *cache, uint32_t offset,
const struct mail_cache_record **rec_r)
{
struct mail_cache_lookup_iterate_ctx iter;
struct mail_cache_iterate_field field;
int ret;
+ struct event *lookup_event;
ret = mail_cache_field_exists(view, seq, field_idx);
mail_cache_decision_state_update(view, seq, field_idx);
if (ret <= 0)
return ret;
+ lookup_event = mail_cache_lookup_event(view, seq);
+
/* the field should exist */
mail_cache_lookup_iter_init(view, seq, &iter);
field_def = &view->cache->fields[field_idx].field;
+ event_add_str(lookup_event, "field", field_def->name);
if (field_def->type == MAIL_CACHE_FIELD_BITMASK) {
ret = mail_cache_lookup_bitmask(&iter, field_idx,
field_def->field_size,
}
}
}
+ e_debug(lookup_event, "Looked up field %s from mail cache", field_def->name);
+ event_unref(&lookup_event);
return ret;
}
uint8_t want = HDR_FIELD_STATE_WANT;
buffer_t *buf;
int ret;
+ struct event *lookup_event;
*pool_r = NULL;
ctx.pool = *pool_r = pool_alloconly_create(MEMPOOL_GROWING"mail cache headers", 1024);
t_array_init(&ctx.lines, 32);
+ lookup_event = mail_cache_lookup_event(view, seq);
mail_cache_lookup_iter_init(view, seq, &iter);
while ((ret = mail_cache_lookup_iter_next(&iter, &field)) > 0) {
if (field.field_idx > max_field ||
field_state[field.field_idx] = HDR_FIELD_STATE_SEEN;
header_lines_save(&ctx, &field);
}
-
+ const char *field_name = view->cache->fields[field.field_idx].field.name;
+ e_debug(event_create_passthrough(lookup_event)->
+ add_str("field", field_name)->event(),
+ "Looked up field %s from mail cache", field_name);
}
+ event_unref(&lookup_event);
if (ret < 0)
return -1;