struct forb_env env;
int ret;
fres_contract_ptr_seq contracts;
- fres_contract_ptr contracts_buf;
+ fres_contract_ptr contracts_buf[1];
fres_contract_id_seq *ids;
fres_block_resource *r;
}
/* Negotiate contract */
- contracts_buf = *contract;
- contracts._buffer = &contracts_buf;
+ contracts_buf[0] = *contract;
+ contracts._buffer = contracts_buf;
contracts._length = contracts._maximum = 1;
ret = fres_contract_broker_negotiate_contracts(frsh_forb_global.fcb,
&contracts,
(const frsh_contract_t *new_contract,
frsh_vres_id_t vres_id)
{
- return FRSH_ERR_NOT_IMPLEMENTED;
+ struct forb_env env;
+ struct fres_contract *contract;
+ int ret = 0;
+ fres_contract_ptr contracts_buf[1];
+ fres_contract_ptr_seq contracts;
+ fres_contract_id_seq *ids;
+
+ if (!new_contract || !*new_contract || !vres_id) {
+ ret = FRSH_ERR_BAD_ARGUMENT;
+ goto out;
+ }
+
+ contract = fres_contract_duplicate(*new_contract);
+ if (!contract) {
+ ret = errno;
+ goto out;
+ }
+
+ /* Assign the ID, so that FCB recognises that this is
+ * renegotiation */
+ contract->id = vres_id->id;
+
+ /* Renegotiate with FCB contract */
+ contracts_buf[0] = contract;
+ contracts._buffer = contracts_buf;
+ contracts._length = contracts._maximum = 1;
+ ret = fres_contract_broker_negotiate_contracts(frsh_forb_global.fcb,
+ &contracts,
+ &ids, &env);
+ if (forb_exception_occurred(&env)) {
+ ret = FRES_ERR_FORB_EXCEPTION;
+ goto err;
+ }
+
+ if (CORBA_sequence_get_release(ids))
+ CORBA_free(ids->_buffer);
+ CORBA_free(ids);
+err:
+ fres_contract_destroy(contract);
+out:
+ return ret;;
}
int frsh_contract_renegotiate_async
budget = fosa_msec_to_rel_time(b[i]);
period = fosa_msec_to_rel_time(100);
- period = fosa_msec_to_rel_time(50);
+ deadline = fosa_msec_to_rel_time(50);
ret = frsh_contract_set_basic_params(&contract[i],
&budget,
&period,
ret = frsh_contract_negotiate(&contract[i], &vres[i]);
if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate");
}
+ for (i=0; i<N; i++) {
+ budget = fosa_msec_to_rel_time(2*b[i]);
+ period = fosa_msec_to_rel_time(110);
+ ret = frsh_contract_set_basic_params(&contract[i],
+ &budget,
+ &period,
+ FRSH_WT_BOUNDED,
+ FRSH_CT_REGULAR);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params reneg");
+
+ ret = frsh_contract_renegotiate_sync(&contract[i], vres[i]);
+
+ }
+
/* Cancel N contracts */
for (i=0; i<N; i++) {
ret = frsh_contract_cancel(vres[i]);