00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/adaptors/resourcebroker/job.c,v 1.12 2004/04/26 15:45:00 hartmutkaiser Exp $";
00018
00019
00020 #include <stdio.h>
00021 #include <stdlib.h>
00022 #include <string.h>
00023
00024
00025 #include "GATCPI.h"
00026 #include "GATJobCPIInstanceData.h"
00027
00028
00029 #define __countof(x) (sizeof(x)/sizeof(x[0]))
00030
00031
00032
00033
00034 static void
00035 resourcebroker_adaptor_GATJobCPI_Destroy(void *data);
00036
00037
00038 static GATResult
00039 resourcebroker_adaptor_GATJobCPI_ServiceActions(void *data,
00040 GATJobCPI_Instance *instance_data, GATTimePeriod_const timeout );
00041
00042 static GATResult
00043 resourcebroker_adaptor_GATJobCPI_CreateInstance(
00044 void *data, GATJobCPI_Instance *instance_data, void *initialisation_data);
00045
00046 static void
00047 resourcebroker_adaptor_GATJobCPI_DestroyInstance(
00048 void *data, GATJobCPI_Instance *instance_data);
00049
00050 static GATResult
00051 resourcebroker_adaptor_GATJobCPI_CloneInstance(
00052 void *data, GATJobCPI_Instance const *instance_data,
00053 GATJobCPI_Instance *new_instance_data);
00054
00055 static GATResult
00056 resourcebroker_adaptor_GATJobCPI_EqualsInstance(
00057 void *data, GATJobCPI_Instance const *lhs,
00058 GATJobCPI_Instance const *rhs, GATBool *isequal);
00059
00060
00061 static GATResult
00062 resourcebroker_adaptor_GATJobCPI_GetMetrics(
00063 void *data, GATJobCPI_Instance const *instance_data,
00064 GATList_GATMetric *metrics);
00065 static GATResult
00066 resourcebroker_adaptor_GATJobCPI_GetMetricEvent(
00067 void *data, GATJobCPI_Instance const *instance_data,
00068 GATMetric metric, GATMetricEvent *event);
00069
00070
00071 static GATResult
00072 resourcebroker_adaptor_GATJobCPI_Serialise(
00073 void *data, GATJobCPI_Instance const *instance_data,
00074 GATObject stream, GATBool clear_dirty);
00075 static GATResult
00076 resourcebroker_adaptor_GATJobCPI_DeSerialise(
00077 void *data, GATObject stream,
00078 GATJobCPI_Instance *instance_data);
00079
00080
00081 static GATResult
00082 resourcebroker_adaptor_GATJobCPI_UnSchedule(void *data,
00083 GATJobCPI_Instance const *instance_data);
00084
00085 static GATResult
00086 resourcebroker_adaptor_GATJobCPI_Checkpoint(void *data,
00087 GATJobCPI_Instance const *instance_data);
00088
00089 static GATResult
00090 resourcebroker_adaptor_GATJobCPI_CloneJob(void *data,
00091 GATJobCPI_Instance const *instance_data, GATHardwareResource_const hr,
00092 GATJob *cloned_job);
00093
00094 static GATResult
00095 resourcebroker_adaptor_GATJobCPI_Migrate(void *data,
00096 GATJobCPI_Instance const *instance_data, GATHardwareResource_const hr,
00097 GATJob *migrated_job);
00098
00099 static GATResult
00100 resourcebroker_adaptor_GATJobCPI_Stop(void *data,
00101 GATJobCPI_Instance const *instance_data);
00102
00103 static GATResult
00104 resourcebroker_adaptor_GATJobCPI_GetJobDescription(void *data,
00105 GATJobCPI_Instance const *instance_data, GATJobDescription_const *jd);
00106
00107 static GATResult
00108 resourcebroker_adaptor_GATJobCPI_GetInfo(void *data,
00109 GATJobCPI_Instance const *instance_data, GATTable_const *jobinfo);
00110
00111 static GATResult
00112 resourcebroker_adaptor_GATJobCPI_GetJobID(void *data,
00113 GATJobCPI_Instance const *instance_data, GATJobID_const *jobid);
00114
00115 static GATResult
00116 resourcebroker_adaptor_GATJobCPI_GetStatus(void *data,
00117 GATJobCPI_Instance const *instance_data, GATStatus_const *jobstatus);
00118
00119
00120
00121
00122 static GATStaticMetric metric_data[] = {
00123
00124 {
00125 "job.status_changed",
00126 GATMeasurementType_EventLike,
00127 GATType_GATuint32,
00128 "",
00129 0,
00130 0
00131 },
00132 };
00133
00134
00135 #define METRIC_STATUS_CHANGED 0
00136
00137
00138
00139
00140 GATResult resourcebroker_adaptor_Register_GATJobCPI(
00141 GATContext error_context, GATRegistry registry,
00142 GATTable_const system_config, GATTable_const instance_config, void *token)
00143 {
00144 GAT_USES_STATUS(error_context, "resourcebroker_adaptor_Register_GATJobCPI");
00145
00146 GATJobCPI cpi = NULL;
00147 GATJobCPI_Data cpidata;
00148
00149 {
00150 memset(&cpidata, 0, sizeof(GATJobCPI_Data));
00151
00152
00153
00154
00155 cpidata.data = NULL;
00156 cpidata.destroy = resourcebroker_adaptor_GATJobCPI_Destroy;
00157
00158
00159 cpidata.service_actions = resourcebroker_adaptor_GATJobCPI_ServiceActions;
00160 cpidata.create_instance = resourcebroker_adaptor_GATJobCPI_CreateInstance;
00161 cpidata.destroy_instance = resourcebroker_adaptor_GATJobCPI_DestroyInstance;
00162 cpidata.clone_instance = resourcebroker_adaptor_GATJobCPI_CloneInstance;
00163 cpidata.equals_instance = resourcebroker_adaptor_GATJobCPI_EqualsInstance;
00164
00165
00166 cpidata.get_metrics = resourcebroker_adaptor_GATJobCPI_GetMetrics;
00167 cpidata.get_metric_event = resourcebroker_adaptor_GATJobCPI_GetMetricEvent;
00168
00169
00170 cpidata.serialise = resourcebroker_adaptor_GATJobCPI_Serialise;
00171 cpidata.deserialise = resourcebroker_adaptor_GATJobCPI_DeSerialise;
00172
00173
00174
00175 cpidata.unschedule = resourcebroker_adaptor_GATJobCPI_UnSchedule;
00176 cpidata.checkpoint = resourcebroker_adaptor_GATJobCPI_Checkpoint;
00177 cpidata.clonejob = resourcebroker_adaptor_GATJobCPI_CloneJob;
00178 cpidata.migratejob = resourcebroker_adaptor_GATJobCPI_Migrate;
00179 cpidata.stopjob = resourcebroker_adaptor_GATJobCPI_Stop;
00180 cpidata.get_jobdescription = resourcebroker_adaptor_GATJobCPI_GetJobDescription;
00181 cpidata.get_jobinfo = resourcebroker_adaptor_GATJobCPI_GetInfo;
00182 cpidata.get_jobid = resourcebroker_adaptor_GATJobCPI_GetJobID;
00183 cpidata.get_status = resourcebroker_adaptor_GATJobCPI_GetStatus;
00184
00185
00186 cpi = GATJobCPI_Create(GATJOBCPI_VERSION, &cpidata);
00187 if(NULL != cpi)
00188 {
00189
00190
00191
00192 GATPreferences preferences = GATPreferences_Create();
00193 if(NULL != preferences)
00194 {
00195 GAT_CREATE_STATUS(GATPreferences_Add(preferences, "Name",
00196 "resourcebroker_adaptor"));
00197 GAT_CREATE_STATUS(GATPreferences_Add(preferences, "Security", "none"));
00198 GAT_CREATE_STATUS(GATPreferences_Add(preferences, "Local", "true"));
00199
00200 GAT_CREATE_STATUS(GATRegistry_AddGATJobCPI(registry, cpi, token,
00201 preferences));
00202
00203 GATPreferences_Destroy(&preferences);
00204 }
00205 }
00206 }
00207
00208 if (GAT_FAILED(GAT_CURRENT_STATUS()))
00209 {
00210 GATJobCPI_Destroy(&cpi);
00211 }
00212
00213 return GAT_RETURN_STATUS();
00214 }
00215
00216
00217
00218 static void
00219 resourcebroker_adaptor_GATJobCPI_Destroy(void *data)
00220 {
00221
00222 assert(NULL == data);
00223 }
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243 static GATResult
00244 resourcebroker_adaptor_GATJobCPI_ServiceActions(void *data,
00245 GATJobCPI_Instance *instance_data, GATTimePeriod_const timeout)
00246 {
00247 return GAT_NOTIMPL;
00248 }
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262 static GATResult
00263 resourcebroker_adaptor_GATJobCPI_CreateInstance(void *data,
00264 GATJobCPI_Instance *new_instance_data, void *initialisation_data)
00265 {
00266 GAT_USES_STATUS(new_instance_data->context,
00267 "resourcebroker_adaptor_GATJobCPI_CreateInstance");
00268
00269 if (NULL != new_instance_data)
00270 {
00271 GAT_CREATE_STATUS(GATJobCPIInstance_Data_Clone(
00272 (GATJobCPIInstance_Data *) initialisation_data,
00273 (GATJobCPIInstance_Data **) &new_instance_data->instance_data));
00274 }
00275
00276 return GAT_RETURN_STATUS();
00277 }
00278
00279
00280
00281
00282
00283
00284
00285
00286 static void
00287 resourcebroker_adaptor_GATJobCPI_DestroyInstance(void *data,
00288 GATJobCPI_Instance *instance_data)
00289 {
00290 GATJobCPIInstance_Data_Destroy(
00291 (GATJobCPIInstance_Data **) &instance_data->instance_data);
00292 }
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305 static GATResult
00306 resourcebroker_adaptor_GATJobCPI_CloneInstance(
00307 void *data, GATJobCPI_Instance const *instance_data,
00308 GATJobCPI_Instance *new_instance_data)
00309 {
00310 GAT_USES_STATUS(instance_data->context,
00311 "resourcebroker_adaptor_GATJobCPI_CloneInstance");
00312
00313 if (NULL != instance_data && NULL != new_instance_data)
00314 {
00315 GAT_CREATE_STATUS(GATJobCPIInstance_Data_Clone(
00316 (GATJobCPIInstance_Data *) instance_data->instance_data,
00317 (GATJobCPIInstance_Data **) &new_instance_data->instance_data));
00318 }
00319 else
00320 {
00321 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00322 }
00323
00324 return GAT_RETURN_STATUS();
00325 }
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339 static GATResult
00340 resourcebroker_adaptor_GATJobCPI_EqualsInstance(
00341 void *data, GATJobCPI_Instance const *lhs,
00342 GATJobCPI_Instance const *rhs, GATBool *isequal)
00343 {
00344 GAT_USES_STATUS(lhs->context,
00345 "resourcebroker_adaptor_GATResourceCPI_CloneInstance");
00346
00347 if (NULL != lhs && NULL != rhs)
00348 {
00349 GAT_CREATE_STATUS(GATJobCPIInstance_Data_Equals(
00350 (GATJobCPIInstance_Data *) lhs->instance_data,
00351 (GATJobCPIInstance_Data *) rhs->instance_data, isequal));
00352 }
00353 else
00354 {
00355 GAT_CREATE_STATUS(GAT_INVALID_HANDLE);
00356 }
00357
00358 return GAT_RETURN_STATUS();
00359 }
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378 static GATResult
00379 resourcebroker_adaptor_GATJobCPI_GetMetrics(void *data,
00380 GATJobCPI_Instance const *instance_data, GATList_GATMetric *metrics)
00381 {
00382 return GATMetric_CreateListOfMetrics(metric_data, __countof(metric_data),
00383 metrics);
00384 }
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405 static GATResult
00406 resourcebroker_adaptor_GATJobCPI_GetMetricEvent(void *data,
00407 GATJobCPI_Instance const *instance_data, GATMetric metric,
00408 GATMetricEvent *event)
00409 {
00410 return GAT_NOTIMPL;
00411 }
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431 static GATResult
00432 resourcebroker_adaptor_GATJobCPI_Serialise(void *data,
00433 GATJobCPI_Instance const *instance_data, GATObject stream,
00434 GATBool clear_dirty)
00435 {
00436 GAT_USES_STATUS(instance_data->context,
00437 "resourcebroker_adaptor_GATJobCPI_Serialise");
00438
00439 GAT_CREATE_STATUS(GATJobCPIInstance_Data_Serialize(
00440 (GATJobCPIInstance_Data const *) instance_data->instance_data, stream,
00441 clear_dirty));
00442
00443 return GAT_RETURN_STATUS();
00444 }
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460 static GATResult
00461 resourcebroker_adaptor_GATJobCPI_DeSerialise(void *data,
00462 GATObject stream, GATJobCPI_Instance *instance_data)
00463 {
00464 GAT_USES_STATUS(instance_data->context,
00465 "resourcebroker_adaptor_GATJobCPI_DeSerialise");
00466
00467 GAT_CREATE_STATUS(GATJobCPIInstance_Data_DeSerialize(
00468 instance_data->context, stream,
00469 (GATJobCPIInstance_Data **) &instance_data->instance_data));
00470
00471 return GAT_RETURN_STATUS();
00472 }
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489 static GATResult
00490 resourcebroker_adaptor_GATJobCPI_UnSchedule(void *data,
00491 GATJobCPI_Instance const *instance_data)
00492 {
00493 return GAT_NOTIMPL;
00494 }
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511 static GATResult
00512 resourcebroker_adaptor_GATJobCPI_Checkpoint(void *data,
00513 GATJobCPI_Instance const *instance_data)
00514 {
00515 return GAT_NOTIMPL;
00516 }
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534 static GATResult
00535 resourcebroker_adaptor_GATJobCPI_CloneJob(void *data,
00536 GATJobCPI_Instance const *instance_data, GATHardwareResource_const hr,
00537 GATJob *cloned_job)
00538 {
00539 return GAT_NOTIMPL;
00540 }
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560 static GATResult
00561 resourcebroker_adaptor_GATJobCPI_Migrate(void *data,
00562 GATJobCPI_Instance const *instance_data, GATHardwareResource_const hr,
00563 GATJob *migrated_job)
00564 {
00565 return GAT_NOTIMPL;
00566 }
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580 static GATResult
00581 resourcebroker_adaptor_GATJobCPI_Stop(void *data,
00582 GATJobCPI_Instance const *instance_data)
00583 {
00584 return GAT_NOTIMPL;
00585 }
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599 static GATResult
00600 resourcebroker_adaptor_GATJobCPI_GetJobDescription(void *data,
00601 GATJobCPI_Instance const *instance_data, GATJobDescription_const *jd)
00602 {
00603 GAT_USES_STATUS(instance_data->context,
00604 "resourcebroker_adaptor_GATJobCPI_GetJobDescription");
00605
00606 if (NULL != jd)
00607 {
00608 *jd = ((GATJobCPIInstance_Data *)instance_data->instance_data)->description;
00609 }
00610 else
00611 {
00612 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00613 }
00614 return GAT_RETURN_STATUS();
00615 }
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631 static GATResult
00632 resourcebroker_adaptor_GATJobCPI_GetInfo(void *data,
00633 GATJobCPI_Instance const *instance_data, GATTable_const *jobinfo)
00634 {
00635 GAT_USES_STATUS(instance_data->context,
00636 "resourcebroker_adaptor_GATJobCPI_GetInfo");
00637
00638 if (NULL != jobinfo)
00639 {
00640 *jobinfo = ((GATJobCPIInstance_Data *)instance_data->instance_data)->parameters;
00641 }
00642 else
00643 {
00644 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00645 }
00646 return GAT_RETURN_STATUS();
00647 }
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664 static GATResult
00665 resourcebroker_adaptor_GATJobCPI_GetJobID(void *data,
00666 GATJobCPI_Instance const *instance_data, GATJobID_const *jobid)
00667 {
00668 GAT_USES_STATUS(instance_data->context,
00669 "resourcebroker_adaptor_GATJobCPI_GetJobID");
00670
00671 if (NULL != jobid)
00672 {
00673 *jobid = instance_data->jobid;
00674 }
00675 else
00676 {
00677 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00678 }
00679 return GAT_RETURN_STATUS();
00680 }
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695 static GATResult
00696 resourcebroker_adaptor_GATJobCPI_GetStatus(void *data,
00697 GATJobCPI_Instance const *instance_data, GATStatus_const *jobstatus)
00698 {
00699 GAT_USES_STATUS(instance_data->context,
00700 "resourcebroker_adaptor_GATJobCPI_GetStatus");
00701
00702 if (NULL != jobstatus)
00703 {
00704 *jobstatus = ((GATJobCPIInstance_Data *)instance_data->instance_data)->status;
00705 }
00706 else
00707 {
00708 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00709 }
00710 return GAT_RETURN_STATUS();
00711 }