/* 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;
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);
/* 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. */
} BlueSkyBlock;
BlueSkyFS *bluesky_init_fs(gchar *name, BlueSkyStore *store);
-void bluesky_superblock_flush(BlueSkyFS *fs);
gboolean bluesky_inode_is_ready(BlueSkyInode *inode);