]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
uclient/libceph: Framework for letting users specify file striping
authorGreg Farnum <gregf@hq.newdream.net>
Wed, 2 Sep 2009 00:11:55 +0000 (17:11 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Wed, 2 Sep 2009 22:50:30 +0000 (15:50 -0700)
and object sizes is in place.

src/client/Client.cc
src/client/Client.h
src/client/libceph.cc
src/client/libceph.h

index 7645111c929b5e920cd5d3fd15caf5e7f999457c..6c9e1238fcf5dfb86763dbd277a013bc514b5efe 100644 (file)
@@ -125,6 +125,11 @@ Client::Client(Messenger *m, MonClient *mc) : timer(client_lock), client_lock("C
 
   cwd = NULL;
 
+  file_stripe_unit = -1;
+  file_stripe_count = -1;
+  object_size = -1;
+  file_replication = -1;
+
   // 
   root = 0;
 
@@ -5024,6 +5029,11 @@ int Client::_create(Inode *dir, const char *name, int flags, mode_t mode, Inode
   req->head.args.open.flags = flags | O_CREAT;
   req->head.args.open.mode = mode;
   
+  req->head.args.open.stripe_unit = file_stripe_unit;
+  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;
+
   int res = make_request(req, uid, gid);
   
   if (res >= 0) {
@@ -5415,7 +5425,25 @@ int Client::ll_release(Fh *fh)
 
 // =========================================
 // layout
+void Client::set_default_file_stripe_unit(int stripe_unit)
+{
+  file_stripe_unit = stripe_unit;
+}
+
+void Client::set_default_file_stripe_count(int count)
+{
+  file_stripe_count = count;
+}
+
+void Client::set_default_object_size(int size)
+{
+  object_size = size;
+}
 
+void Client::set_default_file_replication(int replication)
+{
+  file_replication = replication;
+}
 
 int Client::describe_layout(int fd, ceph_file_layout *lp)
 {
index fe12fee6c0e94dcca8591f76e877cd42dbc7de74..05d204fc64e86627b09240d82743993ee265cf63 100644 (file)
@@ -784,6 +784,11 @@ public:
   bool   unmounting;
 
   int    unsafe_sync_write;
+
+  int file_stripe_unit;
+  int file_stripe_count;
+  int object_size;
+  int file_replication;
 public:
   entity_name_t get_myname() { return messenger->get_myname(); } 
   void sync_write_commit(Inode *in);
@@ -1180,6 +1185,11 @@ public:
   int get_file_replication(int fd);
   int get_file_stripe_address(int fd, loff_t offset, string& address);
 
+  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);
+
   int enumerate_layout(int fd, vector<ObjectExtent>& result,
                       loff_t length, loff_t offset);
 
index 81c258ddd7fafc11933c2dfc32b529e9b6f530cd..dd110e05c87867ec1590f2128a96037792154e10 100644 (file)
@@ -326,6 +326,26 @@ extern "C" int ceph_get_file_replication(const char *path) {
   return rep;
 }
 
+extern "C" int ceph_set_default_file_stripe_unit(int stripe)
+{
+  client->set_default_file_stripe_unit(stripe);
+}
+
+int ceph_set_default_file_stripe_count(int count)
+{
+  client->set_default_file_stripe_unit(count);
+}
+
+int ceph_set_default_object_size(int size)
+{
+  client->set_default_object_size(size);
+}
+
+int ceph_set_default_file_replication(int replication)
+{
+  client->set_default_file_replication(replication);
+}
+
 int ceph_get_file_stripe_address(int fh, loff_t offset, char *buf, int buflen)
 {
   string address;
index 27b6becf0ac789f72bbbda794125c16bee8de55a..16f69ae4b25ac3896557feb630c5c49108143588 100644 (file)
@@ -92,6 +92,10 @@ int ceph_sync_fs();
 int ceph_get_file_stripe_unit(int fh);
 int ceph_get_file_replication(const char *path);
 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);
 }
 
 #endif