]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Fixed some errors and added debug messages
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 24 Oct 2008 18:38:55 +0000 (20:38 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 24 Oct 2008 18:38:55 +0000 (20:38 +0200)
fres/cbroker/fcb.c

index a36fe710efa73e3ac746ba47ba598bf0b9b883fa..1f92fab5a85de8d5a24128fc54b5240c8746c378 100644 (file)
@@ -197,8 +197,8 @@ negotiate_contract(fres_contract_broker obj,
        if (!rs) {
                char str[60];
                forb_server_id_to_string(str, &app, sizeof(str));
-               ul_logerr("No resource scheduler found for %s\n",
-                         str);
+               ul_logerr("No resource scheduler found for %d.%d and %s\n",
+                         res_key.type, res_key.id, str);
        }
 
 
@@ -248,6 +248,7 @@ CORBA_long register_manager(fres_contract_broker obj,
 {
        struct fcb *fcb = o2fcb(obj);
        struct res_mng *rm, *rm2;
+
        rm = malloc(sizeof(*rm));
        if (!rm) goto err;
        memset(rm, 0, sizeof(*rm));
@@ -255,11 +256,26 @@ CORBA_long register_manager(fres_contract_broker obj,
        rm->resource.id = resid;
        rm2 = fcb_resource_find(fcb, &rm->resource);
        if (rm2) {
-               ul_logerr("Resource manager %d.%d already regsitered\n",
-                         restype, resid);
-               goto free_err;
+               if (forb_object_is_stale(rm2->rm)) {
+                       ul_logmsg("Removing stale manager for resource %d.%d\n",
+                                 restype, resid);
+                       forb_object_release(rm2->rm);
+                       fcb_resource_delete(fcb, rm2);
+                       /* TODO: Delete also all schedulers associated
+                        * with this stale resource manager. */
+                       free(rm);
+                       rm = rm2;
+               } else {
+                       ul_logerr("Resource manager %d.%d already registered\n",
+                                 restype, resid);
+                       goto free_err;
+               }
        }
        rm->rm = forb_object_duplicate(rm_obj);
+
+       fcb_sched_init_root_field(rm);
+       ul_logmsg("Registering manager for resource %d.%d\n",
+                 restype, resid);
        fcb_resource_insert(fcb, rm);
        return 0;
 free_err:
@@ -280,7 +296,12 @@ CORBA_long register_scheduler(fres_contract_broker obj,
        struct res_sched *rs;
        struct res_key resource;
        forb_server_id server_id;
+       char server_id_str[40];
 
+       forb_get_server_id(rs_obj, &server_id);
+       forb_server_id_to_string(server_id_str, &server_id, sizeof(server_id_str));
+       ul_logmsg("Registering scheduler for resource %d.%d in app %s\n",
+                 restype, resid, server_id_str);
        
        resource.type = restype;
        resource.id = resid;
@@ -288,7 +309,6 @@ CORBA_long register_scheduler(fres_contract_broker obj,
        if (!rm) {
                goto err;
        }
-       forb_get_server_id(rs_obj, &server_id);
        rs = fcb_sched_find(rm, &server_id);
        if (rs) {
                char *str = forb_object_to_string(rs_obj);
@@ -324,7 +344,7 @@ int main(int argc, char *argv[])
        orb = forb_init(&argc, &argv, "fcb");
        if (!orb) error(1, errno, "FORB initialization failed");
 
-       
+       fcb_resource_init_root_field(&fcb_data);
 
        fcb = forb_fres_contract_broker_new(orb, &impl, &fcb_data);