2 * Copyright 2000, International Business Machines Corporation and others.
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
10 #include <afs/param.h>
14 #include <afs/budb_client.h>
16 #include <rx/rx_globals.h>
18 extern struct udbHandleS udbHandle
;
20 #define ERROR(code) {err = code; printf(" - Got error %d.\n", err); goto error;}
27 struct ubik_client
*cstruct
;
31 * Setup RX connection and establish connection with the buserver
33 code
= rx_Init(htons(0));
35 printf("Error in rx_Init call\n");
45 code
= udbClientInit(0, 0, cellName
);
47 printf("Error in udbClientInit call\n");
52 code
= ubik_BUDB_T_GetVersion(udbHandle
.uh_client
, 0, &version
);
54 printf("Error in ubik_Call to BUDB_T_GetVersion\n");
57 printf("BUDB Server Version = %d\n", version
);
67 afs_int32 status
, orphans
, host
;
70 ubik_BUDB_DbVerify(udbHandle
.uh_client
, 0, &status
, &orphans
,
73 printf("Error in ubik_Call to BUDB_DbVerify\n");
78 printf("DATABASE OK ");
80 printf("DATABASE NOT OK ");
81 printf("- orphans %d; host %d.%d.%d.%d\n", orphans
,
82 ((host
& 0xFF000000) >> 24), ((host
& 0xFF0000) >> 16),
83 ((host
& 0xFF00) >> 8), (host
& 0xFF));
96 dumps
.budb_dumpsList_len
= 0;
97 dumps
.budb_dumpsList_val
= 0;
99 code
= bcdb_deleteDump(dumpID
, 0, 0, &dumps
);
115 struct budb_dumpEntry dumpEntry
[NDUMPS
];
116 struct budb_tapeEntry tapeEntry
[NTAPES
];
117 struct budb_volumeEntry volumeEntry
[NVOLUMES
];
119 code
= connect_buserver();
121 printf("Error in connect_buserver call\n");
125 for (pass
= 0; pass
< NPASS
; pass
++) {
126 printf("PASS %d\n", pass
+ 1);
129 for (d
= 0; d
< NDUMPS
; d
++) {
130 /* ************************ */
131 /* Create and finish a dump */
132 /* ************************ */
134 dumpEntry
[d
].parent
= 0;
135 dumpEntry
[d
].level
= 0;
136 dumpEntry
[d
].flags
= 0;
137 strcpy(dumpEntry
[d
].volumeSetName
, "TestVolSetName");
138 strcpy(dumpEntry
[d
].dumpPath
, "/TestDumpPath");
139 strcpy(dumpEntry
[d
].name
, "TestVolSetName.TestDumpPath");
140 dumpEntry
[d
].created
= 0;
141 dumpEntry
[d
].incTime
= 0;
142 dumpEntry
[d
].nVolumes
= 0;
143 dumpEntry
[d
].tapes
.id
= 0;
144 strcpy(dumpEntry
[d
].tapes
.tapeServer
, "");
145 strcpy(dumpEntry
[d
].tapes
.format
,
146 "TestVolSetName.TestDumpPath.%d");
147 dumpEntry
[d
].tapes
.maxTapes
= 1;
148 dumpEntry
[d
].tapes
.a
= 0;
149 dumpEntry
[d
].tapes
.b
= 1;
150 strcpy(dumpEntry
[d
].dumper
.name
, "admin");
151 strcpy(dumpEntry
[d
].dumper
.instance
, "");
152 strcpy(dumpEntry
[d
].dumper
.cell
, "");
153 dumpEntry
[d
].initialDumpID
= 0;
155 dumpEntry
[d
].initialDumpID
= dumpEntry
[0].id
;
156 dumpEntry
[d
].appendedDumpID
= 0;
158 code
= bcdb_CreateDump(&dumpEntry
[d
]);
160 printf("Error in bcdb_CreateDump call\n");
163 printf("\nCreated dump %s (DumpID %u)\n", dumpEntry
[d
].name
,
166 for (t
= 0; t
< NTAPES
; t
++) {
167 /* ************************ */
168 /* Create and finish a tape */
169 /* ************************ */
170 sprintf(tapeEntry
[t
].name
, "TestVolSetName.TestDumpPath.%d",
172 tapeEntry
[t
].flags
= 0;
173 tapeEntry
[t
].written
= 0;
174 tapeEntry
[t
].expires
= 0; /* date tape expires */
175 tapeEntry
[t
].nMBytes
= 0;
176 tapeEntry
[t
].nBytes
= 0;
177 tapeEntry
[t
].nFiles
= 0;
178 tapeEntry
[t
].nVolumes
= 0;
179 tapeEntry
[t
].seq
= (t
+ 1); /* Tape in sequence */
180 tapeEntry
[t
].tapeid
= 0;
181 tapeEntry
[t
].useCount
= 999; /* Number of time tape is used */
182 tapeEntry
[t
].useKBytes
= 0;
183 tapeEntry
[t
].dump
= dumpEntry
[d
].id
;
185 bcdb_UseTape(&tapeEntry
[t
], &newTape
);
187 printf("Error in bcdb_UseTape call\n");
190 printf(" Created tape %s (%u)\n", tapeEntry
[t
].name
,
193 for (v
= 0; v
< NVOLUMES
; v
++) {
194 /* ************************* */
195 /* Create a volume */
196 /* ************************* */
197 sprintf(volumeEntry
[v
].name
, "TestVolumeName.%d",
198 (t
* NVOLUMES
) + (v
+ 1));
199 volumeEntry
[v
].flags
=
200 (BUDB_VOL_FIRSTFRAG
| BUDB_VOL_LASTFRAG
);
201 volumeEntry
[v
].id
= 1234567890; /* volume id */
202 strcpy(volumeEntry
[v
].server
, "");
203 volumeEntry
[v
].partition
= 0;
204 volumeEntry
[v
].tapeSeq
= 0;
205 volumeEntry
[v
].position
= v
+ 2; /* positin on tape */
206 volumeEntry
[v
].clone
= 0; /* clone date */
207 volumeEntry
[v
].incTime
= 0;
208 volumeEntry
[v
].startByte
= 0;
209 volumeEntry
[v
].nBytes
= (v
+ 1) * 100000; /* vary size of volume */
210 volumeEntry
[v
].seq
= 1; /* The first fragment */
211 volumeEntry
[v
].dump
= dumpEntry
[d
].id
; /* the dump id */
212 strcpy(volumeEntry
[v
].tape
, tapeEntry
[t
].name
); /* the tape name */
214 code
= bcdb_AddVolume(&volumeEntry
[v
]);
216 printf("Error in bcdb_AddVolume call\n");
219 printf(" Added volume %s\n", volumeEntry
[v
].name
);
222 tapeEntry
[t
].nFiles
= 77777;
223 tapeEntry
[t
].useKBytes
= 88888;
224 code
= bcdb_FinishTape(&tapeEntry
[t
]);
226 printf("Error in bcdb_FinishTape call\n");
229 printf(" Finished tape %s (%u)\n", tapeEntry
[t
].name
,
233 code
= bcdb_FinishDump(&dumpEntry
[d
]);
235 printf("Error in bcdb_FinishDump call\n");
238 printf("Finished dump %s (DumpID %u)\n", dumpEntry
[d
].name
,
243 printf("Error in verifyDb call\n");
248 /* ********************************************** */
249 /* Delete one of the dumps - only if not appended */
250 /* ********************************************** */
251 if (!dumpEntry
[(pass
% NDUMPS
)].initialDumpID
) {
252 code
= deleteDump(dumpEntry
[(pass
% NDUMPS
)].id
);
254 printf("Error in deleteDump call\n");
257 printf("Deleted DumpID %u\n", dumpEntry
[(pass
% NDUMPS
)].id
);
262 printf("Error in verifyDb call\n");