[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