[Pvfs2-cvs] commit by kunkel in pvfs2/src/proto: PINT-le-bytefield.c endecode-funcs.h pvfs2-req-proto.h

CVS commit program cvs at parl.clemson.edu
Sat Aug 26 09:37:47 EDT 2006


Update of /projects/cvsroot/pvfs2/src/proto
In directory parlweb1:/tmp/cvs-serv11028/src/proto

Modified Files:
      Tag: kunkel-branch
	PINT-le-bytefield.c endecode-funcs.h pvfs2-req-proto.h 
Log Message:
Migration of datafiles between different servers works. Uses msgpairray.sm,
transfers only one datafile between two servers and rewrites metadata.
Todo: Adaption of request scheduler to ensure that migration and write 
I/O do not happen concurrently on source dataserver.
Also allow users to specify command line parameter which supresses
transfer of pvfs2-hints.


Index: PINT-le-bytefield.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/proto/PINT-le-bytefield.c,v
diff -p -u -r1.41.4.4 -r1.41.4.5
--- PINT-le-bytefield.c	22 Aug 2006 10:54:20 -0000	1.41.4.4
+++ PINT-le-bytefield.c	26 Aug 2006 13:37:47 -0000	1.41.4.5
@@ -105,10 +105,6 @@ static void lebf_initialize(void)
 	    case PVFS_SERV_REMOVE:
 		/* nothing special, let normal encoding work */
 		break;
-        case PVFS_SERV_MGMT_MIGRATE:
-        req.u.mgmt_migrate.new_datafile_extent_array.extent_count = 0;
-        reqsize = extra_size_PVFS_servreq_mgmt_migrate;        
-        break;
 	    case PVFS_SERV_MGMT_REMOVE_OBJECT:
 		/* nothing special, let normal encoding work */
 		break;
@@ -121,12 +117,12 @@ static void lebf_initialize(void)
 		req.u.io.file_req = &tmp_req;
 		reqsize = extra_size_PVFS_servreq_io;
 		break;
-            case PVFS_SERV_SMALL_IO:
-                req.u.small_io.dist = &tmp_dist;
-                req.u.small_io.file_req = &tmp_req;
-                reqsize = extra_size_PVFS_servreq_small_io;
-                respsize = extra_size_PVFS_servresp_small_io;
-                break;
+        case PVFS_SERV_SMALL_IO:
+            req.u.small_io.dist = &tmp_dist;
+            req.u.small_io.file_req = &tmp_req;
+            reqsize = extra_size_PVFS_servreq_small_io;
+            respsize = extra_size_PVFS_servresp_small_io;
+            break;
 	    case PVFS_SERV_GETATTR:
 		resp.u.getattr.attr.mask = 0;
 		respsize = extra_size_PVFS_servresp_getattr;
@@ -160,6 +156,8 @@ static void lebf_initialize(void)
 		resp.u.readdir.dirent_count = 0;
 		respsize = extra_size_PVFS_servresp_readdir;
 		break;
+        case PVFS_SERV_MGMT_MIGRATE:
+        break;
 	    case PVFS_SERV_FLUSH:
 		/* nothing special */
 		break;
@@ -447,7 +445,6 @@ static int lebf_encode_resp(
         CASE(PVFS_SERV_MKDIR, mkdir);
         CASE(PVFS_SERV_READDIR, readdir);
         CASE(PVFS_SERV_STATFS, statfs);
-        CASE(PVFS_SERV_MGMT_MIGRATE, mgmt_migrate);
         CASE(PVFS_SERV_MGMT_SETPARAM, mgmt_setparam);
         CASE(PVFS_SERV_MGMT_PERF_MON, mgmt_perf_mon);
         CASE(PVFS_SERV_MGMT_ITERATE_HANDLES, mgmt_iterate_handles);
@@ -457,7 +454,8 @@ static int lebf_encode_resp(
         CASE(PVFS_SERV_MGMT_GET_DIRDATA_HANDLE, mgmt_get_dirdata_handle);
         CASE(PVFS_SERV_GETEATTR, geteattr);
         CASE(PVFS_SERV_LISTEATTR, listeattr);
-
+            
+            case PVFS_SERV_MGMT_MIGRATE:
             case PVFS_SERV_REMOVE:
             case PVFS_SERV_MGMT_REMOVE_OBJECT:
             case PVFS_SERV_MGMT_REMOVE_DIRENT:
@@ -632,7 +630,6 @@ static int lebf_decode_resp(
 	CASE(PVFS_SERV_MKDIR, mkdir);
 	CASE(PVFS_SERV_READDIR, readdir);
 	CASE(PVFS_SERV_STATFS, statfs);
-    CASE(PVFS_SERV_MGMT_MIGRATE, mgmt_migrate);
 	CASE(PVFS_SERV_MGMT_SETPARAM, mgmt_setparam);
 	CASE(PVFS_SERV_MGMT_PERF_MON, mgmt_perf_mon);
 	CASE(PVFS_SERV_MGMT_ITERATE_HANDLES, mgmt_iterate_handles);
@@ -643,6 +640,7 @@ static int lebf_decode_resp(
 	CASE(PVFS_SERV_GETEATTR, geteattr);
         CASE(PVFS_SERV_LISTEATTR, listeattr);
 
+        case PVFS_SERV_MGMT_MIGRATE:
         case PVFS_SERV_REMOVE:
         case PVFS_SERV_MGMT_REMOVE_OBJECT:
         case PVFS_SERV_MGMT_REMOVE_DIRENT:
@@ -723,10 +721,10 @@ static void lebf_decode_rel(struct PINT_
 		decode_free(req->u.io.file_req);
 		break;
 
-            case PVFS_SERV_SMALL_IO:
-                decode_free(req->u.small_io.dist);
-                decode_free(req->u.small_io.file_req);
-                break;
+        case PVFS_SERV_SMALL_IO:
+            decode_free(req->u.small_io.dist);
+            decode_free(req->u.small_io.file_req);
+            break;
 
 	    case PVFS_SERV_MKDIR:
 		decode_free(req->u.mkdir.handle_extent_array.extent_array);
@@ -735,9 +733,6 @@ static void lebf_decode_rel(struct PINT_
 		if (req->u.mkdir.attr.mask & PVFS_ATTR_META_DFILES)
 		    decode_free(req->u.mkdir.attr.u.meta.dfile_array);
 		break;
-        case PVFS_SERV_MGMT_MIGRATE:
-        decode_free(req->u.mgmt_migrate.new_datafile_extent_array.extent_array);
-        break;
 	    case PVFS_SERV_MGMT_DSPACE_INFO_LIST:
 		decode_free(req->u.mgmt_dspace_info_list.handle_array);
 		break;
@@ -748,7 +743,8 @@ static void lebf_decode_rel(struct PINT_
 		if (req->u.setattr.attr.mask & PVFS_ATTR_META_DFILES)
 		    decode_free(req->u.setattr.attr.u.meta.dfile_array);
 		break;
-
+        
+        case PVFS_SERV_MGMT_MIGRATE:
 	    case PVFS_SERV_GETCONFIG:
 	    case PVFS_SERV_LOOKUP_PATH:
 	    case PVFS_SERV_REMOVE:

Index: endecode-funcs.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/proto/endecode-funcs.h,v
diff -p -u -r1.18 -r1.18.4.1
--- endecode-funcs.h	16 Jun 2006 21:01:15 -0000	1.18
+++ endecode-funcs.h	26 Aug 2006 13:37:47 -0000	1.18.4.1
@@ -232,6 +232,28 @@ static inline void decode_##name(char **
 #define endecode_fields_5_struct(name, t1, x1, t2, x2, t3, x3, t4, x4, t5, x5) \
     endecode_fields_5_generic(name, struct name, t1, x1, t2, x2, t3, x3, t4, x4, t5, x5)
 
+#define endecode_fields_6_generic(name, sname, t1, x1, t2, x2, t3, x3, t4, x4, t5, x5, t6, x6) \
+static inline void encode_##name(char **pptr, const sname *x) { \
+    encode_##t1(pptr, &x->x1); \
+    encode_##t2(pptr, &x->x2); \
+    encode_##t3(pptr, &x->x3); \
+    encode_##t4(pptr, &x->x4); \
+    encode_##t5(pptr, &x->x5); \
+    encode_##t6(pptr, &x->x6); \
+} \
+static inline void decode_##name(char **pptr, sname *x) { \
+    decode_##t1(pptr, &x->x1); \
+    decode_##t2(pptr, &x->x2); \
+    decode_##t3(pptr, &x->x3); \
+    decode_##t4(pptr, &x->x4); \
+    decode_##t5(pptr, &x->x5); \
+    decode_##t6(pptr, &x->x6); \
+}
+#define endecode_fields_6(name, t1, x1, t2, x2, t3, x3, t4, x4, t5, x5, t6, x6) \
+    endecode_fields_6_generic(name, name, t1, x1, t2, x2, t3, x3, t4, x4, t5, x5, t6, x6)
+#define endecode_fields_6_struct(name, t1, x1, t2, x2, t3, x3, t4, x4, t5, x5, t6, x6) \
+    endecode_fields_6_generic(name, struct name, t1, x1, t2, x2, t3, x3, t4, x4, t5, x5, t6, x6)
+
 #define endecode_fields_7(name,t1,x1,t2,x2,t3,x3,t4,x4,t5,x5,t6,x6,t7,x7) \
 static inline void encode_##name(char **pptr, const name *x) { \
     encode_##t1(pptr, &x->x1); \

Index: pvfs2-req-proto.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/proto/pvfs2-req-proto.h,v
diff -p -u -r1.140.4.4 -r1.140.4.5
--- pvfs2-req-proto.h	22 Aug 2006 10:54:20 -0000	1.140.4.4
+++ pvfs2-req-proto.h	26 Aug 2006 13:37:47 -0000	1.140.4.5
@@ -202,17 +202,6 @@ endecode_fields_1_struct(
     PVFS_servresp_create,
     PVFS_handle, handle)
 
-/*
- * New datafile handle
- */
-struct PVFS_servresp_mgmt_migrate
-{
-    PVFS_handle handle;
-};
-endecode_fields_1_struct(
-    PVFS_servresp_mgmt_migrate,
-    PVFS_handle, handle)
-
 /* remove *****************************************************/
 /* - used to remove an existing metafile or datafile object */
 
@@ -938,42 +927,61 @@ endecode_fields_1_struct(
 
 struct PVFS_servreq_mgmt_migrate
 {
-    PVFS_handle handle;
-    PVFS_fs_id  fs_id;
-    
-    PVFS_handle datafile_handle;
-    PVFS_handle_extent_array new_datafile_extent_array;
+    PVFS_fs_id  fs_id;   
+    PVFS_handle handle; /* we operate with this one !*/
+    PVFS_handle old_datafile_handle;
+    PVFS_handle new_datafile_handle;
+    PVFS_handle metafile_handle;
+    int32_t     role; /* metaserver, source or target*/ 
 };
-endecode_fields_4_struct(
+
+endecode_fields_6_struct(
     PVFS_servreq_mgmt_migrate,
+    PVFS_fs_id,  fs_id,
     PVFS_handle, handle,
-    PVFS_fs_id, fs_id,
-    PVFS_handle, datafile_handle,
-    PVFS_handle_extent_array, new_datafile_extent_array)
-#define extra_size_PVFS_servreq_mgmt_migrate \
-    (PVFS_REQ_LIMIT_HANDLES_COUNT * sizeof(PVFS_handle_extent))
+    PVFS_handle, old_datafile_handle,
+    PVFS_handle, new_datafile_handle,
+    PVFS_handle, metafile_handle,
+    int32_t,     role)
 
-#define PINT_SERVREQ_MGMT_MIGRATE_FILL(__req,                \
+enum migrate_role{
+    PVFS_MIGRATE_ROLE_METASERVER = 5,
+    PVFS_MIGRATE_ROLE_SOURCE_DATA_SERVER = 6
+};
+
+#define PINT_SERVREQ_MGMT_MIGRATE_FILL(__req,          \
                                  __creds,              \
-                                 __handle,             \
                                  __fsid,               \
-                                 __data_handle,        \
-                                 __ext_array,          \
+                                 __metafile_handle,    \
+                                 __old_datafile_handle,\
+                                 __new_datafile_handle,\
+                                 __role,               \
                                  __hints)              \
 do {                                                   \
     memset(&(__req), 0, sizeof(__req));                \
-    (__req).op = PVFS_SERV_CREATE;                     \
+    (__req).op = PVFS_SERV_MGMT_MIGRATE;               \
     (__req).hints = (__hints);                         \
     (__req).credentials = (__creds);                   \
     (__req).u.mgmt_migrate.fs_id = (__fsid);           \
-    (__req).u.mgmt_migrate.handle = (__handle);        \
-    (__req).u.mgmt_migrate.datafile_handle = (__data_handle);      \
-    (__req).u.mgmt_migrate.new_datafile_extent_array.extent_count =\
-        (__ext_array).extent_count;                                \
-    (__req).u.mgmt_migrate.new_datafile_extent_array.extent_array =\
-        (__ext_array).extent_array;                                \
+    (__req).u.mgmt_migrate.old_datafile_handle =       \
+        (__old_datafile_handle);                       \
+    (__req).u.mgmt_migrate.new_datafile_handle =       \
+        (__new_datafile_handle);                       \
+    (__req).u.mgmt_migrate.metafile_handle =           \
+        (__metafile_handle);                           \
+    (__req).u.mgmt_migrate.role = __role;                     \
+        switch(__role){                                       \
+            case PVFS_MIGRATE_ROLE_METASERVER:                \
+            (__req).u.mgmt_migrate.handle = __metafile_handle;\
+            break;                                            \
+            case PVFS_MIGRATE_ROLE_SOURCE_DATA_SERVER:        \
+            (__req).u.mgmt_migrate.handle = __old_datafile_handle;\
+            break;                                              \
+            default:                                            \
+            assert(0);                                          \
+        }                                                       \
 } while (0)
-
+    
 
 struct PVFS_servreq_small_io
 {
@@ -1646,7 +1654,6 @@ struct PVFS_server_resp
         struct PVFS_servresp_mgmt_dspace_info_list mgmt_dspace_info_list;
         struct PVFS_servresp_mgmt_event_mon mgmt_event_mon;
         struct PVFS_servresp_mgmt_get_dirdata_handle mgmt_get_dirdata_handle;
-        struct PVFS_servresp_mgmt_migrate mgmt_migrate;
         struct PVFS_servresp_geteattr geteattr;
         struct PVFS_servresp_listeattr listeattr;
         struct PVFS_servresp_small_io small_io;



More information about the Pvfs2-cvs mailing list