bool StoragesAssigner::assignOneRequest(Request::Storages * storages, Assignment* reqAssignment) { // form the vector from the set to have an ability to sort it std::vector<Store * > storagesVec(storages->begin(), storages->end()); std::sort(storagesVec.begin(), storagesVec.end(), storagesCompare); for ( unsigned index = 0; index < storagesVec.size(); ++index ) { bool result = assignOneStorage(storagesVec[index], reqAssignment); if ( !result ) { result = limitedExhaustiveSearch(storagesVec[index], reqAssignment, NULL); if ( !result ) { // remove assignments for ( unsigned i = 0; i < index; ++i ) { reqAssignment->GetAssignment(storagesVec[i])->RemoveAssignment(storagesVec[i]); } // tell the upper layer to delete assignment return false; } } } return true; }
bool VirtualMachinesAssigner::assignOneRequest(Request::VirtualMachines * virtualMachines, Assignment* reqAssignment) { // form the vector from the set to have an ability to sort it std::vector<Node * > virtualMachinesVec(virtualMachines->begin(), virtualMachines->end()); std::sort(virtualMachinesVec.begin(), virtualMachinesVec.end(), virtualMachinesCompare); for ( unsigned index = 0; index < virtualMachinesVec.size(); ++index ) { bool result = assignOneVirtualMachine(virtualMachinesVec[index], reqAssignment); if ( !result ) { // trying limited exhaustive search result = limitedExhaustiveSearch(virtualMachinesVec[index], reqAssignment, NULL); if ( !result ) { // remove assignments for ( unsigned i = 0; i < index; ++i ) { reqAssignment->GetAssignment(virtualMachinesVec[i])->RemoveAssignment(virtualMachinesVec[i]); } // tell the upper layer to delete assignment return false; } } } return true; }