]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Contract broker updated to changed manager and scheduler
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 6 Nov 2008 15:15:17 +0000 (16:15 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 6 Nov 2008 15:15:17 +0000 (16:15 +0100)
fres/cbroker/fcb.c
fres/cbroker/fcb.idl
fres/resmng/frm_generic.c
frsh_api/Makefile.omk.orig [deleted file]
resources/dummy/frm_dummy.c
resources/dummy/frs_dummy.c

index 2805bcbea5f8e00ee58c1d206b7e1481e4702658..162b2223b375c56b98d86ae534904fc73768bed6 100644 (file)
@@ -82,12 +82,12 @@ struct res_key {
 struct res_mng {
        gavl_node_t node;
        struct res_key resource;
-       fres_resource_manager rm;
-       gavl_cust_root_field_t schedulers;      /**< Registered schedulers for this resource (from multiple applications/nodes) */
+       fres_resource_manager rm; /**< Object reference of the resource manager */
+       gavl_cust_root_field_t schedulers; /**< Registered schedulers for this resource (from multiple applications/nodes) */
 };
 
 /**
- * Registered resource scheduler
+ * Resource scheduler registered in different nodes/applications 
  */
 struct res_sched {
        gavl_node_t node;
@@ -121,7 +121,7 @@ GAVL_CUST_NODE_INT_DEC(fcb_resource   /* cust_prefix */,            \
                       resources      /* cust_root_node */,             \
                       node           /* cust_item_node */,             \
                       resource       /* cust_item_key */,              \
-                      res_key_cmp    /* cust_cmp_fnc */)
+                      res_key_cmp    /* cust_cmp_fnc */);
 
 GAVL_CUST_NODE_INT_IMP(fcb_resource   /* cust_prefix */,               \
                       struct fcb     /* cust_root_t */,                \
@@ -130,7 +130,7 @@ GAVL_CUST_NODE_INT_IMP(fcb_resource   /* cust_prefix */,            \
                       resources      /* cust_root_node */,             \
                       node           /* cust_item_node */,             \
                       resource       /* cust_item_key */,              \
-                      res_key_cmp    /* cust_cmp_fnc */)
+                      res_key_cmp    /* cust_cmp_fnc */);
 
 GAVL_CUST_NODE_INT_DEC(fcb_sched        /* cust_prefix */,             \
                       struct res_mng   /* cust_root_t */,              \
@@ -139,7 +139,7 @@ GAVL_CUST_NODE_INT_DEC(fcb_sched        /* cust_prefix */,          \
                       schedulers       /* cust_root_node */,           \
                       node             /* cust_item_node */,           \
                       app              /* cust_item_key */,            \
-                      fres_contract_id_cmp /* cust_cmp_fnc */)
+                      fres_contract_id_cmp /* cust_cmp_fnc */);
 
 GAVL_CUST_NODE_INT_IMP(fcb_sched        /* cust_prefix */,             \
                       struct res_mng   /* cust_root_t */,              \
@@ -148,7 +148,7 @@ GAVL_CUST_NODE_INT_IMP(fcb_sched        /* cust_prefix */,          \
                       schedulers       /* cust_root_node */,           \
                       node             /* cust_item_node */,           \
                       app              /* cust_item_key */,            \
-                      forb_server_id_cmp /* cust_cmp_fnc */)
+                      forb_server_id_cmp /* cust_cmp_fnc */);
 
 
 #define o2fcb(o) (struct fcb*)forb_instance_data(o)
@@ -168,14 +168,14 @@ negotiate_contract(fres_contract_broker obj,
        forb_server_id app;
        fres_contract_ptr contract_seq_buf;
        fres_contract_ptr_seq contracts;        
-       fres_contract_ptr_seq *contracts_sched;
+       fres_contract_ptr_seq *schedulable_contracts;
        fres_contract_id_seq ids;
        
 
        res = fres_contract_get_resource(contract);
        if (!res) {
                ul_logerr("No resource specified\n");
-               ret = -1;
+               ret = FRSH_ERR_RESOURCE_ID_INVALID;
                goto err;
        }
        res_key.type = res->resource_type;
@@ -219,15 +219,21 @@ negotiate_contract(fres_contract_broker obj,
        /* Commit contract */
        ids._length = ids._maximum = 1;
        ids._buffer = id;
-       fres_resource_manager_commit_contracts(rm->rm, &ids, &contracts_sched, ev);
+       fres_resource_manager_commit_contracts(rm->rm, &ids, &schedulable_contracts, ev);
        if (forb_exception_occured(ev)) {
                goto err;
        }
 
        /* Create VRes */
-       ret = fres_resource_scheduler_create_vreses(rs->rs, contracts_sched, ev);
-       if (CORBA_sequence_get_release(contracts_sched)) forb_free(contracts_sched->_buffer);
-       forb_free(contracts_sched);
+       ret = fres_resource_scheduler_change_vreses(rs->rs, schedulable_contracts, ev);
+       if (CORBA_sequence_get_release(schedulable_contracts)) {
+               int i;
+               for (i=0; i<schedulable_contracts->_length; i++) {
+                       fres_contract_destroy(schedulable_contracts->_buffer[i]);
+               }
+               forb_free(schedulable_contracts->_buffer);
+       }
+       forb_free(schedulable_contracts);
        if (forb_exception_occured(ev)) {
                goto err;
        }
@@ -241,10 +247,10 @@ err:
        return ret;
 }
 
-CORBA_long register_manager(fres_contract_broker obj,
+CORBA_long register_resource(fres_contract_broker obj,
                            const frsh_resource_type_t restype,
                            const frsh_resource_id_t resid,
-                           const fres_resource_manager rm_obj,
+                           const fres_resource_desc *desc,
                            CORBA_Environment *ev)
 {
        struct fcb *fcb = o2fcb(obj);
@@ -272,7 +278,7 @@ CORBA_long register_manager(fres_contract_broker obj,
                        goto free_err;
                }
        }
-       rm->rm = forb_object_duplicate(rm_obj);
+       rm->rm = forb_object_duplicate(desc->manager);
 
        fcb_sched_init_root_field(rm);
        ul_logmsg("Registering manager for resource %d.%d\n",
@@ -308,6 +314,8 @@ CORBA_long register_scheduler(fres_contract_broker obj,
        resource.id = resid;
        rm = fcb_resource_find(fcb, &resource);
        if (!rm) {
+               ul_logerr("No manager found for %d.%d. Unable to register the scheduler!\n",
+                         restype, resid);
                goto err;
        }
        rs = fcb_sched_find(rm, &server_id);
@@ -332,7 +340,7 @@ err:
 
 struct forb_fres_contract_broker_impl impl = {
        .negotiate_contract = negotiate_contract,
-       .register_manager = register_manager,
+       .register_resource = register_resource,
        .register_scheduler = register_scheduler,
 };
 
index c6e5815af5754514bb659529c3610db1b04faf7c..c4d8e4f6c279aa7d40fccddf0376334611f2e26d 100644 (file)
 #include "../ressched/frs.idl"
 
 module fres {
+
+       /** Description of a resource */
+       struct resource_desc {
+               /** Manager */
+               resource_manager     manager;
+       };
        interface contract_broker {
                const string reg_name = "fcb";
                /** 
-                * Registers a resource manager with the contract broker
+                * Registers a resource with the contract broker
                 * 
                 * @param restype 
                 * @param resid 
-                * @param rm_obj 
+                * @param res_desc Description of the resource
                 * 
                 * @return Zero on success, non-zero error code on error.
                 */
-               long register_manager(in frsh_resource_type_t restype,
-                                     in frsh_resource_id_t   resid,
-                                     in resource_manager     rm_obj);
+               long register_resource(in frsh_resource_type_t restype,
+                                      in frsh_resource_id_t   resid,
+                                      in resource_desc        res_desc);
 
                /** 
                 * Registers a resource scheduler with the contract broker
index c91df163848f4db2dbafa99b2f00bab6a4787293..d6272d2a802a76281210b4672e29e13d5207cb08 100644 (file)
@@ -173,6 +173,7 @@ fres_resource_manager frm_register(forb_orb orb, struct frm_data *frm_data,
                                   const struct fres_res_manager *desc)
 {
        fres_contract_broker fcb;
+       fres_resource_desc res_desc;
        fres_resource_manager frm;
        struct forb_env env;
        int ret;
@@ -204,10 +205,11 @@ fres_resource_manager frm_register(forb_orb orb, struct frm_data *frm_data,
        }
 
        /* Register resource manager */
-       ret = fres_contract_broker_register_manager(fcb,
-                                                   desc->res_type,
-                                                   desc->res_id,
-                                                   frm, &env);
+       res_desc.manager = frm;
+       ret = fres_contract_broker_register_resource(fcb,
+                                                    desc->res_type,
+                                                    desc->res_id,
+                                                    &res_desc, &env);
        if (forb_exception_occured(&env) || ret != 0) {
                save_errno(ul_logerr("fres_contract_broker_register_resource exception\n"));
                goto err_register;
diff --git a/frsh_api/Makefile.omk.orig b/frsh_api/Makefile.omk.orig
deleted file mode 100644 (file)
index 57b2a56..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-shared_LIBRARIES = frsh
-<<<<<<< HEAD:frsh_api/Makefile.omk
-frsh_SOURCES = frsh_contract.c frsh_distributed.c frsh_core.c
-=======
-frsh_SOURCES = frsh_distributed.c
-#frsh_SOURCES = frsh_contract.c frsh_distributed.c
->>>>>>> 6ded461a3f7b1a0941f05092191c7a123f27b02a:frsh_api/Makefile.omk
-include_HEADERS = frsh_opaque_types.h
-
-frsh_LIBS+= fna
index 6e3e371782307d5268329ee1ee5497dc0588616f..ec423b4c5e8bd6f466963022ff3b9f93c761e1ad 100644 (file)
@@ -12,7 +12,6 @@ struct dummy_data {
        int some_data;
 };
 
-
 int admission_test(struct fres_sa_scenario *scenario, void *priv, bool *schedulable)
 {
        struct dummy_data *data = priv;
@@ -26,7 +25,7 @@ int admission_test(struct fres_sa_scenario *scenario, void *priv, bool *schedula
                fres_block_basic *basic;
                fres_block_dummy_sched *dummy_sched;
                char id[40];
-               fres_contract_id_to_string(id, &c->contract->id, sizeof(id));
+               fres_contract_id_to_string(id, &c->id, sizeof(id));
                basic = fres_contract_get_basic(c->contract);
 
                if (c->contract == c->new) {
index bb5223ab5d146dc00b4c0363e2639077f2c761b8..971b21433dc33d5910aa49b98a341cc7699e4c39 100644 (file)
@@ -16,9 +16,9 @@ static int create_vres(fres_vres_t *vres, void *priv)
        
        (*my_data)++;
 
-       fres_contract_id_to_string(id, &vres->contract->id, sizeof(id));
-       basic = fres_contract_get_basic(vres->contract);
-       dummy_sched = fres_contract_get_block(vres->contract, FRES_BLOCK_DUMMY_SCHED);
+       fres_contract_id_to_string(id, &vres->id, sizeof(id));
+       basic = fres_contract_get_basic(vres->new);
+       dummy_sched = fres_contract_get_block(vres->new, FRES_BLOCK_DUMMY_SCHED);
        printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms, priority=%d)\n",
               *my_data, id,
               fosa_rel_time_to_msec(basic->period),
@@ -34,9 +34,9 @@ static int cancel_vres(fres_vres_t *vres, void *priv)
        fres_block_dummy_sched *dummy_sched;
        char id[40];
 
-       fres_contract_id_to_string(id, &vres->contract->id, sizeof(id));
-       basic = fres_contract_get_basic(vres->contract);
-       dummy_sched = fres_contract_get_block(vres->contract, FRES_BLOCK_DUMMY_SCHED);
+       fres_contract_id_to_string(id, &vres->id, sizeof(id));
+       basic = fres_contract_get_basic(vres->allocated);
+       dummy_sched = fres_contract_get_block(vres->allocated, FRES_BLOCK_DUMMY_SCHED);
        
        printf("Canceling VRes #%d (id=%s, period=%ld ms, budget=%ld ms, priority=%d)\n",
               *my_data, id,