]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | /* | |
4 | * Ceph - scalable distributed file system | |
5 | * | |
6 | * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net> | |
7 | * | |
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. | |
12 | * | |
13 | */ | |
14 | ||
15 | #ifndef CEPH_LOGSEGMENT_H | |
16 | #define CEPH_LOGSEGMENT_H | |
17 | ||
18 | #include "include/elist.h" | |
19 | #include "include/interval_set.h" | |
20 | #include "include/Context.h" | |
11fdf7f2 | 21 | #include "MDSContext.h" |
7c673cae FG |
22 | #include "mdstypes.h" |
23 | #include "CInode.h" | |
24 | #include "CDentry.h" | |
25 | #include "CDir.h" | |
7c673cae FG |
26 | |
27 | #include "include/unordered_set.h" | |
9f95a23c | 28 | |
7c673cae FG |
29 | using ceph::unordered_set; |
30 | ||
31 | class CDir; | |
32 | class CInode; | |
33 | class CDentry; | |
34 | class MDSRank; | |
35 | struct MDSlaveUpdate; | |
36 | ||
7c673cae FG |
37 | class LogSegment { |
38 | public: | |
9f95a23c TL |
39 | using seq_t = uint64_t; |
40 | ||
41 | LogSegment(uint64_t _seq, loff_t off=-1) : | |
42 | seq(_seq), offset(off), end(off), | |
43 | dirty_dirfrags(member_offset(CDir, item_dirty)), | |
44 | new_dirfrags(member_offset(CDir, item_new)), | |
45 | dirty_inodes(member_offset(CInode, item_dirty)), | |
46 | dirty_dentries(member_offset(CDentry, item_dirty)), | |
47 | open_files(member_offset(CInode, item_open_file)), | |
48 | dirty_parent_inodes(member_offset(CInode, item_dirty_parent)), | |
49 | dirty_dirfrag_dir(member_offset(CInode, item_dirty_dirfrag_dir)), | |
50 | dirty_dirfrag_nest(member_offset(CInode, item_dirty_dirfrag_nest)), | |
51 | dirty_dirfrag_dirfragtree(member_offset(CInode, item_dirty_dirfrag_dirfragtree)) | |
52 | {} | |
53 | ||
54 | void try_to_expire(MDSRank *mds, MDSGatherBuilder &gather_bld, int op_prio); | |
55 | void purge_inodes_finish(interval_set<inodeno_t>& inos){ | |
56 | purge_inodes.subtract(inos); | |
57 | if (NULL != purged_cb && | |
58 | purge_inodes.empty()) | |
59 | purged_cb->complete(0); | |
60 | } | |
61 | void set_purged_cb(MDSContext* c){ | |
62 | ceph_assert(purged_cb == NULL); | |
63 | purged_cb = c; | |
64 | } | |
65 | void wait_for_expiry(MDSContext *c) | |
66 | { | |
67 | ceph_assert(c != NULL); | |
68 | expiry_waiters.push_back(c); | |
69 | } | |
70 | ||
71 | const seq_t seq; | |
7c673cae | 72 | uint64_t offset, end; |
9f95a23c | 73 | int num_events = 0; |
7c673cae FG |
74 | |
75 | // dirty items | |
76 | elist<CDir*> dirty_dirfrags, new_dirfrags; | |
77 | elist<CInode*> dirty_inodes; | |
78 | elist<CDentry*> dirty_dentries; | |
79 | ||
80 | elist<CInode*> open_files; | |
81 | elist<CInode*> dirty_parent_inodes; | |
82 | elist<CInode*> dirty_dirfrag_dir; | |
83 | elist<CInode*> dirty_dirfrag_nest; | |
84 | elist<CInode*> dirty_dirfrag_dirfragtree; | |
85 | ||
7c673cae | 86 | set<CInode*> truncating_inodes; |
9f95a23c TL |
87 | interval_set<inodeno_t> purge_inodes; |
88 | MDSContext* purged_cb = nullptr; | |
7c673cae FG |
89 | |
90 | map<int, ceph::unordered_set<version_t> > pending_commit_tids; // mdstable | |
91 | set<metareqid_t> uncommitted_masters; | |
e306af50 | 92 | set<metareqid_t> uncommitted_slaves; |
7c673cae FG |
93 | set<dirfrag_t> uncommitted_fragments; |
94 | ||
95 | // client request ids | |
96 | map<int, ceph_tid_t> last_client_tids; | |
97 | ||
98 | // potentially dirty sessions | |
99 | std::set<entity_name_t> touched_sessions; | |
100 | ||
101 | // table version | |
9f95a23c TL |
102 | version_t inotablev = 0; |
103 | version_t sessionmapv = 0; | |
7c673cae FG |
104 | map<int,version_t> tablev; |
105 | ||
11fdf7f2 | 106 | MDSContext::vec expiry_waiters; |
7c673cae FG |
107 | }; |
108 | ||
109 | #endif |