]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
fcb: Correct bug to pass the test suite
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 24 Jun 2010 21:04:34 +0000 (23:04 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 24 Jun 2010 22:43:40 +0000 (00:43 +0200)
FCB didn't detect rejected contracts.

fres/cbroker/fcb.c

index 83d314df83ea7016f5cafa22a5c824fda9002862..6d587926a4d11dde9e489c3378086fcdadf6b23a 100644 (file)
@@ -502,8 +502,12 @@ reserve_resource(struct resource *resource)
                ul_logerr("Contract reservation error %d\n", ret);
                ret = FRES_ERR_ADMISSION_TEST;
                goto err_free;
-       }
-       ret = 0;
+       } else if (ret == 0)
+               ret = FRSH_NO_ERROR;
+       else if (ret == 1)
+               ret = FRSH_ERR_CONTRACT_REJECTED;
+       else
+               assert(false);
 err_free:
        forb_sequence_free_buf(&contracts, forb_no_destructor);
 err:
@@ -578,11 +582,15 @@ rebalance_spare_capacity_and_reserve(struct resource *resource)
 
                if (criterion > best_criterion) {
                        ret = reserve_resource(resource);
-                       if (ret)
+                       switch (ret) {
+                       case FRSH_NO_ERROR:
+                               best_criterion = criterion;
+                               break;
+                       case FRSH_ERR_CONTRACT_REJECTED:
+                               break;
+                       default:
                                goto err;
-
-                       /* negotiation succeeded */
-                       best_criterion = criterion;
+                       }
                }
        } while (!all_combinations_tried);