Properly set the starting inode number for allocation after restarting.
[bluesky.git] / bluesky / bluesky.h
index 099aad4..c4d175e 100644 (file)
@@ -33,6 +33,9 @@ typedef struct {
     /* Should frontends handle requests serially or allow operations to proceed
      * in parallel? */
     int sync_frontends;
+
+    /* Target size of the disk cache at the proxy, in kilobytes. */
+    int cache_size;
 } BlueSkyOptions;
 
 extern BlueSkyOptions bluesky_options;
@@ -63,19 +66,19 @@ void bluesky_init(void);
 
 gchar *bluesky_lowercase(const gchar *s);
 
-struct _BlueSkyMmap;
-typedef struct _BlueSkyMmap BlueSkyMmap;
+struct _BlueSkyCacheFile;
+typedef struct _BlueSkyCacheFile BlueSkyCacheFile;
 
 typedef struct {
     gint refcount;
-    BlueSkyMmap *mmap;
+    BlueSkyCacheFile *mmap;
     gchar *data;
     gsize len;
 } BlueSkyRCStr;
 
 BlueSkyRCStr *bluesky_string_new(gpointer data, gsize len);
 BlueSkyRCStr *bluesky_string_new_from_gstring(GString *s);
-BlueSkyRCStr *bluesky_string_new_from_mmap(BlueSkyMmap *mmap,
+BlueSkyRCStr *bluesky_string_new_from_mmap(BlueSkyCacheFile *mmap,
                                            int offset, gsize len);
 void bluesky_string_ref(BlueSkyRCStr *string);
 void bluesky_string_unref(BlueSkyRCStr *string);
@@ -169,9 +172,16 @@ typedef struct {
     /* Mutex for the flush daemon, to prevent concurrent execution. */
     GMutex *flushd_lock;
 
+    /* Used to wait for the cache daemon to free up space */
+    GCond *flushd_cond;
+
     /* Mapping of object identifiers (blocks, inodes) to physical location (in
      * the local cache or in the logs in the cloud). */
     GHashTable *locations;
+
+    /* The inode map, which maps inode numbers to the location of the most
+     * recent version. */
+    GSequence *inode_map;
 } BlueSkyFS;
 
 /* Inode number of the root directory. */
@@ -292,7 +302,6 @@ typedef struct {
 } BlueSkyBlock;
 
 BlueSkyFS *bluesky_init_fs(gchar *name, BlueSkyStore *store);
-void bluesky_superblock_flush(BlueSkyFS *fs);
 
 gboolean bluesky_inode_is_ready(BlueSkyInode *inode);