X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Flog.c;h=99b5ae59c528d846bc7ede95d0e3ee37a6a3ac53;hb=4bd76c48487520c2b1c08ff67009f752e0bde941;hp=cec46cb9a9aa90cc3a48f72cc8526ba4187f6817;hpb=f2586554fd55cd3cc1be65ac33d1122d00372133;p=bluesky.git diff --git a/bluesky/log.c b/bluesky/log.c index cec46cb..99b5ae5 100644 --- a/bluesky/log.c +++ b/bluesky/log.c @@ -36,7 +36,7 @@ // Rough size limit for a log segment. This is not a firm limit and there are // no absolute guarantees on the size of a log segment. -#define LOG_SEGMENT_SIZE (1 << 23) +#define LOG_SEGMENT_SIZE (1 << 24) #define HEADER_MAGIC 0x676f4c0a #define FOOTER_MAGIC 0x2e435243 @@ -77,8 +77,10 @@ static void log_commit(BlueSkyLog *log) while (log->committed != NULL) { BlueSkyCloudLog *item = (BlueSkyCloudLog *)log->committed->data; g_mutex_lock(item->lock); + bluesky_cloudlog_stats_update(item, -1); item->pending_write &= ~CLOUDLOG_JOURNAL; item->location_flags |= CLOUDLOG_JOURNAL; + bluesky_cloudlog_stats_update(item, 1); g_cond_signal(item->cond); g_mutex_unlock(item->lock); log->committed = g_slist_delete_link(log->committed, log->committed); @@ -158,7 +160,9 @@ static gpointer log_thread(gpointer d) continue; } + bluesky_cloudlog_stats_update(item, -1); item->pending_write |= CLOUDLOG_JOURNAL; + bluesky_cloudlog_stats_update(item, 1); struct log_header header; struct log_footer footer; @@ -200,6 +204,14 @@ static gpointer log_thread(gpointer d) offset += sizeof(header) + sizeof(footer) + item->data->len; + /* Replace the log item's string data with a memory-mapped copy of the + * data, now that it has been written to the log file. (Even if it + * isn't yet on disk, it should at least be in the page cache and so + * available to memory map.) */ + bluesky_string_unref(item->data); + item->data = NULL; + bluesky_cloudlog_fetch(item); + log->committed = g_slist_prepend(log->committed, item); g_atomic_int_add(&item->data_lock_count, -1); g_mutex_unlock(item->lock); @@ -295,6 +307,8 @@ BlueSkyRCStr *bluesky_log_map_object(BlueSkyLog *log, g_hash_table_insert(log->mmap_cache, GINT_TO_POINTER(log_seq), map); + g_print("Mapped log segment %d...\n", log_seq); + close(fd); }