]> rtime.felk.cvut.cz Git - frescor/frsh.git/blobdiff - fres/resalloc/fra_generic.h
Fixed race condition in allocator registration
[frescor/frsh.git] / fres / resalloc / fra_generic.h
index ac5c677864571642b9527324e780da3b54dfd941..650e3df6630bef6715dcd1def280b235a3e700d6 100644 (file)
@@ -181,6 +181,21 @@ struct fres_allocator {
        int (*apply_vres_changes)(fres_vres_t *vreses[], unsigned length, void *priv);
        /*@}*/
 
+       /** @name Feedback module support */
+       /*@{*/
+       int (*set_spare_bandwidth)(fres_vres_t *vres);
+       int (*get_desired_budget)(fres_vres_t *vres, frsh_rel_time_t *p_budget_out);
+       int (*set_desired_budget)(fres_vres_t *vres_id, frsh_rel_time_t *p_budget_in);
+       int (*get_actual_budget)(fres_vres_t *vres_id, frsh_rel_time_t *budget);
+       /*@}*/
+
+       int (*bind_thread)(fres_vres_t *vres, fosa_thread_id_t thread);
+       int (*unbind_thread)(fosa_thread_id_t thread);
+
+       int (*vres_get_job_usage)(const fres_vres_t *vres, frsh_rel_time_t *spent);
+       int (*vres_get_remaining_budget)(const fres_vres_t *vres, frsh_rel_time_t *budget);
+       int (*vres_get_usage)(const fres_vres_t *vres, frsh_rel_time_t *spent);
+
        void *priv;             /**< Pointer to allocator's private data */
 
        /**
@@ -194,12 +209,14 @@ fres_resource_allocator fra_new(forb_orb orb,
                                forb_executor_t *executor,
                                struct fres_allocator *allocator);
 
-void fra_registry_init(forb_orb                   orb,
-                      fres_contract_broker fcb,
-                      forb_executor_t     *executor);
+int fra_registry_init(forb_orb            orb,
+                     fres_contract_broker fcb,
+                     forb_executor_t      *executor);
 int fra_register(struct fres_allocator *allocator);
 int fra_activate(frsh_resource_type_t res_type,
                 frsh_resource_id_t   res_id);
+struct fres_allocator *fra_get(frsh_resource_type_t res_type,
+                              frsh_resource_id_t   res_id);
 
 fres_vres_t *fra_get_vres(fres_contract_id_t *id);