Rework caching of data blocks to eliminate double-caching.
[bluesky.git] / bluesky / bluesky.h
index 482c39a..e9e40d8 100644 (file)
@@ -63,14 +63,8 @@ void bluesky_init(void);
 
 gchar *bluesky_lowercase(const gchar *s);
 
-/* Reference-counted blocks of memory, used for passing data in and out of
- * storage backends and in other places.  This may also refer to read-only
- * mmaped data. */
-typedef struct {
-    gint refcount;
-    const char *addr;
-    size_t len;
-} BlueSkyMmap;
+struct _BlueSkyMmap;
+typedef struct _BlueSkyMmap BlueSkyMmap;
 
 typedef struct {
     gint refcount;
@@ -278,15 +272,14 @@ typedef struct {
 #define BLUESKY_MAX_FILE_SIZE (BLUESKY_BLOCK_SIZE << 24)
 typedef enum {
     BLUESKY_BLOCK_ZERO = 0,     /* Data is all zeroes, not explicitly stored */
-    BLUESKY_BLOCK_REF = 1,      /* Reference to key/value store, not cached */
-    BLUESKY_BLOCK_CACHED = 2,   /* Data is cached in memory, clean */
-    BLUESKY_BLOCK_DIRTY = 3,    /* Data needs to be committed to store */
+    BLUESKY_BLOCK_REF = 1,      /* Reference to cloud log item, data clean */
+    BLUESKY_BLOCK_DIRTY = 2,    /* Data needs to be committed to store */
 } BlueSkyBlockType;
 
 typedef struct {
     BlueSkyBlockType type;
-    BlueSkyRCStr *data;         /* Pointer to data in memory if cached */
-    BlueSkyCloudLog *cloudref;  /* Reference to cloud log entry with data */
+    BlueSkyCloudLog *ref;       /* if REF: cloud log entry with data */
+    BlueSkyRCStr *dirty;        /* if DIRTY: raw data in memory */
 } BlueSkyBlock;
 
 BlueSkyFS *bluesky_init_fs(gchar *name, BlueSkyStore *store);