*** empty log message ***
[IRC.git] / Robust / src / Runtime / DSTM / interface / dstm.h
1 #ifndef _DSTM_H_
2 #define _DSTM_H_
3
4 //Client Messages
5 #define READ_REQUEST            1
6 #define READ_MULT_REQUEST       2
7 #define MOVE_REQUEST            3
8 #define MOVE_MULT_REQUEST       4
9 #define TRANS_REQUEST           5
10 #define TRANS_ABORT             6
11 #define TRANS_COMMIT            7
12
13 //Server Messages
14 #define OBJECT_FOUND            8
15 #define OBJECT_NOT_FOUND        9
16 #define OBJECTS_FOUND           10
17 #define OBJECTS_NOT_FOUND       11
18 #define TRANS_AGREE             12
19 #define TRANS_DISAGREE          13
20 #define TRANS_SUCESSFUL         14
21
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include <string.h>
25 #include "clookup.h"
26
27 #define DEFAULT_OBJ_STORE_SIZE 1048510 //1MB
28 //bit designations for status field of objheader
29 #define DIRTY 0x01
30 #define NEW   0x02
31
32 typedef struct objheader {
33         unsigned int oid;
34         unsigned short type;
35         unsigned short version;
36         unsigned short rcount;
37         char status;
38 } objheader_t;
39
40 typedef struct objstr {
41         unsigned int size; //this many bytes are allocated after this header
42         void *top;
43         struct objstr *next;
44 } objstr_t;
45
46 typedef struct transrecord {
47         objstr_t *cache;
48         chashtable_t *lookupTable;
49 } transrecord_t;
50
51 /* Initialize main object store and lookup tables, start server thread. */
52 int dstmInit(void);
53
54 /* Prototypes for object header */
55 unsigned int getNewOID(void);
56 unsigned int objSize(objheader_t *object);
57 /* end object header */
58
59 /* Prototypes for object store */
60 objstr_t *objstrCreate(unsigned int size); //size in bytes
61 void objstrDelete(objstr_t *store); //traverse and free entire list
62 void *objstrAlloc(objstr_t *store, unsigned int size); //size in bytes
63 /* end object store */
64
65 /* Prototypes for server portion */
66 void *dstmListen();
67 void *dstmAccept(void *);
68 /* end server portion */
69
70 /* Prototypes for transactions */
71 transrecord_t *transStart();
72 objheader_t *transRead(transrecord_t *record, unsigned int oid);
73 objheader_t *transCreateObj(transrecord_t *record, unsigned short type); //returns oid
74 int transCommit(transrecord_t *record); //return 0 if successful
75 /* end transactions */
76
77 void *getRemoteObj(transrecord_t *, unsigned int, unsigned int);
78
79 #endif