Some initial work on logging gathering data into cloud log segments.
[bluesky.git] / bluesky / bluesky-private.h
index 83a383e..822e029 100644 (file)
@@ -176,6 +176,77 @@ BlueSkyLogItem *bluesky_log_item_new();
 void bluesky_log_item_submit(BlueSkyLogItem *item, BlueSkyLog *log);
 void bluesky_log_item_finish(BlueSkyLogItem *item);
 
+/* Writing of data to the cloud in log segments and tracking the location of
+ * various pieces of data (both where in the cloud and where cached locally).
+ * */
+
+typedef struct {
+    char bytes[16];
+} BlueSkyCloudID;
+
+typedef struct {
+    uint32_t directory;
+    uint32_t sequence;
+    uint32_t offset;
+    uint32_t size;
+} BlueSkyCloudPointer;
+
+typedef enum {
+    LOGTYPE_UNKNOWN = 0,
+    LOGTYPE_DATA = 1,
+    LOGTYPE_INODE = 2,
+    LOGTYPE_INODE_MAP = 3,
+    LOGTYPE_CHECKPOINT = 4,
+    LOGTYPE_CHECKPOINT_PTR = 5,
+} BlueSkyCloudLogType;
+
+/* A record which tracks an object which has been written to a local log,
+ * cached, locally, and/or written to the cloud. */
+#define CLOUDLOG_JOURNAL    0x01
+#define CLOUDLOG_CACHE      0x02
+#define CLOUDLOG_CLOUD      0x04
+typedef struct {
+    gint refcount;
+
+    BlueSkyFS *fs;
+
+    BlueSkyCloudLogType type;
+
+    // Bitmask of CLOUDLOG_* flags indicating where the object exists.
+    int location_flags;
+
+    // A stable identifier for the object (only changes when authenticated data
+    // is written out, but stays the same when the in-cloud cleaner relocates
+    // the object).
+    BlueSkyCloudID id;
+
+    // The inode which owns this data, if any, and an offset.
+    uint64_t inum;
+    int32_t inum_offset;
+
+    // The location of the object in the cloud, if available.
+    BlueSkyCloudPointer location;
+
+    // TODO: Location in journal/cache
+
+    // Pointers to other objects
+    GArray *pointers;
+
+    // Serialized data, if available in memory (otherwise NULL).
+    BlueSkyRCStr *data;
+} BlueSkyCloudLog;
+
+gboolean bluesky_cloudlog_equal(gconstpointer a, gconstpointer b);
+guint bluesky_cloudlog_hash(gconstpointer a);
+BlueSkyCloudLog *bluesky_cloudlog_new(BlueSkyFS *fs);
+gchar *bluesky_cloudlog_id_to_string(BlueSkyCloudID id);
+BlueSkyCloudID bluesky_cloudlog_id_from_string(const gchar *idstr);
+void bluesky_cloudlog_ref(BlueSkyCloudLog *log);
+void bluesky_cloudlog_unref(BlueSkyCloudLog *log);
+BlueSkyLogItem *bluesky_cloudlog_sync(BlueSkyCloudLog *log);
+void bluesky_cloudlog_insert(BlueSkyCloudLog *log);
+void bluesky_cloudlog_write_log(BlueSkyFS *fs);
+
 #ifdef __cplusplus
 }
 #endif