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_LOGSEGMENT_H
16 #define CEPH_LOGSEGMENT_H
18 #include "include/elist.h"
19 #include "include/interval_set.h"
20 #include "include/Context.h"
21 #include "MDSContext.h"
27 #include "include/unordered_set.h"
29 using ceph::unordered_set
;
39 using seq_t
= uint64_t;
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
))
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
&&
59 purged_cb
->complete(0);
61 void set_purged_cb(MDSContext
* c
){
62 ceph_assert(purged_cb
== NULL
);
65 void wait_for_expiry(MDSContext
*c
)
67 ceph_assert(c
!= NULL
);
68 expiry_waiters
.push_back(c
);
76 elist
<CDir
*> dirty_dirfrags
, new_dirfrags
;
77 elist
<CInode
*> dirty_inodes
;
78 elist
<CDentry
*> dirty_dentries
;
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
;
86 elist
<MDSlaveUpdate
*> slave_updates
{0}; // passed to begin() manually
88 set
<CInode
*> truncating_inodes
;
89 interval_set
<inodeno_t
> purge_inodes
;
90 MDSContext
* purged_cb
= nullptr;
92 map
<int, ceph::unordered_set
<version_t
> > pending_commit_tids
; // mdstable
93 set
<metareqid_t
> uncommitted_masters
;
94 set
<dirfrag_t
> uncommitted_fragments
;
97 map
<int, ceph_tid_t
> last_client_tids
;
99 // potentially dirty sessions
100 std::set
<entity_name_t
> touched_sessions
;
103 version_t inotablev
= 0;
104 version_t sessionmapv
= 0;
105 map
<int,version_t
> tablev
;
107 MDSContext::vec expiry_waiters
;