Add an inode map data structure to track the location of inodes in logs.
[bluesky.git] / bluesky / bluesky-private.h
index 7652cff..e5b5b58 100644 (file)
@@ -314,6 +314,42 @@ typedef struct {
     gboolean complete;
 } SerializedRecord;
 
+/***** Inode map management *****/
+
+/* Mapping information for a single inode number.  These are grouped together
+ * into InodeMapRange objects. */
+typedef struct {
+    uint64_t inum;
+
+    /* The ID of the most recent version of the inode. */
+    BlueSkyCloudID id;
+
+    /* The location where that version is written in the cloud. */
+    BlueSkyCloudPointer location;
+
+    /* If the cloud log entry exists in memory, then a pointer to it, otherwise
+     * NULL. */
+    BlueSkyCloudLog *item;
+} InodeMapEntry;
+
+typedef struct {
+    /* Starting and ending inode number values that fall in this section.
+     * Endpoint values are inclusive. */
+    uint64_t start, end;
+
+    /* A sorted list (by inode number) of InodeMapEntry objects. */
+    GSequence *map_entries;
+
+    /* The location where this inode map section is stored in the cloud. */
+    BlueSkyCloudPointer location;
+
+    /* Have there been changes that require writing this section out again? */
+    gboolean dirty;
+} InodeMapRange;
+
+InodeMapEntry *bluesky_inode_map_lookup(GSequence *inode_map, uint64_t inum,
+                                        int action);
+
 #ifdef __cplusplus
 }
 #endif