DEVEL15-volserver-split-volume-functionality-20090324
[openafs.git] / src / volser / volint.xg
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 /*
11  *  Module:         Volint.xg
12  *  System:         Volser
13  *  Instituition:           ITC, CMU
14  *  Date:                   December, 88
15  */
16
17 package AFSVol
18 prefix S
19 statindex 16
20
21 #define     VOLCREATEVOLUME     100
22 #define     VOLDELETEVOLUME     101
23 #define     VOLRESTORE          102
24 #define     VOLFORWARD          103
25 #define     VOLENDTRANS         104
26 #define     VOLCLONE            105
27 #define     VOLSETFLAGS         106
28 #define     VOLGETFLAGS         107
29 #define     VOLTRANSCREATE      108
30 #define     VOLDUMP             109
31 #define     VOLGETNTHVOLUME     110
32 #define     VOLSETFORWARDING    111  /* defunct */
33 #define     VOLGETNAME          112
34 #define     VOLGETSTATUS        113
35 #define             VOLSIGRESTORE       114
36 #define     VOLLISTPARTITIONS   115
37 #define     VOLLISTVOLS         116
38 #define             VOLSETIDSTYPES      117
39 #define             VOLMONITOR          118
40 #define             VOLDISKPART 119
41 #define         VOLRECLONE      120
42 #define     VOLLISTONEVOL       121
43 #define         VOLNUKE         122
44 #define         VOLSETDATE      123
45 #define         VOLXLISTVOLS    124
46 #define         VOLXLISTONEVOL  125
47 #define     VOLSETINFO          126
48 #define     VOLXLISTPARTITIONS  127
49 #define     VOLFORWARDMULTIPLE  128
50 #define     VOLCONVERTRO        65536
51 #define     VOLGETSIZE          65537
52 #define     VOLDUMPV2           65538
53 #define     VOLDISKPART64       65539
54 #define     VOLOSDSUPPORT       65540
55 #define     VOLTRAVERSE         65541
56 #define     VOLWIPECAND         65542
57 #define     OLDVOLSALVAGE       65543
58 #define     VOLARCHCANDold      65544
59 #define     VOLSALVAGE          65545
60 #define     VOLLISTOBJECTS      65546
61 #define     VOLSPLIT            65547
62 #define     VOLARCHCAND         65548
63
64 /* Bits for flags for DumpV2 */
65 %#define     VOLDUMPV2_OMITDIRS 1
66
67 const SIZE = 1024;
68
69 struct volser_status {
70         afs_uint32 volID;               /* Volume id--unique over all systems */
71         afs_int32 nextUnique;           /* Next vnode uniquifier for this volume */
72         int type;                       /* readwrite, etc. */
73         afs_uint32 parentID;            /* Id of parent, if type==readonly or backup */
74         afs_uint32 cloneID;             /* Latest read-only clone, if type==readwrite */
75         afs_uint32 backupID;            /* Latest backup copy of this read write volume */
76         afs_uint32 restoredFromID;      /* The id in a dump this volume was restored from--used simply
77                                    to make sure that an incremental dump is not restored on top
78                                    of something inappropriate:  Note:  this field itself is NEVER
79                                    dumped!!! */
80         afs_int32 maxQuota;             /* Quota maximum, 1K blocks */
81         afs_int32 minQuota;             /* Quota minimum, 1K blocks */
82         afs_int32 owner;                /* The person responsible for this volume */
83         afs_int32 creationDate;         /* Creation date for a read/write
84                                    volume; cloning date for original copy of
85                                    a readonly volume (replicated volumes have
86                                    the same creation date) */
87         afs_int32 accessDate;           /* Last access time by a user, large granularity */
88         afs_int32 updateDate;           /* Last modification by user */
89         afs_int32 expirationDate;               /* 0 if it never expires */
90         afs_int32 backupDate;           /* last time a backup clone was taken */
91         afs_int32 copyDate;             /* Time that this copy of this volume was created */
92 };
93
94 struct destServer {
95     afs_int32 destHost;
96     afs_int32 destPort;
97     afs_int32 destSSID;
98 };
99
100
101 struct volintInfo {
102 #define VNAMESIZE 32
103     char name[VNAMESIZE];
104     afs_uint32 volid;           /* volume's id */
105     afs_int32 type;             /* read-only, read-write, backup */
106     afs_uint32 backupID;
107     afs_uint32 parentID;
108     afs_uint32 cloneID;
109     afs_int32 status;
110     afs_int32 copyDate;
111     unsigned char inUse;
112     unsigned char needsSalvaged;
113     unsigned char destroyMe;
114     afs_int32 creationDate;
115     afs_int32 accessDate;
116     afs_int32 updateDate;
117     afs_int32 backupDate;
118     int dayUse;
119     int filecount;
120     int maxquota;
121     int size;
122     afs_int32 flags;            /* used by the backup system */
123     afs_int32 spare0;           /* Used to hold the minquota value */
124     afs_int32 spare1;           /* Used to hold the weekuse value */
125     afs_int32 spare2;           /* Used to hold volUpdateCounter */
126     afs_int32 spare3;
127 };
128
129 /*
130  * Define some values needed for the detailed volume info structure.
131  */
132 const VOLINT_STATS_NUM_RWINFO_FIELDS = 4;
133
134 const VOLINT_STATS_SAME_NET      = 0;   /*Within same site (total)*/
135 const VOLINT_STATS_SAME_NET_AUTH = 1;   /*Within same site (authenticated);
136                                           (must be 1 more than above)*/
137 const VOLINT_STATS_DIFF_NET      = 2;   /*From external site (total)*/
138 const VOLINT_STATS_DIFF_NET_AUTH = 3;   /*From external site (authenticated)
139                                           (must be 1 more than above)*/
140
141 const VOLINT_STATS_NUM_TIME_RANGES = 6;
142
143 const VOLINT_STATS_TIME_CAP_0   =     60;  /*60 seconds*/
144 const VOLINT_STATS_TIME_CAP_1   =    600;  /*10 minutes, in seconds*/
145 const VOLINT_STATS_TIME_CAP_2   =   3600;  /*1 hour, in seconds*/
146 const VOLINT_STATS_TIME_CAP_3   =  86400;  /*1 day, in seconds*/
147 const VOLINT_STATS_TIME_CAP_4   = 604800;  /*1 week, in seconds*/
148
149 const VOLINT_STATS_NUM_TIME_FIELDS = 6;
150
151 const VOLINT_STATS_TIME_IDX_0 = 0;      /*0 secs to 60 secs*/
152 const VOLINT_STATS_TIME_IDX_1 = 1;      /*1 min to 10 mins*/
153 const VOLINT_STATS_TIME_IDX_2 = 2;      /*10 mins to 60 mins*/
154 const VOLINT_STATS_TIME_IDX_3 = 3;      /*1 hr to 24 hrs*/
155 const VOLINT_STATS_TIME_IDX_4 = 4;      /*1 day to 7 days*/
156 const VOLINT_STATS_TIME_IDX_5 = 5;      /*Greater than 1 week*/
157
158 /*
159  * More detailed volume info
160  */
161 struct volintXInfo {
162     char name[VNAMESIZE];
163     afs_uint32 volid;                   /*Volume's ID*/
164     afs_int32 type;                     /*RWVOL, ROVOL, BACKVOL*/
165     afs_uint32 backupID;                /*Backup volume ID*/
166     afs_uint32 parentID;                /*Parent volume ID*/
167     afs_uint32 cloneID;         /*Clone volume ID*/
168     afs_int32 status;           /*Volume status*/
169     afs_int32 copyDate;         /*Date when this volume INSTANCE created*/
170     unsigned char inUse;        /*In use at time of last crash?*/
171     afs_int32 creationDate;             /*Date when this volume was created*/
172     afs_int32 accessDate;               /*Date when this volume was last accessed*/
173     afs_int32 updateDate;               /*Date when this volume was last updated*/
174     afs_int32 backupDate;               /*Date when this volume was last backed up*/
175     int dayUse;                 /*Number of accesses since midnight*/
176     int filecount;              /*Number of files in the volume*/
177     int maxquota;               /*Max volume quota, in Kbytes*/
178     int size;                   /*Current size in Kbytes*/
179     /*
180      * Detailed statistics for reads/writes and authorship.
181      */
182     afs_int32 stat_reads[VOLINT_STATS_NUM_RWINFO_FIELDS];
183     afs_int32 stat_writes[VOLINT_STATS_NUM_RWINFO_FIELDS];
184     afs_int32 stat_fileSameAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
185     afs_int32 stat_fileDiffAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
186     afs_int32 stat_dirSameAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
187     afs_int32 stat_dirDiffAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
188 };
189
190 struct transDebugInfo {
191         afs_int32 tid;           /*transaction id */
192         afs_int32 time;  /* time transaction was last active (for timeouts) */
193         afs_int32 creationTime;    /* time the transaction started */
194         afs_int32 returnCode;       /* transaction error code */
195         afs_uint32 volid;       /*sequence number of the next packet to be read*/ /* open volume's id */
196         afs_int32 partition;        /* open volume's partition */
197         short iflags;       /* initial attach mode flags (IT*) */
198         char vflags;        /* current volume status flags (VT*) */
199         char tflags;        /* transaction flags (TT*) */
200         char lastProcName[30];  /* name of the last procedure which used transaction */
201         int callValid;  /*flag which determines if following data is valid*/
202         afs_int32 readNext;     /*sequence number of the next packet to be read*/
203         afs_int32 transmitNext; /*sequence number of the next packet to be transmitted*/
204         int lastSendTime;
205         int lastReceiveTime;
206 };
207
208 struct pIDs {
209         afs_int32 partIds[26];
210 };
211
212 struct diskPartition {
213          char   name[32];       /* Mounted partition name */
214          char   devName[32];    
215          int    lock_fd;
216         int     totalUsable;
217         int     free;
218         int     minFree;
219
220 };
221
222 struct diskPartition64 {
223     char        name[256];      /* Mounted partition name */
224     char        devName[256];   
225     int         lock_fd;
226     afs_int64   totalUsable;
227     afs_int64   free;
228     afs_int64   minFree;
229
230 };
231
232 struct restoreCookie {
233         char name[32];
234         afs_int32 type;
235         afs_uint32 clone;
236         afs_uint32 parent;
237 };
238
239 struct replica {
240         afs_int32 trans;
241         struct destServer server;
242 };
243
244 /*  Various size parameters of the volume  */
245 struct volintSize {
246     afs_uint64 dump_size;
247 };
248
249 typedef  replica manyDests<>;
250 typedef  afs_int32 manyResults<>;
251 typedef  transDebugInfo transDebugEntries<>;
252 typedef  volintInfo volEntries<>;
253 typedef  afs_int32 partEntries<>;
254 typedef  volintXInfo volXEntries<>;
255
256 proc CreateVolume(
257   IN afs_int32 partition,
258   string name<>,
259   IN afs_int32 type,
260   IN afs_uint32 parent,
261   INOUT afs_uint32 *volid,
262   OUT afs_int32 *trans
263 ) = VOLCREATEVOLUME;
264
265 proc DeleteVolume(
266   IN afs_int32 trans
267 ) = VOLDELETEVOLUME;
268
269 proc Restore(
270   IN afs_int32 toTrans,
271   IN afs_int32 flags,
272   IN struct restoreCookie *cookie
273 ) split = VOLRESTORE;
274
275 proc Forward(
276   IN afs_int32 fromTrans,
277   IN afs_int32 fromDate,
278   IN struct destServer *destination,
279   IN afs_int32 destTrans,
280   IN struct restoreCookie *cookie
281 ) = VOLFORWARD;
282
283 proc EndTrans(
284   IN afs_int32 trans,
285   OUT afs_int32 *rcode
286 ) = VOLENDTRANS;
287
288 proc Clone(
289   IN afs_int32 trans,
290   IN afs_uint32 purgeVol,
291   IN afs_int32 newType,
292   IN string newName<>,
293   INOUT afs_uint32 *newVol
294 ) = VOLCLONE;
295
296 proc SetFlags(
297   IN afs_int32 trans,
298   IN afs_int32 flags
299 ) = VOLSETFLAGS;
300
301 proc GetFlags(
302   IN afs_int32 trans,
303   OUT afs_int32 *flags
304 ) = VOLGETFLAGS;
305
306 proc TransCreate(
307   IN afs_uint32 volume,
308   IN afs_int32 partition,
309   IN afs_int32 flags,
310   OUT afs_int32 *trans
311 ) = VOLTRANSCREATE;
312
313 proc Dump(
314   IN afs_int32 fromTrans,
315   IN afs_int32 fromDate
316 ) split = VOLDUMP;
317
318 proc GetNthVolume(
319   IN afs_int32 index,
320   OUT afs_uint32 *volume,
321   OUT afs_int32 *partition
322 ) = VOLGETNTHVOLUME;
323
324 proc SetForwarding(
325   IN afs_int32 tid,
326   IN afs_int32 newsite
327 ) = VOLSETFORWARDING;
328
329 proc GetName(
330   IN afs_int32 tid,
331   OUT string tname<256>
332 ) = VOLGETNAME;
333
334 proc GetStatus(
335   IN afs_int32 tid,
336   OUT struct volser_status *status
337 ) = VOLGETSTATUS;
338
339 proc SignalRestore(
340   IN string name<>,
341   int type,
342   afs_uint32 pid,
343   afs_uint32 cloneid
344 ) = VOLSIGRESTORE;
345
346 proc ListPartitions(
347   OUT struct pIDs *partIDs
348 ) = VOLLISTPARTITIONS;
349
350 proc ListVolumes(
351   IN afs_int32 partID,
352   afs_int32 flags,
353   OUT volEntries *resultEntries
354 ) = VOLLISTVOLS;
355
356 proc SetIdsTypes(
357   IN afs_int32 tId,
358   string name<>,
359   afs_int32 type,
360   afs_uint32 pId,
361   afs_uint32 cloneId,
362   afs_uint32 backupId
363 ) = VOLSETIDSTYPES;
364
365 proc Monitor(
366   OUT transDebugEntries *result
367 ) = VOLMONITOR;
368
369 proc PartitionInfo(
370   IN string name<>,
371   OUT struct diskPartition *partition
372 ) = VOLDISKPART;
373
374 proc ReClone(
375   IN afs_int32 tid,
376   afs_uint32 cloneID
377 ) = VOLRECLONE;
378
379 proc ListOneVolume(
380   IN afs_int32 partID,
381   afs_uint32 volid,
382   OUT volEntries *resultEntries
383 ) = VOLLISTONEVOL;
384
385 proc NukeVolume(
386   IN afs_int32 partID,
387   afs_uint32 volID
388 ) = VOLNUKE;
389
390 proc SetDate(
391   IN afs_int32 tid,
392   afs_int32 newDate
393 ) = VOLSETDATE;
394
395 proc XListVolumes(
396   IN afs_int32 partID,
397   afs_int32 flags,
398   OUT volXEntries *resultXEntriesP
399 ) = VOLXLISTVOLS;
400
401 proc XListOneVolume(
402   IN afs_int32 partID,
403   afs_uint32 volid,
404   OUT volXEntries *resultXEntries
405 ) = VOLXLISTONEVOL;
406
407 proc SetInfo(
408   IN afs_int32 tid,
409   struct volintInfo *status
410 ) = VOLSETINFO;
411
412 proc XListPartitions(
413   OUT struct partEntries *partIDs
414 ) = VOLXLISTPARTITIONS;
415
416 proc ForwardMultiple(
417   IN afs_int32 fromTrans,
418   IN afs_int32 fromDate,
419   IN manyDests *destinations,
420   IN afs_int32 spare,
421   IN struct restoreCookie *cookie,
422   OUT manyResults *results
423 ) = VOLFORWARDMULTIPLE;
424
425 proc ConvertROtoRWvolume(
426   IN afs_int32 partid,
427   IN afs_uint32 volid
428 ) = VOLCONVERTRO;
429
430 proc GetSize(
431   IN afs_int32 fromTrans,
432   IN afs_int32 fromDate,
433   OUT struct volintSize *size
434 ) = VOLGETSIZE;
435
436 proc DumpV2(
437   IN afs_int32 fromTrans,
438   IN afs_int32 fromDate,
439   IN afs_int32 flags
440 ) split = VOLDUMPV2;
441
442 proc PartitionInfo64(
443     IN string name<>,
444     OUT struct diskPartition64 *partition
445 ) = VOLDISKPART64;
446
447 proc SplitVolume (
448   IN afs_uint32 vid,
449   IN afs_uint32 new,
450   IN afs_uint32 where,
451   IN afs_int32 verbose
452 ) split = VOLSPLIT;