#include "GlobalSchedulers.hh"
#include "UserScheduler.hh"
#include "est_internal.hh"
#include <map>
std::map<std::string, unsigned int> hostCounter;
class HostnameRR : public UserScheduler {
public:
static const char* stName;
HostnameRR();
~HostnameRR();
void init();
static char* serialize(HostnameRR* GS);
static HostnameRR* deserialize(const char* serializedScheduler);
/* Overriden aggregate method to schedule jobs with the SRA policy. */
int aggregate(corba_response_t* aggrResp, size_t max_srv,
const size_t nb_responses, const corba_response_t* responses);
};
using namespace std;
const char* HostnameRR::stName="UserGS";
HostnameRR::~HostnameRR() {
}
HostnameRR::HostnameRR() {
this->name = this->stName;
this->nameLength = strlen(this->name);
}
int HostnameRR::aggregate(corba_response_t* aggrResp, size_t max_srv,
const size_t nb_responses,
const corba_response_t* responses)
{
ServerList::iterator itSeD;
unsigned int nbUsage=0;
corba_server_estimation_t selected;
cout << "******************** HostnameRR ********************" << endl;
ServerList candidates = CORBA_to_STL(responses, nb_responses);
for (itSeD=candidates.begin(); itSeD!=candidates.end(); ++itSeD)
// We select the SeD by its host usage.
if (hostCounter[HOSTNAME(*itSeD)]<=nbUsage)
selected=*itSeD<;
aggrResp->servers.length(1);
aggrResp->servers[0]=selected;
return 0;
}
SCHEDULER_CLASS(HostnameRR)