]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: pass UserPerm to getdir()
authorGreg Farnum <gfarnum@redhat.com>
Tue, 28 Jun 2016 23:28:34 +0000 (16:28 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Wed, 31 Aug 2016 21:33:33 +0000 (14:33 -0700)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/client/Client.cc
src/client/Client.h
src/client/SyntheticClient.cc

index 4af0fe0f8aa94dbd2a70293657fc632e971880a0..4472485d604a3e9fd38cfe558257b8ffebeb6fb9 100644 (file)
@@ -7499,7 +7499,8 @@ static int _getdir_cb(void *p, struct dirent *de, struct stat *st, int stmask, o
   return 0;
 }
 
-int Client::getdir(const char *relpath, list<string>& contents)
+int Client::getdir(const char *relpath, list<string>& contents,
+                  const UserPerm& perms)
 {
   ldout(cct, 3) << "getdir(" << relpath << ")" << dendl;
   {
index 8cc6ec912c53ea43b06b17523673a07999bb65ab..f76de8713cf3e91ef49051e311402e8097f9f74c 100644 (file)
@@ -993,7 +993,8 @@ public:
   int readdir_r(dir_result_t *dirp, struct dirent *de);
   int readdirplus_r(dir_result_t *dirp, struct dirent *de, struct stat *st, int *stmask);
 
-  int getdir(const char *relpath, list<string>& names);  // get the whole dir at once.
+  int getdir(const char *relpath, list<string>& names,
+            const UserPerm& perms);  // get the whole dir at once.
 
   /**
    * Returns the length of the buffer that got filled in, or -errno.
index 322026751133f8be592694a9d51d23c10b5691ff..de744c54671bce26ff1c003e15fe271ca741b67d 100644 (file)
@@ -1068,6 +1068,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only)
     }
 
     // high level ops ---------------------
+    UserPerm perms = client->pick_my_perms();
     if (strcmp(op, "link") == 0) {
       const char *a = t.get_string(buf, p);
       const char *b = t.get_string(buf2, p);
@@ -1131,7 +1132,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only)
     } else if (strcmp(op, "getdir") == 0) {
       const char *a = t.get_string(buf, p);
       list<string> contents;
-      int r = client->getdir(a, contents);
+      int r = client->getdir(a, contents, perms);
       if (r < 0) {
         dout(1) << "getdir on " << a << " returns " << r << dendl;
       }
@@ -1556,7 +1557,8 @@ int SyntheticClient::clean_dir(string& basedir)
 {
   // read dir
   list<string> contents;
-  int r = client->getdir(basedir.c_str(), contents);
+  UserPerm perms = client->pick_my_perms();
+  int r = client->getdir(basedir.c_str(), contents, perms);
   if (r < 0) {
     dout(1) << "getdir on " << basedir << " returns " << r << dendl;
     return r;
@@ -1605,6 +1607,7 @@ int SyntheticClient::full_walk(string& basedir)
   ceph::unordered_map<inodeno_t, int> nlink;
   ceph::unordered_map<inodeno_t, int> nlink_seen;
 
+  UserPerm perms = client->pick_my_perms();
   while (!dirq.empty()) {
     string dir = dirq.front();
     frag_info_t expect = statq.front();
@@ -1615,7 +1618,7 @@ int SyntheticClient::full_walk(string& basedir)
 
     // read dir
     list<string> contents;
-    int r = client->getdir(dir.c_str(), contents);
+    int r = client->getdir(dir.c_str(), contents, perms);
     if (r < 0) {
       dout(1) << "getdir on " << dir << " returns " << r << dendl;
       continue;
@@ -1804,8 +1807,9 @@ int SyntheticClient::read_dirs(const char *basedir, int dirs, int files, int dep
   dout(3) << "read_dirs " << basedir << " dirs " << dirs << " files " << files << " depth " << depth << dendl;
 
   list<string> contents;
+  UserPerm perms = client->pick_my_perms();
   utime_t s = ceph_clock_now(client->cct);
-  int r = client->getdir(basedir, contents);
+  int r = client->getdir(basedir, contents, perms);
   utime_t e = ceph_clock_now(client->cct);
   e -= s;
   if (r < 0) {
@@ -2638,6 +2642,7 @@ int SyntheticClient::random_walk(int num_req)
 
   init_op_dist();  // set up metadata op distribution
  
+  UserPerm perms = client->pick_my_perms();
   while (left > 0) {
     left--;
 
@@ -2777,7 +2782,7 @@ int SyntheticClient::random_walk(int num_req)
       clear_dir();
       
       list<string> c;
-      r = client->getdir( cwd.c_str(), c );
+      r = client->getdir(cwd.c_str(), c, perms);
       
       for (list<string>::iterator it = c.begin();
            it != c.end();