1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_CLS_JOURNAL_CLIENT_H
5 #define CEPH_CLS_JOURNAL_CLIENT_H
7 #include "cls/journal/cls_journal_types.h"
9 #include <boost/optional.hpp>
14 class ObjectWriteOperation;
15 class ObjectReadOperation;
22 void create(librados::ObjectWriteOperation *op,
23 uint8_t order, uint8_t splay, int64_t pool_id);
24 int create(librados::IoCtx &ioctx, const std::string &oid, uint8_t order,
25 uint8_t splay, int64_t pool_id);
27 void get_immutable_metadata(librados::IoCtx &ioctx, const std::string &oid,
28 uint8_t *order, uint8_t *splay_width,
29 int64_t *pool_id, Context *on_finish);
30 void get_mutable_metadata(librados::IoCtx &ioctx, const std::string &oid,
31 uint64_t *minimum_set, uint64_t *active_set,
32 std::set<cls::journal::Client> *clients,
35 void set_minimum_set(librados::ObjectWriteOperation *op, uint64_t object_set);
36 void set_active_set(librados::ObjectWriteOperation *op, uint64_t object_set);
38 // journal client helpers
39 int get_client(librados::IoCtx &ioctx, const std::string &oid,
40 const std::string &id, cls::journal::Client *client);
41 void get_client_start(librados::ObjectReadOperation *op,
42 const std::string &id);
43 int get_client_finish(bufferlist::iterator *iter,
44 cls::journal::Client *client);
46 int client_register(librados::IoCtx &ioctx, const std::string &oid,
47 const std::string &id, const bufferlist &data);
48 void client_register(librados::ObjectWriteOperation *op,
49 const std::string &id, const bufferlist &data);
51 int client_update_data(librados::IoCtx &ioctx, const std::string &oid,
52 const std::string &id, const bufferlist &data);
53 void client_update_data(librados::ObjectWriteOperation *op,
54 const std::string &id, const bufferlist &data);
55 int client_update_state(librados::IoCtx &ioctx, const std::string &oid,
56 const std::string &id, cls::journal::ClientState state);
57 void client_update_state(librados::ObjectWriteOperation *op,
58 const std::string &id,
59 cls::journal::ClientState state);
61 int client_unregister(librados::IoCtx &ioctx, const std::string &oid,
62 const std::string &id);
63 void client_unregister(librados::ObjectWriteOperation *op,
64 const std::string &id);
66 void client_commit(librados::ObjectWriteOperation *op, const std::string &id,
67 const cls::journal::ObjectSetPosition &commit_position);
69 int client_list(librados::IoCtx &ioctx, const std::string &oid,
70 std::set<cls::journal::Client> *clients);
71 void client_list(librados::IoCtx &ioctx, const std::string &oid,
72 std::set<cls::journal::Client> *clients, Context *on_finish);
74 // journal tag helpers
75 int get_next_tag_tid(librados::IoCtx &ioctx, const std::string &oid,
77 void get_next_tag_tid_start(librados::ObjectReadOperation *op);
78 int get_next_tag_tid_finish(bufferlist::iterator *iter,
81 int get_tag(librados::IoCtx &ioctx, const std::string &oid,
82 uint64_t tag_tid, cls::journal::Tag *tag);
83 void get_tag_start(librados::ObjectReadOperation *op,
85 int get_tag_finish(bufferlist::iterator *iter, cls::journal::Tag *tag);
87 int tag_create(librados::IoCtx &ioctx, const std::string &oid,
88 uint64_t tag_tid, uint64_t tag_class,
89 const bufferlist &data);
90 void tag_create(librados::ObjectWriteOperation *op,
91 uint64_t tag_tid, uint64_t tag_class,
92 const bufferlist &data);
94 int tag_list(librados::IoCtx &ioctx, const std::string &oid,
95 const std::string &client_id, boost::optional<uint64_t> tag_class,
96 std::set<cls::journal::Tag> *tags);
97 void tag_list_start(librados::ObjectReadOperation *op,
98 uint64_t start_after_tag_tid, uint64_t max_return,
99 const std::string &client_id,
100 boost::optional<uint64_t> tag_class);
101 int tag_list_finish(bufferlist::iterator *iter,
102 std::set<cls::journal::Tag> *tags);
104 // journal entry helpers
105 void guard_append(librados::ObjectWriteOperation *op, uint64_t soft_max_size);
107 } // namespace client
108 } // namespace journal
111 #endif // CEPH_CLS_JOURNAL_CLIENT_H