1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-06-27 07:26:50 +00:00
seafile-server/common/obj-store.h
2016-08-19 13:54:16 +08:00

141 lines
4.5 KiB
C

#ifndef OBJ_STORE_H
#define OBJ_STORE_H
#include <glib.h>
#include <sys/types.h>
struct _SeafileSession;
struct SeafObjStore;
struct CEventManager;
struct SeafObjStore *
seaf_obj_store_new (struct _SeafileSession *seaf, const char *obj_type);
int
seaf_obj_store_init (struct SeafObjStore *obj_store,
gboolean enable_async,
struct CEventManager *ev_mgr);
/* Synchronous I/O interface. */
int
seaf_obj_store_read_obj (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
const char *obj_id,
void **data,
int *len);
int
seaf_obj_store_write_obj (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
const char *obj_id,
void *data,
int len,
gboolean need_sync);
gboolean
seaf_obj_store_obj_exists (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
const char *obj_id);
void
seaf_obj_store_delete_obj (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
const char *obj_id);
typedef gboolean (*SeafObjFunc) (const char *repo_id,
int version,
const char *obj_id,
void *user_data);
int
seaf_obj_store_foreach_obj (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
SeafObjFunc process,
void *user_data);
int
seaf_obj_store_copy_obj (struct SeafObjStore *obj_store,
const char *src_store_id,
int src_version,
const char *dst_store_id,
int dst_version,
const char *obj_id);
/* Asynchronous I/O interface. */
typedef struct OSAsyncResult {
guint32 rw_id;
char obj_id[41];
/* @data is owned by obj-store, don't free it. */
void *data;
int len;
gboolean success;
} OSAsyncResult;
typedef void (*OSAsyncCallback) (OSAsyncResult *res, void *cb_data);
/* Async read */
guint32
seaf_obj_store_register_async_read (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
OSAsyncCallback callback,
void *cb_data);
void
seaf_obj_store_unregister_async_read (struct SeafObjStore *obj_store,
guint32 reader_id);
int
seaf_obj_store_async_read (struct SeafObjStore *obj_store,
guint32 reader_id,
const char *obj_id);
/* Async write */
guint32
seaf_obj_store_register_async_write (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
OSAsyncCallback callback,
void *cb_data);
void
seaf_obj_store_unregister_async_write (struct SeafObjStore *obj_store,
guint32 writer_id);
int
seaf_obj_store_async_write (struct SeafObjStore *obj_store,
guint32 writer_id,
const char *obj_id,
const void *obj_data,
int data_len,
gboolean need_sync);
/* Async stat */
guint32
seaf_obj_store_register_async_stat (struct SeafObjStore *obj_store,
const char *repo_id,
int version,
OSAsyncCallback callback,
void *cb_data);
void
seaf_obj_store_unregister_async_stat (struct SeafObjStore *obj_store,
guint32 stat_id);
int
seaf_obj_store_async_stat (struct SeafObjStore *obj_store,
guint32 stat_id,
const char *obj_id);
int
seaf_obj_store_remove_store (struct SeafObjStore *obj_store,
const char *store_id);
#endif