Changeset 561
- Timestamp:
- 02/21/07 15:59:00 (2 years ago)
- Files:
-
- trunk/src/vcc/vce/Makefile.am (modified) (1 diff)
- trunk/src/vcc/vce/cmd.c (modified) (2 diffs)
- trunk/src/vcc/vce/cmd.h (modified) (1 diff)
- trunk/src/vcc/vce/dep.c (deleted)
- trunk/src/vcd/methods.c (modified) (1 diff)
- trunk/src/vcd/methods.h (modified) (1 diff)
- trunk/src/vcd/methods/Makefile.am (modified) (1 diff)
- trunk/src/vcd/methods/vg/vg_internal.c (modified) (2 diffs)
- trunk/src/vcd/methods/vg/vg_internal.h (modified) (2 diffs)
- trunk/src/vcd/methods/vg/vg_vx_start.c (modified) (3 diffs)
- trunk/src/vcd/methods/vg/vg_vx_stop.c (modified) (3 diffs)
- trunk/src/vcd/methods/vx/vx_create.c (modified) (2 diffs)
- trunk/src/vcd/methods/vx/vx_remove.c (modified) (2 diffs)
- trunk/src/vcd/methods/vx/vx_start.c (modified) (2 diffs)
- trunk/src/vcd/methods/vxdb/vxdb_dep_add.c (deleted)
- trunk/src/vcd/methods/vxdb/vxdb_dep_remove.c (deleted)
- trunk/src/vcd/vxdb-tables.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/vcc/vce/Makefile.am
r559 r561 23 23 24 24 libcmd_a_SOURCES = cmd.c \ 25 dep.c \26 25 dx_limit.c \ 27 26 init.c \ trunk/src/vcc/vce/cmd.c
r560 r561 23 23 24 24 cmd_t CMDS[] = { 25 { "dep.add", cmd_dep_add },26 { "dep.remove", cmd_dep_remove },27 25 { "dx.limit.get", cmd_dx_limit_get }, 28 26 { "dx.limit.remove", cmd_dx_limit_remove }, … … 67 65 "Available commands:\n" 68 66 " list [<username>]\n" 69 "\n"70 " dep.add <name> <depname>\n"71 " dep.remove <name> <depname>\n"72 67 "\n" 73 68 " dx.limit.get <name>\n" trunk/src/vcc/vce/cmd.h
r559 r561 21 21 void usage(int rc); 22 22 23 void cmd_dep_add (xmlrpc_env *env, int argc, char **argv);24 void cmd_dep_remove (xmlrpc_env *env, int argc, char **argv);25 23 void cmd_dx_limit_get (xmlrpc_env *env, int argc, char **argv); 26 24 void cmd_dx_limit_remove (xmlrpc_env *env, int argc, char **argv); trunk/src/vcd/methods.c
r559 r561 115 115 116 116 /* vxdb */ 117 MREGISTER("vxdb.dep.add", m_vxdb_dep_add);118 MREGISTER("vxdb.dep.remove", m_vxdb_dep_remove);119 117 MREGISTER("vxdb.dx.limit.get", m_vxdb_dx_limit_get); 120 118 MREGISTER("vxdb.dx.limit.remove", m_vxdb_dx_limit_remove); trunk/src/vcd/methods.h
r559 r561 158 158 159 159 /* vxdb */ 160 MPROTO(m_vxdb_dep_add);161 MPROTO(m_vxdb_dep_remove);162 160 MPROTO(m_vxdb_dx_limit_get); 163 161 MPROTO(m_vxdb_dx_limit_remove); trunk/src/vcd/methods/Makefile.am
r560 r561 52 52 vx/vx_stop.c 53 53 54 M_VXDB = vxdb/vxdb_dep_add.c \ 55 vxdb/vxdb_dep_remove.c \ 56 vxdb/vxdb_dx_limit_get.c \ 54 M_VXDB = vxdb/vxdb_dx_limit_get.c \ 57 55 vxdb/vxdb_dx_limit_remove.c \ 58 56 vxdb/vxdb_dx_limit_set.c \ trunk/src/vcd/methods/vg/vg_internal.c
r560 r561 20 20 #include <lucid/str.h> 21 21 22 #include "validate.h" 23 #include "vxdb.h" 24 22 25 #include "vg_internal.h" 23 26 24 int vg_list_from_vxdb(vxdb_result *dbr, vg_list_t *vxs)27 xmlrpc_value *vg_list_init(xmlrpc_env *env, const char *group, vg_list_t *vxs) 25 28 { 26 int rc; 29 int rc, gid; 30 vg_list_t *new; 31 32 if (!validate_group(group)) 33 method_return_faultf(env, MEINVAL, 34 "invalid group value: %s", group); 35 36 if (str_equal(group, "all")) 37 rc = vxdb_prepare(&dbr, 38 "SELECT xid,name FROM xid_name_map"); 39 40 else { 41 if (!(gid = vxdb_getgid(group))) 42 method_return_fault(env, MENOVG); 43 44 rc = vxdb_prepare(&dbr, 45 "SELECT xid_name_map.xid,xid_name_map.name FROM xid_name_map " 46 "INNER JOIN xid_gid_map " 47 "ON xid_name_map.xid = xid_gid_map.xid " 48 "WHERE xid_gid_map.gid = %d", 49 gid); 50 } 51 52 if (rc != VXDB_OK) 53 method_return_vxdb_fault(env); 27 54 28 55 INIT_LIST_HEAD(&(vxs->list)); 29 56 30 57 vxdb_foreach_step(rc, dbr) { 31 LIST_NODE_ALLOC( vg_list_t,new);58 LIST_NODE_ALLOC(new); 32 59 33 60 new->xid = vxdb_column_int(dbr, 0); … … 37 64 } 38 65 39 return rc; 66 if (rc != VXDB_DONE) 67 method_set_vxdb_fault(env); 68 69 vxdb_finalize(dbr); 70 71 return NULL; 40 72 } 41 73 trunk/src/vcd/methods/vg/vg_internal.h
r560 r561 23 23 #include <lucid/list.h> 24 24 25 #include " vxdb.h"25 #include "methods.h" 26 26 27 27 typedef struct { … … 31 31 } vg_list_t; 32 32 33 int vg_list_from_vxdb(vxdb_result *dbr, vg_list_t *vxs);33 xmlrpc_value *vg_list_init(xmlrpc_env *env, const char *group, vg_list_t *vxs); 34 34 void vg_list_free(vg_list_t *vxs); 35 35 trunk/src/vcd/methods/vg/vg_vx_start.c
r560 r561 19 19 #include "auth.h" 20 20 #include "methods.h" 21 #include "validate.h"22 #include "vxdb.h"23 21 24 22 #include <lucid/list.h> 25 23 #include <lucid/log.h> 26 #include <lucid/str.h>27 24 28 25 #include "vg_internal.h" … … 35 32 xmlrpc_value *params; 36 33 char *group; 37 int rc, gid;38 34 vg_list_t _vxs, *vxs = &_vxs, *pos; 39 35 … … 46 42 method_return_if_fault(env); 47 43 48 if (!validate_group(group))49 method_return_faultf(env, MEINVAL,50 "invalid group value: %s", group);44 /* get group list */ 45 vg_list_init(env, group, vxs); 46 method_return_if_fault(env); 51 47 52 if (str_equal(group, "all")) 53 rc = vxdb_prepare(&dbr, 54 "SELECT xid,name FROM xid_name_map"); 55 56 else { 57 if (!(gid = vxdb_getgid(group))) 58 method_return_fault(env, MENOVG); 59 60 rc = vxdb_prepare(&dbr, 61 "SELECT xid_name_map.xid,xid_name_map.name FROM xid_name_map " 62 "INNER JOIN xid_gid_map " 63 "ON xid_name_map.xid = xid_gid_map.xid " 64 "WHERE xid_gid_map.gid = %d", 65 gid); 66 } 67 68 if (rc != VXDB_OK || vg_list_from_vxdb(dbr, vxs) != VXDB_DONE) 69 method_return_vxdb_fault(env); 70 71 vxdb_finalize(dbr); 72 48 /* iterate over vxs and start not running guests */ 73 49 list_for_each_entry(pos, &(vxs->list), list) { 74 /* vserver is stopped, let's start it */75 50 if (vx_info(pos->xid, NULL) == -1) { 76 51 if (errno == ESRCH) { trunk/src/vcd/methods/vg/vg_vx_stop.c
r560 r561 19 19 #include "auth.h" 20 20 #include "methods.h" 21 #include "validate.h"22 #include "vxdb.h"23 21 24 22 #include <lucid/list.h> 25 23 #include <lucid/log.h> 26 #include <lucid/str.h>27 24 28 25 #include "vg_internal.h" … … 35 32 xmlrpc_value *params; 36 33 char *group; 37 int rc, gid;38 34 vg_list_t _vxs, *vxs = &_vxs, *pos; 39 35 … … 46 42 method_return_if_fault(env); 47 43 48 if (!validate_group(group))49 method_return_faultf(env, MEINVAL,50 "invalid group value: %s", group);44 /* get group list */ 45 vg_list_init(env, group, vxs); 46 method_return_if_fault(env); 51 47 52 if (str_equal(group, "all")) 53 rc = vxdb_prepare(&dbr, 54 "SELECT xid,name FROM xid_name_map"); 55 56 else { 57 if (!(gid = vxdb_getgid(group))) 58 method_return_fault(env, MENOVG); 59 60 rc = vxdb_prepare(&dbr, 61 "SELECT xid_name_map.xid,xid_name_map.name FROM xid_name_map " 62 "INNER JOIN xid_gid_map " 63 "ON xid_name_map.xid = xid_gid_map.xid " 64 "WHERE xid_gid_map.gid = %d", 65 gid); 66 } 67 68 if (rc != VXDB_OK || vg_list_from_vxdb(dbr, vxs) != VXDB_OK) 69 method_return_vxdb_fault(env); 70 71 vxdb_finalize(dbr); 72 48 /* iterate over vxs and stop running guests */ 73 49 list_for_each_entry(pos, &(vxs->list), list) { 74 /* vserver is running, let's stop it */75 50 if (vx_info(pos->xid, NULL) == 0) { 76 51 params = xmlrpc_build_value(env, "{s:s}", "name", pos->name); trunk/src/vcd/methods/vx/vx_create.c
r559 r561 400 400 /* remove any existing stuff */ 401 401 stralloc_catf(sa, 402 "DELETE FROM deps WHERE xid = %d;"403 "DELETE FROM deps WHERE depxid = %d;"404 402 "DELETE FROM dx_limit WHERE xid = %d;" 405 403 "DELETE FROM init WHERE xid = %d;" … … 415 413 "DELETE FROM vx_sched WHERE xid = %d;" 416 414 "DELETE FROM vx_uname WHERE xid = %d;" 417 "DELETE FROM xid_name_map WHERE xid = %d;", /* 1 6*/418 xid, xid, xid, xid, xid, xid, xid, xid,419 xid, xid, xid, xid, xid, xid, xid , xid);415 "DELETE FROM xid_name_map WHERE xid = %d;", /* 14 */ 416 xid, xid, xid, xid, xid, xid, xid, 417 xid, xid, xid, xid, xid, xid, xid); 420 418 421 419 /* get init configuration */ trunk/src/vcd/methods/vx/vx_remove.c
r559 r561 51 51 52 52 rc = vxdb_exec("BEGIN EXCLUSIVE TRANSACTION;" 53 "DELETE FROM deps WHERE xid = %d;"54 "DELETE FROM deps WHERE depxid = %d;"55 53 "DELETE FROM dx_limit WHERE xid = %d;" 56 54 "DELETE FROM init WHERE xid = %d;" … … 68 66 "DELETE FROM xid_gid_map WHERE xid = %d;" 69 67 "DELETE FROM xid_name_map WHERE xid = %d;" 70 "DELETE FROM xid_uid_map WHERE xid = %d;" /* 1 8*/68 "DELETE FROM xid_uid_map WHERE xid = %d;" /* 16 */ 71 69 "COMMIT TRANSACTION;", 72 xid, xid, xid, xid, xid, xid, xid, xid, xid,73 xid, xid, xid, xid, xid, xid, xid, xid , xid);70 xid, xid, xid, xid, xid, xid, xid, xid, 71 xid, xid, xid, xid, xid, xid, xid, xid); 74 72 75 73 if (rc != VXDB_OK) trunk/src/vcd/methods/vx/vx_start.c
r559 r561 39 39 LOG_TRACEME 40 40 41 typedef struct {42 list_t list;43 xid_t xid;44 } xid_list_t;45 46 41 xmlrpc_value *params; 47 char *name , *depname;42 char *name; 48 43 xid_t xid; 49 44 pid_t pid; 50 int status, rc; 51 xid_list_t _xids, *xids = &_xids, *pos; 45 int status; 52 46 nx_flags_t ncf; 53 47 vx_flags_t vcf; … … 63 57 if (!(xid = vxdb_getxid(name))) 64 58 method_return_fault(env, MENOVPS); 65 66 /* resolve deps to ensure all needed vservers are started */67 rc = vxdb_prepare(&dbr,68 "SELECT depxid FROM deps WHERE xid = %d",69 xid);70 71 if (rc != VXDB_OK)72 method_return_vxdb_fault(env);73 74 INIT_LIST_HEAD(&(xids->list));75 76 vxdb_foreach_step(rc, dbr) {77 LIST_NODE_ALLOC(xid_list_t, new);78 79 new->xid = vxdb_column_int(dbr, 0);80 81 list_add(&(new->list), &(xids->list));82 }83 84 if (rc != VXDB_DONE)85 method_return_vxdb_fault(env);86 87 vxdb_finalize(dbr);88 89 list_for_each_entry(pos, &(xids->list), list) {90 /* needed vserver is stopped, let's start it, by calling91 ourselves again, and we need the name for that */92 if (vx_info(pos->xid, NULL) == -1) {93 if (errno == ESRCH) {94 depname = vxdb_getname(pos->xid);95 params = xmlrpc_build_value(env, "{s:s}", "name", depname);96 m_vx_start(env, params, METHOD_INTERNAL);97 }98 99 else100 method_return_sys_fault(env, "vx_info");101 }102 }103 59 104 60 /* remove persistent in case previous helper failed */ trunk/src/vcd/vxdb-tables.h
r559 r561 49 49 50 50 /* generate table definition */ 51 VXDB_COLUMNS_NEW(deps, "xid", "depxid")52 VXDB_UNIQUE_NEW(deps, "xid,depxid")53 54 51 VXDB_COLUMNS_NEW(dx_limit, "xid", "space", "inodes", "reserved") 55 52 VXDB_UNIQUE_NEW(dx_limit, "xid") … … 118 115 /* generate database definition */ 119 116 VXDB_DATABASE_START 120 VXDB_TABLE_NEW(deps)121 117 VXDB_TABLE_NEW(dx_limit) 122 118 VXDB_TABLE_NEW(groups)
