00001 #ifndef __LORSAPI_H__
00002 #define __LORSAPI_H__
00003
00004
00008 #ifdef HAVE_CONFIG_H
00009 #include <config.h>
00010 #endif
00011
00012 #include <assert.h>
00013 #include <pthread.h>
00014 #include <semaphore.h>
00015 #include <sys/types.h>
00016 #include <jval.h>
00017 #include <jrb.h>
00018 #include <dllist.h>
00019 #include <ibp.h>
00020
00021 #include <lors_error.h>
00022 #include <lors_opts.h>
00023 #include <lors_sem.h>
00024
00025 #include <exnode.h>
00026 #include <lbone_base.h>
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00032 typedef int64_t longlong;
00033
00034 #ifndef MIN
00035 #define MIN(x, y) (x < y ? x : y )
00036 #endif
00037
00038 typedef struct __is_block
00039 {
00040 char *buf;
00041 ulong_t length;
00042 int type;
00043 longlong offset;
00044 LorsSem *memory_count;
00045 } ISBlock;
00046
00047 typedef struct __LorsBoundary
00048 {
00049 longlong offset;
00050 longlong length;
00051 } LorsBoundary;
00052
00057
00058
00059
00060 #define IBP_HARD IBP_STABLE
00061 #define IBP_SOFT IBP_VOLATILE
00062
00066 struct __LorsExnode
00067 {
00068
00069
00070 JRB mapping_map;
00071 Exnode *exnode;
00072 ExnodeMetadata *md;
00073 longlong seek_offset;
00074 longlong alloc_length;
00075 longlong logical_length;
00076 };
00077 typedef struct __LorsExnode LorsExnode;
00078
00082 struct __lorsConditionStruct
00083 {
00084 char *function_name;
00085 ulong_t blocksize;
00086
00087
00088 int (*condition_data)(char *input_buffer,
00089 unsigned long int input_length,
00090 unsigned long int input_blocksize,
00091 char **output_buffer,
00092 unsigned long int *output_length,
00093 unsigned long int *output_blocksize,
00094 ExnodeMetadata *arguments);
00095
00096
00097 int (*uncondition_data)(char *input_buffer,
00098 unsigned long int input_length,
00099 unsigned long int input_blocksize,
00100 char **output,
00101 unsigned long int *out_length,
00102 unsigned long int *output_blocksize,
00103 ExnodeMetadata *arguments);
00104 int type;
00105 int allocates;
00106 ExnodeMetadata *arguments;
00107 };
00108 typedef struct __lorsConditionStruct LorsConditionStruct;
00109
00113 struct __LorsSet
00114 {
00115 JRB mapping_map;
00116 pthread_mutex_t *lock;
00117 longlong curr_length;
00118 longlong seek_offset;
00119
00120 longlong exnode_offset;
00121 longlong max_length;
00122 Dllist condition_list;
00123 ulong_t data_blocksize;
00124 int copies;
00125 };
00126 typedef struct __LorsSet LorsSet;
00127 void lorsPrintSet(LorsSet *set);
00128
00135 struct __LorsDepotPool
00136 {
00137 JRB list;
00138 pthread_mutex_t *lock;
00139 IBP_depot lboneserver;
00140 int min_unique_depots;
00141 char *location;
00142 ulong_t size;
00143 int type;
00144 time_t duration;
00145 int timeout;
00146 };
00147 typedef struct __LorsDepotPool LorsDepotPool;
00148
00157 typedef struct __lbone_resolution
00158 {
00159 double ** resolution;
00160 int src_cnt;
00161 int dst_cnt;
00162 JRB depotIndex;
00163 } LboneResolution;
00164
00170 typedef struct __lbone_resoution_index
00171 {
00172 int sourceIndex;
00173 int destIndex;
00174 } LboneResolutionIndex;
00175
00190 int lorsCreateResolutionFromFile(char *filename,
00191 LboneResolution **lr,
00192 int metric_index);
00208 int lorsCreateResolutionFromLBone(IBP_depot lboneserver,
00209 LboneResolution **lr,
00210 int opt);
00221 int lorsSetResolutionPoint(LboneResolution *lr,
00222 IBP_depot src,
00223 IBP_depot dst,
00224 double metric);
00234 int lorsGetResolutionPoint(LboneResolution *lr,
00235 IBP_depot src,
00236 IBP_depot dst,
00237 double *metric);
00247 int lorsSaveResolutionToFile(char *filename, LboneResolution *lr);
00248
00268 int lorsUpdateDepotPoolFromResolution(LorsDepotPool *dp_src, LorsDepotPool *dp_dst,
00269 LboneResolution *lr, int opts);
00270
00279 int lorsFreeResolution(LboneResolution *lr);
00280
00281 typedef Dllist LorsEnum;
00282
00297 void lorsGetLibraryVersion(const char **package, const double *version);
00298
00299
00300 struct __depot_t
00301 {
00302 int id;
00303 IBP_depot depot;
00304 LorsDepotPool *dpp;
00305 pthread_mutex_t *lock;
00306 double score;
00307 double bandwidth;
00308 double proximity;
00309 int nfailure;
00310 int nthread;
00311 int nthread_done;
00312 void *tmp;
00313 };
00314 typedef struct __depot_t LorsDepot;
00315
00316
00317 typedef struct __lorsrsset LorsRSSet;
00318
00319 struct __LorsMapping
00320 {
00321
00322 ExnodeMetadata *md;
00323 ExnodeFunction *function;
00324
00325 longlong exnode_offset;
00326
00327 ulong_t logical_length;
00328 ulong_t logical_offset;
00329
00330 ulong_t alloc_length;
00331 ulong_t alloc_offset;
00332
00333 ulong_t seek_offset;
00334
00335 struct ibp_depot depot;
00336 ulong_t e2e_bs;
00337 ulong_t e2e_head_len;
00338
00339
00340 struct ibp_set_of_caps capset;
00341 struct ibp_capstatus capstat;
00342
00343 time_t begin_time;
00344 time_t timeout;
00345 int opts;
00346 LorsDepot *lors_depot;
00347 LorsDepotPool *dp;
00348 pthread_t tid;
00349 pthread_attr_t attr;
00350 pthread_mutex_t *lock;
00351 ulong_t id;
00352 ulong_t i;
00353
00354 int set_index;
00355 int coding_index;
00356 int n;
00357 int ft;
00358 ISBlock *block;
00359 LorsRSSet *rss;
00360 int ret;
00361 };
00362 typedef struct __LorsMapping LorsMapping;
00363
00375 int lorsSetEnum(LorsSet *set, LorsEnum *list);
00387 int lorsExnodeEnum(LorsExnode *exnode, LorsEnum *list);
00388
00399 int lorsEnumNext (LorsEnum list, LorsEnum *iterator, LorsMapping **ret);
00410 int lorsEnumFree (LorsEnum list);
00411
00412
00476 int lorsGetDepotPool (LorsDepotPool **dp,
00477 char *lbone_server,
00478 int lbone_server_port,
00479 IBP_depot *depots,
00480 int min_unique_depots,
00481 char *location,
00482 ulong_t storage_size,
00483 int storage_type,
00484 time_t duration,
00485 int nthreads,
00486 int timeout,
00487 int opts);
00488
00513 int lorsUpdateDepotPool(LorsExnode *exnode,
00514 LorsDepotPool **ret_dpp,
00515 char *lbone_server,
00516 int lbone_server_port,
00517 char *location,
00518 int nthreads,
00519 int timeout,
00520 int opts);
00521
00531 int lorsFreeDepotPool(LorsDepotPool *dpp);
00532
00533
00534
00535
00548 int lorsExnodeCreate (LorsExnode ** exnode);
00549 int lorsExnodeFree( LorsExnode *exnode);
00563 int lorsAppendSet (LorsExnode * exnode,
00564 LorsSet * set);
00565
00578 int lorsAppendMapping (LorsExnode * exnode,
00579 LorsMapping * map);
00591 int lorsDetachMapping (LorsExnode *exnode, LorsMapping *map);
00592
00593
00594
00595
00596
00597
00613 int lorsDeserialize (LorsExnode ** exnode,
00614 char *buffer,
00615 int length,
00616 char *schema);
00631 int lorsFileDeserialize (LorsExnode ** exnode,
00632 char *filename,
00633 char *schema);
00634
00653 int lorsSerialize (LorsExnode * exnode,
00654 char **buffer,
00655 int readonly,
00656 int *length);
00673 int lorsFileSerialize (LorsExnode * exnode,
00674 char *filename,
00675 int readonly,
00676 int opts);
00677
00678
00693 int lorsGetExnodeMetadata (LorsExnode *exnode, ExnodeMetadata **md);
00694
00710 int lorsGetMappingMetadata (LorsMapping *map, ExnodeMetadata **md);
00711 int lorsMetadataMerge(ExnodeMetadata *src, ExnodeMetadata *dest);
00712
00713
00714
00715
00716
00732 int lorsQuery (LorsExnode *exnode,
00733 LorsSet **set,
00734 longlong offset,
00735 longlong length,
00736 int opt);
00737
00738 #if 0
00739
00755 int lorsNameSet (LorsSet *set,
00756 char *name);
00757 #endif
00758
00768 int lorsSetAddMapping (LorsSet *set,
00769 LorsMapping *map);
00770
00779 int lorsSetRemoveMapping (LorsSet *set,
00780 LorsMapping *map);
00781
00782
00783
00784
00785
00805 int lorsSetInit(LorsSet **set,
00806 ulong_t data_blocksize,
00807 int copies,
00808 int opts);
00809
00844 int lorsSetStore (LorsSet *set,
00845 LorsDepotPool *dp,
00846 char *buffer,
00847 longlong offset,
00848 longlong length,
00849 LorsConditionStruct *lc,
00850 int nthreads,
00851 int timeout,
00852 int opts);
00853
00854
00855
00856
00857
00858
00859
00860 int lorsSetUpdate(LorsSet *set,
00861 LorsDepotPool *dp,
00862 char *buffer,
00863 longlong offset,
00864 longlong length,
00865 int nthreads,
00866 int timeout,
00867 int opts);
00909 long lorsSetLoad (LorsSet *set,
00910 char *buffer,
00911 longlong offset,
00912 long length,
00913 ulong_t block_size,
00914 LorsConditionStruct *lc,
00915 int nthreads,
00916 int timeout,
00917 int opts);
00918
00967 longlong lorsSetRealTimeLoad (LorsSet * set,
00968 char *buffer,
00969 int fd,
00970 longlong offset,
00971 longlong length,
00972 ulong_t block_size,
00973 int pre_buf,
00974 int cache,
00975 LorsConditionStruct *lc,
00976 int nthreads,
00977 int timeout,
00978 int max_thds_per_depot,
00979 int thds_per_job,
00980 int progress_n,
00981 int opts);
00982
00983
00984
01016 int lorsSetCopy (LorsSet *srcSet,
01017 LorsSet *dstSet,
01018 LorsDepotPool *dp,
01019 LboneResolution *lr,
01020 longlong offset,
01021 longlong length,
01022 int nthreads,
01023 int timeout,
01024 int opts);
01025
01039 int lorsSetMerge (LorsSet * src,
01040 LorsSet * dest);
01041
01073 int lorsSetTrim (LorsSet * set,
01074 longlong offset,
01075 longlong length,
01076 int nthreads,
01077 int timeout,
01078 int opts);
01079 #if 0
01080
01101 int lorsSetTrimMapping (LorsSet *se,
01102 LorsMapping *map,
01103 int timeout,
01104 int opts);
01105 #endif
01106
01107
01108
01109
01110
01144 int lorsSetRefresh (LorsSet * set,
01145 longlong offset,
01146 longlong length,
01147 time_t duration,
01148 int nthreads,
01149 int timeout,
01150 int opts);
01151
01178 int lorsSetStat(LorsSet *set,
01179 int nthreads,
01180 int timeout,
01181 int opts);
01182
01195 int lorsSetFree(LorsSet *set, int opts);
01196
01212 int lorsSetTrimCaps(LorsSet *set, int opts);
01213
01214 #include <lors_util.h>
01215 #ifdef __cplusplus
01216 }
01217 #endif
01218 #endif