X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fbluesky.h;h=ae751fdab6307fdba2dfe399dc7d3bc7a893554d;hb=de73632892d6bd009b290426253bdbe41d8844f7;hp=87c58a2b9abcd0c29e06fc97626a29a97114c759;hpb=772058dfc33fbe4857864b4bdb8ba947eca19303;p=bluesky.git diff --git a/bluesky/bluesky.h b/bluesky/bluesky.h index 87c58a2..ae751fd 100644 --- a/bluesky/bluesky.h +++ b/bluesky/bluesky.h @@ -10,6 +10,7 @@ #define _BLUESKY_H #include +#include #include #include @@ -87,11 +88,21 @@ void bluesky_string_resize(BlueSkyRCStr *string, gsize len); struct BlueSkyRangeset; typedef struct BlueSkyRangeset BlueSkyRangeset; +typedef struct { + uint64_t start, length; + gpointer data; +} BlueSkyRangesetItem; + BlueSkyRangeset *bluesky_rangeset_new(); void bluesky_rangeset_free(BlueSkyRangeset *rangeset); gboolean bluesky_rangeset_insert(BlueSkyRangeset *rangeset, - int start, int length, gpointer data); -gpointer bluesky_rangeset_lookup(BlueSkyRangeset *rangeset, int start); + uint64_t start, uint64_t length, + gpointer data); +const BlueSkyRangesetItem *bluesky_rangeset_lookup(BlueSkyRangeset *rangeset, + uint64_t offset); +const BlueSkyRangesetItem *bluesky_rangeset_lookup_next(BlueSkyRangeset *rangeset, uint64_t offset); +void bluesky_rangeset_get_extents(BlueSkyRangeset *rangeset, + uint64_t *start, uint64_t *length); /* Storage interface. This presents a key-value store abstraction, and can * have multiple implementations: in-memory, on-disk, in-cloud. */ @@ -279,6 +290,9 @@ typedef struct { /* Symlink-specific fields */ gchar *symlink_contents; + + /* A field for short-term use internally while the lock is held. */ + gpointer private_data; } BlueSkyInode; /* A directory entry. The name is UTF-8 and is a freshly-allocated string. @@ -353,6 +367,22 @@ void bluesky_flushd_thread_launch(BlueSkyFS *fs); void bluesky_debug_dump(BlueSkyFS *fs); +/* Request response time tracking. */ +typedef struct BlueSkyProfile { + int magic; + GMutex *lock; + char *description; + GList *events; +} BlueSkyProfile; + +BlueSkyProfile *bluesky_profile_new(); +void bluesky_profile_free(BlueSkyProfile *profile); +void bluesky_profile_add_event(BlueSkyProfile *profile, char *message); +void bluesky_profile_print(BlueSkyProfile *profile); +BlueSkyProfile *bluesky_profile_get(); +void bluesky_profile_set(BlueSkyProfile *profile); +void bluesky_profile_set_output(FILE *stream); + #ifdef __cplusplus } #endif