From de8e14efe2bc699f96c20bfe4b3d0275f372828e Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Fri, 25 Jun 2010 00:53:17 +0200 Subject: [PATCH] Progress on transaction negotiation --- fres/cbroker/fcb.c | 47 ++++++++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/fres/cbroker/fcb.c b/fres/cbroker/fcb.c index 1e65541..7fc217a 100644 --- a/fres/cbroker/fcb.c +++ b/fres/cbroker/fcb.c @@ -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: -- 2.39.2