00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <assert.h>
00026
00027 #include "serv_lib.h"
00028 namespace eyedb {
00029 class ObjectHeader;
00030 }
00031
00032 #include "eyedb/base.h"
00033 #include "eyedb/Error.h"
00034 #include "eyedb/Exception.h"
00035 #include "eyedb/TransactionParams.h"
00036 #include "kernel.h"
00037 #include <eyedblib/xdr.h>
00038 #include <eyedbsm/xdr.h>
00039 #include "eyedbsm/transaction.h"
00040
00041 namespace eyedb {
00042
00043 rpc_ServerFunction
00044 *DBMCREATE_SERV_RPC,
00045 *DBMUPDATE_SERV_RPC,
00046
00047 *DBCREATE_SERV_RPC,
00048 *DBDELETE_SERV_RPC,
00049
00050 *DBINFO_SERV_RPC,
00051 *DBMOVE_SERV_RPC,
00052 *DBCOPY_SERV_RPC,
00053 *DBRENAME_SERV_RPC,
00054
00055 *USER_ADD_SERV_RPC,
00056 *USER_DELETE_SERV_RPC,
00057 *USER_PASSWD_SET_SERV_RPC,
00058 *PASSWD_SET_SERV_RPC,
00059
00060 *DEFAULT_DBACCESS_SET_SERV_RPC,
00061 *USER_DBACCESS_SET_SERV_RPC,
00062 *USER_SYSACCESS_SET_SERV_RPC,
00063
00064 *BACKEND_INTERRUPT_SERV_RPC,
00065
00066 *TRANSACTION_BEGIN_SERV_RPC,
00067 *TRANSACTION_ABORT_SERV_RPC,
00068 *TRANSACTION_COMMIT_SERV_RPC,
00069
00070 *TRANSACTION_PARAMS_SET_SERV_RPC,
00071 *TRANSACTION_PARAMS_GET_SERV_RPC,
00072
00073 *DBOPEN_SERV_RPC,
00074 *DBOPENLOCAL_SERV_RPC,
00075 *DBCLOSE_SERV_RPC,
00076
00077 *OBJECT_CREATE_SERV_RPC,
00078 *OBJECT_READ_SERV_RPC,
00079 *OBJECT_WRITE_SERV_RPC,
00080 *OBJECT_DELETE_SERV_RPC,
00081 *OBJECT_HEADER_READ_SERV_RPC,
00082 *OBJECT_SIZE_MODIFY_SERV_RPC,
00083 *OBJECT_PROTECTION_SET_SERV_RPC,
00084 *OBJECT_PROTECTION_GET_SERV_RPC,
00085 *OBJECT_CHECK_SERV_RPC,
00086
00087 *OID_MAKE_SERV_RPC,
00088
00089 *DATA_CREATE_SERV_RPC,
00090 *DATA_READ_SERV_RPC,
00091 *DATA_WRITE_SERV_RPC,
00092 *DATA_DELETE_SERV_RPC,
00093 *DATA_SIZE_GET_SERV_RPC,
00094 *DATA_SIZE_MODIFY_SERV_RPC,
00095
00096 *VDDATA_CREATE_SERV_RPC,
00097 *VDDATA_WRITE_SERV_RPC,
00098 *VDDATA_DELETE_SERV_RPC,
00099
00100 *SCHEMA_COMPLETE_SERV_RPC,
00101
00102 *ATTRIBUTE_INDEX_CREATE_SERV_RPC,
00103 *ATTRIBUTE_INDEX_REMOVE_SERV_RPC,
00104
00105 *INDEX_CREATE_SERV_RPC,
00106 *INDEX_REMOVE_SERV_RPC,
00107
00108 *CONSTRAINT_CREATE_SERV_RPC,
00109 *CONSTRAINT_DELETE_SERV_RPC,
00110
00111 *COLLECTION_GET_BY_IND_SERV_RPC,
00112 *COLLECTION_GET_BY_VALUE_SERV_RPC,
00113
00114 *SET_OBJECT_LOCK_SERV_RPC,
00115 *GET_OBJECT_LOCK_SERV_RPC,
00116
00117
00118
00119
00120 *QUERY_COLLECTION_CREATE_SERV_RPC,
00121 *QUERY_ATTRIBUTE_CREATE_SERV_RPC,
00122 *QUERY_DELETE_SERV_RPC,
00123 *QUERY_SCAN_NEXT_SERV_RPC,
00124
00125 *EXECUTABLE_CHECK_SERV_RPC,
00126 *EXECUTABLE_EXECUTE_SERV_RPC,
00127 *EXECUTABLE_SET_EXTREF_PATH_SERV_RPC,
00128 *EXECUTABLE_GET_EXTREF_PATH_SERV_RPC,
00129
00130 *OQL_CREATE_SERV_RPC,
00131 *OQL_DELETE_SERV_RPC,
00132 *OQL_GETRESULT_SERV_RPC,
00133
00134 *SET_CONN_INFO_SERV_RPC,
00135 *CHECK_AUTH_SERV_RPC,
00136
00137 *SET_LOG_MASK_SERV_RPC,
00138
00139 *INDEX_GET_COUNT_SERV_RPC,
00140 *INDEX_GET_STATS_SERV_RPC,
00141 *INDEX_SIMUL_STATS_SERV_RPC,
00142 *COLLECTION_GET_IMPLSTATS_SERV_RPC,
00143 *COLLECTION_SIMUL_IMPLSTATS_SERV_RPC,
00144 *INDEX_GET_IMPL_SERV_RPC,
00145 *COLLECTION_GET_IMPL_SERV_RPC,
00146
00147 *GET_DEFAULT_DATASPACE_SERV_RPC,
00148 *SET_DEFAULT_DATASPACE_SERV_RPC,
00149 *DATASPACE_SET_CURRENT_DATAFILE_SERV_RPC,
00150 *DATASPACE_GET_CURRENT_DATAFILE_SERV_RPC,
00151 *GET_DEFAULT_INDEX_DATASPACE_SERV_RPC,
00152 *SET_DEFAULT_INDEX_DATASPACE_SERV_RPC,
00153 *GET_INDEX_LOCATIONS_SERV_RPC,
00154 *MOVE_INDEX_SERV_RPC,
00155 *GET_INSTANCE_CLASS_LOCATIONS_SERV_RPC,
00156 *MOVE_INSTANCE_CLASS_SERV_RPC,
00157 *GET_OBJECTS_LOCATIONS_SERV_RPC,
00158 *MOVE_OBJECTS_SERV_RPC,
00159 *GET_ATTRIBUTE_LOCATIONS_SERV_RPC,
00160 *MOVE_ATTRIBUTE_SERV_RPC,
00161
00162 *CREATE_DATAFILE_SERV_RPC,
00163 *DELETE_DATAFILE_SERV_RPC,
00164 *MOVE_DATAFILE_SERV_RPC,
00165 *DEFRAGMENT_DATAFILE_SERV_RPC,
00166 *RESIZE_DATAFILE_SERV_RPC,
00167 *GET_DATAFILEI_NFO_SERV_RPC,
00168 *RENAME_DATAFILE_SERV_RPC,
00169 *CREATE_DATASPACE_SERV_RPC,
00170 *UPDATE_DATASPACE_SERV_RPC,
00171 *DELETE_DATASPACE_SERV_RPC,
00172 *RENAME_DATASPACE_SERV_RPC,
00173 *GET_SERVER_OUTOFBAND_DATA_SERV_RPC,
00174
00175 *SET_MAXOBJCOUNT_RPC,
00176 *GET_MAXOBJCOUNT_RPC,
00177 *SET_LOGSIZE_RPC,
00178 *GET_LOGSIZE_RPC;
00179
00180 static rpc_Server *server;
00181
00182 #ifdef MTHREADS
00183 #include <synch.h>
00184 static mutex_t mp_sem;
00185 #endif
00186
00187 rpc_ArgType
00188 rpcDB_LocalDBContextType,
00189 OidType,
00190
00191 RPCStatusType;
00192
00193 static void status_ua_server(rpc_Arg *, char **, void *,
00194 rpc_SendRcv, rpc_FromTo);
00195 static void oid_ua_server(rpc_Arg *, char **, void *,
00196 rpc_SendRcv, rpc_FromTo);
00197
00198
00199
00200
00201 static int STATUS_SZ;
00202
00203 extern Bool edb_is_back_end;
00204
00205 extern void setConnInfo(rpc_ConnInfo *ci);
00206
00207 static void
00208 b_init(int *fd, int fd_cnt, rpc_ConnInfo *ci)
00209 {
00210 extern void config_init();
00211
00212 config_init();
00213
00214 setConnInfo(ci);
00215 eyedbsm::mutexes_init();
00216 }
00217
00218 static void
00219 b_release(rpc_ConnInfo *ci)
00220 {
00221 eyedbsm::mutexes_release();
00222 }
00223
00224 static void
00225 begin(int which, void *data)
00226 {
00227 if (!which)
00228 IDB_backendInterruptReset();
00229 }
00230
00231 rpc_Server *
00232 rpcBeInit()
00233 {
00234 rpc_ServerMode mode;
00235
00236 edb_is_back_end = True;
00237
00238 if (getenv("EYEDBDBX"))
00239 mode = rpc_MonoProc;
00240 else
00241 mode = rpc_MultiProcs;
00242
00243 server = rpc_serverCreate(mode, RPC_PROTOCOL_MAGIC,
00244 CONN_COUNT, 0, b_init,
00245 b_release, begin, 0, 0);
00246
00247 STATUS_SZ = getenv("STATUS_SZ") ? atoi(getenv("STATUS_SZ")) :
00248 sizeof(RPCStatusRec);
00249
00250
00251
00252
00253 rpcDB_LocalDBContextType = rpc_makeServerUserType(server, sizeof(rpcDB_LocalDBContext), 0);
00254
00255 OidType = rpc_makeServerUserType(server, sizeof(eyedbsm::Oid), oid_ua_server);
00256 #ifdef STATUS_VARIABLE
00257 RPCStatusType = rpc_makeServerUserType(server, rpc_SizeVariable, status_ua_server);
00258 #else
00259 RPCStatusType = rpc_makeServerUserType(server, STATUS_SZ, status_ua_server);
00260 #endif
00261
00262
00263
00264 DBCREATE_SERV_RPC =
00265 rpc_makeUserServerFunction(server, makeDBCREATE(), DBCREATE_realize);
00266
00267 DBDELETE_SERV_RPC =
00268 rpc_makeUserServerFunction(server, makeDBDELETE(), DBDELETE_realize);
00269
00270 DBINFO_SERV_RPC =
00271 rpc_makeUserServerFunction(server, makeDBINFO(), DBINFO_realize);
00272
00273 DBMOVE_SERV_RPC =
00274 rpc_makeUserServerFunction(server, makeDBMOVE(), DBMOVE_realize);
00275
00276 DBCOPY_SERV_RPC =
00277 rpc_makeUserServerFunction(server, makeDBCOPY(), DBCOPY_realize);
00278
00279 DBRENAME_SERV_RPC =
00280 rpc_makeUserServerFunction(server, makeDBRENAME(), DBRENAME_realize);
00281
00282 DBMCREATE_SERV_RPC =
00283 rpc_makeUserServerFunction(server, makeDBMCREATE(), DBMCREATE_realize);
00284
00285 DBMUPDATE_SERV_RPC =
00286 rpc_makeUserServerFunction(server, makeDBMUPDATE(), DBMUPDATE_realize);
00287
00288 USER_ADD_SERV_RPC =
00289 rpc_makeUserServerFunction(server, makeUSER_ADD(), USER_ADD_realize);
00290
00291 USER_DELETE_SERV_RPC =
00292 rpc_makeUserServerFunction(server, makeUSER_DELETE(), USER_DELETE_realize);
00293
00294 USER_PASSWD_SET_SERV_RPC =
00295 rpc_makeUserServerFunction(server, makeUSER_PASSWD_SET(), USER_PASSWD_SET_realize);
00296
00297 PASSWD_SET_SERV_RPC =
00298 rpc_makeUserServerFunction(server, makePASSWD_SET(), PASSWD_SET_realize);
00299
00300 DEFAULT_DBACCESS_SET_SERV_RPC =
00301 rpc_makeUserServerFunction(server, makeDEFAULT_DBACCESS_SET(), DEFAULT_DBACCESS_SET_realize);
00302
00303 USER_DBACCESS_SET_SERV_RPC =
00304 rpc_makeUserServerFunction(server, makeUSER_DBACCESS_SET(), USER_DBACCESS_SET_realize);
00305
00306 USER_SYSACCESS_SET_SERV_RPC =
00307 rpc_makeUserServerFunction(server, makeUSER_SYSACCESS_SET(), USER_SYSACCESS_SET_realize);
00308
00309 BACKEND_INTERRUPT_SERV_RPC =
00310 rpc_makeUserServerFunction(server, makeBACKEND_INTERRUPT(), BACKEND_INTERRUPT_realize);
00311
00312 TRANSACTION_BEGIN_SERV_RPC =
00313 rpc_makeUserServerFunction(server, makeTRANSACTION_BEGIN(),
00314 TRANSACTION_BEGIN_realize);
00315
00316 TRANSACTION_COMMIT_SERV_RPC =
00317 rpc_makeUserServerFunction(server, makeTRANSACTION_COMMIT(),
00318 TRANSACTION_COMMIT_realize);
00319
00320 TRANSACTION_ABORT_SERV_RPC =
00321 rpc_makeUserServerFunction(server, makeTRANSACTION_ABORT(),
00322 TRANSACTION_ABORT_realize);
00323
00324 TRANSACTION_PARAMS_SET_SERV_RPC =
00325 rpc_makeUserServerFunction(server, makeTRANSACTION_PARAMS_SET(),
00326 TRANSACTION_PARAMS_SET_realize);
00327
00328 TRANSACTION_PARAMS_GET_SERV_RPC =
00329 rpc_makeUserServerFunction(server, makeTRANSACTION_PARAMS_GET(),
00330 TRANSACTION_PARAMS_GET_realize);
00331
00332 DBOPEN_SERV_RPC =
00333 rpc_makeUserServerFunction(server, makeDBOPEN(), DBOPEN_realize);
00334
00335 DBOPENLOCAL_SERV_RPC =
00336 rpc_makeUserServerFunction(server, makeDBOPENLOCAL(), DBOPENLOCAL_realize);
00337
00338 DBCLOSE_SERV_RPC =
00339 rpc_makeUserServerFunction(server, makeDBCLOSE(), DBCLOSE_realize);
00340
00341 OBJECT_CREATE_SERV_RPC =
00342 rpc_makeUserServerFunction(server, makeOBJECT_CREATE(),
00343 OBJECT_CREATE_realize);
00344
00345 OBJECT_WRITE_SERV_RPC =
00346 rpc_makeUserServerFunction(server, makeOBJECT_WRITE(),
00347 OBJECT_WRITE_realize);
00348
00349 OBJECT_READ_SERV_RPC =
00350 rpc_makeUserServerFunction(server, makeOBJECT_READ(),
00351 OBJECT_READ_realize);
00352
00353 OBJECT_DELETE_SERV_RPC =
00354 rpc_makeUserServerFunction(server, makeOBJECT_DELETE(),
00355 OBJECT_DELETE_realize);
00356
00357 OBJECT_HEADER_READ_SERV_RPC =
00358 rpc_makeUserServerFunction(server, makeOBJECT_HEADER_READ(),
00359 OBJECT_HEADER_READ_realize);
00360
00361 OBJECT_SIZE_MODIFY_SERV_RPC =
00362 rpc_makeUserServerFunction(server, makeOBJECT_SIZE_MODIFY(),
00363 OBJECT_SIZE_MODIFY_realize);
00364
00365 OBJECT_CHECK_SERV_RPC =
00366 rpc_makeUserServerFunction(server, makeOBJECT_CHECK(),
00367 OBJECT_CHECK_realize);
00368
00369 OBJECT_PROTECTION_SET_SERV_RPC =
00370 rpc_makeUserServerFunction(server, makeOBJECT_PROTECTION_SET(),
00371 OBJECT_PROTECTION_SET_realize);
00372
00373 OBJECT_PROTECTION_GET_SERV_RPC =
00374 rpc_makeUserServerFunction(server, makeOBJECT_PROTECTION_GET(),
00375 OBJECT_PROTECTION_GET_realize);
00376
00377 OID_MAKE_SERV_RPC =
00378 rpc_makeUserServerFunction(server, makeOID_MAKE(),
00379 OID_MAKE_realize);
00380
00381 DATA_CREATE_SERV_RPC =
00382 rpc_makeUserServerFunction(server, makeDATA_CREATE(),
00383 DATA_CREATE_realize);
00384
00385 DATA_WRITE_SERV_RPC =
00386 rpc_makeUserServerFunction(server, makeDATA_WRITE(),
00387 DATA_WRITE_realize);
00388
00389 DATA_READ_SERV_RPC =
00390 rpc_makeUserServerFunction(server, makeDATA_READ(),
00391 DATA_READ_realize);
00392
00393 DATA_DELETE_SERV_RPC =
00394 rpc_makeUserServerFunction(server, makeDATA_DELETE(),
00395 DATA_DELETE_realize);
00396
00397 DATA_SIZE_GET_SERV_RPC =
00398 rpc_makeUserServerFunction(server, makeDATA_SIZE_GET(),
00399 DATA_SIZE_GET_realize);
00400
00401 DATA_SIZE_MODIFY_SERV_RPC =
00402 rpc_makeUserServerFunction(server, makeDATA_SIZE_MODIFY(),
00403 DATA_SIZE_MODIFY_realize);
00404
00405 VDDATA_CREATE_SERV_RPC =
00406 rpc_makeUserServerFunction(server, makeVDDATA_CREATE(),
00407 VDDATA_CREATE_realize);
00408
00409 VDDATA_WRITE_SERV_RPC =
00410 rpc_makeUserServerFunction(server, makeVDDATA_WRITE(),
00411 VDDATA_WRITE_realize);
00412
00413 VDDATA_DELETE_SERV_RPC =
00414 rpc_makeUserServerFunction(server, makeVDDATA_DELETE(),
00415 VDDATA_DELETE_realize);
00416
00417 SCHEMA_COMPLETE_SERV_RPC =
00418 rpc_makeUserServerFunction(server, makeSCHEMA_COMPLETE(),
00419 SCHEMA_COMPLETE_realize);
00420
00421 ATTRIBUTE_INDEX_CREATE_SERV_RPC =
00422 rpc_makeUserServerFunction(server, makeATTRIBUTE_INDEX_CREATE(),
00423 ATTRIBUTE_INDEX_CREATE_realize);
00424
00425 ATTRIBUTE_INDEX_REMOVE_SERV_RPC =
00426 rpc_makeUserServerFunction(server, makeATTRIBUTE_INDEX_REMOVE(),
00427 ATTRIBUTE_INDEX_REMOVE_realize);
00428
00429 INDEX_CREATE_SERV_RPC =
00430 rpc_makeUserServerFunction(server, makeINDEX_CREATE(), INDEX_CREATE_realize);
00431
00432 INDEX_REMOVE_SERV_RPC =
00433 rpc_makeUserServerFunction(server, makeINDEX_REMOVE(), INDEX_REMOVE_realize);
00434
00435 CONSTRAINT_CREATE_SERV_RPC =
00436 rpc_makeUserServerFunction(server, makeCONSTRAINT_CREATE(), CONSTRAINT_CREATE_realize);
00437
00438 CONSTRAINT_DELETE_SERV_RPC =
00439 rpc_makeUserServerFunction(server, makeCONSTRAINT_DELETE(), CONSTRAINT_DELETE_realize);
00440
00441 COLLECTION_GET_BY_IND_SERV_RPC =
00442 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_BY_IND(),
00443 COLLECTION_GET_BY_IND_realize);
00444
00445 COLLECTION_GET_BY_VALUE_SERV_RPC =
00446 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_BY_VALUE(),
00447 COLLECTION_GET_BY_VALUE_realize);
00448
00449 SET_OBJECT_LOCK_SERV_RPC =
00450 rpc_makeUserServerFunction(server, makeSET_OBJECT_LOCK(), SET_OBJECT_LOCK_realize);
00451
00452 GET_OBJECT_LOCK_SERV_RPC =
00453 rpc_makeUserServerFunction(server, makeGET_OBJECT_LOCK(), GET_OBJECT_LOCK_realize);
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469 QUERY_COLLECTION_CREATE_SERV_RPC =
00470 rpc_makeUserServerFunction(server, makeQUERY_COLLECTION_CREATE(),
00471 QUERY_COLLECTION_CREATE_realize);
00472
00473 QUERY_ATTRIBUTE_CREATE_SERV_RPC =
00474 rpc_makeUserServerFunction(server, makeQUERY_ATTRIBUTE_CREATE(),
00475 QUERY_ATTRIBUTE_CREATE_realize);
00476
00477 QUERY_DELETE_SERV_RPC =
00478 rpc_makeUserServerFunction(server, makeQUERY_DELETE(),
00479 QUERY_DELETE_realize);
00480
00481 QUERY_SCAN_NEXT_SERV_RPC =
00482 rpc_makeUserServerFunction(server, makeQUERY_SCAN_NEXT(),
00483 QUERY_SCAN_NEXT_realize);
00484
00485 EXECUTABLE_CHECK_SERV_RPC =
00486 rpc_makeUserServerFunction(server, makeEXECUTABLE_CHECK(),
00487 EXECUTABLE_CHECK_realize);
00488
00489 EXECUTABLE_EXECUTE_SERV_RPC =
00490 rpc_makeUserServerFunction(server, makeEXECUTABLE_EXECUTE(),
00491 EXECUTABLE_EXECUTE_realize);
00492
00493 EXECUTABLE_SET_EXTREF_PATH_SERV_RPC =
00494 rpc_makeUserServerFunction(server,
00495 makeEXECUTABLE_SET_EXTREF_PATH(),
00496 EXECUTABLE_SET_EXTREF_PATH_realize);
00497
00498 EXECUTABLE_GET_EXTREF_PATH_SERV_RPC =
00499 rpc_makeUserServerFunction(server,
00500 makeEXECUTABLE_GET_EXTREF_PATH(),
00501 EXECUTABLE_GET_EXTREF_PATH_realize);
00502
00503 OQL_CREATE_SERV_RPC =
00504 rpc_makeUserServerFunction(server, makeOQL_CREATE(), OQL_CREATE_realize);
00505
00506 OQL_DELETE_SERV_RPC =
00507 rpc_makeUserServerFunction(server, makeOQL_DELETE(), OQL_DELETE_realize);
00508
00509 OQL_GETRESULT_SERV_RPC =
00510 rpc_makeUserServerFunction(server, makeOQL_GETRESULT(), OQL_GETRESULT_realize);
00511
00512 SET_CONN_INFO_SERV_RPC =
00513 rpc_makeUserServerFunction(server, makeSET_CONN_INFO(),
00514 SET_CONN_INFO_realize);
00515
00516 CHECK_AUTH_SERV_RPC =
00517 rpc_makeUserServerFunction(server, makeCHECK_AUTH(), CHECK_AUTH_realize);
00518
00519 SET_LOG_MASK_SERV_RPC =
00520 rpc_makeUserServerFunction(server, makeSET_LOG_MASK(), SET_LOG_MASK_realize);
00521
00522 INDEX_GET_COUNT_SERV_RPC =
00523 rpc_makeUserServerFunction(server, makeINDEX_GET_COUNT(), INDEX_GET_COUNT_realize);
00524
00525 INDEX_GET_STATS_SERV_RPC =
00526 rpc_makeUserServerFunction(server, makeINDEX_GET_STATS(), INDEX_GET_STATS_realize);
00527
00528 INDEX_SIMUL_STATS_SERV_RPC =
00529 rpc_makeUserServerFunction(server, makeINDEX_SIMUL_STATS(), INDEX_SIMUL_STATS_realize);
00530
00531 COLLECTION_GET_IMPLSTATS_SERV_RPC =
00532 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_IMPLSTATS(), COLLECTION_GET_IMPLSTATS_realize);
00533
00534 COLLECTION_SIMUL_IMPLSTATS_SERV_RPC =
00535 rpc_makeUserServerFunction(server, makeCOLLECTION_SIMUL_IMPLSTATS(), COLLECTION_SIMUL_IMPLSTATS_realize);
00536
00537 INDEX_GET_IMPL_SERV_RPC =
00538 rpc_makeUserServerFunction(server, makeINDEX_GET_IMPL(), INDEX_GET_IMPL_realize);
00539
00540 COLLECTION_GET_IMPL_SERV_RPC =
00541 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_IMPL(), COLLECTION_GET_IMPL_realize);
00542
00543 GET_DEFAULT_DATASPACE_SERV_RPC =
00544 rpc_makeUserServerFunction(server, makeGET_DEFAULT_DATASPACE(), GET_DEFAULT_DATASPACE_realize);
00545
00546 SET_DEFAULT_DATASPACE_SERV_RPC =
00547 rpc_makeUserServerFunction(server, makeSET_DEFAULT_DATASPACE(), SET_DEFAULT_DATASPACE_realize);
00548
00549 DATASPACE_SET_CURRENT_DATAFILE_SERV_RPC =
00550 rpc_makeUserServerFunction(server, makeDATASPACE_SET_CURRENT_DATAFILE(), DATASPACE_SET_CURRENT_DATAFILE_realize);
00551
00552 DATASPACE_GET_CURRENT_DATAFILE_SERV_RPC =
00553 rpc_makeUserServerFunction(server, makeDATASPACE_GET_CURRENT_DATAFILE(), DATASPACE_GET_CURRENT_DATAFILE_realize);
00554
00555 GET_DEFAULT_INDEX_DATASPACE_SERV_RPC =
00556 rpc_makeUserServerFunction(server, makeGET_DEFAULT_INDEX_DATASPACE(), GET_DEFAULT_INDEX_DATASPACE_realize);
00557
00558 SET_DEFAULT_INDEX_DATASPACE_SERV_RPC =
00559 rpc_makeUserServerFunction(server, makeSET_DEFAULT_INDEX_DATASPACE(), SET_DEFAULT_INDEX_DATASPACE_realize);
00560
00561 GET_INDEX_LOCATIONS_SERV_RPC =
00562 rpc_makeUserServerFunction(server, makeGET_INDEX_LOCATIONS(), GET_INDEX_LOCATIONS_realize);
00563
00564 MOVE_INDEX_SERV_RPC =
00565 rpc_makeUserServerFunction(server, makeMOVE_INDEX(), MOVE_INDEX_realize);
00566
00567 GET_INSTANCE_CLASS_LOCATIONS_SERV_RPC =
00568 rpc_makeUserServerFunction(server, makeGET_INSTANCE_CLASS_LOCATIONS(), GET_INSTANCE_CLASS_LOCATIONS_realize);
00569
00570 MOVE_INSTANCE_CLASS_SERV_RPC =
00571 rpc_makeUserServerFunction(server, makeMOVE_INSTANCE_CLASS(), MOVE_INSTANCE_CLASS_realize);
00572
00573 GET_OBJECTS_LOCATIONS_SERV_RPC =
00574 rpc_makeUserServerFunction(server, makeGET_OBJECTS_LOCATIONS(), GET_OBJECTS_LOCATIONS_realize);
00575
00576 MOVE_OBJECTS_SERV_RPC =
00577 rpc_makeUserServerFunction(server, makeMOVE_OBJECTS(), MOVE_OBJECTS_realize);
00578
00579 GET_ATTRIBUTE_LOCATIONS_SERV_RPC =
00580 rpc_makeUserServerFunction(server, makeGET_ATTRIBUTE_LOCATIONS(), GET_ATTRIBUTE_LOCATIONS_realize);
00581
00582 MOVE_ATTRIBUTE_SERV_RPC =
00583 rpc_makeUserServerFunction(server, makeMOVE_ATTRIBUTE(), MOVE_ATTRIBUTE_realize);
00584
00585 CREATE_DATAFILE_SERV_RPC =
00586 rpc_makeUserServerFunction(server, makeCREATE_DATAFILE(), CREATE_DATAFILE_realize);
00587
00588 DELETE_DATAFILE_SERV_RPC =
00589 rpc_makeUserServerFunction(server, makeDELETE_DATAFILE(), DELETE_DATAFILE_realize);
00590
00591 MOVE_DATAFILE_SERV_RPC =
00592 rpc_makeUserServerFunction(server, makeMOVE_DATAFILE(), MOVE_DATAFILE_realize);
00593
00594 DEFRAGMENT_DATAFILE_SERV_RPC =
00595 rpc_makeUserServerFunction(server, makeDEFRAGMENT_DATAFILE(), DEFRAGMENT_DATAFILE_realize);
00596
00597 RESIZE_DATAFILE_SERV_RPC =
00598 rpc_makeUserServerFunction(server, makeRESIZE_DATAFILE(), RESIZE_DATAFILE_realize);
00599
00600 GET_DATAFILEI_NFO_SERV_RPC =
00601 rpc_makeUserServerFunction(server, makeGET_DATAFILEI_NFO(), GET_DATAFILEI_NFO_realize);
00602
00603 RENAME_DATAFILE_SERV_RPC =
00604 rpc_makeUserServerFunction(server, makeRENAME_DATAFILE(), RENAME_DATAFILE_realize);
00605
00606 CREATE_DATASPACE_SERV_RPC =
00607 rpc_makeUserServerFunction(server, makeCREATE_DATASPACE(), CREATE_DATASPACE_realize);
00608
00609 UPDATE_DATASPACE_SERV_RPC =
00610 rpc_makeUserServerFunction(server, makeUPDATE_DATASPACE(), UPDATE_DATASPACE_realize);
00611
00612 DELETE_DATASPACE_SERV_RPC =
00613 rpc_makeUserServerFunction(server, makeDELETE_DATASPACE(), DELETE_DATASPACE_realize);
00614
00615 RENAME_DATASPACE_SERV_RPC =
00616 rpc_makeUserServerFunction(server, makeRENAME_DATASPACE(), RENAME_DATASPACE_realize);
00617
00618 GET_SERVER_OUTOFBAND_DATA_SERV_RPC =
00619 rpc_makeUserServerFunction(server, makeGET_SERVER_OUTOFBAND_DATA(), GET_SERVER_OUTOFBAND_DATA_realize);
00620
00621 SET_MAXOBJCOUNT_RPC =
00622 rpc_makeUserServerFunction(server, makeSET_MAXOBJCOUNT(), SET_MAXOBJCOUNT_realize);
00623
00624 GET_MAXOBJCOUNT_RPC =
00625 rpc_makeUserServerFunction(server, makeGET_MAXOBJCOUNT(), GET_MAXOBJCOUNT_realize);
00626
00627 SET_LOGSIZE_RPC =
00628 rpc_makeUserServerFunction(server, makeSET_LOGSIZE(), SET_LOGSIZE_realize);
00629
00630 GET_LOGSIZE_RPC =
00631 rpc_makeUserServerFunction(server, makeGET_LOGSIZE(), GET_LOGSIZE_realize);
00632
00633
00634 rpc_setServerArgSize(server, sizeof(ServerArg));
00635
00636
00637 (void)rpc_setConnectionHandler(server, connection_handler);
00638
00639 #ifdef MTHREADS
00640 rpcDB_mutexInit();
00641 mutex_init(&mp_sem, USYNC_PROCESS, 0);
00642 #endif
00643 eyedbsm::init();
00644 be_init();
00645 return server;
00646 }
00647
00648 rpc_Server *
00649 getRpcServer()
00650 {
00651 return server;
00652 }
00653
00654 static const char *sePort;
00655
00656 void
00657 setSePort(const char *seport)
00658 {
00659 sePort = seport;
00660 }
00661
00662 const char *
00663 getSePort(void)
00664 {
00665 return sePort;
00666 }
00667
00668 void
00669 connection_handler(rpc_Server *server, rpc_ClientId clientid, rpc_Boolean isnew)
00670 {
00671 rpcDB_ClientInfo *ci = rpcDB_clientInfoGet(clientid);
00672
00673 if (isnew)
00674 {
00675
00676
00677
00678
00679
00680 ConnHandle *idbc = rpc_new(ConnHandle);
00681
00682 ci->user_data = idbc;
00683 }
00684 else
00685 {
00686 int i;
00687 RPCStatus status;
00688 register rpcDB_ClientInfo *ci = rpcDB_clientInfoGet(clientid);
00689 rpcDB_DbHandleClientInfo *dbhclientinfo;
00690 extern void idbRelease(void);
00691
00692
00693
00694 #if 1
00695 for (i = 0; i < RPCDB_MAX_DBH; i++)
00696 rpcDB_close_do(server, &ci->dbhclientinfo[i], close_realize, (void **)&status);
00697 #endif
00698
00699 idbRelease();
00700
00701
00702
00703
00704
00705 }
00706 }
00707
00708 #include "eyedblib/rpc_lib.h"
00709
00710 #define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
00711
00712 static void
00713 status_ua_server(rpc_Arg *arg, char **pbuff, void *pua,
00714 rpc_SendRcv send_rcv, rpc_FromTo fromto)
00715 {
00716 RPCStatusRec *s = (RPCStatusRec *)pua;
00717 char *buff = *pbuff;
00718
00719 rpc_copy_fast_xdr(arg, buff, &s->err, sizeof(eyedblib::int32), send_rcv, fromto,
00720 x2h_32_cpy, h2x_32_cpy);
00721
00722 if ((arg->send_rcv & rpc_Send) && fromto == rpc_From)
00723 assert(0);
00724 else if ((arg->send_rcv & rpc_Rcv) && fromto == rpc_To)
00725 {
00726 #ifdef STATUS_VARIABLE
00727 strcpy(buff, s->err_msg);
00728 printf("sending status '%s'\n", buff);
00729 *pbuff += sizeof(eyedblib::int32)+strlen(buff)+1;
00730 #else
00731 strncpy(buff, s->err_msg, STATUS_SZ-4);
00732 buff[MIN(STATUS_SZ-4, strlen(s->err_msg))] = 0;
00733 *pbuff += STATUS_SZ;
00734 #endif
00735 }
00736 }
00737
00738 static void
00739 oid_ua_server(rpc_Arg *arg, char **pbuff, void *pua,
00740 rpc_SendRcv send_rcv, rpc_FromTo fromto)
00741 {
00742 eyedbsm::Oid oid;
00743
00744 if (send_rcv & arg->send_rcv) {
00745 if (fromto == rpc_To) {
00746 memcpy(&oid, pua, sizeof(oid));
00747 eyedbsm::h2x_oid(&oid, &oid);
00748 memcpy(*pbuff, &oid, sizeof(oid));
00749 }
00750 else {
00751 memcpy(&oid, *pbuff, sizeof(oid));
00752 eyedbsm::x2h_oid(&oid, &oid);
00753 memcpy(pua, &oid, sizeof(oid));
00754 }
00755 *pbuff += sizeof(eyedbsm::Oid);
00756 }
00757 }
00758 }