[Pvfs2-cvs] commit by kunkel in pvfs2/src/client/sysint: mgmt-migrate.sm client-state-machine.c client-state-machine.h mgmt-misc.c module.mk.in

CVS commit program cvs at parl.clemson.edu
Tue Aug 22 06:54:18 EDT 2006


Update of /projects/cvsroot/pvfs2/src/client/sysint
In directory parlweb1:/tmp/cvs-serv29962/src/client/sysint

Modified Files:
      Tag: kunkel-branch
	client-state-machine.c client-state-machine.h mgmt-misc.c 
	module.mk.in 
Added Files:
      Tag: kunkel-branch
	mgmt-migrate.sm 
Log Message:
Added tool which prints file mapping to server aliases. Added 
experimental stubs for migration tools. Added kernel tgid to request ID.
Bugfix of PINT_cached_config_get_one_server_str.


--- /dev/null	2004-06-24 14:04:38.000000000 -0400
+++ mgmt-migrate.sm	2006-08-22 06:54:18.000000000 -0400
@@ -0,0 +1,167 @@
+/* 
+ * Author julian M. Kunkel
+ * (C) 2003 Clemson University and The University of Chicago 
+ *
+ * See COPYING in top-level directory.
+ */
+
+
+#include <string.h>
+#include <assert.h>
+
+#include "client-state-machine.h"
+#include "pvfs2-debug.h"
+#include "job.h"
+#include "gossip.h"
+#include "str-utils.h"
+#include "pint-servreq.h"
+#include "pint-cached-config.h"
+#include "PINT-reqproto-encode.h"
+#include "bmi.h"
+
+extern job_context_id pint_client_sm_context;
+
+static int mgmt_migrate_setup_msgpair(
+    PINT_client_sm *sm_p, job_status_s *js_p);
+    
+static int mgmt_migrate_cleanup(
+    PINT_client_sm *sm_p, job_status_s *js_p);
+
+%%
+
+machine pvfs2_client_mgmt_migrate_sm(
+    setup_msgpair,
+    xfer_msgpair,
+    cleanup)
+{
+    state setup_msgpair
+    {
+        run mgmt_migrate_setup_msgpair;
+        success => xfer_msgpair;
+        default => cleanup;
+    }
+
+    state xfer_msgpair
+    {
+        jump pvfs2_msgpairarray_sm;
+        default => cleanup;
+    }
+
+    state cleanup
+    {
+        run mgmt_migrate_cleanup;
+        default => terminate;
+    }
+}
+
+%%
+
+PVFS_error PVFS_imgmt_migrate(
+    PVFS_fs_id fs_id,
+    PVFS_credentials *credentials,
+    PVFS_BMI_addr_t metaserver_addr,
+    PVFS_object_ref target_datafile_ref,
+    PVFS_BMI_addr_t source_dataserver,
+    PVFS_BMI_addr_t target_dataserver, 
+    PVFS_mgmt_op_id *op_id,
+    PVFS_hint * hints,
+    void *user_ptr)
+{
+    PINT_client_sm *sm_p = NULL;
+
+    gossip_debug(GOSSIP_CLIENT_DEBUG, "PVFS_imgmt_migrate entered\n");
+
+    sm_p = (PINT_client_sm *)malloc(sizeof(*sm_p));
+    if (!sm_p)
+    {
+        return -PVFS_ENOMEM;
+    }
+    memset(sm_p, 0, sizeof(*sm_p));
+
+    PINT_init_msgarray_params(&sm_p->msgarray_params, fs_id);
+    PINT_init_sysint_credentials(sm_p->cred_p, credentials);
+    sm_p->msgpair.fs_id = fs_id;
+    sm_p->msgpair.retry_flag = PVFS_MSGPAIR_NO_RETRY;
+    sm_p->msgpair.svr_addr = metaserver_addr;
+    sm_p->hints = hints;
+
+    gossip_debug(GOSSIP_CLIENT_DEBUG, "PVFS_mgmt_migrate calling "
+                 "PINT_client_state_machine_post()\n");
+                 
+    return PINT_client_state_machine_post(
+        sm_p, PVFS_MGMT_MIGRATE, op_id, user_ptr);
+}
+
+/*****************************************************************************/
+
+PVFS_error PVFS_mgmt_migrate(
+    PVFS_fs_id fs_id,
+    PVFS_credentials *credentials,
+    PVFS_BMI_addr_t metaserver_addr,
+    PVFS_object_ref target_datafile_ref,
+    PVFS_BMI_addr_t source_dataserver,
+    PVFS_BMI_addr_t target_dataserver, 
+    PVFS_hint * hints)
+{
+    PVFS_error ret = -PVFS_EINVAL, error = 0;
+    PVFS_mgmt_op_id op_id;
+
+    gossip_debug(GOSSIP_CLIENT_DEBUG, "PVFS_mgmt_migrate entered\n");
+
+    ret = PVFS_imgmt_migrate(fs_id, credentials, metaserver_addr, 
+        target_datafile_ref, source_dataserver, target_dataserver, &op_id, hints, NULL);
+    if (ret)
+    {
+        PVFS_perror_gossip("PVFS_imgmt_migrate call", ret);
+        error = ret;
+    }
+    else
+    {
+        ret = PVFS_mgmt_wait(op_id, "migrate", &error);
+        if (ret)
+        {
+            PVFS_perror_gossip("PVFS_mgmt_wait call", ret);
+            error = ret;
+        }
+    }
+
+    PVFS_mgmt_release(op_id);
+    return error;
+}
+
+/*****************************************************************************/
+ 
+static int mgmt_migrate_setup_msgpair(PINT_client_sm *sm_p,
+                                   job_status_s *js_p)
+{
+    gossip_debug(GOSSIP_CLIENT_DEBUG,
+                 "migrate state: mgmt_migrate_setup_msgpair\n");
+
+    PINT_SERVREQ_MGMT_NOOP_FILL(sm_p->msgpair.req, *sm_p->cred_p, sm_p->hints);
+
+    sm_p->msgarray = &(sm_p->msgpair);
+    sm_p->msgarray_count = 1;
+
+    js_p->error_code = 0;
+    return 1;
+}
+
+static int mgmt_migrate_cleanup(PINT_client_sm *sm_p,
+                             job_status_s *js_p)
+{
+    gossip_debug(GOSSIP_CLIENT_DEBUG, "migrate state: mgmt_migrate_cleanup\n");
+
+    sm_p->error_code = js_p->error_code;
+    sm_p->op_complete = 1;
+    return 0;
+}
+
+/*
+ * Local variables:
+ *  mode: c
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ * End:
+ *
+ * vim: ft=c ts=8 sts=4 sw=4 expandtab
+ */

Index: client-state-machine.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/client/sysint/client-state-machine.c,v
diff -p -u -r1.79.6.2 -r1.79.6.3
--- client-state-machine.c	24 Jul 2006 17:20:18 -0000	1.79.6.2
+++ client-state-machine.c	22 Aug 2006 10:54:18 -0000	1.79.6.3
@@ -213,6 +213,7 @@ struct PINT_client_op_entry_s PINT_clien
 struct PINT_client_op_entry_s PINT_client_sm_mgmt_table[] =
 {
     {&pvfs2_client_mgmt_setparam_list_sm},
+    {&pvfs2_client_mgmt_migrate_sm},
     {&pvfs2_client_mgmt_noop_sm},
     {&pvfs2_client_mgmt_statfs_list_sm},
     {&pvfs2_client_mgmt_perf_mon_list_sm},
@@ -805,6 +806,7 @@ const char *PINT_client_get_name_str(int
         { PVFS_SYS_FLUSH, "PVFS_SYS_FLUSH" },
         { PVFS_MGMT_SETPARAM_LIST, "PVFS_MGMT_SETPARAM_LIST" },
         { PVFS_MGMT_NOOP, "PVFS_MGMT_NOOP" },
+        { PVFS_MGMT_MIGRATE, "PVFS_MGMT_MIGRATE" },
         { PVFS_SYS_TRUNCATE, "PVFS_SYS_TRUNCATE" },
         { PVFS_MGMT_STATFS_LIST, "PVFS_MGMT_STATFS_LIST" },
         { PVFS_MGMT_PERF_MON_LIST, "PVFS_MGMT_PERF_MON_LIST" },

Index: client-state-machine.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/client/sysint/client-state-machine.h,v
diff -p -u -r1.162.4.1 -r1.162.4.2
--- client-state-machine.h	19 Aug 2006 13:09:33 -0000	1.162.4.1
+++ client-state-machine.h	22 Aug 2006 10:54:18 -0000	1.162.4.2
@@ -519,9 +519,9 @@ typedef struct PINT_client_sm
 	struct PINT_client_mgmt_event_mon_list_sm event_mon_list;
 	struct PINT_client_mgmt_iterate_handles_list_sm iterate_handles_list;
 	struct PINT_client_mgmt_get_dfile_array_sm get_dfile_array;
-        struct PINT_client_mgmt_remove_dirent_sm mgmt_remove_dirent;
-        struct PINT_client_mgmt_create_dirent_sm mgmt_create_dirent;
-        struct PINT_client_mgmt_get_dirdata_handle_sm mgmt_get_dirdata_handle;
+    struct PINT_client_mgmt_remove_dirent_sm mgmt_remove_dirent;
+    struct PINT_client_mgmt_create_dirent_sm mgmt_create_dirent;
+    struct PINT_client_mgmt_get_dirdata_handle_sm mgmt_get_dirdata_handle;
 	struct PINT_server_get_config_sm get_config;
 	struct PINT_client_geteattr_sm geteattr;
 	struct PINT_client_seteattr_sm seteattr;
@@ -613,6 +613,7 @@ enum
     PVFS_MGMT_REMOVE_DIRENT        = 78,
     PVFS_MGMT_CREATE_DIRENT        = 79,
     PVFS_MGMT_GET_DIRDATA_HANDLE   = 80,
+    PVFS_MGMT_MIGRATE              = 81,
     PVFS_SERVER_GET_CONFIG         = 200,
     PVFS_CLIENT_JOB_TIMER          = 300,
     PVFS_CLIENT_PERF_COUNT_TIMER   = 301,
@@ -729,6 +730,7 @@ extern struct PINT_state_machine_s pvfs2
 extern struct PINT_state_machine_s pvfs2_client_job_timer_sm;
 extern struct PINT_state_machine_s pvfs2_client_perf_count_timer_sm;
 extern struct PINT_state_machine_s pvfs2_server_get_config_sm;
+extern struct PINT_state_machine_s pvfs2_client_mgmt_migrate_sm;
 extern struct PINT_state_machine_s pvfs2_client_mgmt_setparam_list_sm;
 extern struct PINT_state_machine_s pvfs2_client_mgmt_statfs_list_sm;
 extern struct PINT_state_machine_s pvfs2_client_mgmt_perf_mon_list_sm;

Index: mgmt-misc.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/client/sysint/mgmt-misc.c,v
diff -p -u -r1.26.38.3 -r1.26.38.4
--- mgmt-misc.c	19 Aug 2006 13:09:34 -0000	1.26.38.3
+++ mgmt-misc.c	22 Aug 2006 10:54:18 -0000	1.26.38.4
@@ -19,6 +19,7 @@
 #include "bmi.h"
 #include "pint-sysint-utils.h"
 #include "pint-cached-config.h"
+#include "pint-util.h"
 #include "server-config.h"
 #include "client-state-machine.h"
 
@@ -42,6 +43,76 @@ const char *PVFS_mgmt_map_addr(
 
     PINT_put_server_config_struct(server_config);
     return ret;
+}
+
+/** Maps a given opaque server address back to its alias.  Also
+ *  fills in server extend.
+ *
+ *  \return Pointer to string on success, NULL on failure.
+ */
+PVFS_error PVFS_mgmt_map_addr_to_alias(
+    PVFS_fs_id fs_id,
+    PVFS_credentials *credentials,
+    PVFS_BMI_addr_t addr,
+    char ** out_alias,
+    PVFS_handle * out_lower_handle,
+    PVFS_handle * out_upper_handle,
+    int server_type)
+{
+    struct server_configuration_s *server_config =
+        PINT_get_server_config_struct(fs_id);
+    const char * bmi_address;
+    int ret; 
+   
+    bmi_address = BMI_addr_rev_lookup(addr);
+   
+    PVFS_handle_extent_array handle_extent;
+    ret = PINT_cached_config_get_one_server_alias(bmi_address, server_config, fs_id, & handle_extent,
+        out_alias, server_type == PVFS_MGMT_IO_SERVER);
+
+    *out_lower_handle = handle_extent.extent_array->first;
+    *out_upper_handle = handle_extent.extent_array->last;
+
+    PINT_put_server_config_struct(server_config);
+    return ret;
+}
+
+PVFS_error PVFS_mgmt_get_datafiles_from_acache(
+    PVFS_object_ref metafile_ref, 
+    PVFS_handle * dfile_array, 
+    int * inout_count)
+{
+    int ret;
+    PVFS_object_attr attr;
+    int status;
+    int size_status;
+    PVFS_size size;
+   
+    memset(& attr, 0, sizeof(PVFS_object_attr));
+    attr.mask = PVFS_ATTR_COMMON_TYPE | PVFS_ATTR_META_DFILES;
+    
+    ret =  PINT_acache_get_cached_entry( metafile_ref, & attr, & status, &size, & size_status);
+    
+    if( ret != 0 )
+    {
+        PINT_free_object_attr(& attr);
+        return ret;
+    }
+    if( attr.objtype != PVFS_TYPE_METAFILE)
+    {
+        PINT_free_object_attr(& attr);
+        return -PVFS_EINVAL;
+    }
+    
+    if( attr.u.meta.dfile_count > *inout_count){
+        return -PVFS_EINVAL;
+    } 
+    *inout_count = attr.u.meta.dfile_count;
+    memcpy(dfile_array, attr.u.meta.dfile_array, 
+        sizeof(PVFS_handle) * attr.u.meta.dfile_count);
+    
+    PINT_free_object_attr(& attr);
+    return 0;
 }
 
 /** Obtains file system statistics from all servers in a given

Index: module.mk.in
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/client/sysint/module.mk.in,v
diff -p -u -r1.82 -r1.82.12.1
--- module.mk.in	19 Apr 2006 22:22:45 -0000	1.82
+++ module.mk.in	22 Aug 2006 10:54:18 -0000	1.82.12.1
@@ -37,6 +37,7 @@ CLIENT_SMCGEN := \
 	$(DIR)/perf-count-timer.c \
 	$(DIR)/server-get-config.c \
 	$(DIR)/fs-add.c \
+	$(DIR)/mgmt-migrate.c \
 	$(DIR)/mgmt-noop.c \
 	$(DIR)/mgmt-setparam-list.c \
 	$(DIR)/mgmt-statfs-list.c \



More information about the Pvfs2-cvs mailing list