X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fbluesky-private.h;h=85eb99c78e23c5fdaa5082d50a912d7a0f56bcb1;hb=6955b27db8185d222adb07e57d207f7f421037e6;hp=f1f8ffc439d5cf92b9d7b0b6cff9e9b9a4af2127;hpb=2ad1881ef34f84f3dc8ded636ada9b21e3fd906b;p=bluesky.git diff --git a/bluesky/bluesky-private.h b/bluesky/bluesky-private.h index f1f8ffc..85eb99c 100644 --- a/bluesky/bluesky-private.h +++ b/bluesky/bluesky-private.h @@ -49,6 +49,10 @@ BlueSkyFS *bluesky_deserialize_superblock(const gchar *buf); BlueSkyCloudLog *bluesky_serialize_inode(BlueSkyInode *inode); gboolean bluesky_deserialize_inode(BlueSkyInode *inode, BlueSkyCloudLog *item); +void bluesky_deserialize_cloudlog(BlueSkyCloudLog *item, + const char *data, + size_t len); + void bluesky_serialize_cloudlog(BlueSkyCloudLog *log, GString *encrypted, GString *authenticated, @@ -127,11 +131,16 @@ typedef struct { /* Clean up any implementation-private data in a BlueSkyStoreAsync. */ void (*cleanup)(gpointer store, BlueSkyStoreAsync *async); + + /* Find the lexicographically-largest file starting with the specified + * prefix. */ + char * (*lookup_last)(gpointer store, const gchar *prefix); } BlueSkyStoreImplementation; void bluesky_store_register(const BlueSkyStoreImplementation *impl, const gchar *name); +char *bluesky_store_lookup_last(BlueSkyStore *store, const char *prefix); BlueSkyStoreAsync *bluesky_store_async_new(BlueSkyStore *store); gpointer bluesky_store_async_get_handle(BlueSkyStoreAsync *async); void bluesky_store_async_ref(BlueSkyStoreAsync *async); @@ -178,7 +187,11 @@ typedef enum { LOGTYPE_INODE = 2, LOGTYPE_INODE_MAP = 3, LOGTYPE_CHECKPOINT = 4, - LOGTYPE_CHECKPOINT_PTR = 5, + + /* Used only as metadata in the local journal, not loaded as a + * BlueSkyCloudLogState nor stored in the cloud */ + LOGTYPE_JOURNAL_MARKER = 16, + LOGTYPE_JOURNAL_CHECKPOINT = 17, } BlueSkyCloudLogType; /* Headers that go on items in local log segments and cloud log segments. */ @@ -202,6 +215,7 @@ struct cloudlog_header { char magic[4]; uint8_t type; BlueSkyCloudID id; + uint64_t inum; uint32_t size1, size2, size3; } __attribute__((packed)); @@ -335,6 +349,9 @@ struct _BlueSkyCacheFile { BlueSkyLog *bluesky_log_new(const char *log_directory); void bluesky_log_item_submit(BlueSkyCloudLog *item, BlueSkyLog *log); void bluesky_log_finish_all(GList *log_items); +BlueSkyCloudLog *bluesky_log_get_commit_point(BlueSkyFS *fs); +void bluesky_log_write_commit_point(BlueSkyFS *fs, BlueSkyCloudLog *marker); + BlueSkyRCStr *bluesky_log_map_object(BlueSkyFS *fs, int log_dir, int log_seq, int log_offset, int log_size); void bluesky_mmap_unref(BlueSkyCacheFile *mmap); @@ -392,6 +409,8 @@ InodeMapEntry *bluesky_inode_map_lookup(GSequence *inode_map, uint64_t inum, int action); BlueSkyCloudLog *bluesky_inode_map_serialize(BlueSkyFS *fs); +gboolean bluesky_checkpoint_load(BlueSkyFS *fs); + #ifdef __cplusplus } #endif