// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph - scalable distributed file system * * Copyright (C) 2004-2006 Sage Weil * * This is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software * Foundation. See file COPYING. * */ #ifndef CEPH_LOGSEGMENT_H #define CEPH_LOGSEGMENT_H #include "include/elist.h" #include "include/interval_set.h" #include "include/Context.h" #include "mdstypes.h" #include "CInode.h" #include "CDentry.h" #include "CDir.h" #include "MDSContext.h" #include "include/unordered_set.h" using ceph::unordered_set; class CDir; class CInode; class CDentry; class MDSRank; struct MDSlaveUpdate; typedef uint64_t log_segment_seq_t; class LogSegment { public: const log_segment_seq_t seq; uint64_t offset, end; int num_events; // dirty items elist dirty_dirfrags, new_dirfrags; elist dirty_inodes; elist dirty_dentries; elist open_files; elist dirty_parent_inodes; elist dirty_dirfrag_dir; elist dirty_dirfrag_nest; elist dirty_dirfrag_dirfragtree; elist slave_updates; set truncating_inodes; map > pending_commit_tids; // mdstable set uncommitted_masters; set uncommitted_fragments; // client request ids map last_client_tids; // potentially dirty sessions std::set touched_sessions; // table version version_t inotablev; version_t sessionmapv; map tablev; // try to expire void try_to_expire(MDSRank *mds, MDSGatherBuilder &gather_bld, int op_prio); std::list expiry_waiters; void wait_for_expiry(MDSInternalContextBase *c) { assert(c != NULL); expiry_waiters.push_back(c); } // cons LogSegment(uint64_t _seq, loff_t off=-1) : seq(_seq), offset(off), end(off), num_events(0), dirty_dirfrags(member_offset(CDir, item_dirty)), new_dirfrags(member_offset(CDir, item_new)), dirty_inodes(member_offset(CInode, item_dirty)), dirty_dentries(member_offset(CDentry, item_dirty)), open_files(member_offset(CInode, item_open_file)), dirty_parent_inodes(member_offset(CInode, item_dirty_parent)), dirty_dirfrag_dir(member_offset(CInode, item_dirty_dirfrag_dir)), dirty_dirfrag_nest(member_offset(CInode, item_dirty_dirfrag_nest)), dirty_dirfrag_dirfragtree(member_offset(CInode, item_dirty_dirfrag_dirfragtree)), slave_updates(0), // passed to begin() manually inotablev(0), sessionmapv(0) { } }; #endif