Changeset 559

Show
Ignore:
Timestamp:
02/21/07 02:26:15 (2 years ago)
Author:
chtekk
Message:

Add startup deps resolution to vx.start (used for all start operations!).
Add new vxdb table deps for this, update vx.create/remove for this.
Add new vxdb.dep.add/remove methods and vce commands for them.
NOTE: list method to show the deps of a vserver is still missing, will come soon.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/TODO

    r539 r559  
    44 
    55NEEDED FEATURES: 
    6 - onboot settings, to start VServers on VCD startup 
    76- debian/ dir, RPM .spec file, init scripts, distrib make targets, pathprog probably 
    87 
  • trunk/src/vcc/Makefile.am

    r547 r559  
    5050vce_vce_CPPFLAGS = -I$(srcdir)/vce $(PATH_CPPFLAGS) 
    5151 
    52 vgc_vgc_SOURCES  = main.c vlogin.c 
     52vgc_vgc_SOURCES  = main.c 
    5353vgc_vgc_LDADD    = vgc/libcmd.a $(COMMON_LIBS) 
    5454vgc_vgc_CPPFLAGS = -I$(srcdir)/vgc $(PATH_CPPFLAGS) 
  • trunk/src/vcc/vce/Makefile.am

    r547 r559  
    2323 
    2424libcmd_a_SOURCES = cmd.c \ 
     25                   dep.c \ 
    2526                   dx_limit.c \ 
    2627                   init.c \ 
  • trunk/src/vcc/vce/cmd.c

    r547 r559  
    2323 
    2424cmd_t CMDS[] = { 
     25        { "dep.add",             cmd_dep_add }, 
     26        { "dep.remove",          cmd_dep_remove }, 
    2527        { "dx.limit.get",        cmd_dx_limit_get }, 
    2628        { "dx.limit.remove",     cmd_dx_limit_remove }, 
     
    6668                        "   list                [<username>]\n" 
    6769                        "\n" 
     70                "   dep.add             <name> <depname>\n" 
     71                "   dep.remove          <name> <depname>\n" 
     72                "\n" 
    6873                        "   dx.limit.get        <name>\n" 
    6974                        "   dx.limit.remove     <name>\n" 
  • trunk/src/vcc/vce/cmd.h

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

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

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

    r551 r559  
    5050       vx/vx_stop.c 
    5151 
    52 M_VXDB = vxdb/vxdb_dx_limit_get.c \ 
     52M_VXDB = vxdb/vxdb_dep_add.c \ 
     53         vxdb/vxdb_dep_remove.c \ 
     54         vxdb/vxdb_dx_limit_get.c \ 
    5355         vxdb/vxdb_dx_limit_remove.c \ 
    5456         vxdb/vxdb_dx_limit_set.c \ 
  • trunk/src/vcd/methods/vx/vx_create.c

    r545 r559  
    400400        /* remove any existing stuff */ 
    401401        stralloc_catf(sa, 
     402                        "DELETE FROM deps         WHERE xid = %d;" 
     403                        "DELETE FROM deps      WHERE depxid = %d;" 
    402404                        "DELETE FROM dx_limit     WHERE xid = %d;" 
    403405                        "DELETE FROM init         WHERE xid = %d;" 
     
    413415                        "DELETE FROM vx_sched     WHERE xid = %d;" 
    414416                        "DELETE FROM vx_uname     WHERE xid = %d;" 
    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); 
     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); 
    418420 
    419421        /* get init configuration */ 
  • trunk/src/vcd/methods/vx/vx_remove.c

    r534 r559  
    5151 
    5252        rc = vxdb_exec("BEGIN EXCLUSIVE TRANSACTION;" 
     53                        "DELETE FROM deps         WHERE xid = %d;" 
     54                        "DELETE FROM deps      WHERE depxid = %d;" 
    5355                        "DELETE FROM dx_limit     WHERE xid = %d;" 
    5456                        "DELETE FROM init         WHERE xid = %d;" 
     
    6668                        "DELETE FROM xid_gid_map  WHERE xid = %d;" 
    6769                        "DELETE FROM xid_name_map WHERE xid = %d;" 
    68                         "DELETE FROM xid_uid_map  WHERE xid = %d;" /* 16 */ 
     70                        "DELETE FROM xid_uid_map  WHERE xid = %d;" /* 18 */ 
    6971                        "COMMIT TRANSACTION;", 
    70                         xid, xid, xid, xid, xid, xid, xid, xid, 
    71                         xid, xid, xid, xid, xid, xid, xid, xid); 
     72                        xid, xid, xid, xid, xid, xid, xid, xid, xid, 
     73                        xid, xid, xid, xid, xid, xid, xid, xid, xid); 
    7274 
    7375        if (rc != VXDB_OK) 
  • trunk/src/vcd/methods/vx/vx_start.c

    r534 r559  
    2424#include "vxdb.h" 
    2525 
     26#include <lucid/list.h> 
    2627#include <lucid/log.h> 
    2728#include <lucid/printf.h> 
     
    3839        LOG_TRACEME 
    3940 
     41        typedef struct { 
     42                list_t list; 
     43                xid_t  xid; 
     44        } xid_list_t; 
     45 
    4046        xmlrpc_value *params; 
    41         char *name
     47        char *name, *depname
    4248        xid_t xid; 
    4349        pid_t pid; 
    44         int status; 
     50        int status, rc; 
     51        xid_list_t _xids, *xids = &_xids, *pos; 
    4552        nx_flags_t ncf; 
    4653        vx_flags_t vcf; 
     
    5663        if (!(xid = vxdb_getxid(name))) 
    5764                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        } 
    58103 
    59104        /* remove persistent in case previous helper failed */ 
  • trunk/src/vcd/vxdb-tables.h

    r538 r559  
    4949 
    5050/* generate table definition */ 
     51VXDB_COLUMNS_NEW(deps, "xid", "depxid") 
     52VXDB_UNIQUE_NEW(deps, "xid,depxid") 
     53 
    5154VXDB_COLUMNS_NEW(dx_limit, "xid", "space", "inodes", "reserved") 
    5255VXDB_UNIQUE_NEW(dx_limit, "xid") 
     
    115118/* generate database definition */ 
    116119VXDB_DATABASE_START 
     120VXDB_TABLE_NEW(deps) 
    117121VXDB_TABLE_NEW(dx_limit) 
    118122VXDB_TABLE_NEW(groups)