diff options
author | Matt Benjamin <matt@linuxbox.com> | 2013-05-23 19:31:33 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-09-04 17:49:37 -0700 |
commit | 2c82dfe8c0d2ae780de5d2fede37254924813292 (patch) | |
tree | e774c7266cbfd3f47ff557b359313887ba33e196 | |
parent | 4cc9c903943ac2553afa4a2d3a14821c6f8e544f (diff) | |
download | ceph-2c82dfe8c0d2ae780de5d2fede37254924813292.tar.gz |
client/SyntheticClient: adapt to new ll_* interface
(Includes pieces of NFS interface widening by Adam.)
Signed-off-by: Matt Benjamin <matt@linuxbox.com>
-rw-r--r-- | src/client/SyntheticClient.cc | 141 |
1 files changed, 95 insertions, 46 deletions
diff --git a/src/client/SyntheticClient.cc b/src/client/SyntheticClient.cc index 376b7ff0384..679db718ddd 100644 --- a/src/client/SyntheticClient.cc +++ b/src/client/SyntheticClient.cc @@ -1017,9 +1017,11 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) hash_map<int64_t, dir_result_t*> open_dirs; hash_map<int64_t, Fh*> ll_files; - hash_map<int64_t, void*> ll_dirs; + hash_map<int64_t, dir_result_t*> ll_dirs; hash_map<uint64_t, int64_t> ll_inos; + Inode *i1, *i2; + ll_inos[1] = 1; // root inode is known. // prefix? @@ -1027,14 +1029,16 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) if (prefix.length()) { client->mkdir(prefix.c_str(), 0755); struct stat attr; - if (client->ll_lookup(vinodeno_t(1, CEPH_NOSNAP), prefix.c_str(), &attr) == 0) { + i1 = client->ll_get_inode(vinodeno_t(1, CEPH_NOSNAP)); + if (client->ll_lookup(i1, prefix.c_str(), &attr, &i2) == 0) { ll_inos[1] = attr.st_ino; dout(5) << "'root' ino is " << inodeno_t(attr.st_ino) << dendl; + client->ll_put(i1); } else { dout(0) << "warning: play_trace couldn't lookup up my per-client directory" << dendl; } - } - + } else + (void) client->ll_get_inode(vinodeno_t(1, CEPH_NOSNAP)); utime_t last_status = start; @@ -1226,20 +1230,27 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) const char *name = t.get_string(buf, p); int64_t r = t.get_int(); struct stat attr; - if (ll_inos.count(i) && - client->ll_lookup(vinodeno_t(ll_inos[i],CEPH_NOSNAP), name, &attr) == 0) - ll_inos[r] = attr.st_ino; + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + if (client->ll_lookup(i1, name, &attr, &i2) == 0) + ll_inos[r] = attr.st_ino; + client->ll_put(i1); + } } else if (strcmp(op, "ll_forget") == 0) { int64_t i = t.get_int(); int64_t n = t.get_int(); if (ll_inos.count(i) && - client->ll_forget(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n)) + client->ll_forget( + client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)), n)) ll_inos.erase(i); } else if (strcmp(op, "ll_getattr") == 0) { int64_t i = t.get_int(); struct stat attr; - if (ll_inos.count(i)) - client->ll_getattr(vinodeno_t(ll_inos[i],CEPH_NOSNAP), &attr); + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + client->ll_getattr(i1, &attr); + client->ll_put(i1); + } } else if (strcmp(op, "ll_setattr") == 0) { int64_t i = t.get_int(); struct stat attr; @@ -1251,13 +1262,19 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) attr.st_mtime = t.get_int(); attr.st_atime = t.get_int(); int mask = t.get_int(); - if (ll_inos.count(i)) - client->ll_setattr(vinodeno_t(ll_inos[i],CEPH_NOSNAP), &attr, mask); + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + client->ll_setattr(i1, &attr, mask); + client->ll_put(i1); + } } else if (strcmp(op, "ll_readlink") == 0) { int64_t i = t.get_int(); const char *value; - if (ll_inos.count(i)) - client->ll_readlink(vinodeno_t(ll_inos[i],CEPH_NOSNAP), &value); + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + client->ll_readlink(i1, &value); + client->ll_put(i1); + } } else if (strcmp(op, "ll_mknod") == 0) { int64_t i = t.get_int(); const char *n = t.get_string(buf, p); @@ -1265,62 +1282,88 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) int r = t.get_int(); int64_t ri = t.get_int(); struct stat attr; - if (ll_inos.count(i) && - client->ll_mknod(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n, m, r, &attr) == 0) - ll_inos[ri] = attr.st_ino; + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + if (client->ll_mknod(i1, n, m, r, &attr, &i2) == 0) + ll_inos[ri] = attr.st_ino; + client->ll_put(i1); + } } else if (strcmp(op, "ll_mkdir") == 0) { int64_t i = t.get_int(); const char *n = t.get_string(buf, p); int m = t.get_int(); int64_t ri = t.get_int(); struct stat attr; - if (ll_inos.count(i) && - client->ll_mkdir(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n, m, &attr) == 0) - ll_inos[ri] = attr.st_ino; + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + if (client->ll_mkdir(i1, n, m, &attr, &i2) == 0) + ll_inos[ri] = attr.st_ino; + client->ll_put(i1); + } } else if (strcmp(op, "ll_symlink") == 0) { int64_t i = t.get_int(); const char *n = t.get_string(buf, p); const char *v = t.get_string(buf2, p); int64_t ri = t.get_int(); struct stat attr; - if (ll_inos.count(i) && - client->ll_symlink(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n, v, &attr) == 0) - ll_inos[ri] = attr.st_ino; + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + if (client->ll_symlink(i1, n, v, &attr, &i2) == 0) + ll_inos[ri] = attr.st_ino; + client->ll_put(i1); + } } else if (strcmp(op, "ll_unlink") == 0) { int64_t i = t.get_int(); const char *n = t.get_string(buf, p); - if (ll_inos.count(i)) - client->ll_unlink(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n); + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + client->ll_unlink(i1, n); + client->ll_put(i1); + } } else if (strcmp(op, "ll_rmdir") == 0) { int64_t i = t.get_int(); const char *n = t.get_string(buf, p); - if (ll_inos.count(i)) - client->ll_rmdir(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n); + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + client->ll_rmdir(i1, n); + client->ll_put(i1); + } } else if (strcmp(op, "ll_rename") == 0) { int64_t i = t.get_int(); const char *n = t.get_string(buf, p); int64_t ni = t.get_int(); const char *nn = t.get_string(buf2, p); if (ll_inos.count(i) && - ll_inos.count(ni)) - client->ll_rename(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n, - vinodeno_t(ll_inos[ni],CEPH_NOSNAP), nn); + ll_inos.count(ni)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + i2 = client->ll_get_inode(vinodeno_t(ll_inos[ni],CEPH_NOSNAP)); + client->ll_rename(i1, n, i2, nn); + client->ll_put(i1); + client->ll_put(i2); + } } else if (strcmp(op, "ll_link") == 0) { int64_t i = t.get_int(); int64_t ni = t.get_int(); const char *nn = t.get_string(buf, p); struct stat attr; if (ll_inos.count(i) && - ll_inos.count(ni)) - client->ll_link(vinodeno_t(ll_inos[i],CEPH_NOSNAP), - vinodeno_t(ll_inos[ni],CEPH_NOSNAP), nn, &attr); + ll_inos.count(ni)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + i2 = client->ll_get_inode(vinodeno_t(ll_inos[ni],CEPH_NOSNAP)); + client->ll_link(i1, i2, nn, &attr); + client->ll_put(i1); + client->ll_put(i2); + } } else if (strcmp(op, "ll_opendir") == 0) { int64_t i = t.get_int(); int64_t r = t.get_int(); - void *dirp; - if (ll_inos.count(i) && - client->ll_opendir(vinodeno_t(ll_inos[i],CEPH_NOSNAP), &dirp) == 0) - ll_dirs[r] = dirp; + dir_result_t *dirp; + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + if (client->ll_opendir(i1, &dirp) == 0) + ll_dirs[r] = dirp; + client->ll_put(i1); + } } else if (strcmp(op, "ll_releasedir") == 0) { int64_t f = t.get_int(); if (ll_dirs.count(f)) { @@ -1332,9 +1375,12 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) int64_t f = t.get_int(); int64_t r = t.get_int(); Fh *fhp; - if (ll_inos.count(i) && - client->ll_open(vinodeno_t(ll_inos[i],CEPH_NOSNAP), f, &fhp) == 0) - ll_files[r] = fhp; + if (ll_inos.count(i)) { + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + if (client->ll_open(i1, f, &fhp) == 0) + ll_files[r] = fhp; + client->ll_put(i1); + } } else if (strcmp(op, "ll_create") == 0) { int64_t i = t.get_int(); const char *n = t.get_string(buf, p); @@ -1342,12 +1388,15 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) int64_t f = t.get_int(); int64_t r = t.get_int(); int64_t ri = t.get_int(); - Fh *fhp; struct stat attr; - if (ll_inos.count(i) && - client->ll_create(vinodeno_t(ll_inos[i],CEPH_NOSNAP), n, m, f, &attr, &fhp) == 0) { - ll_inos[ri] = attr.st_ino; - ll_files[r] = fhp; + if (ll_inos.count(i)) { + Fh *fhp; + i1 = client->ll_get_inode(vinodeno_t(ll_inos[i],CEPH_NOSNAP)); + if (client->ll_create(i1, n, m, f, &attr, NULL, &fhp) == 0) { + ll_inos[ri] = attr.st_ino; + ll_files[r] = fhp; + } + client->ll_put(i1); } } else if (strcmp(op, "ll_read") == 0) { int64_t f = t.get_int(); @@ -1496,7 +1545,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) dout(1) << "leftover ll_release " << fi->second << dendl; if (fi->second) client->ll_release(fi->second); } - for (hash_map<int64_t,void*>::iterator fi = ll_dirs.begin(); + for (hash_map<int64_t,dir_result_t*>::iterator fi = ll_dirs.begin(); fi != ll_dirs.end(); ++fi) { dout(1) << "leftover ll_releasedir " << fi->second << dendl; |