X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fbluesky-private.h;h=be7a2d349e25b66f38efc727b738ac7ed1b58bf1;hb=dddebb0ed8feb5ece494dbef1cb24ad2d4699b45;hp=dcd7c4841fcef9fd6f899a873045a3b4553679c4;hpb=7f47ef48ce38ab71fc414bee592a9078ed1c0a7a;p=bluesky.git diff --git a/bluesky/bluesky-private.h b/bluesky/bluesky-private.h index dcd7c48..be7a2d3 100644 --- a/bluesky/bluesky-private.h +++ b/bluesky/bluesky-private.h @@ -14,6 +14,7 @@ #define _BLUESKY_PRIVATE_H #include "bluesky.h" +#include #ifdef __cplusplus extern "C" { @@ -78,11 +79,13 @@ BlueSkyRCStr *bluesky_crypt_decrypt(BlueSkyRCStr *in, const uint8_t *key); void bluesky_crypt_block_encrypt(gchar *cloud_block, size_t len, BlueSkyCryptKeys *keys); gboolean bluesky_crypt_block_decrypt(gchar *cloud_block, size_t len, - BlueSkyCryptKeys *keys); + BlueSkyCryptKeys *keys, + gboolean allow_unauth); void bluesky_cloudlog_encrypt(GString *segment, BlueSkyCryptKeys *keys); void bluesky_cloudlog_decrypt(char *segment, size_t len, BlueSkyCryptKeys *keys, - BlueSkyRangeset *items); + BlueSkyRangeset *items, + gboolean allow_unauth); /* Storage layer. Requests can be performed asynchronously, so these objects * help keep track of operations in progress. */ @@ -138,6 +141,10 @@ struct BlueSkyStoreAsync { bluesky_time_hires exec_time; /* Time processing started on operation. */ gpointer store_private; /* For use by the storage implementation */ + + /* If storage operations should be charged to any particular profile, which + * one? */ + BlueSkyProfile *profile; }; /* Support for notification lists. These are lists of one-shot functions which @@ -203,6 +210,12 @@ void bluesky_file_drop_cached(BlueSkyInode *inode); * various pieces of data (both where in the cloud and where cached locally). * */ +/* Eventually we'll want to support multiple writers. But for now, hard-code + * separate namespaces in the cloud for the proxy and the cleaner to write to. + * */ +#define BLUESKY_CLOUD_DIR_PRIMARY 0 +#define BLUESKY_CLOUD_DIR_CLEANER 1 + typedef struct { char bytes[16]; } BlueSkyCloudID; @@ -315,6 +328,12 @@ struct BlueSkyCloudLogState { GList *inode_list; GSList *writeback_list; // Items which are being serialized right now GList *pending_segments; // Segments which are being uploaded now + + /* What is the most recent sequence number written by the cleaner which we + * have processed and incorporated into our own log? This gets + * incorporated into the version vector written out with our checkpoint + * records. */ + int latest_cleaner_seq_seen; }; gboolean bluesky_cloudlog_equal(gconstpointer a, gconstpointer b); @@ -386,9 +405,11 @@ struct BlueSkyCacheFile { int disk_used; BlueSkyFS *fs; BlueSkyLog *log; - gboolean fetching, ready; // Cloud data: downloading or ready for use + gboolean fetching; // Cloud data: downloading or ready for use + gboolean complete; // Complete file has been fetched from cloud int64_t atime; // Access time, for cache management BlueSkyRangeset *items; // Locations of valid items + BlueSkyRangeset *prefetches;// Locations we have been requested to prefetch }; BlueSkyLog *bluesky_log_new(const char *log_directory); @@ -397,6 +418,8 @@ 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_cachefile_map_raw(BlueSkyCacheFile *cachefile, + off_t offset, size_t size); BlueSkyRCStr *bluesky_log_map_object(BlueSkyCloudLog *item, gboolean map_data); void bluesky_mmap_unref(BlueSkyCacheFile *mmap); void bluesky_cachefile_unref(BlueSkyCacheFile *cachefile); @@ -452,6 +475,10 @@ void bluesky_inode_map_minimize(BlueSkyFS *fs); gboolean bluesky_checkpoint_load(BlueSkyFS *fs); +/* Merging of log state with the work of the cleaner. */ +void bluesky_cleaner_merge(BlueSkyFS *fs); +void bluesky_cleaner_thread_launch(BlueSkyFS *fs); + #ifdef __cplusplus } #endif