diff mbox

[V2,2/2] mds: Adjust mydir auth when starting MDS that was stopped cleanly

Message ID 1348486029-1125-2-git-send-email-zheng.z.yan@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Yan, Zheng Sept. 24, 2012, 11:27 a.m. UTC
From: "Yan, Zheng" <zheng.z.yan@intel.com>

When starting a MDS that was stopped cleanly, we need manually
adjust mydir's auth. This is because MDS log is empty in this case,
mydir's auth can not be adjusted during log replay.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
---
Changelog v1 -> v2:
- call mdlog->start_new_segment() after adjusting mydir's auth.
---
 src/mds/MDCache.cc | 7 +++++++
 src/mds/MDCache.h  | 1 +
 src/mds/MDS.cc     | 5 +++--
 3 files changed, 11 insertions(+), 2 deletions(-)

Comments

Sage Weil Sept. 24, 2012, 4:40 p.m. UTC | #1
On Mon, 24 Sep 2012, Yan, Zheng wrote:
> From: "Yan, Zheng" <zheng.z.yan@intel.com>
> 
> When starting a MDS that was stopped cleanly, we need manually
> adjust mydir's auth. This is because MDS log is empty in this case,
> mydir's auth can not be adjusted during log replay.
> 
> Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
> ---
> Changelog v1 -> v2:
> - call mdlog->start_new_segment() after adjusting mydir's auth.
> ---
>  src/mds/MDCache.cc | 7 +++++++
>  src/mds/MDCache.h  | 1 +
>  src/mds/MDS.cc     | 5 +++--
>  3 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc
> index da3affb..1a0e399 100644
> --- a/src/mds/MDCache.cc
> +++ b/src/mds/MDCache.cc
> @@ -531,6 +531,13 @@ void MDCache::open_mydir_inode(Context *c)
>    in->fetch(c);
>  }
>  
> +void MDCache::adjust_mydir_auth()
> +{
> +  CDir *mydir = myin->get_or_open_dirfrag(this, frag_t());
> +  assert(mydir);
> +  adjust_subtree_auth(mydir, mds->whoami);
> +}
> +

I think it would be simpler to just roll this into open_root(), 
right after

  CDir *mydir = myin->get_or_open_dirfrag(this, frag_t());
  assert(mydir);

It makes sense to me to get the auth right when it is populated in teh 
cache. Also, it looks liek that's what we're doing for the root directory 
a few lines up.

Thanks!
sage



>  void MDCache::open_root()
>  {
>    dout(10) << "open_root" << dendl;
> diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h
> index 12bdb03..fffb083 100644
> --- a/src/mds/MDCache.h
> +++ b/src/mds/MDCache.h
> @@ -643,6 +643,7 @@ public:
>    void open_root_inode(Context *c);
>    void open_root();
>    void open_mydir_inode(Context *c);
> +  void adjust_mydir_auth();
>    void populate_mydir();
>  
>    void _create_system_file(CDir *dir, const char *name, CInode *in, Context *fin);
> diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc
> index d0aac30..ed95832 100644
> --- a/src/mds/MDS.cc
> +++ b/src/mds/MDS.cc
> @@ -1229,10 +1229,11 @@ void MDS::starting_done()
>    assert(is_starting());
>    request_state(MDSMap::STATE_ACTIVE);
>  
> +  mdcache->adjust_mydir_auth();
> +  mdcache->open_root();
> +
>    // start new segment
>    mdlog->start_new_segment(0);
> -
> -  mdcache->open_root();
>  }
>  
>  
> -- 
> 1.7.11.4
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc
index da3affb..1a0e399 100644
--- a/src/mds/MDCache.cc
+++ b/src/mds/MDCache.cc
@@ -531,6 +531,13 @@  void MDCache::open_mydir_inode(Context *c)
   in->fetch(c);
 }
 
+void MDCache::adjust_mydir_auth()
+{
+  CDir *mydir = myin->get_or_open_dirfrag(this, frag_t());
+  assert(mydir);
+  adjust_subtree_auth(mydir, mds->whoami);
+}
+
 void MDCache::open_root()
 {
   dout(10) << "open_root" << dendl;
diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h
index 12bdb03..fffb083 100644
--- a/src/mds/MDCache.h
+++ b/src/mds/MDCache.h
@@ -643,6 +643,7 @@  public:
   void open_root_inode(Context *c);
   void open_root();
   void open_mydir_inode(Context *c);
+  void adjust_mydir_auth();
   void populate_mydir();
 
   void _create_system_file(CDir *dir, const char *name, CInode *in, Context *fin);
diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc
index d0aac30..ed95832 100644
--- a/src/mds/MDS.cc
+++ b/src/mds/MDS.cc
@@ -1229,10 +1229,11 @@  void MDS::starting_done()
   assert(is_starting());
   request_state(MDSMap::STATE_ACTIVE);
 
+  mdcache->adjust_mydir_auth();
+  mdcache->open_root();
+
   // start new segment
   mdlog->start_new_segment(0);
-
-  mdcache->open_root();
 }