projects
/
bluesky.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Preparatory work before implementing proper cloud writing.
[bluesky.git]
/
bluesky
/
cloudlog.c
diff --git
a/bluesky/cloudlog.c
b/bluesky/cloudlog.c
index
84e63d8
..
e1fd44a
100644
(file)
--- a/
bluesky/cloudlog.c
+++ b/
bluesky/cloudlog.c
@@
-127,13
+127,6
@@
void bluesky_cloudlog_insert(BlueSkyCloudLog *log)
g_mutex_unlock(log->fs->lock);
}
g_mutex_unlock(log->fs->lock);
}
-/* Serialize objects into a log segment to be written to the cloud. */
-struct log_state {
- GString *data;
- BlueSkyCloudPointer location;
- GList *inode_list;
-};
-
struct log_header {
char magic[4];
uint32_t size;
struct log_header {
char magic[4];
uint32_t size;
@@
-152,7
+145,7
@@
struct log_footer {
};
BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
};
BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
-
struct log_s
tate *state)
+
BlueSkyCloudLogS
tate *state)
{
if (log->location_flags & CLOUDLOG_CLOUD) {
return log->location;
{
if (log->location_flags & CLOUDLOG_CLOUD) {
return log->location;
@@
-198,7
+191,7
@@
BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
static void find_inodes(gpointer key, gpointer value, gpointer user_data)
{
static void find_inodes(gpointer key, gpointer value, gpointer user_data)
{
-
struct log_state *state = (struct log_s
tate *)user_data;
+
BlueSkyCloudLogState *state = (BlueSkyCloudLogS
tate *)user_data;
BlueSkyCloudLog *item = (BlueSkyCloudLog *)value;
if (item->type != LOGTYPE_INODE)
BlueSkyCloudLog *item = (BlueSkyCloudLog *)value;
if (item->type != LOGTYPE_INODE)
@@
-212,34
+205,33
@@
void bluesky_cloudlog_write_log(BlueSkyFS *fs)
{
g_print("Starting cloudlog write...\n");
{
g_print("Starting cloudlog write...\n");
- struct log_state state;
- state.data = g_string_new("");
- state.location.directory = 0;
- state.location.sequence = 0;
- state.location.offset = 0;
- state.location.size = 0;
- state.inode_list = NULL;
+ BlueSkyCloudLogState *state = fs->log_state;
+ state->data = g_string_new("");
g_mutex_lock(fs->lock);
g_mutex_lock(fs->lock);
- g_hash_table_foreach(fs->locations, find_inodes,
&
state);
+ g_hash_table_foreach(fs->locations, find_inodes, state);
g_mutex_unlock(fs->lock);
g_mutex_unlock(fs->lock);
- while (state
.
inode_list != NULL) {
- BlueSkyCloudLog *log = (BlueSkyCloudLog *)state
.
inode_list->data;
- bluesky_cloudlog_serialize(log,
&
state);
- state
.inode_list = g_list_delete_link(state.
inode_list,
-
state.
inode_list);
+ while (state
->
inode_list != NULL) {
+ BlueSkyCloudLog *log = (BlueSkyCloudLog *)state
->
inode_list->data;
+ bluesky_cloudlog_serialize(log, state);
+ state
->inode_list = g_list_delete_link(state->
inode_list,
+
state->
inode_list);
}
}
- g_print("Serialized %zd bytes of data\n", state
.
data->len);
+ g_print("Serialized %zd bytes of data\n", state
->
data->len);
BlueSkyStoreAsync *async = bluesky_store_async_new(fs->store);
async->op = STORE_OP_PUT;
async->key = g_strdup_printf("log-%08d-%08d",
BlueSkyStoreAsync *async = bluesky_store_async_new(fs->store);
async->op = STORE_OP_PUT;
async->key = g_strdup_printf("log-%08d-%08d",
- state
.
location.directory,
- state
.
location.sequence);
- async->data = bluesky_string_new_from_gstring(state
.
data);
+ state
->
location.directory,
+ state
->
location.sequence);
+ async->data = bluesky_string_new_from_gstring(state
->
data);
bluesky_store_async_submit(async);
bluesky_store_async_wait(async);
bluesky_store_async_unref(async);
bluesky_store_async_submit(async);
bluesky_store_async_wait(async);
bluesky_store_async_unref(async);
+
+ state->data = NULL;
+ state->location.sequence++;
+ state->location.offset = 0;
}
}