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