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;
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;
}
}
}
-/* 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: