]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
uclient: Add methods for setting a default preferred osd.
authorGreg Farnum <gregf@hq.newdream.net>
Tue, 29 Sep 2009 19:16:55 +0000 (12:16 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Tue, 29 Sep 2009 20:38:34 +0000 (13:38 -0700)
src/client/Client.cc
src/client/Client.h
src/client/libceph.cc
src/client/libceph.h

index 91aea9831520785444d7169d9e0f09c320e82b83..2986a037aa8f43af715b8de24bb02db8f1758fc9 100644 (file)
@@ -133,6 +133,7 @@ Client::Client(Messenger *m, MonClient *mc) : timer(client_lock), client_lock("C
   file_stripe_count = 0;
   object_size = 0;
   file_replication = 0;
+  preferred_pg = 0;
 
   // 
   root = 0;
@@ -5313,6 +5314,7 @@ int Client::_create(Inode *dir, const char *name, int flags, mode_t mode, Inode
   req->head.args.open.stripe_count = file_stripe_count;
   req->head.args.open.object_size = object_size;
   req->head.args.open.file_replication = file_replication;
+  req->head.args.open.preferred = preferred_pg;
   req->dentry_drop = CEPH_CAP_FILE_SHARED;
   req->dentry_unless = CEPH_CAP_FILE_EXCL;
 
@@ -5790,6 +5792,11 @@ void Client::set_default_file_replication(int replication)
   file_replication = replication;
 }
 
+void Client::set_default_preferred_pg(int pg)
+{
+  preferred_pg = pg;
+}
+
 int Client::describe_layout(int fd, ceph_file_layout *lp)
 {
   Mutex::Locker lock(client_lock);
@@ -5838,6 +5845,13 @@ int Client::get_file_replication(int fd)
   return osdmap->get_pg_pool(pool).get_size();
 }
 
+int Client::get_default_preferred_pg(int fd)
+{
+  ceph_file_layout layout;
+  describe_layout(fd, &layout);
+  return ceph_file_layout_pg_preferred(layout);
+}
+
 int Client::get_file_stripe_address(int fd, loff_t offset, string& address)
 {
   Mutex::Locker lock(client_lock);
index 4b5886f8065242580d67f3c0fae201657b153110..f83cb7ebd5b98dd116124f205bbcfbf8ff07593e 100644 (file)
@@ -886,6 +886,7 @@ public:
   int file_stripe_count;
   int object_size;
   int file_replication;
+  int preferred_pg;
 public:
   entity_name_t get_myname() { return messenger->get_myname(); } 
   void sync_write_commit(Inode *in);
@@ -1308,11 +1309,13 @@ public:
   int get_file_replication(int fd);
   int get_file_stripe_address(int fd, loff_t offset, string& address);
   int get_local_osd();
+  int get_default_preferred_pg(int fd);
 
   void set_default_file_stripe_unit(int stripe_unit);
   void set_default_file_stripe_count(int count);
   void set_default_object_size(int size);
   void set_default_file_replication(int replication);
+  void set_default_preferred_pg(int pg);
 
   int enumerate_layout(int fd, vector<ObjectExtent>& result,
                       loff_t length, loff_t offset);
index 4c2599d94e25358309952f590d17cc313d66c72a..b30fbf3d2a2e16b6b905d293765c653546912b09 100644 (file)
@@ -326,6 +326,11 @@ extern "C" int ceph_get_file_replication(const char *path) {
   return rep;
 }
 
+extern "C" int ceph_get_default_preferred_pg(int fd)
+{
+  return client->get_default_preferred_pg(fd);
+}
+
 extern "C" int ceph_set_default_file_stripe_unit(int stripe)
 {
   client->set_default_file_stripe_unit(stripe);
@@ -350,6 +355,12 @@ extern "C" int ceph_set_default_file_replication(int replication)
   return 0;
 }
 
+extern "C" int ceph_set_default_preferred_pg(int pg)
+{
+  client->set_default_preferred_pg(pg);
+  return 0;
+}
+
 extern "C" int ceph_get_file_stripe_address(int fh, loff_t offset, char *buf, int buflen)
 {
   string address;
index 16f69ae4b25ac3896557feb630c5c49108143588..1a03d69d81541dc4a632b01ecc64652ddedf1ca7 100644 (file)
@@ -39,6 +39,7 @@ int ceph_mount();
 int ceph_umount();
 
 int ceph_statfs(const char *path, struct statvfs *stbuf);
+int ceph_get_local_osd();
 
 int ceph_getcwd(char *buf, int buflen);
 int ceph_chdir(const char *s);
@@ -91,11 +92,13 @@ int ceph_fstat(int fd, struct stat *stbuf);
 int ceph_sync_fs();
 int ceph_get_file_stripe_unit(int fh);
 int ceph_get_file_replication(const char *path);
+int ceph_get_default_preferred_pg(int fd);
 int ceph_get_file_stripe_address(int fd, loff_t offset, char *buf, int buflen);
 int ceph_set_default_file_stripe_unit(int stripe);
 int ceph_set_default_file_stripe_count(int count);
 int ceph_set_default_object_size(int size);
 int ceph_set_default_file_replication(int replication);
+int ceph_set_default_preferred_pg(int pg);
 }
 
 #endif