More fixes for memory management.
[bluesky.git] / bluesky / bluesky.h
index 60a3842..834097f 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;
@@ -85,6 +88,12 @@ void bluesky_string_resize(BlueSkyRCStr *string, gsize len);
 /* Cryptographic operations. */
 #define CRYPTO_BLOCK_SIZE 16        /* 128-bit AES */
 #define CRYPTO_KEY_SIZE   16
+#define CRYPTO_HASH_SIZE  32        /* SHA-256 */
+
+struct BlueSkyCryptKeys {
+    uint8_t encryption_key[CRYPTO_KEY_SIZE];
+    uint8_t authentication_key[CRYPTO_HASH_SIZE];
+};
 
 void bluesky_crypt_init();
 void bluesky_crypt_hash_key(const char *keystr, uint8_t *out);
@@ -175,6 +184,13 @@ typedef struct {
     /* 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;
+
+    /* Queue for asynchronous cloudlog unrefs, where needed. */
+    GAsyncQueue *unref_queue;
 } BlueSkyFS;
 
 /* Inode number of the root directory. */
@@ -295,7 +311,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);