00001
00002
00003 #ifndef __ARC_EXECUTIONTARGET_H__
00004 #define __ARC_EXECUTIONTARGET_H__
00005
00006 #include <list>
00007 #include <map>
00008 #include <set>
00009 #include <string>
00010
00011 #include <arc/DateTime.h>
00012 #include <arc/client/Endpoint.h>
00013 #include <arc/URL.h>
00014 #include <arc/Utils.h>
00015 #include <arc/client/GLUE2Entity.h>
00016 #include <arc/client/JobDescription.h>
00017 #include <arc/client/Software.h>
00018
00019 namespace Arc {
00020
00021 class Job;
00022 class Logger;
00023 class SubmitterPlugin;
00024 class UserConfig;
00025
00027
00037 class ApplicationEnvironment
00038 : public Software {
00039 public:
00040 ApplicationEnvironment() : FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
00041 ApplicationEnvironment(const std::string& Name)
00042 : Software(Name), FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
00043 ApplicationEnvironment(const std::string& Name, const std::string& Version)
00044 : Software(Name, Version), FreeSlots(-1), FreeJobs(-1), FreeUserSeats(-1) {}
00045 ApplicationEnvironment& operator=(const Software& sv) {
00046 Software::operator=(sv);
00047 return *this;
00048 }
00049
00050 std::string State;
00051 int FreeSlots;
00052 int FreeJobs;
00053 int FreeUserSeats;
00054 };
00055
00056 class LocationAttributes {
00057 public:
00058 LocationAttributes() : Latitude(0), Longitude(0) {}
00059
00060 std::string Address;
00061 std::string Place;
00062 std::string Country;
00063 std::string PostCode;
00064 float Latitude;
00065 float Longitude;
00066 };
00067
00068 class AdminDomainAttributes {
00069 public:
00070 std::string Name;
00071 std::string Owner;
00072 };
00073
00074 class ExecutionEnvironmentAttributes {
00075 public:
00076 ExecutionEnvironmentAttributes()
00077 : VirtualMachine(false), CPUClockSpeed(-1), MainMemorySize(-1),
00078 ConnectivityIn(false), ConnectivityOut(false) {}
00079 std::string ID;
00080 std::string Platform;
00081 bool VirtualMachine;
00082 std::string CPUVendor;
00083 std::string CPUModel;
00084 std::string CPUVersion;
00085 int CPUClockSpeed;
00086 int MainMemorySize;
00087
00089
00100 Software OperatingSystem;
00101
00102 bool ConnectivityIn;
00103 bool ConnectivityOut;
00104 };
00105
00106 class ComputingManagerAttributes {
00107 public:
00108 ComputingManagerAttributes() :
00109 Reservation(false), BulkSubmission(false),
00110 TotalPhysicalCPUs(-1), TotalLogicalCPUs(-1), TotalSlots(-1),
00111 Homogeneous(true),
00112 WorkingAreaShared(true), WorkingAreaTotal(-1), WorkingAreaFree(-1), WorkingAreaLifeTime(-1),
00113 CacheTotal(-1), CacheFree(-1) {}
00114
00115 std::string ID;
00116 std::string ProductName;
00117 std::string ProductVersion;
00118 bool Reservation;
00119 bool BulkSubmission;
00120 int TotalPhysicalCPUs;
00121 int TotalLogicalCPUs;
00122 int TotalSlots;
00123 bool Homogeneous;
00124 std::list<std::string> NetworkInfo;
00125 bool WorkingAreaShared;
00126 int WorkingAreaTotal;
00127 int WorkingAreaFree;
00128 Period WorkingAreaLifeTime;
00129 int CacheTotal;
00130 int CacheFree;
00131 };
00132
00133 class ComputingShareAttributes {
00134 public:
00135 ComputingShareAttributes() :
00136 MaxWallTime(-1), MaxTotalWallTime(-1), MinWallTime(-1), DefaultWallTime(-1),
00137 MaxCPUTime(-1), MaxTotalCPUTime(-1), MinCPUTime(-1), DefaultCPUTime(-1),
00138 MaxTotalJobs(-1), MaxRunningJobs(-1), MaxWaitingJobs(-1),
00139 MaxPreLRMSWaitingJobs(-1), MaxUserRunningJobs(-1), MaxSlotsPerJob(-1),
00140 MaxStageInStreams(-1), MaxStageOutStreams(-1),
00141 MaxMainMemory(-1), MaxVirtualMemory(-1), MaxDiskSpace(-1),
00142 Preemption(false),
00143 TotalJobs(-1), RunningJobs(-1), LocalRunningJobs(-1), WaitingJobs(-1), LocalWaitingJobs(-1),
00144 SuspendedJobs(-1), LocalSuspendedJobs(-1), StagingJobs(-1), PreLRMSWaitingJobs(-1),
00145 EstimatedAverageWaitingTime(-1), EstimatedWorstWaitingTime(-1),
00146 FreeSlots(-1), UsedSlots(-1), RequestedSlots(-1) {}
00147
00148 std::string ID;
00150
00154 std::string Name;
00155 std::string MappingQueue;
00156
00157 Period MaxWallTime;
00158 Period MaxTotalWallTime;
00159 Period MinWallTime;
00160 Period DefaultWallTime;
00161 Period MaxCPUTime;
00162 Period MaxTotalCPUTime;
00163 Period MinCPUTime;
00164 Period DefaultCPUTime;
00165 int MaxTotalJobs;
00166 int MaxRunningJobs;
00167 int MaxWaitingJobs;
00168 int MaxPreLRMSWaitingJobs;
00169 int MaxUserRunningJobs;
00170 int MaxSlotsPerJob;
00171 int MaxStageInStreams;
00172 int MaxStageOutStreams;
00173 std::string SchedulingPolicy;
00174
00176
00181 int MaxMainMemory;
00182
00184
00189 int MaxVirtualMemory;
00190
00192
00197 int MaxDiskSpace;
00198
00199 URL DefaultStorageService;
00200 bool Preemption;
00201 int TotalJobs;
00202 int RunningJobs;
00203 int LocalRunningJobs;
00204 int WaitingJobs;
00205 int LocalWaitingJobs;
00206 int SuspendedJobs;
00207 int LocalSuspendedJobs;
00208 int StagingJobs;
00209 int PreLRMSWaitingJobs;
00210 Period EstimatedAverageWaitingTime;
00211 Period EstimatedWorstWaitingTime;
00212 int FreeSlots;
00213
00215
00221 std::map<Period, int> FreeSlotsWithDuration;
00222 int UsedSlots;
00223 int RequestedSlots;
00224 std::string ReservationPolicy;
00225 };
00226
00227 class ComputingEndpointAttributes {
00228 public:
00229 ComputingEndpointAttributes() : DowntimeStarts(-1), DowntimeEnds(-1),
00230 TotalJobs(-1), RunningJobs(-1), WaitingJobs(-1),
00231 StagingJobs(-1), SuspendedJobs(-1), PreLRMSWaitingJobs(-1) {}
00232
00233 std::string ID;
00234 std::string URLString;
00235 std::string InterfaceName;
00236 std::string HealthState;
00237 std::string HealthStateInfo;
00238 std::string QualityLevel;
00239 std::list<std::string> Capability;
00240 std::string Technology;
00241 std::list<std::string> InterfaceVersion;
00242 std::list<std::string> InterfaceExtension;
00243 std::list<std::string> SupportedProfile;
00244 std::string Implementor;
00245 Software Implementation;
00246 std::string ServingState;
00247 std::string IssuerCA;
00248 std::list<std::string> TrustedCA;
00249 Time DowntimeStarts;
00250 Time DowntimeEnds;
00251 std::string Staging;
00252 int TotalJobs;
00253 int RunningJobs;
00254 int WaitingJobs;
00255 int StagingJobs;
00256 int SuspendedJobs;
00257 int PreLRMSWaitingJobs;
00258
00259 std::list<std::string> JobDescriptions;
00260 };
00261
00262 class ComputingServiceAttributes {
00263 public:
00264 ComputingServiceAttributes() :
00265 TotalJobs(-1), RunningJobs(-1), WaitingJobs(-1),
00266 StagingJobs(-1), SuspendedJobs(-1), PreLRMSWaitingJobs(-1) {}
00267 std::string ID;
00268 std::string Name;
00269 std::string Type;
00270 std::list<std::string> Capability;
00271 std::string QualityLevel;
00272 int TotalJobs;
00273 int RunningJobs;
00274 int WaitingJobs;
00275 int StagingJobs;
00276 int SuspendedJobs;
00277 int PreLRMSWaitingJobs;
00278
00279
00280 URL Cluster;
00281 Endpoint OriginalEndpoint;
00282 };
00283
00284 class LocationType : public GLUE2Entity<LocationAttributes> {};
00285
00286 class AdminDomainType : public GLUE2Entity<AdminDomainAttributes> {};
00287
00288 class ExecutionEnvironmentType : public GLUE2Entity<ExecutionEnvironmentAttributes> {};
00289
00290 class ComputingManagerType : public GLUE2Entity<ComputingManagerAttributes> {
00291 public:
00292 ComputingManagerType() : Benchmarks(new std::map<std::string, double>), ApplicationEnvironments(new std::list<ApplicationEnvironment>) {}
00293
00294 std::map<int, ExecutionEnvironmentType> ExecutionEnvironment;
00295 CountedPointer< std::map<std::string, double> > Benchmarks;
00297
00301 CountedPointer< std::list<ApplicationEnvironment> > ApplicationEnvironments;
00302 };
00303
00304 class ComputingShareType : public GLUE2Entity<ComputingShareAttributes> {
00305 public:
00306
00307 std::set<int> ComputingEndpointIDs;
00308 };
00309
00310 class ComputingEndpointType : public GLUE2Entity<ComputingEndpointAttributes> {
00311 public:
00312
00313 std::set<int> ComputingShareIDs;
00314 };
00315
00316 class ComputingServiceType : public GLUE2Entity<ComputingServiceAttributes> {
00317 public:
00318 template<typename T>
00319 void GetExecutionTargets(T& container) const;
00320
00321 LocationType Location;
00322 AdminDomainType AdminDomain;
00323
00324 std::map<int, ComputingEndpointType> ComputingEndpoint;
00325 std::map<int, ComputingShareType> ComputingShare;
00326 std::map<int, ComputingManagerType> ComputingManager;
00327 private:
00328 template<typename T>
00329 void AddExecutionTarget(T& container, const ExecutionTarget& et) const;
00330 static Logger logger;
00331 };
00332
00334
00340 class ExecutionTarget {
00341 public:
00343
00347 ExecutionTarget() :
00348 Location(new LocationAttributes()),
00349 AdminDomain(new AdminDomainAttributes()),
00350 ComputingService(new ComputingServiceAttributes()),
00351 ComputingEndpoint(new ComputingEndpointAttributes()),
00352 ComputingShare(new ComputingShareAttributes()),
00353 ComputingManager(new ComputingManagerAttributes()),
00354 ExecutionEnvironment(new ExecutionEnvironmentAttributes()),
00355 Benchmarks(new std::map<std::string, double>()),
00356 ApplicationEnvironments(new std::list<ApplicationEnvironment>()) {};
00357
00359
00364 ExecutionTarget(const ExecutionTarget& t) :
00365 Location(t.Location), AdminDomain(t.AdminDomain), ComputingService(t.ComputingService),
00366 ComputingEndpoint(t.ComputingEndpoint), ComputingShare(t.ComputingShare), ComputingManager(t.ComputingManager),
00367 ExecutionEnvironment(t.ExecutionEnvironment), Benchmarks(t.Benchmarks), ApplicationEnvironments(t.ApplicationEnvironments) {}
00368
00369 ExecutionTarget(const CountedPointer<LocationAttributes>& l,
00370 const CountedPointer<AdminDomainAttributes>& a,
00371 const CountedPointer<ComputingServiceAttributes>& cse,
00372 const CountedPointer<ComputingEndpointAttributes>& ce,
00373 const CountedPointer<ComputingShareAttributes>& csh,
00374 const CountedPointer<ComputingManagerAttributes>& cm,
00375 const CountedPointer<ExecutionEnvironmentAttributes>& ee,
00376 const CountedPointer< std::map<std::string, double> >& b,
00377 const CountedPointer< std::list<ApplicationEnvironment> >& ae) :
00378 Location(l), AdminDomain(a), ComputingService(cse),
00379 ComputingEndpoint(ce), ComputingShare(csh), ComputingManager(cm),
00380 ExecutionEnvironment(ee), Benchmarks(b), ApplicationEnvironments(ae) {}
00381
00383
00389 ExecutionTarget(long int addrptr) :
00390 Location((*(ExecutionTarget*)addrptr).Location),
00391 AdminDomain((*(ExecutionTarget*)addrptr).AdminDomain),
00392 ComputingService((*(ExecutionTarget*)addrptr).ComputingService),
00393 ComputingEndpoint((*(ExecutionTarget*)addrptr).ComputingEndpoint),
00394 ComputingShare((*(ExecutionTarget*)addrptr).ComputingShare),
00395 ComputingManager((*(ExecutionTarget*)addrptr).ComputingManager),
00396 ExecutionEnvironment((*(ExecutionTarget*)addrptr).ExecutionEnvironment),
00397 Benchmarks((*(ExecutionTarget*)addrptr).Benchmarks),
00398 ApplicationEnvironments((*(ExecutionTarget*)addrptr).ApplicationEnvironments) {}
00399
00400
00401 ExecutionTarget& operator=(const ExecutionTarget& et) {
00402 Location = et.Location; AdminDomain = et.AdminDomain; ComputingService = et.ComputingService;
00403 ComputingEndpoint = et.ComputingEndpoint; ComputingShare = et.ComputingShare; ComputingManager = et.ComputingManager;
00404 Benchmarks = et.Benchmarks; ExecutionEnvironment = et.ExecutionEnvironment; ApplicationEnvironments = et.ApplicationEnvironments;
00405 return *this;
00406 }
00407
00408 ~ExecutionTarget() {};
00409
00410 bool Submit(const UserConfig& ucfg, const JobDescription& jobdesc, Job& job) const;
00411
00413
00423 void RegisterJobSubmission(const JobDescription& jobdesc) const;
00424
00426
00432 void SaveToStream(std::ostream& out, bool longlist) const;
00433
00434 static void GetExecutionTargets(const std::list<ComputingServiceType>& csList, std::list<ExecutionTarget>& etList);
00435
00436 CountedPointer<LocationAttributes> Location;
00437 CountedPointer<AdminDomainAttributes> AdminDomain;
00438 CountedPointer<ComputingServiceAttributes> ComputingService;
00439 CountedPointer<ComputingEndpointAttributes> ComputingEndpoint;
00440 CountedPointer<ComputingShareAttributes> ComputingShare;
00441 CountedPointer<ComputingManagerAttributes> ComputingManager;
00442 CountedPointer<ExecutionEnvironmentAttributes> ExecutionEnvironment;
00443 CountedPointer< std::map<std::string, double> > Benchmarks;
00444 CountedPointer< std::list<ApplicationEnvironment> > ApplicationEnvironments;
00445
00446 private:
00447 static Logger logger;
00448 };
00449
00450 }
00451
00452 #endif // __ARC_EXECUTIONTARGET_H__