]> git.proxmox.com Git - ceph.git/blame - ceph/src/cls/replica_log/cls_replica_log_client.h
update sources to v12.1.0
[ceph.git] / ceph / src / cls / replica_log / cls_replica_log_client.h
CommitLineData
7c673cae
FG
1/*
2 * Ceph - scalable distributed file system
3 *
4 * This is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License version 2.1, as published by the Free Software
7 * Foundation. See file COPYING.
8 *
9 * Copyright 2013 Inktank
10 */
11
12#ifndef CLS_REPLICA_LOG_CLIENT_H_
13#define CLS_REPLICA_LOG_CLIENT_H_
14
31f18b77
FG
15#include "cls_replica_log_ops.h"
16
17namespace librados {
18 class ObjectWriteOperation;
19 class IoCtx;
20}
7c673cae
FG
21
22/**
23 * Prepare a progress marker object to send out.
24 *
25 * @param progress The marker object to prepare
26 * @param entity The ID of the entity setting the progress
27 * @param marker The marker key the entity has gotten to
28 * @param time The timestamp associated with the marker
29 * param entries A list of in-progress entries prior to the marker
30 */
31void cls_replica_log_prepare_marker(cls_replica_log_progress_marker& progress,
32 const string& entity, const string& marker,
33 const utime_t& time,
34 const list<pair<string, utime_t> > *entries);
35
36/**
37 * Extract a progress marker object into its components.
38 *
39 * @param progress The marker object to extract data from
40 * @param entity [out] The ID of the entity the progress is associated with
41 * @param marker [out] The marker key the entity has gotten to
42 * @param time [out] The timestamp associated with the marker
43 * @param entries [out] List of in-progress entries prior to the marker
44 */
45void cls_replica_log_extract_marker(const cls_replica_log_progress_marker& progress,
46 string& entity, string& marker,
47 utime_t& time,
48 list<pair<string, utime_t> >& entries);
49
50/**
51 * Add a progress marker update to a write op. The op will return 0 on
52 * success, -EEXIST if the marker conflicts with an existing one, or
53 * -EINVAL if the marker is in conflict (ie, before) the daemon's existing
54 * marker.
55 *
56 * @param op The op to add the update to
57 * @param progress The progress marker to send
58 */
59void cls_replica_log_update_bound(librados::ObjectWriteOperation& op,
60 const cls_replica_log_progress_marker& progress);
61
62/**
63 * Remove an entity's progress marker from the replica log. The op will return
64 * 0 on success, -ENOENT if the entity does not exist on the replica log, or
65 * -ENOTEMPTY if the items list on the marker is not empty.
66 *
67 * @param op The op to add the delete to
68 * @param entity The entity whose progress should be removed
69 */
70void cls_replica_log_delete_bound(librados::ObjectWriteOperation& op,
71 const string& entity);
72
73/**
74 * Read the bounds on a replica log.
75 *
76 * @param io_ctx The IoCtx to use for the read
77 * @param oid The oid to direct the read to
78 * @param position_marker [out] The lowest marker key that has been reached
79 * @param oldest_time [out] Timestamp corresponding to the position marker or
80 * oldest in-progress item.
81 * @param markers [out] List of progress markers for individual daemons
82 */
83int cls_replica_log_get_bounds(librados::IoCtx& io_ctx, const string& oid,
84 string& position_marker,
85 utime_t& oldest_time,
86 list<cls_replica_log_progress_marker>& markers);
87
88#endif /* CLS_REPLICA_LOG_CLIENT_H_ */