Changeset 561

Show
Ignore:
Timestamp:
02/21/07 15:59:00 (2 years ago)
Author:
hollow
Message:

remove dependency handling again (RESOLVED LATER); simplify vg list handling even more

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/vcc/vce/Makefile.am

    r559 r561  
    2323 
    2424libcmd_a_SOURCES = cmd.c \ 
    25                    dep.c \ 
    2625                   dx_limit.c \ 
    2726                   init.c \ 
  • trunk/src/vcc/vce/cmd.c

    r560 r561  
    2323 
    2424cmd_t CMDS[] = { 
    25         { "dep.add",             cmd_dep_add }, 
    26         { "dep.remove",          cmd_dep_remove }, 
    2725        { "dx.limit.get",        cmd_dx_limit_get }, 
    2826        { "dx.limit.remove",     cmd_dx_limit_remove }, 
     
    6765                        "Available commands:\n" 
    6866                        "   list                [<username>]\n" 
    69                         "\n" 
    70                         "   dep.add             <name> <depname>\n" 
    71                         "   dep.remove          <name> <depname>\n" 
    7267                        "\n" 
    7368                        "   dx.limit.get        <name>\n" 
  • trunk/src/vcc/vce/cmd.h

    r559 r561  
    2121void usage(int rc); 
    2222 
    23 void cmd_dep_add            (xmlrpc_env *env, int argc, char **argv); 
    24 void cmd_dep_remove         (xmlrpc_env *env, int argc, char **argv); 
    2523void cmd_dx_limit_get       (xmlrpc_env *env, int argc, char **argv); 
    2624void cmd_dx_limit_remove    (xmlrpc_env *env, int argc, char **argv); 
  • trunk/src/vcd/methods.c

    r559 r561  
    115115 
    116116        /* vxdb */ 
    117         MREGISTER("vxdb.dep.add",             m_vxdb_dep_add); 
    118         MREGISTER("vxdb.dep.remove",          m_vxdb_dep_remove); 
    119117        MREGISTER("vxdb.dx.limit.get",        m_vxdb_dx_limit_get); 
    120118        MREGISTER("vxdb.dx.limit.remove",     m_vxdb_dx_limit_remove); 
  • trunk/src/vcd/methods.h

    r559 r561  
    158158 
    159159/* vxdb */ 
    160 MPROTO(m_vxdb_dep_add); 
    161 MPROTO(m_vxdb_dep_remove); 
    162160MPROTO(m_vxdb_dx_limit_get); 
    163161MPROTO(m_vxdb_dx_limit_remove); 
  • trunk/src/vcd/methods/Makefile.am

    r560 r561  
    5252       vx/vx_stop.c 
    5353 
    54 M_VXDB = vxdb/vxdb_dep_add.c \ 
    55          vxdb/vxdb_dep_remove.c \ 
    56          vxdb/vxdb_dx_limit_get.c \ 
     54M_VXDB = vxdb/vxdb_dx_limit_get.c \ 
    5755         vxdb/vxdb_dx_limit_remove.c \ 
    5856         vxdb/vxdb_dx_limit_set.c \ 
  • trunk/src/vcd/methods/vg/vg_internal.c

    r560 r561  
    2020#include <lucid/str.h> 
    2121 
     22#include "validate.h" 
     23#include "vxdb.h" 
     24 
    2225#include "vg_internal.h" 
    2326 
    24 int vg_list_from_vxdb(vxdb_result *dbr, vg_list_t *vxs) 
     27xmlrpc_value *vg_list_init(xmlrpc_env *env, const char *group, vg_list_t *vxs) 
    2528{ 
    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); 
    2754 
    2855        INIT_LIST_HEAD(&(vxs->list)); 
    2956 
    3057        vxdb_foreach_step(rc, dbr) { 
    31                 LIST_NODE_ALLOC(vg_list_t, new); 
     58                LIST_NODE_ALLOC(new); 
    3259 
    3360                new->xid  = vxdb_column_int(dbr, 0); 
     
    3764        } 
    3865 
    39         return rc; 
     66        if (rc != VXDB_DONE) 
     67                method_set_vxdb_fault(env); 
     68 
     69        vxdb_finalize(dbr); 
     70 
     71        return NULL; 
    4072} 
    4173 
  • trunk/src/vcd/methods/vg/vg_internal.h

    r560 r561  
    2323#include <lucid/list.h> 
    2424 
    25 #include "vxdb.h" 
     25#include "methods.h" 
    2626 
    2727typedef struct { 
     
    3131} vg_list_t; 
    3232 
    33 int vg_list_from_vxdb(vxdb_result *dbr, vg_list_t *vxs); 
     33xmlrpc_value *vg_list_init(xmlrpc_env *env, const char *group, vg_list_t *vxs); 
    3434void vg_list_free(vg_list_t *vxs); 
    3535 
  • trunk/src/vcd/methods/vg/vg_vx_start.c

    r560 r561  
    1919#include "auth.h" 
    2020#include "methods.h" 
    21 #include "validate.h" 
    22 #include "vxdb.h" 
    2321 
    2422#include <lucid/list.h> 
    2523#include <lucid/log.h> 
    26 #include <lucid/str.h> 
    2724 
    2825#include "vg_internal.h" 
     
    3532        xmlrpc_value *params; 
    3633        char *group; 
    37         int rc, gid; 
    3834        vg_list_t _vxs, *vxs = &_vxs, *pos; 
    3935 
     
    4642        method_return_if_fault(env); 
    4743 
    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); 
    5147 
    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 */ 
    7349        list_for_each_entry(pos, &(vxs->list), list) { 
    74                 /* vserver is stopped, let's start it */ 
    7550                if (vx_info(pos->xid, NULL) == -1) { 
    7651                        if (errno == ESRCH) { 
  • trunk/src/vcd/methods/vg/vg_vx_stop.c

    r560 r561  
    1919#include "auth.h" 
    2020#include "methods.h" 
    21 #include "validate.h" 
    22 #include "vxdb.h" 
    2321 
    2422#include <lucid/list.h> 
    2523#include <lucid/log.h> 
    26 #include <lucid/str.h> 
    2724 
    2825#include "vg_internal.h" 
     
    3532        xmlrpc_value *params; 
    3633        char *group; 
    37         int rc, gid; 
    3834        vg_list_t _vxs, *vxs = &_vxs, *pos; 
    3935 
     
    4642        method_return_if_fault(env); 
    4743 
    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); 
    5147 
    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 */ 
    7349        list_for_each_entry(pos, &(vxs->list), list) { 
    74                 /* vserver is running, let's stop it */ 
    7550                if (vx_info(pos->xid, NULL) == 0) { 
    7651                        params = xmlrpc_build_value(env, "{s:s}", "name", pos->name); 
  • trunk/src/vcd/methods/vx/vx_create.c

    r559 r561  
    400400        /* remove any existing stuff */ 
    401401        stralloc_catf(sa, 
    402                         "DELETE FROM deps         WHERE xid = %d;" 
    403                         "DELETE FROM deps      WHERE depxid = %d;" 
    404402                        "DELETE FROM dx_limit     WHERE xid = %d;" 
    405403                        "DELETE FROM init         WHERE xid = %d;" 
     
    415413                        "DELETE FROM vx_sched     WHERE xid = %d;" 
    416414                        "DELETE FROM vx_uname     WHERE xid = %d;" 
    417                         "DELETE FROM xid_name_map WHERE xid = %d;", /* 16 */ 
    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); 
    420418 
    421419        /* get init configuration */ 
  • trunk/src/vcd/methods/vx/vx_remove.c

    r559 r561  
    5151 
    5252        rc = vxdb_exec("BEGIN EXCLUSIVE TRANSACTION;" 
    53                         "DELETE FROM deps         WHERE xid = %d;" 
    54                         "DELETE FROM deps      WHERE depxid = %d;" 
    5553                        "DELETE FROM dx_limit     WHERE xid = %d;" 
    5654                        "DELETE FROM init         WHERE xid = %d;" 
     
    6866                        "DELETE FROM xid_gid_map  WHERE xid = %d;" 
    6967                        "DELETE FROM xid_name_map WHERE xid = %d;" 
    70                         "DELETE FROM xid_uid_map  WHERE xid = %d;" /* 18 */ 
     68                        "DELETE FROM xid_uid_map  WHERE xid = %d;" /* 16 */ 
    7169                        "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); 
    7472 
    7573        if (rc != VXDB_OK) 
  • trunk/src/vcd/methods/vx/vx_start.c

    r559 r561  
    3939        LOG_TRACEME 
    4040 
    41         typedef struct { 
    42                 list_t list; 
    43                 xid_t  xid; 
    44         } xid_list_t; 
    45  
    4641        xmlrpc_value *params; 
    47         char *name, *depname
     42        char *name
    4843        xid_t xid; 
    4944        pid_t pid; 
    50         int status, rc; 
    51         xid_list_t _xids, *xids = &_xids, *pos; 
     45        int status; 
    5246        nx_flags_t ncf; 
    5347        vx_flags_t vcf; 
     
    6357        if (!(xid = vxdb_getxid(name))) 
    6458                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 calling 
    91                    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                         else 
    100                                 method_return_sys_fault(env, "vx_info"); 
    101                 } 
    102         } 
    10359 
    10460        /* remove persistent in case previous helper failed */ 
  • trunk/src/vcd/vxdb-tables.h

    r559 r561  
    4949 
    5050/* generate table definition */ 
    51 VXDB_COLUMNS_NEW(deps, "xid", "depxid") 
    52 VXDB_UNIQUE_NEW(deps, "xid,depxid") 
    53  
    5451VXDB_COLUMNS_NEW(dx_limit, "xid", "space", "inodes", "reserved") 
    5552VXDB_UNIQUE_NEW(dx_limit, "xid") 
     
    118115/* generate database definition */ 
    119116VXDB_DATABASE_START 
    120 VXDB_TABLE_NEW(deps) 
    121117VXDB_TABLE_NEW(dx_limit) 
    122118VXDB_TABLE_NEW(groups)