home *** CD-ROM | disk | FTP | other *** search
/ ftp.parl.clemson.edu / 2015-02-07.ftp.parl.clemson.edu.tar / ftp.parl.clemson.edu / pub / pvfs2 / orangefs-2.8.3-20110323.tar.gz / orangefs-2.8.3-20110323.tar / orangefs / src / server / pvfs2-server-req.c < prev    next >
C/C++ Source or Header  |  2009-10-07  |  8KB  |  183 lines

  1. /*
  2.  * (C) 2001 Clemson University and The University of Chicago
  3.  *
  4.  * See COPYING in top-level directory.
  5.  */
  6.  
  7. #include "pvfs2-server.h"
  8. #include "assert.h"
  9.  
  10. /* server operation state machines */
  11. extern struct PINT_server_req_params pvfs2_get_config_params;
  12. extern struct PINT_server_req_params pvfs2_get_attr_params;
  13. extern struct PINT_server_req_params pvfs2_list_attr_params;
  14. extern struct PINT_server_req_params pvfs2_set_attr_params;
  15. extern struct PINT_server_req_params pvfs2_create_params;
  16. extern struct PINT_server_req_params pvfs2_crdirent_params;
  17. extern struct PINT_server_req_params pvfs2_mkdir_params;
  18. extern struct PINT_server_req_params pvfs2_readdir_params;
  19. extern struct PINT_server_req_params pvfs2_lookup_params;
  20. extern struct PINT_server_req_params pvfs2_io_params;
  21. extern struct PINT_server_req_params pvfs2_small_io_params;
  22. extern struct PINT_server_req_params pvfs2_remove_params;
  23. extern struct PINT_server_req_params pvfs2_mgmt_remove_object_params;
  24. extern struct PINT_server_req_params pvfs2_mgmt_remove_dirent_params;
  25. extern struct PINT_server_req_params pvfs2_mgmt_get_dirdata_handle_params;
  26. extern struct PINT_server_req_params pvfs2_rmdirent_params;
  27. extern struct PINT_server_req_params pvfs2_chdirent_params;
  28. extern struct PINT_server_req_params pvfs2_flush_params;
  29. extern struct PINT_server_req_params pvfs2_truncate_params;
  30. extern struct PINT_server_req_params pvfs2_setparam_params;
  31. extern struct PINT_server_req_params pvfs2_noop_params;
  32. extern struct PINT_server_req_params pvfs2_unexpected_params;
  33. extern struct PINT_server_req_params pvfs2_statfs_params;
  34. extern struct PINT_server_req_params pvfs2_perf_update_params;
  35. extern struct PINT_server_req_params pvfs2_job_timer_params;
  36. extern struct PINT_server_req_params pvfs2_proto_error_params;
  37. extern struct PINT_server_req_params pvfs2_perf_mon_params;
  38. extern struct PINT_server_req_params pvfs2_iterate_handles_params;
  39. extern struct PINT_server_req_params pvfs2_get_eattr_params;
  40. extern struct PINT_server_req_params pvfs2_get_eattr_list_params;
  41. extern struct PINT_server_req_params pvfs2_set_eattr_params;
  42. extern struct PINT_server_req_params pvfs2_set_eattr_list_params;
  43. extern struct PINT_server_req_params pvfs2_del_eattr_params;
  44. extern struct PINT_server_req_params pvfs2_list_eattr_params;
  45. extern struct PINT_server_req_params pvfs2_batch_create_params;
  46. extern struct PINT_server_req_params pvfs2_batch_remove_params;
  47. extern struct PINT_server_req_params pvfs2_unstuff_params;
  48. extern struct PINT_server_req_params pvfs2_stuffed_create_params;
  49. extern struct PINT_server_req_params pvfs2_precreate_pool_refiller_params;
  50. extern struct PINT_server_req_params pvfs2_mirror_params;
  51. extern struct PINT_server_req_params pvfs2_create_immutable_copies_params;
  52. extern struct PINT_server_req_params pvfs2_tree_remove_params;
  53. extern struct PINT_server_req_params pvfs2_tree_get_file_size_params;
  54.  
  55. /* table of incoming request types and associated parameters */
  56. struct PINT_server_req_entry PINT_server_req_table[] =
  57. {
  58.     /* 0 */ {PVFS_SERV_INVALID, NULL},
  59.     /* 1 */ {PVFS_SERV_CREATE, &pvfs2_create_params},
  60.     /* 2 */ {PVFS_SERV_REMOVE, &pvfs2_remove_params},
  61.     /* 3 */ {PVFS_SERV_IO, &pvfs2_io_params},
  62.     /* 4 */ {PVFS_SERV_GETATTR, &pvfs2_get_attr_params},
  63.     /* 5 */ {PVFS_SERV_SETATTR, &pvfs2_set_attr_params},
  64.     /* 6 */ {PVFS_SERV_LOOKUP_PATH, &pvfs2_lookup_params},
  65.     /* 7 */ {PVFS_SERV_CRDIRENT, &pvfs2_crdirent_params},
  66.     /* 8 */ {PVFS_SERV_RMDIRENT, &pvfs2_rmdirent_params},
  67.     /* 9 */ {PVFS_SERV_CHDIRENT, &pvfs2_chdirent_params},
  68.     /* 10 */ {PVFS_SERV_TRUNCATE, &pvfs2_truncate_params},
  69.     /* 11 */ {PVFS_SERV_MKDIR, &pvfs2_mkdir_params},
  70.     /* 12 */ {PVFS_SERV_READDIR, &pvfs2_readdir_params},
  71.     /* 13 */ {PVFS_SERV_GETCONFIG, &pvfs2_get_config_params},
  72.     /* 14 */ {PVFS_SERV_WRITE_COMPLETION, NULL},
  73.     /* 15 */ {PVFS_SERV_FLUSH, &pvfs2_flush_params},
  74.     /* 16 */ {PVFS_SERV_MGMT_SETPARAM, &pvfs2_setparam_params},
  75.     /* 17 */ {PVFS_SERV_MGMT_NOOP, &pvfs2_noop_params},
  76.     /* 18 */ {PVFS_SERV_STATFS, &pvfs2_statfs_params},
  77.     /* 19 */ {PVFS_SERV_PERF_UPDATE, &pvfs2_perf_update_params},
  78.     /* 20 */ {PVFS_SERV_MGMT_PERF_MON, &pvfs2_perf_mon_params},
  79.     /* 21 */ {PVFS_SERV_MGMT_ITERATE_HANDLES, &pvfs2_iterate_handles_params},
  80.     /* 22 */ {PVFS_SERV_MGMT_DSPACE_INFO_LIST, NULL},
  81.     /* 23 */ {PVFS_SERV_MGMT_EVENT_MON, NULL},
  82.     /* 24 */ {PVFS_SERV_MGMT_REMOVE_OBJECT, &pvfs2_mgmt_remove_object_params},
  83.     /* 25 */ {PVFS_SERV_MGMT_REMOVE_DIRENT, &pvfs2_mgmt_remove_dirent_params},
  84.     /* 26 */ {PVFS_SERV_MGMT_GET_DIRDATA_HANDLE, &pvfs2_mgmt_get_dirdata_handle_params},
  85.     /* 27 */ {PVFS_SERV_JOB_TIMER, &pvfs2_job_timer_params},
  86.     /* 28 */ {PVFS_SERV_PROTO_ERROR, &pvfs2_proto_error_params},
  87.     /* 29 */ {PVFS_SERV_GETEATTR, &pvfs2_get_eattr_params},
  88.     /* 30 */ {PVFS_SERV_SETEATTR, &pvfs2_set_eattr_params},
  89.     /* 31 */ {PVFS_SERV_DELEATTR, &pvfs2_del_eattr_params},
  90.     /* 32 */ {PVFS_SERV_LISTEATTR, &pvfs2_list_eattr_params},
  91.     /* 33 */ {PVFS_SERV_SMALL_IO, &pvfs2_small_io_params},
  92.     /* 34 */ {PVFS_SERV_LISTATTR, &pvfs2_list_attr_params},
  93.     /* 35 */ {PVFS_SERV_BATCH_CREATE, &pvfs2_batch_create_params},
  94.     /* 36 */ {PVFS_SERV_BATCH_REMOVE, &pvfs2_batch_remove_params},
  95.     /* 37 */ {PVFS_SERV_PRECREATE_POOL_REFILLER, &pvfs2_precreate_pool_refiller_params},
  96.     /* 38 */ {PVFS_SERV_UNSTUFF, &pvfs2_unstuff_params},
  97.     /* 39 */ {PVFS_SERV_MIRROR, &pvfs2_mirror_params},
  98.     /* 40 */ {PVFS_SERV_IMM_COPIES, &pvfs2_create_immutable_copies_params},
  99.     /* 41 */ {PVFS_SERV_TREE_REMOVE, &pvfs2_tree_remove_params},
  100.     /* 42 */ {PVFS_SERV_TREE_GET_FILE_SIZE, &pvfs2_tree_get_file_size_params},
  101. };
  102.  
  103. #define CHECK_OP(_op_) assert(_op_ == PINT_server_req_table[_op_].op_type)
  104.  
  105. enum PINT_server_req_access_type PINT_server_req_readonly(
  106.                                     struct PVFS_server_req *req)
  107. {
  108.     return PINT_SERVER_REQ_READONLY;
  109. }
  110.  
  111. enum PINT_server_req_access_type PINT_server_req_modify(
  112.                                     struct PVFS_server_req *req)
  113. {
  114.     return PINT_SERVER_REQ_MODIFY;
  115. }
  116.  
  117. enum PINT_server_req_permissions
  118. PINT_server_req_get_perms(struct PVFS_server_req *req)
  119. {
  120.     CHECK_OP(req->op);
  121.     return PINT_server_req_table[req->op].params->perm;
  122. }
  123.  
  124. enum PINT_server_req_access_type
  125. PINT_server_req_get_access_type(struct PVFS_server_req *req)
  126. {
  127.     CHECK_OP(req->op);
  128.  
  129.     if(!PINT_server_req_table[req->op].params->access_type)
  130.     {
  131.         return PINT_SERVER_REQ_READONLY;
  132.     }
  133.     return PINT_server_req_table[req->op].params->access_type(req);
  134. }
  135.  
  136. enum PINT_server_sched_policy
  137. PINT_server_req_get_sched_policy(struct PVFS_server_req *req)
  138. {
  139.     CHECK_OP(req->op);
  140.     return PINT_server_req_table[req->op].params->sched_policy;
  141. }
  142.  
  143. int PINT_server_req_get_object_ref(
  144.     struct PVFS_server_req *req, PVFS_fs_id *fs_id, PVFS_handle *handle)
  145. {
  146.     CHECK_OP(req->op);
  147.  
  148.     if(!PINT_server_req_table[req->op].params->get_object_ref)
  149.     {
  150.         *fs_id = 0;
  151.         *handle = 0;
  152.         return 0;
  153.     }
  154.     else
  155.     {
  156.         return PINT_server_req_table[req->op].params->get_object_ref(
  157.             req, fs_id, handle);
  158.     }
  159. }
  160.  
  161. /*
  162.  * PINT_map_server_op_to_string()
  163.  *
  164.  * provides a string representation of the server operation number
  165.  *
  166.  * returns a pointer to a static string (DONT FREE IT) on success,
  167.  * null on failure
  168.  */
  169. const char* PINT_map_server_op_to_string(enum PVFS_server_op op)
  170. {
  171.     CHECK_OP(op);
  172.     return PINT_server_req_table[op].params->string_name;
  173. }
  174.  
  175. /*
  176.  * Local variables:
  177.  *  c-indent-level: 4
  178.  *  c-basic-offset: 4
  179.  * End:
  180.  *
  181.  * vim: ts=8 sts=4 sw=4 expandtab
  182.  */
  183.