/* 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;
/* 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);
/* 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;
+
+ /* Thread pool for asynchronous inode fetches */
+ GThreadPool *inode_fetch_thread_pool;
} 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);