00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/adaptors/resourcebroker/request.c,v 1.4 2004/04/26 15:45:00 hartmutkaiser Exp $";
00019
00020
00021 #include <stdio.h>
00022 #include <stdlib.h>
00023 #include <string.h>
00024 #include <time.h>
00025
00026
00027 #include "GATCPI.h"
00028 #include "GATRequestNotifier.h"
00029 #include "GATRequestCPIInstanceData.h"
00030
00031 #include "request.h"
00032
00033
00034 #ifndef PATH_MAX
00035 #define PATH_MAX 4096
00036 #endif
00037
00038
00039
00040
00041 static void
00042 resourcebroker_adaptor_GATRequestCPI_Destroy(void *data);
00043
00044
00045 static GATResult
00046 resourcebroker_adaptor_GATRequestCPI_ServiceActions(void *data,
00047 GATRequestCPI_Instance *instance_data, GATTimePeriod_const timeout );
00048
00049 static GATResult
00050 resourcebroker_adaptor_GATRequestCPI_CreateInstance(void *adaptor_data,
00051 GATRequestCPI_Instance *instance_data, void *initialisation_data);
00052
00053 static void
00054 resourcebroker_adaptor_GATRequestCPI_DestroyInstance(
00055 void *data, GATRequestCPI_Instance *instance_data);
00056
00057 static GATResult
00058 resourcebroker_adaptor_GATRequestCPI_CloneInstance(
00059 void *data, GATRequestCPI_Instance const *instance_data,
00060 GATRequestCPI_Instance *new_instance_data);
00061
00062 static GATResult
00063 resourcebroker_adaptor_GATRequestCPI_EqualsInstance(
00064 void *data, GATRequestCPI_Instance const *lhs,
00065 GATRequestCPI_Instance const *rhs, GATBool *isequal);
00066
00067
00068 static GATResult
00069 resourcebroker_adaptor_GATRequestCPI_InitRequestNotifier(
00070 void *data, GATRequestCPI_Instance const *instance_data,
00071 GATRequestNotifier_const *notifier);
00072
00073
00074 static GATResult
00075 resourcebroker_adaptor_GATRequestCPI_request_notifier_listener(
00076 void *data, GATRequestCPI_Instance const *instance_data,
00077 GATTable_const notifier_data, void *context_data);
00078
00079
00080
00081
00082
00083
00084
00085 GATResult resourcebroker_adaptor_Register_GATRequestCPI(
00086 GATContext error_context, GATRegistry registry,
00087 GATTable_const system_config, GATTable_const instance_config, void *token)
00088 {
00089 GAT_USES_STATUS(error_context, "resourcebroker_adaptor_Register_GATRequestCPI");
00090
00091 GATRequestCPI cpi = NULL;
00092 GATRequestCPI_Data cpidata;
00093
00094 {
00095 memset(&cpidata, 0, sizeof(GATRequestCPI_Data));
00096
00097
00098
00099
00100 cpidata.data = NULL;
00101 cpidata.destroy = resourcebroker_adaptor_GATRequestCPI_Destroy;
00102
00103
00104 cpidata.service_actions = resourcebroker_adaptor_GATRequestCPI_ServiceActions;
00105 cpidata.create_instance = resourcebroker_adaptor_GATRequestCPI_CreateInstance;
00106 cpidata.destroy_instance = resourcebroker_adaptor_GATRequestCPI_DestroyInstance;
00107 cpidata.clone_instance = resourcebroker_adaptor_GATRequestCPI_CloneInstance;
00108 cpidata.equals_instance = resourcebroker_adaptor_GATRequestCPI_EqualsInstance;
00109
00110
00111 cpidata.init_notifier = resourcebroker_adaptor_GATRequestCPI_InitRequestNotifier;
00112
00113
00114 cpi = GATRequestCPI_Create(GATREQUESTCPI_VERSION, &cpidata);
00115 if(NULL != cpi)
00116 {
00117
00118
00119
00120 GATPreferences preferences = GATPreferences_Create();
00121 if(NULL != preferences)
00122 {
00123 GAT_CREATE_STATUS(GATPreferences_Add(preferences, "Name",
00124 "resourcebroker_adaptor"));
00125 GAT_CREATE_STATUS(GATPreferences_Add(preferences, "Security", "none"));
00126 GAT_CREATE_STATUS(GATPreferences_Add(preferences, "Local", "true"));
00127
00128 GAT_CREATE_STATUS(GATRegistry_AddGATRequestCPI(registry, cpi, token,
00129 preferences));
00130
00131 GATPreferences_Destroy(&preferences);
00132 }
00133 else
00134 {
00135 GAT_CREATE_STATUS(GAT_MEMORYFAILURE);
00136 }
00137 }
00138 else
00139 {
00140 GAT_CREATE_STATUS(GAT_MEMORYFAILURE);
00141 }
00142 }
00143
00144 if (GAT_FAILED(GAT_CURRENT_STATUS()))
00145 {
00146 GATRequestCPI_Destroy(&cpi);
00147 }
00148
00149 return GAT_RETURN_STATUS();
00150 }
00151
00152
00153
00154 static void
00155 resourcebroker_adaptor_GATRequestCPI_Destroy(void *data)
00156 {
00157
00158 assert(NULL == data);
00159 }
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179 static GATResult
00180 resourcebroker_adaptor_GATRequestCPI_ServiceActions(void *data,
00181 GATRequestCPI_Instance *instance_data, GATTimePeriod_const timeout)
00182 {
00183 if (NULL != instance_data)
00184 {
00185
00186 GATResult retval = GAT_SUCCESS;
00187 GATRequestCPIInstance_Data *data =
00188 (GATRequestCPIInstance_Data *)instance_data->instance_data;
00189 if (difftime(time(0), data->start_time) >= 2)
00190 {
00191
00192 retval = GATRequest_IssueCommand(instance_data->source);
00193 }
00194 return retval;
00195 }
00196 return GAT_INVALID_HANDLE;
00197 }
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211 static GATResult
00212 resourcebroker_adaptor_GATRequestCPI_CreateInstance(void *data,
00213 GATRequestCPI_Instance *new_instance_data, void *initialisation_data)
00214 {
00215 if (NULL != new_instance_data)
00216 {
00217 GAT_USES_STATUS(new_instance_data->context,
00218 "resourcebroker_adaptor_GATRequestCPI_CreateInstance");
00219
00220 GAT_CREATE_STATUS(GATRequestCPIInstance_Data_Clone(initialisation_data,
00221 (GATRequestCPIInstance_Data **)&new_instance_data->instance_data));
00222
00223 return GAT_RETURN_STATUS();
00224 }
00225 return GAT_INVALID_HANDLE;
00226 }
00227
00228
00229
00230
00231
00232
00233
00234
00235 static void
00236 resourcebroker_adaptor_GATRequestCPI_DestroyInstance(void *data,
00237 GATRequestCPI_Instance *instance_data)
00238 {
00239 GATRequestCPIInstance_Data_Destroy(
00240 (GATRequestCPIInstance_Data **) &instance_data->instance_data);
00241 }
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254 static GATResult
00255 resourcebroker_adaptor_GATRequestCPI_CloneInstance(
00256 void *data, GATRequestCPI_Instance const *instance_data,
00257 GATRequestCPI_Instance *new_instance_data)
00258 {
00259 if (NULL != instance_data)
00260 {
00261 GAT_USES_STATUS(instance_data->context,
00262 "resourcebroker_adaptor_GATRequestCPI_CloneInstance");
00263
00264 if (NULL != new_instance_data)
00265 {
00266 GAT_CREATE_STATUS(GATRequestCPIInstance_Data_Clone(
00267 (GATRequestCPIInstance_Data const *)instance_data->instance_data,
00268 (GATRequestCPIInstance_Data **)&new_instance_data->instance_data));
00269 }
00270 else
00271 {
00272 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00273 }
00274 return GAT_RETURN_STATUS();
00275 }
00276 return GAT_INVALID_HANDLE;
00277 }
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291 static GATResult
00292 resourcebroker_adaptor_GATRequestCPI_EqualsInstance(
00293 void *data, GATRequestCPI_Instance const *lhs,
00294 GATRequestCPI_Instance const *rhs, GATBool *isequal)
00295 {
00296 if (NULL != lhs && NULL != rhs)
00297 {
00298 GAT_USES_STATUS(lhs->context,
00299 "resourcebroker_adaptor_GATRequestCPI_EqualsInstance");
00300
00301 GAT_CREATE_STATUS(GATRequestCPIInstance_Data_Equals(
00302 (GATRequestCPIInstance_Data const *) lhs->instance_data,
00303 (GATRequestCPIInstance_Data const *) rhs->instance_data, isequal));
00304
00305 return GAT_RETURN_STATUS();
00306 }
00307 return GAT_INVALID_HANDLE;
00308 }
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325 static GATResult
00326 resourcebroker_adaptor_GATRequestCPI_InitRequestNotifier(
00327 void *data, GATRequestCPI_Instance const *instance_data,
00328 GATRequestNotifier_const *notifier)
00329 {
00330 GATResult retval = GAT_MEMORYFAILURE;
00331 GATRequestNotifier new_notifier = GATRequestNotifier_Create(data,
00332 instance_data, resourcebroker_adaptor_GATRequestCPI_request_notifier_listener, 0);
00333
00334 if (NULL != new_notifier)
00335 {
00336 if (NULL != notifier)
00337 {
00338 *notifier = new_notifier;
00339 retval = GAT_SUCCESS;
00340 }
00341 else
00342 {
00343 GATRequestNotifier_Destroy(&new_notifier);
00344 retval = GAT_INVALID_PARAMETER;
00345 }
00346 }
00347 return retval;
00348 }
00349
00350
00351
00352
00353 static GATResult
00354 resourcebroker_adaptor_GATRequestCPI_request_notifier_listener(
00355 void *data, GATRequestCPI_Instance const *instance_data,
00356 GATTable_const notifier_data, void *context_data)
00357 {
00358 GATResult retval = GAT_INVALID_HANDLE;
00359 if (NULL != notifier_data)
00360 {
00361
00362 char buffer[PATH_MAX+1];
00363 retval = GATTable_Get_String(notifier_data, "checkpoint_file1",
00364 buffer, sizeof(buffer));
00365 if (GAT_SUCCEEDED(retval))
00366 {
00367 retval = !strcmp(buffer, "some_name") ? GAT_SUCCESS : GAT_FAIL;
00368 }
00369 }
00370 return retval;
00371 }
00372
00373