1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
15 #ifndef CEPH_SNAPCLIENT_H
16 #define CEPH_SNAPCLIENT_H
18 #include <string_view>
20 #include "MDSTableClient.h"
22 #include "MDSContext.h"
27 class SnapClient
: public MDSTableClient
{
29 explicit SnapClient(MDSRank
*m
) :
30 MDSTableClient(m
, TABLE_SNAP
) {}
32 void resend_queries() override
;
33 void handle_query_result(const cref_t
<MMDSTableRequest
> &m
) override
;
34 void handle_notify_prep(const cref_t
<MMDSTableRequest
> &m
) override
;
35 void notify_commit(version_t tid
) override
;
37 void prepare_create(inodeno_t dirino
, std::string_view name
, utime_t stamp
,
38 version_t
*pstid
, bufferlist
*pbl
, MDSContext
*onfinish
) {
40 __u32 op
= TABLE_OP_CREATE
;
45 _prepare(bl
, pstid
, pbl
, onfinish
);
48 void prepare_create_realm(inodeno_t ino
, version_t
*pstid
, bufferlist
*pbl
, MDSContext
*onfinish
) {
50 __u32 op
= TABLE_OP_CREATE
;
53 _prepare(bl
, pstid
, pbl
, onfinish
);
56 void prepare_destroy(inodeno_t ino
, snapid_t snapid
, version_t
*pstid
, bufferlist
*pbl
, MDSContext
*onfinish
) {
58 __u32 op
= TABLE_OP_DESTROY
;
62 _prepare(bl
, pstid
, pbl
, onfinish
);
65 void prepare_update(inodeno_t ino
, snapid_t snapid
, std::string_view name
, utime_t stamp
,
66 version_t
*pstid
, MDSContext
*onfinish
) {
68 __u32 op
= TABLE_OP_UPDATE
;
74 _prepare(bl
, pstid
, NULL
, onfinish
);
77 version_t
get_cached_version() const { return cached_version
; }
78 void refresh(version_t want
, MDSContext
*onfinish
);
80 void sync(MDSContext
*onfinish
);
82 bool is_synced() const { return synced
; }
83 void wait_for_sync(MDSContext
*c
) {
85 waiting_for_version
[std::max
<version_t
>(cached_version
, 1)].push_back(c
);
88 snapid_t
get_last_created() const { return cached_last_created
; }
89 snapid_t
get_last_destroyed() const { return cached_last_destroyed
; }
91 void get_snaps(set
<snapid_t
>& snaps
) const;
92 set
<snapid_t
> filter(const set
<snapid_t
>& snaps
) const;
93 const SnapInfo
* get_snap_info(snapid_t snapid
) const;
94 void get_snap_infos(map
<snapid_t
, const SnapInfo
*>& infomap
, const set
<snapid_t
>& snaps
) const;
96 int dump_cache(Formatter
*f
) const;
99 version_t cached_version
= 0;
100 snapid_t cached_last_created
= 0, cached_last_destroyed
= 0;
101 map
<snapid_t
, SnapInfo
> cached_snaps
;
102 map
<version_t
, SnapInfo
> cached_pending_update
;
103 map
<version_t
, pair
<snapid_t
,snapid_t
> > cached_pending_destroy
;
105 set
<version_t
> committing_tids
;
107 map
<version_t
, MDSContext::vec
> waiting_for_version
;
109 uint64_t sync_reqid
= 0;