]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Progress on transaction negotiation
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 24 Jun 2010 22:53:17 +0000 (00:53 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 24 Jun 2010 22:53:17 +0000 (00:53 +0200)
fres/cbroker/fcb.c

index 1e65541b7dda875dac529b36cbb99e95be9d569c..7fc217aa4bc07e867713931634c803876804f851 100644 (file)
@@ -1097,14 +1097,12 @@ negotiate_transaction(fres_contract_broker _obj,
        struct fcb *fcb = o2fcb(_obj);
        struct fcb_contract **fcb_contracts, *fc;
        const fres_contract_ptr_seq* user_contracts = &transaction->contracts;
-       int num = user_contracts->_length;
-       int ret;
+       int i, ret, num = user_contracts->_length;
        struct res_array res_array;
-       fres_contract_ptr_seq res_contracts;
-       int i, j;
        struct res_key key;
        struct resource *resource;
 
+       ul_logmsg("Negotiating transaction of %d contracts\n", num);
        if (transaction_has_spare_capacity(transaction)) {
                ret =  FRES_ERR_SPARE_CAPACITY_NOT_SUPPORTED;
                goto err;
@@ -1124,11 +1122,6 @@ negotiate_transaction(fres_contract_broker _obj,
 
        ret = transaction_get_resources(fcb, fcb_contracts, num, &res_array);
 
-       if (!forb_sequence_alloc_buf(&res_contracts, num)) {
-               ret = errno;
-               goto err_free_resources;
-       }
-
        gsa_cust_for_each(res_array, &res_array, resource) {
                reservation_list_init_head(&resource->rl);
                resource->rl.length = 0;
@@ -1141,26 +1134,26 @@ negotiate_transaction(fres_contract_broker _obj,
                        }
                }
        }
-/*     gsa_cust_for_each(res_array, &res_array, resource) { */
-/*             CORBA_Environment ev; */
-/*             /\* Reserve contract *\/ */
-/*             reservation_list2s */
-/*             ret = fres_resource_manager_reserve_contracts(resource->mng, &res_contracts, &ev); */
-/*             if (forb_exception_occurred(&ev)) { */
-/*                             ret = fres_forbex2err(&ev); */
-/*                             ul_logerr("FORB exception when reserving contracts\n"); */
-/*                             goto err_free_res_contracts; */
-/*                     } */
-/*                     if (ret < 0) { */
-/*                             ul_logerr("Contract reservation error %d\n", ret); */
-/*                             ret = FRES_ERR_ADMISSION_TEST; */
-/*                             goto err; */
-/*                     } */
-/*                     if (ret == 0) { /\* negotiation succeeded *\/ */
-/*                     } */
-/*     } */
+       gsa_cust_for_each(res_array, &res_array, resource) {
+               ret = reserve_resource(resource);
+               if (ret) {
+                       ul_logerr("Reservation failed\n");
+                       goto err_cancel_reservation;
+               }
+       }
+       gsa_cust_for_each(res_array, &res_array, resource) {
+               ret = commit_resource(resource);
+               if (ret) {
+                       ul_logerr("Commit failed\n");
+                       goto err_cancel_reservation;
+               }
+       }
        
        return 0;
+err_cancel_reservation:
+       gsa_cust_for_each(res_array, &res_array, resource) {
+               cancel_reservations(resource);
+       }
 err_free_res_contracts:
        forb_sequence_free_buf(&res_contracts, forb_no_destructor);
 err_free_resources: