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
11 * This file implements the vos related funtions for afscp
21 * Generic fuction for converting input string to an integer. Pass
22 * the error_msg you want displayed if there is an error converting
27 GetIntFromString(const char *int_str, const char *error_msg) {
29 char *bad_char = NULL;
31 i = strtoul(int_str, &bad_char, 10);
32 if ((bad_char == NULL) || (*bad_char == 0)) {
40 * Generic fuction for converting input string to a volume number
41 * It will accept integer strings as well as volume names.
45 GetVolumeIdFromString(const char *volume) {
46 unsigned int volume_id;
47 char *bad_char = NULL;
49 vos_vldbEntry_t entry;
51 volume_id = strtoul(volume, &bad_char, 10);
52 if ((bad_char == NULL) || (*bad_char == 0)) {
57 * We failed to convert the string to a number, so see if it
60 if (vos_VLDBGet(cellHandle, 0, (const unsigned int *) 0, volume,
62 return entry.volumeId[VOS_READ_WRITE_VOLUME];
64 ERR_EXT("failed to convert specified volume to an id");
69 * Generic fuction for converting input string to a partition number
70 * It will accept integer strings as well as partition names.
74 GetPartitionIdFromString(const char *partition) {
75 unsigned int partition_id;
76 char *bad_char = NULL;
81 partition_id = strtoul(partition, &bad_char, 10);
82 if ((bad_char == NULL) || (*bad_char == 0)) {
87 * We failed to convert the string to a number, so see if it
91 pname_len = strlen(partition);
93 sprintf(pname, "%s", "/vicep");
95 strcat(pname, partition);
96 } else if (!strncmp(partition, "/vicep", 6)) {
97 strcat(pname, partition+6);
98 } else if (!strncmp(partition, "vicep", 5)) {
99 strcat(pname, partition+5);
101 ERR_EXT("invalid partition");
104 if (!vos_PartitionNameToId((const char *) pname, &partition_id, &st)) {
105 ERR_ST_EXT("invalid partition", st);
112 * Generic fuction for converting input string to an address in host order.
113 * It will accept strings in the form "128.98.12.1"
117 GetAddressFromString(const char *addr_str) {
118 int addr= inet_addr(addr_str);
121 ERR_EXT("failed to convert specified address");
128 PrintMessage(vos_messageType_t type, char *message) {
129 printf("%s\n", message);
133 DoVosBackupVolumeCreate(struct cmd_syndesc *as, char *arock)
135 typedef enum {VOLUME} DoVosBackupVolumeCreate_parm_t;
137 unsigned int volume_id;
139 if (as->parms[VOLUME].items) {
140 const char *volume = as->parms[VOLUME].items->data;
141 volume_id = GetVolumeIdFromString(volume);
144 if (!vos_BackupVolumeCreate(cellHandle,
148 ERR_ST_EXT("vos_BackupVolumeCreate", st);
154 DoVosBackupVolumeCreateMultiple(struct cmd_syndesc *as, char *arock)
156 typedef enum {SERVER, PARTITION, PREFIX, EXCLUDE}
157 DoVosBackupVolumeCreate_parm_t;
159 void *vos_server = NULL;
160 unsigned int partition_id;
161 const unsigned int *part_ptr = NULL;
162 const char *prefix = NULL;
163 vos_exclude_t exclude = VOS_INCLUDE;
165 if (as->parms[SERVER].items) {
166 if (!vos_ServerOpen(cellHandle,
167 as->parms[SERVER].items->data,
170 ERR_ST_EXT("vos_ServerOpen", st);
174 if (as->parms[PARTITION].items) {
175 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
176 part_ptr = &partition_id;
179 if (as->parms[PREFIX].items) {
180 prefix = as->parms[PREFIX].items->data;
183 if (as->parms[EXCLUDE].items) {
184 exclude = VOS_EXCLUDE;
187 if (!vos_BackupVolumeCreateMultiple(cellHandle,
189 (vos_MessageCallBack_t) 0,
194 ERR_ST_EXT("vos_BackupVolumeCreate", st);
200 Print_vos_partitionEntry_p(vos_partitionEntry_p part, const char *prefix)
202 printf("%sInformation for partition %s\n", prefix, part->name);
203 printf("%s\tDevice name: %s\n", prefix, part->deviceName);
204 printf("%s\tlockFileDescriptor: %d\n", prefix, part->lockFileDescriptor);
205 printf("%s\tTotal space: %d\n", prefix, part->totalSpace);
206 printf("%s\tTotal Free space: %d\n", prefix, part->totalFreeSpace);
210 DoVosPartitionGet(struct cmd_syndesc *as, char *arock)
212 typedef enum {SERVER, PARTITION}
213 DoVosPartitionGet_parm_t;
215 void *vos_server = NULL;
216 unsigned int partition_id;
217 vos_partitionEntry_t entry;
219 if (as->parms[SERVER].items) {
220 if (!vos_ServerOpen(cellHandle,
221 as->parms[SERVER].items->data,
224 ERR_ST_EXT("vos_ServerOpen", st);
228 if (as->parms[PARTITION].items) {
229 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
232 if (!vos_PartitionGet(cellHandle,
238 ERR_ST_EXT("vos_PartitionGet", st);
241 Print_vos_partitionEntry_p(&entry, "");
247 DoVosPartitionList(struct cmd_syndesc *as, char *arock)
249 typedef enum {SERVER}
250 DoVosPartitionGet_parm_t;
252 void *vos_server = NULL;
254 vos_partitionEntry_t entry;
256 if (as->parms[SERVER].items) {
257 if (!vos_ServerOpen(cellHandle,
258 as->parms[SERVER].items->data,
261 ERR_ST_EXT("vos_ServerOpen", st);
265 if (!vos_PartitionGetBegin(cellHandle,
270 ERR_ST_EXT("vos_PartitionGetBegin", st);
273 printf("Listing partitions at server %s\n", as->parms[SERVER].items->data);
274 while(vos_PartitionGetNext(iter, &entry, &st)) {
275 Print_vos_partitionEntry_p(&entry, " ");
278 if (st != ADMITERATORDONE) {
279 ERR_ST_EXT("vos_PartitionGetNext", st);
282 if (!vos_PartitionGetDone(iter,
284 ERR_ST_EXT("vos_PartitionGetDone", st);
290 DoVosServerSync(struct cmd_syndesc *as, char *arock)
292 typedef enum {SERVER, PARTITION}
293 DoVosServerSync_parm_t;
295 void *vos_server = NULL;
296 unsigned int partition_id;
297 const unsigned int *part_ptr = NULL;
299 if (as->parms[SERVER].items) {
300 if (!vos_ServerOpen(cellHandle,
301 as->parms[SERVER].items->data,
304 ERR_ST_EXT("vos_ServerOpen", st);
308 if (as->parms[PARTITION].items) {
309 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
310 part_ptr = &partition_id;
313 if (!vos_ServerSync(cellHandle,
318 ERR_ST_EXT("vos_PartitionGetDone", st);
324 DoVosFileServerAddressChange(struct cmd_syndesc *as, char *arock)
326 typedef enum {OLDADDRESS, NEWADDRESS}
327 DoVosFileServerAddressChange_parm_t;
329 int old_addr, new_addr;
331 if (as->parms[OLDADDRESS].items) {
332 const char *addr = as->parms[OLDADDRESS].items->data;
333 old_addr = GetAddressFromString(addr);
336 if (as->parms[NEWADDRESS].items) {
337 const char *addr = as->parms[OLDADDRESS].items->data;
338 new_addr = GetAddressFromString(addr);
341 if (!vos_FileServerAddressChange(cellHandle,
346 ERR_ST_EXT("vos_FileServerAddressChange", st);
352 DoVosFileServerAddressRemove(struct cmd_syndesc *as, char *arock)
354 typedef enum {ADDRESS}
355 DoVosFileServerAddressRemove_parm_t;
359 if (as->parms[ADDRESS].items) {
360 const char *addr = as->parms[ADDRESS].items->data;
361 address = GetAddressFromString(addr);
364 if (!vos_FileServerAddressRemove(cellHandle,
368 ERR_ST_EXT("vos_FileServerAddressRemove", st);
374 Print_vos_fileServerEntry_p(vos_fileServerEntry_p serv, const char *prefix)
378 for(i=0;i<serv->count;i++) {
379 printf("%s%x ", prefix, serv->serverAddress[i]);
385 DoVosFileServerList(struct cmd_syndesc *as, char *arock)
389 vos_fileServerEntry_t entry;
391 if (!vos_FileServerGetBegin(cellHandle,
395 ERR_ST_EXT("vos_FileServerGetBegin", st);
398 while(vos_FileServerGetNext(iter, &entry, &st)) {
399 Print_vos_fileServerEntry_p(&entry, "");
402 if (st != ADMITERATORDONE) {
403 ERR_ST_EXT("vos_FileServerGetNext", st);
406 if (!vos_FileServerGetDone(iter,
408 ERR_ST_EXT("vos_FileServerGetDone", st);
415 Print_vos_serverTransactionStatus_p(
416 vos_serverTransactionStatus_p tran, const char *prefix)
418 printf("%sTransaction id\t\t\t%d\n", prefix, tran->transactionId);
419 printf("%sLast active time\t\t\t%d\n", prefix, tran->lastActiveTime);
420 printf("%sCreation time\t\t\t%d\n", prefix, tran->creationTime);
421 printf("%sError code\t\t\t%d\n", prefix, tran->errorCode);
422 printf("%sVolume id\t\t\t\t%u\n", prefix, tran->volumeId);
423 printf("%sPartition\t\t\t\t%d\n", prefix, tran->partition);
424 printf("%sLast procedure name\t\t\t%s\n", prefix, tran->lastProcedureName);
425 printf("%sNext receive packet seq num\t\t\t%d\n",
427 tran->nextReceivePacketSequenceNumber);
428 printf("%sNext send packet seq num\t\t\t%d\n",
430 tran->nextSendPacketSequenceNumber);
431 printf("%sLast receive time\t\t\t%d\n", prefix, tran->lastReceiveTime);
432 printf("%sLast send time\t\t\t%d\n", prefix, tran->lastSendTime);
433 printf("%sVolume attach mode\t\t\t%d\n", prefix, tran->volumeAttachMode);
434 printf("%sVolume active status\t\t\t%d\n",
436 tran->volumeActiveStatus);
437 printf("%sVolume tran status\t\t\t%d\n",
439 tran->volumeTransactionStatus);
443 DoVosServerTransactionStatusList(struct cmd_syndesc *as, char *arock)
445 typedef enum {SERVER}
446 DoVosServerTransactionStatusList_parm_t;
448 void *vos_server = NULL;
450 vos_serverTransactionStatus_t tran;
453 if (as->parms[SERVER].items) {
454 if (!vos_ServerOpen(cellHandle,
455 as->parms[SERVER].items->data,
458 ERR_ST_EXT("vos_ServerOpen", st);
462 if (!vos_ServerTransactionStatusGetBegin(cellHandle,
467 ERR_ST_EXT("vos_ServerTransactionStatusGetBegin", st);
470 while(vos_ServerTransactionStatusGetNext(iter, &tran, &st)) {
471 Print_vos_serverTransactionStatus_p(&tran, "");
474 if (st != ADMITERATORDONE) {
475 ERR_ST_EXT("vos_ServerTransactionStatusGetNext", st);
478 if (!vos_ServerTransactionStatusGetDone(iter,
480 ERR_ST_EXT("vos_ServerTransactionStatusGetDone", st);
486 Print_vos_vldbEntry_p(
487 vos_vldbEntry_p entry, const char *prefix)
491 printf("%sVolume entry %s\n", prefix, entry->name);
492 printf("%sNumber of servers %d\n", prefix, entry->numServers);
493 printf("%sRead write volume %u\n",
495 entry->volumeId[VOS_READ_WRITE_VOLUME]);
496 printf("%sRead only volume %u\n",
498 entry->volumeId[VOS_READ_ONLY_VOLUME]);
499 printf("%sBackup volume %u\n",
501 entry->volumeId[VOS_BACKUP_VOLUME]);
502 printf("%sClone volume %u\n",
506 printf("%sVolume entry status:\n", prefix);
507 if (entry->status & VOS_VLDB_ENTRY_OK) {
508 printf("%s\tVOS_VLDB_ENTRY_OK\n", prefix);
510 if (entry->status & VOS_VLDB_ENTRY_MOVE) {
511 printf("%s\tVOS_VLDB_ENTRY_MOVE\n", prefix);
513 if (entry->status & VOS_VLDB_ENTRY_RELEASE) {
514 printf("%s\tVOS_VLDB_ENTRY_RELEASE\n", prefix);
516 if (entry->status & VOS_VLDB_ENTRY_BACKUP) {
517 printf("%s\tVOS_VLDB_ENTRY_BACKUP\n", prefix);
519 if (entry->status & VOS_VLDB_ENTRY_DELETE) {
520 printf("%s\tVOS_VLDB_ENTRY_DELETE\n", prefix);
522 if (entry->status & VOS_VLDB_ENTRY_DUMP) {
523 printf("%s\tVOS_VLDB_ENTRY_DUMP\n", prefix);
525 if (entry->status & VOS_VLDB_ENTRY_LOCKED) {
526 printf("%s\tVOS_VLDB_ENTRY_LOCKED\n", prefix);
528 if (entry->status & VOS_VLDB_ENTRY_RWEXISTS) {
529 printf("%s\tVOS_VLDB_ENTRY_RWEXISTS\n", prefix);
531 if (entry->status & VOS_VLDB_ENTRY_ROEXISTS) {
532 printf("%s\tVOS_VLDB_ENTRY_ROEXISTS\n", prefix);
534 if (entry->status & VOS_VLDB_ENTRY_BACKEXISTS) {
535 printf("%s\tVOS_VLDB_ENTRY_BACKEXISTS\n", prefix);
538 printf("%sVolume location information for replicas:\n", prefix);
539 for(i=0;i<entry->numServers;i++) {
540 printf("%s\tServer %x\n",
542 entry->volumeSites[i].serverAddress);
543 printf("%s\tPartition %x\n",
545 entry->volumeSites[i].serverPartition);
546 if (entry->volumeSites[i].serverFlags & VOS_VLDB_NEW_REPSITE) {
547 printf("%s\tVOS_VLDB_NEW_REPSITE\n", prefix);
549 if (entry->volumeSites[i].serverFlags & VOS_VLDB_READ_ONLY) {
550 printf("%s\tVOS_VLDB_READ_ONLY\n", prefix);
552 if (entry->volumeSites[i].serverFlags & VOS_VLDB_READ_WRITE) {
553 printf("%s\tVOS_VLDB_READ_WRITE\n", prefix);
555 if (entry->volumeSites[i].serverFlags & VOS_VLDB_BACKUP) {
556 printf("%s\tVOS_VLDB_BACKUP\n", prefix);
558 if (entry->volumeSites[i].serverFlags & VOS_VLDB_DONT_USE) {
559 printf("%s\tVOS_VLDB_DONT_USE\n", prefix);
566 DoVosVLDBGet(struct cmd_syndesc *as, char *arock)
568 typedef enum {VOLUME}
571 vos_vldbEntry_t entry;
572 unsigned int volume_id;
573 const char *volume_name = NULL;
575 if (as->parms[VOLUME].items) {
576 const char *volume = as->parms[VOLUME].items->data;
577 volume_id = GetVolumeIdFromString(volume);
581 if (!vos_VLDBGet(cellHandle,
587 ERR_ST_EXT("vos_VLDBGet", st);
590 Print_vos_vldbEntry_p(&entry, "");
596 DoVosVLDBList(struct cmd_syndesc *as, char *arock)
598 typedef enum {SERVER, PARTITION}
599 DoVosVLDBList_parm_t;
601 void *vos_server = NULL;
602 unsigned int partition_id;
603 unsigned int *part_ptr = NULL;
605 vos_vldbEntry_t entry;
608 if (as->parms[SERVER].items) {
609 if (!vos_ServerOpen(cellHandle,
610 as->parms[SERVER].items->data,
613 ERR_ST_EXT("vos_ServerOpen", st);
618 if (as->parms[PARTITION].items) {
620 ERR_EXT("must specify server when specifying partition");
622 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
623 part_ptr = &partition_id;
626 if (!vos_VLDBGetBegin(cellHandle,
632 ERR_ST_EXT("vos_VLDBGetBegin", st);
635 while(vos_VLDBGetNext(iter, &entry, &st)) {
636 Print_vos_vldbEntry_p(&entry, "");
639 if (st != ADMITERATORDONE) {
640 ERR_ST_EXT("vos_VLDBGetNext", st);
643 if (!vos_VLDBGetDone(iter,
645 ERR_ST_EXT("vos_VLDBGetDone", st);
652 DoVosVLDBEntryRemove(struct cmd_syndesc *as, char *arock)
654 typedef enum {SERVER, PARTITION, VOLUME}
655 DoVosVLDBEntryRemove_parm_t;
657 void *vos_server = NULL;
658 unsigned int partition_id;
659 unsigned int *part_ptr = NULL;
661 unsigned int volume_id;
662 unsigned int *vol_ptr = NULL;
664 if (as->parms[SERVER].items) {
665 if (!vos_ServerOpen(cellHandle,
666 as->parms[SERVER].items->data,
669 ERR_ST_EXT("vos_ServerOpen", st);
674 if (as->parms[PARTITION].items) {
676 ERR_EXT("must specify server when specifying partition");
678 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
679 part_ptr = &partition_id;
682 if (as->parms[VOLUME].items) {
683 const char *volume = as->parms[VOLUME].items->data;
684 volume_id = GetVolumeIdFromString(volume);
685 vol_ptr = &volume_id;
688 if (!vos_VLDBEntryRemove(cellHandle,
694 ERR_ST_EXT("vos_VLDBEntryRemove", st);
701 DoVosVLDBUnlock(struct cmd_syndesc *as, char *arock)
703 typedef enum {SERVER, PARTITION}
704 DoVosVLDBUnlock_parm_t;
706 void *vos_server = NULL;
707 unsigned int partition_id;
708 unsigned int *part_ptr = NULL;
711 if (as->parms[SERVER].items) {
712 if (!vos_ServerOpen(cellHandle,
713 as->parms[SERVER].items->data,
716 ERR_ST_EXT("vos_ServerOpen", st);
721 if (as->parms[PARTITION].items) {
723 ERR_EXT("must specify server when specifying partition");
725 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
726 part_ptr = &partition_id;
729 if (!vos_VLDBUnlock(cellHandle,
734 ERR_ST_EXT("vos_VLDBUnlock", st);
741 DoVosVLDBEntryLock(struct cmd_syndesc *as, char *arock)
743 typedef enum {VOLUME}
744 DoVosVLDBEntryLoc_parm_tk;
746 unsigned int volume_id;
748 if (as->parms[VOLUME].items) {
749 const char *volume = as->parms[VOLUME].items->data;
750 volume_id = GetVolumeIdFromString(volume);
753 if (!vos_VLDBEntryLock(cellHandle,
757 ERR_ST_EXT("vos_VLDBEntryLock", st);
764 DoVosVLDBEntryUnlock(struct cmd_syndesc *as, char *arock)
766 typedef enum {VOLUME}
767 DoVosVLDBEntryUnlock_parm_t;
769 unsigned int volume_id;
771 if (as->parms[VOLUME].items) {
772 const char *volume = as->parms[VOLUME].items->data;
773 volume_id = GetVolumeIdFromString(volume);
776 if (!vos_VLDBEntryUnlock(cellHandle,
780 ERR_ST_EXT("vos_VLDBEntryUnlock", st);
787 DoVosVLDBReadOnlySiteCreate(struct cmd_syndesc *as, char *arock)
789 typedef enum {SERVER, PARTITION, VOLUME}
790 DoVosVLDBReadOnlySiteCreate_parm_t;
792 void *vos_server = NULL;
793 unsigned int partition_id;
794 unsigned int volume_id;
796 if (as->parms[SERVER].items) {
797 if (!vos_ServerOpen(cellHandle,
798 as->parms[SERVER].items->data,
801 ERR_ST_EXT("vos_ServerOpen", st);
805 if (as->parms[PARTITION].items) {
806 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
809 if (as->parms[VOLUME].items) {
810 const char *volume = as->parms[VOLUME].items->data;
811 volume_id = GetVolumeIdFromString(volume);
814 if (!vos_VLDBReadOnlySiteCreate(cellHandle,
820 ERR_ST_EXT("vos_VLDBReadOnlySiteCreate", st);
826 DoVosVLDBReadOnlySiteDelete(struct cmd_syndesc *as, char *arock)
828 typedef enum {SERVER, PARTITION, VOLUME}
829 DoVosVLDBReadOnlySiteDelete_parm_t;
831 void *vos_server = NULL;
832 unsigned int partition_id;
833 unsigned int volume_id;
835 if (as->parms[SERVER].items) {
836 if (!vos_ServerOpen(cellHandle,
837 as->parms[SERVER].items->data,
840 ERR_ST_EXT("vos_ServerOpen", st);
844 if (as->parms[PARTITION].items) {
845 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
848 if (as->parms[VOLUME].items) {
849 const char *volume = as->parms[VOLUME].items->data;
850 volume_id = GetVolumeIdFromString(volume);
853 if (!vos_VLDBReadOnlySiteDelete(cellHandle,
859 ERR_ST_EXT("vos_VLDBReadOnlySiteDelete", st);
866 DoVosVLDBSync(struct cmd_syndesc *as, char *arock)
868 typedef enum {SERVER, PARTITION, FORCE}
869 DoVosVLDBSync_parm_t;
871 void *vos_server = NULL;
872 unsigned int partition_id;
873 unsigned int *part_ptr = NULL;
875 vos_force_t force = VOS_NORMAL;
877 if (as->parms[SERVER].items) {
878 if (!vos_ServerOpen(cellHandle,
879 as->parms[SERVER].items->data,
882 ERR_ST_EXT("vos_ServerOpen", st);
887 if (as->parms[PARTITION].items) {
889 ERR_EXT("must specify server when specifying partition");
891 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
892 part_ptr = &partition_id;
895 if (as->parms[FORCE].items) {
899 if (!vos_VLDBSync(cellHandle,
905 ERR_ST_EXT("vos_VLDBSync", st);
912 DoVosVolumeCreate(struct cmd_syndesc *as, char *arock)
914 typedef enum {SERVER, PARTITION, VOLUME, QUOTA}
915 DoVosVolumeCreate_parm_t;
917 void *vos_server = NULL;
918 unsigned int partition_id;
919 unsigned int volume_id;
920 const char *volume = NULL;
923 if (as->parms[SERVER].items) {
924 if (!vos_ServerOpen(cellHandle,
925 as->parms[SERVER].items->data,
928 ERR_ST_EXT("vos_ServerOpen", st);
932 if (as->parms[PARTITION].items) {
933 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
936 if (as->parms[VOLUME].items) {
937 volume = as->parms[VOLUME].items->data;
940 if (as->parms[QUOTA].items) {
941 quota = GetIntFromString(as->parms[QUOTA].items->data,
945 if (!vos_VolumeCreate(cellHandle,
953 ERR_ST_EXT("vos_VolumeCreate", st);
956 printf("Created volume %u\n", volume_id);
962 DoVosVolumeDelete(struct cmd_syndesc *as, char *arock)
964 typedef enum {SERVER, PARTITION, VOLUME}
965 DoVosVolumeDelete_parm_t;
967 void *vos_server = NULL;
968 unsigned int partition_id;
969 unsigned int volume_id;
971 if (as->parms[SERVER].items) {
972 if (!vos_ServerOpen(cellHandle,
973 as->parms[SERVER].items->data,
976 ERR_ST_EXT("vos_ServerOpen", st);
980 if (as->parms[PARTITION].items) {
981 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
984 if (as->parms[VOLUME].items) {
985 const char *volume = as->parms[VOLUME].items->data;
986 volume_id = GetVolumeIdFromString(volume);
989 if (!vos_VolumeDelete(cellHandle,
995 ERR_ST_EXT("vos_VolumeDelete", st);
1002 DoVosVolumeRename(struct cmd_syndesc *as, char *arock)
1004 typedef enum {OLDVOLUME, NEWVOLUME}
1005 DoVosVolumeRename_parm_t;
1006 afs_status_t st = 0;
1007 unsigned int old_volume;
1008 const char *new_volume;
1010 if (as->parms[OLDVOLUME].items) {
1011 const char *volume = as->parms[OLDVOLUME].items->data;
1012 old_volume = GetVolumeIdFromString(volume);
1015 if (as->parms[NEWVOLUME].items) {
1016 new_volume = as->parms[NEWVOLUME].items->data;
1019 if (!vos_VolumeRename(cellHandle,
1024 ERR_ST_EXT("vos_VolumeRename", st);
1031 DoVosVolumeDump(struct cmd_syndesc *as, char *arock)
1033 typedef enum {SERVER, PARTITION, VOLUME, STARTTIME, DUMPFILE}
1034 DoVosVolumeDump_parm_t;
1035 afs_status_t st = 0;
1036 void *vos_server = NULL;
1037 unsigned int partition_id;
1038 unsigned int *part_ptr = NULL;
1039 int have_server = 0;
1040 unsigned int volume_id;
1041 unsigned int start_time;
1042 const char *dumpfile;
1044 if (as->parms[SERVER].items) {
1045 if (!vos_ServerOpen(cellHandle,
1046 as->parms[SERVER].items->data,
1049 ERR_ST_EXT("vos_ServerOpen", st);
1054 if (as->parms[PARTITION].items) {
1056 ERR_EXT("must specify server when specifying partition");
1058 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1059 part_ptr = &partition_id;
1062 if (as->parms[VOLUME].items) {
1063 const char *volume = as->parms[VOLUME].items->data;
1064 volume_id = GetVolumeIdFromString(volume);
1067 if (as->parms[STARTTIME].items) {
1068 start_time = GetIntFromString(as->parms[STARTTIME].items->data,
1069 "invalid start time");
1072 if (as->parms[DUMPFILE].items) {
1073 dumpfile = as->parms[DUMPFILE].items->data;
1076 if (!vos_VolumeDump(cellHandle,
1084 ERR_ST_EXT("vos_VolumeDump", st);
1091 DoVosVolumeRestore(struct cmd_syndesc *as, char *arock)
1093 typedef enum {SERVER, PARTITION, ID, VOLUME, DUMPFILE, FULL}
1094 DoVosVolumeRestore_parm_t;
1095 afs_status_t st = 0;
1096 void *vos_server = NULL;
1097 unsigned int partition_id;
1098 unsigned int volume_id;
1099 unsigned int *vol_ptr = NULL;
1100 const char *dumpfile;
1101 const char *volume_name;
1102 vos_volumeRestoreType_t restore = VOS_RESTORE_INCREMENTAL;
1104 if (as->parms[SERVER].items) {
1105 if (!vos_ServerOpen(cellHandle,
1106 as->parms[SERVER].items->data,
1109 ERR_ST_EXT("vos_ServerOpen", st);
1113 if (as->parms[PARTITION].items) {
1114 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1117 if (as->parms[VOLUME].items) {
1118 volume_name = as->parms[VOLUME].items->data;
1121 if (as->parms[ID].items) {
1122 const char *volume = as->parms[ID].items->data;
1123 volume_id = GetVolumeIdFromString(volume);
1124 vol_ptr = &volume_id;
1127 if (as->parms[DUMPFILE].items) {
1128 dumpfile = as->parms[DUMPFILE].items->data;
1131 if (as->parms[FULL].items) {
1132 restore = VOS_RESTORE_FULL;
1135 if (!vos_VolumeRestore(cellHandle,
1144 ERR_ST_EXT("vos_VolumeRestore", st);
1151 DoVosVolumeOnline(struct cmd_syndesc *as, char *arock)
1153 typedef enum {SERVER, PARTITION, VOLUME, SLEEP, BUSY}
1154 DoVosVolumeOnline_parm_t;
1155 afs_status_t st = 0;
1156 void *vos_server = NULL;
1157 unsigned int partition_id;
1158 unsigned int volume_id;
1160 vos_volumeOnlineType_t type = VOS_ONLINE_OFFLINE;
1162 if (as->parms[SERVER].items) {
1163 if (!vos_ServerOpen(cellHandle,
1164 as->parms[SERVER].items->data,
1167 ERR_ST_EXT("vos_ServerOpen", st);
1171 if (as->parms[PARTITION].items) {
1172 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1175 if (as->parms[VOLUME].items) {
1176 const char *volume = as->parms[VOLUME].items->data;
1177 volume_id = GetVolumeIdFromString(volume);
1180 if (as->parms[SLEEP].items) {
1181 sleep = GetIntFromString(as->parms[SLEEP].items->data,
1182 "invalid sleep time");
1185 if (as->parms[BUSY].items) {
1186 type = VOS_ONLINE_BUSY;
1189 if (!vos_VolumeOnline(vos_server,
1196 ERR_ST_EXT("vos_VolumeOnline", st);
1203 DoVosVolumeOffline(struct cmd_syndesc *as, char *arock)
1205 typedef enum {SERVER, PARTITION, VOLUME}
1206 DoVosVolumeOffline_parm_t;
1207 afs_status_t st = 0;
1208 void *vos_server = NULL;
1209 unsigned int partition_id;
1210 unsigned int volume_id;
1212 if (as->parms[SERVER].items) {
1213 if (!vos_ServerOpen(cellHandle,
1214 as->parms[SERVER].items->data,
1217 ERR_ST_EXT("vos_ServerOpen", st);
1221 if (as->parms[PARTITION].items) {
1222 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1225 if (as->parms[VOLUME].items) {
1226 const char *volume = as->parms[VOLUME].items->data;
1227 volume_id = GetVolumeIdFromString(volume);
1230 if (!vos_VolumeOffline(vos_server,
1235 ERR_ST_EXT("vos_VolumeOffline", st);
1242 Print_vos_volumeEntry_p(
1243 vos_volumeEntry_p entry, const char *prefix)
1245 if (entry->status == VOS_OK) {
1246 printf("%sVolume name %s id %u\n", prefix, entry->name, entry->id);
1247 printf("%sRead write id %u\n", prefix, entry->readWriteId);
1248 printf("%sRead only id %u\n", prefix, entry->readOnlyId);
1249 printf("%sBackup id %u\n", prefix, entry->backupId);
1250 printf("%sCreation date %lu\n", prefix, entry->creationDate);
1251 printf("%sLast access date %lu\n", prefix, entry->lastAccessDate);
1252 printf("%sLast update date %lu\n", prefix, entry->lastUpdateDate);
1253 printf("%sLast backup date %lu\n", prefix, entry->lastBackupDate);
1254 printf("%sLast copy creation date %lu\n", prefix, entry->copyCreationDate);
1255 printf("%sAccesses since midnight %d\n",
1257 entry->accessesSinceMidnight);
1258 printf("%sFile count %d\n", prefix, entry->fileCount);
1259 printf("%sMax quota %d\n", prefix, entry->maxQuota);
1260 printf("%sCurrent size %d\n", prefix, entry->currentSize);
1262 printf("%sVolume status: VOS_OK\n", prefix);
1264 printf("%sVolume disposition:\n", prefix);
1266 switch(entry->volumeDisposition) {
1268 printf("%s\tVOS_OK\n", prefix);
1271 printf("%s\tVOS_SALVAGE\n", prefix);
1274 printf("%s\tVOS_NO_VNODE\n", prefix);
1277 printf("%s\tVOS_NO_VOL\n", prefix);
1279 case VOS_VOL_EXISTS:
1280 printf("%s\tVOS_VOL_EXISTS\n", prefix);
1282 case VOS_NO_SERVICE:
1283 printf("%s\tVOS_NO_SERVICE\n", prefix);
1286 printf("%s\tVOS_OFFLINE\n", prefix);
1289 printf("%s\tVOS_ONLINE\n", prefix);
1292 printf("%s\tVOS_DISK_FULL\n", prefix);
1294 case VOS_OVER_QUOTA:
1295 printf("%s\tVOS_OVER_QUOTA\n", prefix);
1298 printf("%s\tVOS_BUSY\n", prefix);
1301 printf("%s\tVOS_MOVED\n", prefix);
1304 printf("Unknown volume disposition %d\n", entry->volumeDisposition);
1308 printf("%sVolume type: ", prefix);
1310 if (entry->type == VOS_READ_WRITE_VOLUME) {
1311 printf("read write\n");
1312 } else if (entry->type == VOS_READ_ONLY_VOLUME) {
1313 printf("read only\n");
1318 printf("\n%s\tSame Network\tSame Network Authenticated"
1319 "\tDifferent Network\tDifferent Network Authenticated\n\n",
1321 printf("%sRead\t%d\t%d\t%d\t%d\n",
1323 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK],
1324 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK_AUTHENTICATED],
1325 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK],
1326 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK_AUTHENTICATED]);
1327 printf("%sWrite\t%d\t%d\t%d\t%d\n",
1329 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK],
1330 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK_AUTHENTICATED],
1331 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK],
1332 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK_AUTHENTICATED]);
1334 printf("\n%s\t0 to 60 secs\t1 to 10 mins\t10 to 60 mins\t1 to 24 hrs\t1 to 7 days\t more than 7 days\n", prefix);
1335 printf("%sFile Author Write Same Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1337 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1338 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1339 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1340 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1341 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1342 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1343 printf("%sFile Author Write Diff Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1345 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1346 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1347 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1348 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1349 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1350 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1351 printf("%sDir Author Write Same Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1353 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1354 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1355 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1356 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1357 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1358 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1359 printf("%sDir Author Write Diff Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1361 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1362 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1363 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1364 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1365 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1366 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1368 printf("%sUnable to print volume because volume status:\n", prefix);
1369 switch(entry->status) {
1371 printf("%s\tVOS_SALVAGE\n", prefix);
1374 printf("%s\tVOS_NO_VNODE\n", prefix);
1377 printf("%s\tVOS_NO_VOL\n", prefix);
1379 case VOS_VOL_EXISTS:
1380 printf("%s\tVOS_VOL_EXISTS\n", prefix);
1382 case VOS_NO_SERVICE:
1383 printf("%s\tVOS_NO_SERVICE\n", prefix);
1386 printf("%s\tVOS_OFFLINE\n", prefix);
1389 printf("%s\tVOS_ONLINE\n", prefix);
1392 printf("%s\tVOS_DISK_FULL\n", prefix);
1394 case VOS_OVER_QUOTA:
1395 printf("%s\tVOS_OVER_QUOTA\n", prefix);
1398 printf("%s\tVOS_BUSY\n", prefix);
1401 printf("%s\tVOS_MOVED\n", prefix);
1404 printf("Unknown volume status %d\n", entry->status);
1411 DoVosVolumeGet(struct cmd_syndesc *as, char *arock)
1413 typedef enum {SERVER, PARTITION, VOLUME}
1414 DoVosVolumeGet_parm_t;
1415 afs_status_t st = 0;
1416 void *vos_server = NULL;
1417 unsigned int partition_id;
1418 unsigned int volume_id;
1419 vos_volumeEntry_t entry;
1421 if (as->parms[SERVER].items) {
1422 if (!vos_ServerOpen(cellHandle,
1423 as->parms[SERVER].items->data,
1426 ERR_ST_EXT("vos_ServerOpen", st);
1430 if (as->parms[PARTITION].items) {
1431 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1434 if (as->parms[VOLUME].items) {
1435 const char *volume = as->parms[VOLUME].items->data;
1436 volume_id = GetVolumeIdFromString(volume);
1439 if (!vos_VolumeGet(cellHandle,
1446 ERR_ST_EXT("vos_VolumeGet", st);
1449 Print_vos_volumeEntry_p(&entry, "");
1455 DoVosVolumeList(struct cmd_syndesc *as, char *arock)
1457 typedef enum {SERVER, PARTITION}
1458 DoVosVolumeList_parm_t;
1459 afs_status_t st = 0;
1460 void *vos_server = NULL;
1462 unsigned int partition_id;
1463 vos_volumeEntry_t entry;
1465 if (as->parms[SERVER].items) {
1466 if (!vos_ServerOpen(cellHandle,
1467 as->parms[SERVER].items->data,
1470 ERR_ST_EXT("vos_ServerOpen", st);
1474 if (as->parms[PARTITION].items) {
1475 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1478 if (!vos_VolumeGetBegin(cellHandle,
1484 ERR_ST_EXT("vos_VolumeGetBegin", st);
1487 printf("Volumes located at %s partition %s\n",
1488 as->parms[SERVER].items->data,
1489 as->parms[PARTITION].items->data);
1491 while(vos_VolumeGetNext(iter, &entry, &st)) {
1492 Print_vos_volumeEntry_p(&entry, " ");
1496 if (st != ADMITERATORDONE) {
1497 ERR_ST_EXT("vos_VolumeGetNext", st);
1500 if (!vos_VolumeGetDone(iter,
1502 ERR_ST_EXT("vos_VolumeGetDone", st);
1509 DoVosVolumeMove(struct cmd_syndesc *as, char *arock)
1511 typedef enum {VOLUME, FROMSERVER, FROMPARTITION, TOSERVER, TOPARTITION}
1512 DoVosVolumeMove_parm_t;
1513 afs_status_t st = 0;
1514 void *from_server = NULL;
1515 void *to_server = NULL;
1516 unsigned int from_partition;
1517 unsigned int to_partition;
1518 unsigned int volume_id;
1520 if (as->parms[FROMSERVER].items) {
1521 if (!vos_ServerOpen(cellHandle,
1522 as->parms[FROMSERVER].items->data,
1525 ERR_ST_EXT("vos_ServerOpen", st);
1529 if (as->parms[TOSERVER].items) {
1530 if (!vos_ServerOpen(cellHandle,
1531 as->parms[TOSERVER].items->data,
1534 ERR_ST_EXT("vos_ServerOpen", st);
1538 if (as->parms[FROMPARTITION].items) {
1539 from_partition = GetPartitionIdFromString(as->parms[FROMPARTITION].items->data);
1542 if (as->parms[TOPARTITION].items) {
1543 to_partition = GetPartitionIdFromString(as->parms[TOPARTITION].items->data);
1546 if (as->parms[VOLUME].items) {
1547 const char *volume = as->parms[VOLUME].items->data;
1548 volume_id = GetVolumeIdFromString(volume);
1551 if (!vos_VolumeMove(cellHandle,
1559 ERR_ST_EXT("vos_VolumeMove", st);
1566 DoVosVolumeRelease(struct cmd_syndesc *as, char *arock)
1568 typedef enum {VOLUME, FORCE}
1569 DoVosVolumeRelease_parm_t;
1570 afs_status_t st = 0;
1571 unsigned int volume_id;
1572 vos_force_t force = VOS_NORMAL;
1574 if (as->parms[VOLUME].items) {
1575 const char *volume = as->parms[VOLUME].items->data;
1576 volume_id = GetVolumeIdFromString(volume);
1579 if (as->parms[FORCE].items) {
1583 if (!vos_VolumeRelease(cellHandle,
1588 ERR_ST_EXT("vos_VolumeRelease", st);
1594 DoVosVolumeZap(struct cmd_syndesc *as, char *arock)
1596 typedef enum {SERVER, PARTITION, VOLUME, FORCE}
1597 DoVosVolumeZap_parm_t;
1598 afs_status_t st = 0;
1599 void *vos_server = NULL;
1600 unsigned int partition_id;
1601 unsigned int volume_id;
1602 vos_force_t force = VOS_NORMAL;
1604 if (as->parms[SERVER].items) {
1605 if (!vos_ServerOpen(cellHandle,
1606 as->parms[SERVER].items->data,
1609 ERR_ST_EXT("vos_ServerOpen", st);
1613 if (as->parms[PARTITION].items) {
1614 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1617 if (as->parms[VOLUME].items) {
1618 const char *volume = as->parms[VOLUME].items->data;
1619 volume_id = GetVolumeIdFromString(volume);
1622 if (as->parms[FORCE].items) {
1626 if (!vos_VolumeZap(cellHandle,
1633 ERR_ST_EXT("vos_VolumeZap", st);
1640 DoVosPartitionNameToId(struct cmd_syndesc *as, char *arock)
1642 typedef enum {PARTITION}
1643 DoVosPartitionNameToId_parm_t;
1644 afs_status_t st = 0;
1645 unsigned int partition_id;
1647 if (as->parms[PARTITION].items) {
1648 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1651 printf("The id for partition %s is %u\n",
1652 as->parms[PARTITION].items->data,
1659 DoVosPartitionIdToName(struct cmd_syndesc *as, char *arock)
1661 typedef enum {PARTITIONID}
1662 DoVosPartitionIdToName_parm_t;
1663 afs_status_t st = 0;
1664 unsigned int partition_id;
1665 char partition[VOS_MAX_PARTITION_NAME_LEN];
1667 if (as->parms[PARTITIONID].items) {
1668 partition_id = GetIntFromString(as->parms[PARTITIONID].items->data,
1669 "bad partition id");
1672 if (!vos_PartitionIdToName(partition_id, partition, &st)) {
1673 ERR_ST_EXT("bad partition id", st);
1676 printf("The partition for id %u is %s\n",
1684 DoVosVolumeQuotaChange(struct cmd_syndesc *as, char *arock)
1686 typedef enum {SERVER, PARTITION, VOLUME, QUOTA}
1687 DoVosVolumeQuotaChange_parm_t;
1688 afs_status_t st = 0;
1689 void *vos_server = NULL;
1690 unsigned int partition_id;
1691 unsigned int volume_id;
1694 if (as->parms[SERVER].items) {
1695 if (!vos_ServerOpen(cellHandle,
1696 as->parms[SERVER].items->data,
1699 ERR_ST_EXT("vos_ServerOpen", st);
1703 if (as->parms[PARTITION].items) {
1704 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1707 if (as->parms[VOLUME].items) {
1708 const char *volume = as->parms[VOLUME].items->data;
1709 volume_id = GetVolumeIdFromString(volume);
1712 if (as->parms[QUOTA].items) {
1713 quota = GetIntFromString(as->parms[QUOTA].items->data,
1717 if (!vos_VolumeQuotaChange(cellHandle,
1724 ERR_ST_EXT("vos_VolumeQuotaChange", st);
1731 SetupVosAdminCmd(void)
1733 struct cmd_syndesc *ts;
1735 ts = cmd_CreateSyntax("VosBackupVolumeCreate",
1736 DoVosBackupVolumeCreate, 0,
1737 "create a backup volume");
1742 "volume to back up");
1743 SetupCommonCmdArgs(ts);
1745 ts = cmd_CreateSyntax("VosBackupVolumeCreateMultiple",
1746 DoVosBackupVolumeCreateMultiple,
1748 "create a backup volume");
1753 "server housing volumes to back up");
1758 "partition housing volumes to back up");
1763 "common prefix of volumes to back up");
1768 "exclude volumes from backup that match prefix");
1769 SetupCommonCmdArgs(ts);
1771 ts = cmd_CreateSyntax("VosPartitionGet",
1774 "get information about a partition");
1779 "server housing partition of interest");
1784 "partition to query");
1785 SetupCommonCmdArgs(ts);
1787 ts = cmd_CreateSyntax("VosPartitionList",
1790 "list information about all partitions at a server");
1795 "server housing partitions of interest");
1796 SetupCommonCmdArgs(ts);
1798 ts = cmd_CreateSyntax("VosServerSync",
1801 "sync server with vldb");
1811 "partition to sync");
1812 SetupCommonCmdArgs(ts);
1814 ts = cmd_CreateSyntax("VosFileServerAddressChange",
1815 DoVosFileServerAddressChange,
1817 "change a server's address in the vldb");
1822 "old address to change");
1828 SetupCommonCmdArgs(ts);
1830 ts = cmd_CreateSyntax("VosFileServerAddressRemove",
1831 DoVosFileServerAddressRemove,
1833 "remove a server's address from the vldb");
1838 "address to remove");
1839 SetupCommonCmdArgs(ts);
1841 ts = cmd_CreateSyntax("VosFileServerList",
1842 DoVosFileServerList,
1844 "list the file servers in a cell");
1845 SetupCommonCmdArgs(ts);
1847 ts = cmd_CreateSyntax("VosServerTransactionStatusList",
1848 DoVosServerTransactionStatusList,
1850 "list the active transactions at a server");
1856 SetupCommonCmdArgs(ts);
1858 ts = cmd_CreateSyntax("VosVLDBGet",
1861 "get a vldb entry for a volume");
1866 "volume to retrieve");
1867 SetupCommonCmdArgs(ts);
1869 ts = cmd_CreateSyntax("VosVLDBList",
1872 "list a group of vldb entries");
1877 "limit entries to a particular server");
1882 "limit entries to a particular partition");
1883 SetupCommonCmdArgs(ts);
1885 ts = cmd_CreateSyntax("VosVLDBEntryRemove",
1886 DoVosVLDBEntryRemove,
1888 "remove vldb entries");
1893 "limit entries to a particular server");
1898 "limit entries to a particular partition");
1903 "volume to remove");
1904 SetupCommonCmdArgs(ts);
1906 ts = cmd_CreateSyntax("VosVLDBUnlock",
1909 "unlock a group of vldb entries");
1914 "limit entries to a particular server");
1919 "limit entries to a particular partition");
1920 SetupCommonCmdArgs(ts);
1922 ts = cmd_CreateSyntax("VosVLDBEntryLock",
1925 "lock a single vldb entry");
1931 SetupCommonCmdArgs(ts);
1933 ts = cmd_CreateSyntax("VosVLDBEntryUnlock",
1934 DoVosVLDBEntryUnlock,
1936 "unlock a single vldb entry");
1941 "volume to unlock");
1942 SetupCommonCmdArgs(ts);
1944 ts = cmd_CreateSyntax("VosVLDBReadOnlySiteCreate",
1945 DoVosVLDBReadOnlySiteCreate,
1947 "create a read only site");
1952 "server where read only will be created");
1957 "partition where read only will be created");
1962 "volume to replicate");
1963 SetupCommonCmdArgs(ts);
1965 ts = cmd_CreateSyntax("VosVLDBReadOnlySiteDelete",
1966 DoVosVLDBReadOnlySiteDelete,
1968 "delete a read only site before initial replication");
1973 "server where read only will be deleted");
1978 "partition where read only will be deleted");
1983 "volume to delete");
1984 SetupCommonCmdArgs(ts);
1986 ts = cmd_CreateSyntax("VosVLDBSync",
1989 "sync vldb with server");
1999 "limit sync to a particular partition");
2004 "force sync to occur");
2005 SetupCommonCmdArgs(ts);
2007 ts = cmd_CreateSyntax("VosVolumeCreate",
2010 "create a read write volume");
2015 "server where volume will be created");
2020 "partition where volume will be created");
2025 "name of new volume");
2030 "size quota of new volume in 1kb units");
2031 SetupCommonCmdArgs(ts);
2033 ts = cmd_CreateSyntax("VosVolumeDelete",
2041 "server where volume exists");
2046 "partition where volume exists");
2051 "volume to delete");
2052 SetupCommonCmdArgs(ts);
2054 ts = cmd_CreateSyntax("VosVolumeRename",
2068 SetupCommonCmdArgs(ts);
2070 ts = cmd_CreateSyntax("VosVolumeDump",
2073 "dump a volume to a file");
2078 "dump volume at a particular server");
2083 "dump volume at a particular partition");
2093 "files modified after this time will be dumped");
2098 "file to contain dump results");
2099 SetupCommonCmdArgs(ts);
2101 ts = cmd_CreateSyntax("VosVolumeRestore",
2104 "restore a volume from a dumpfile");
2109 "server that houses volume to restore");
2114 "partition that houses volume to restore");
2119 "id of volume restored");
2124 "name of volume restored");
2129 "file contained dump of volume");
2134 "does a full restore of volume");
2135 SetupCommonCmdArgs(ts);
2137 ts = cmd_CreateSyntax("VosVolumeOnline",
2140 "bring a volume online");
2145 "server that houses volume");
2150 "partition that houses volume");
2155 "volume to bring online");
2160 "seconds to sleep");
2165 "mark volume busy");
2166 SetupCommonCmdArgs(ts);
2168 ts = cmd_CreateSyntax("VosVolumeOffline",
2171 "take a volume offline");
2176 "server that houses volume");
2181 "partition that houses volume");
2186 "volume to bring offline");
2187 SetupCommonCmdArgs(ts);
2189 ts = cmd_CreateSyntax("VosVolumeGet",
2192 "get a volume entry");
2197 "server that houses volume");
2202 "partition that houses volume");
2207 "volume to retrieve");
2208 SetupCommonCmdArgs(ts);
2210 ts = cmd_CreateSyntax("VosVolumeList",
2213 "list a group of volumes");
2218 "limit volumes to a particular server");
2223 "limit volumes to a particular partition");
2224 SetupCommonCmdArgs(ts);
2226 ts = cmd_CreateSyntax("VosVolumeMove",
2244 "source partition");
2249 "destination server");
2254 "destination partition");
2255 SetupCommonCmdArgs(ts);
2257 ts = cmd_CreateSyntax("VosVolumeRelease",
2260 "release updates to read only");
2265 "volume to replicate");
2270 "force release to occur");
2271 SetupCommonCmdArgs(ts);
2273 ts = cmd_CreateSyntax("VosVolumeZap",
2281 "server that houses the volume to zap");
2286 "partition that houses the volume to zap");
2297 SetupCommonCmdArgs(ts);
2299 ts = cmd_CreateSyntax("VosPartitionNameToId",
2300 DoVosPartitionNameToId,
2302 "convert a partition name to a number");
2307 "partition to convert");
2308 SetupCommonCmdArgs(ts);
2310 ts = cmd_CreateSyntax("VosPartitionIdToName",
2311 DoVosPartitionIdToName,
2313 "convert a number to a partition");
2318 "number to convert");
2319 SetupCommonCmdArgs(ts);
2321 ts = cmd_CreateSyntax("VosVolumeQuotaChange",
2322 DoVosVolumeQuotaChange,
2324 "change the quota for a partition");
2329 "server that houses the volume");
2334 "partition that houses the volume");
2339 "volume to change");
2344 "new quota in 1kb units");
2345 SetupCommonCmdArgs(ts);