From: Greg Farnum Date: Wed, 2 Sep 2009 00:11:55 +0000 (-0700) Subject: uclient/libceph: Framework for letting users specify file striping X-Git-Tag: v0.14~52^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3b92ee70fa7cea94ff11396b6a87b7a6f97755ad;p=ceph.git uclient/libceph: Framework for letting users specify file striping and object sizes is in place. --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 7645111c929..6c9e1238fcf 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -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) { diff --git a/src/client/Client.h b/src/client/Client.h index fe12fee6c0e..05d204fc64e 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -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& result, loff_t length, loff_t offset); diff --git a/src/client/libceph.cc b/src/client/libceph.cc index 81c258ddd7f..dd110e05c87 100644 --- a/src/client/libceph.cc +++ b/src/client/libceph.cc @@ -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; diff --git a/src/client/libceph.h b/src/client/libceph.h index 27b6becf0ac..16f69ae4b25 100644 --- a/src/client/libceph.h +++ b/src/client/libceph.h @@ -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