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
14 #include <afsconfig.h>
15 #include <afs/param.h>
26 * Generic fuction for converting input string to an integer. Pass
27 * the error_msg you want displayed if there is an error converting
32 GetIntFromString(const char *int_str, const char *error_msg) {
34 char *bad_char = NULL;
36 i = strtoul(int_str, &bad_char, 10);
37 if ((bad_char == NULL) || (*bad_char == 0)) {
45 * Generic fuction for converting input string to a volume number
46 * It will accept integer strings as well as volume names.
50 GetVolumeIdFromString(const char *volume) {
51 unsigned int volume_id;
52 char *bad_char = NULL;
54 vos_vldbEntry_t entry;
56 volume_id = strtoul(volume, &bad_char, 10);
57 if ((bad_char == NULL) || (*bad_char == 0)) {
62 * We failed to convert the string to a number, so see if it
65 if (vos_VLDBGet(cellHandle, 0, (const unsigned int *) 0, volume,
67 return entry.volumeId[VOS_READ_WRITE_VOLUME];
69 ERR_EXT("failed to convert specified volume to an id");
74 * Generic fuction for converting input string to a partition number
75 * It will accept integer strings as well as partition names.
79 GetPartitionIdFromString(const char *partition) {
80 unsigned int partition_id;
81 char *bad_char = NULL;
86 partition_id = strtoul(partition, &bad_char, 10);
87 if ((bad_char == NULL) || (*bad_char == 0)) {
92 * We failed to convert the string to a number, so see if it
96 pname_len = strlen(partition);
98 sprintf(pname, "%s", "/vicep");
100 strcat(pname, partition);
101 } else if (!strncmp(partition, "/vicep", 6)) {
102 strcat(pname, partition+6);
103 } else if (!strncmp(partition, "vicep", 5)) {
104 strcat(pname, partition+5);
106 ERR_EXT("invalid partition");
109 if (!vos_PartitionNameToId((const char *) pname, &partition_id, &st)) {
110 ERR_ST_EXT("invalid partition", st);
117 * Generic fuction for converting input string to an address in host order.
118 * It will accept strings in the form "128.98.12.1"
122 GetAddressFromString(const char *addr_str) {
123 int addr= inet_addr(addr_str);
126 ERR_EXT("failed to convert specified address");
133 PrintMessage(vos_messageType_t type, char *message) {
134 printf("%s\n", message);
138 DoVosBackupVolumeCreate(struct cmd_syndesc *as, char *arock)
140 typedef enum {VOLUME} DoVosBackupVolumeCreate_parm_t;
142 unsigned int volume_id;
144 if (as->parms[VOLUME].items) {
145 const char *volume = as->parms[VOLUME].items->data;
146 volume_id = GetVolumeIdFromString(volume);
149 if (!vos_BackupVolumeCreate(cellHandle,
153 ERR_ST_EXT("vos_BackupVolumeCreate", st);
159 DoVosBackupVolumeCreateMultiple(struct cmd_syndesc *as, char *arock)
161 typedef enum {SERVER, PARTITION, PREFIX, EXCLUDE}
162 DoVosBackupVolumeCreate_parm_t;
164 void *vos_server = NULL;
165 unsigned int partition_id;
166 const unsigned int *part_ptr = NULL;
167 const char *prefix = NULL;
168 vos_exclude_t exclude = VOS_INCLUDE;
170 if (as->parms[SERVER].items) {
171 if (!vos_ServerOpen(cellHandle,
172 as->parms[SERVER].items->data,
175 ERR_ST_EXT("vos_ServerOpen", st);
179 if (as->parms[PARTITION].items) {
180 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
181 part_ptr = &partition_id;
184 if (as->parms[PREFIX].items) {
185 prefix = as->parms[PREFIX].items->data;
188 if (as->parms[EXCLUDE].items) {
189 exclude = VOS_EXCLUDE;
192 if (!vos_BackupVolumeCreateMultiple(cellHandle,
194 (vos_MessageCallBack_t) 0,
199 ERR_ST_EXT("vos_BackupVolumeCreate", st);
205 Print_vos_partitionEntry_p(vos_partitionEntry_p part, const char *prefix)
207 printf("%sInformation for partition %s\n", prefix, part->name);
208 printf("%s\tDevice name: %s\n", prefix, part->deviceName);
209 printf("%s\tlockFileDescriptor: %d\n", prefix, part->lockFileDescriptor);
210 printf("%s\tTotal space: %d\n", prefix, part->totalSpace);
211 printf("%s\tTotal Free space: %d\n", prefix, part->totalFreeSpace);
215 DoVosPartitionGet(struct cmd_syndesc *as, char *arock)
217 typedef enum {SERVER, PARTITION}
218 DoVosPartitionGet_parm_t;
220 void *vos_server = NULL;
221 unsigned int partition_id;
222 vos_partitionEntry_t entry;
224 if (as->parms[SERVER].items) {
225 if (!vos_ServerOpen(cellHandle,
226 as->parms[SERVER].items->data,
229 ERR_ST_EXT("vos_ServerOpen", st);
233 if (as->parms[PARTITION].items) {
234 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
237 if (!vos_PartitionGet(cellHandle,
243 ERR_ST_EXT("vos_PartitionGet", st);
246 Print_vos_partitionEntry_p(&entry, "");
252 DoVosPartitionList(struct cmd_syndesc *as, char *arock)
254 typedef enum {SERVER}
255 DoVosPartitionGet_parm_t;
257 void *vos_server = NULL;
259 vos_partitionEntry_t entry;
261 if (as->parms[SERVER].items) {
262 if (!vos_ServerOpen(cellHandle,
263 as->parms[SERVER].items->data,
266 ERR_ST_EXT("vos_ServerOpen", st);
270 if (!vos_PartitionGetBegin(cellHandle,
275 ERR_ST_EXT("vos_PartitionGetBegin", st);
278 printf("Listing partitions at server %s\n", as->parms[SERVER].items->data);
279 while(vos_PartitionGetNext(iter, &entry, &st)) {
280 Print_vos_partitionEntry_p(&entry, " ");
283 if (st != ADMITERATORDONE) {
284 ERR_ST_EXT("vos_PartitionGetNext", st);
287 if (!vos_PartitionGetDone(iter,
289 ERR_ST_EXT("vos_PartitionGetDone", st);
295 DoVosServerSync(struct cmd_syndesc *as, char *arock)
297 typedef enum {SERVER, PARTITION}
298 DoVosServerSync_parm_t;
300 void *vos_server = NULL;
301 unsigned int partition_id;
302 const unsigned int *part_ptr = NULL;
304 if (as->parms[SERVER].items) {
305 if (!vos_ServerOpen(cellHandle,
306 as->parms[SERVER].items->data,
309 ERR_ST_EXT("vos_ServerOpen", st);
313 if (as->parms[PARTITION].items) {
314 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
315 part_ptr = &partition_id;
318 if (!vos_ServerSync(cellHandle,
323 ERR_ST_EXT("vos_PartitionGetDone", st);
329 DoVosFileServerAddressChange(struct cmd_syndesc *as, char *arock)
331 typedef enum {OLDADDRESS, NEWADDRESS}
332 DoVosFileServerAddressChange_parm_t;
334 int old_addr, new_addr;
336 if (as->parms[OLDADDRESS].items) {
337 const char *addr = as->parms[OLDADDRESS].items->data;
338 old_addr = GetAddressFromString(addr);
341 if (as->parms[NEWADDRESS].items) {
342 const char *addr = as->parms[OLDADDRESS].items->data;
343 new_addr = GetAddressFromString(addr);
346 if (!vos_FileServerAddressChange(cellHandle,
351 ERR_ST_EXT("vos_FileServerAddressChange", st);
357 DoVosFileServerAddressRemove(struct cmd_syndesc *as, char *arock)
359 typedef enum {ADDRESS}
360 DoVosFileServerAddressRemove_parm_t;
364 if (as->parms[ADDRESS].items) {
365 const char *addr = as->parms[ADDRESS].items->data;
366 address = GetAddressFromString(addr);
369 if (!vos_FileServerAddressRemove(cellHandle,
373 ERR_ST_EXT("vos_FileServerAddressRemove", st);
379 Print_vos_fileServerEntry_p(vos_fileServerEntry_p serv, const char *prefix)
383 for(i=0;i<serv->count;i++) {
384 printf("%s%x ", prefix, serv->serverAddress[i]);
390 DoVosFileServerList(struct cmd_syndesc *as, char *arock)
394 vos_fileServerEntry_t entry;
396 if (!vos_FileServerGetBegin(cellHandle,
400 ERR_ST_EXT("vos_FileServerGetBegin", st);
403 while(vos_FileServerGetNext(iter, &entry, &st)) {
404 Print_vos_fileServerEntry_p(&entry, "");
407 if (st != ADMITERATORDONE) {
408 ERR_ST_EXT("vos_FileServerGetNext", st);
411 if (!vos_FileServerGetDone(iter,
413 ERR_ST_EXT("vos_FileServerGetDone", st);
420 Print_vos_serverTransactionStatus_p(
421 vos_serverTransactionStatus_p tran, const char *prefix)
423 printf("%sTransaction id\t\t\t%d\n", prefix, tran->transactionId);
424 printf("%sLast active time\t\t\t%d\n", prefix, tran->lastActiveTime);
425 printf("%sCreation time\t\t\t%d\n", prefix, tran->creationTime);
426 printf("%sError code\t\t\t%d\n", prefix, tran->errorCode);
427 printf("%sVolume id\t\t\t\t%u\n", prefix, tran->volumeId);
428 printf("%sPartition\t\t\t\t%d\n", prefix, tran->partition);
429 printf("%sLast procedure name\t\t\t%s\n", prefix, tran->lastProcedureName);
430 printf("%sNext receive packet seq num\t\t\t%d\n",
432 tran->nextReceivePacketSequenceNumber);
433 printf("%sNext send packet seq num\t\t\t%d\n",
435 tran->nextSendPacketSequenceNumber);
436 printf("%sLast receive time\t\t\t%d\n", prefix, tran->lastReceiveTime);
437 printf("%sLast send time\t\t\t%d\n", prefix, tran->lastSendTime);
438 printf("%sVolume attach mode\t\t\t%d\n", prefix, tran->volumeAttachMode);
439 printf("%sVolume active status\t\t\t%d\n",
441 tran->volumeActiveStatus);
442 printf("%sVolume tran status\t\t\t%d\n",
444 tran->volumeTransactionStatus);
448 DoVosServerTransactionStatusList(struct cmd_syndesc *as, char *arock)
450 typedef enum {SERVER}
451 DoVosServerTransactionStatusList_parm_t;
453 void *vos_server = NULL;
455 vos_serverTransactionStatus_t tran;
458 if (as->parms[SERVER].items) {
459 if (!vos_ServerOpen(cellHandle,
460 as->parms[SERVER].items->data,
463 ERR_ST_EXT("vos_ServerOpen", st);
467 if (!vos_ServerTransactionStatusGetBegin(cellHandle,
472 ERR_ST_EXT("vos_ServerTransactionStatusGetBegin", st);
475 while(vos_ServerTransactionStatusGetNext(iter, &tran, &st)) {
476 Print_vos_serverTransactionStatus_p(&tran, "");
479 if (st != ADMITERATORDONE) {
480 ERR_ST_EXT("vos_ServerTransactionStatusGetNext", st);
483 if (!vos_ServerTransactionStatusGetDone(iter,
485 ERR_ST_EXT("vos_ServerTransactionStatusGetDone", st);
491 Print_vos_vldbEntry_p(
492 vos_vldbEntry_p entry, const char *prefix)
496 printf("%sVolume entry %s\n", prefix, entry->name);
497 printf("%sNumber of servers %d\n", prefix, entry->numServers);
498 printf("%sRead write volume %u\n",
500 entry->volumeId[VOS_READ_WRITE_VOLUME]);
501 printf("%sRead only volume %u\n",
503 entry->volumeId[VOS_READ_ONLY_VOLUME]);
504 printf("%sBackup volume %u\n",
506 entry->volumeId[VOS_BACKUP_VOLUME]);
507 printf("%sClone volume %u\n",
511 printf("%sVolume entry status:\n", prefix);
512 if (entry->status & VOS_VLDB_ENTRY_OK) {
513 printf("%s\tVOS_VLDB_ENTRY_OK\n", prefix);
515 if (entry->status & VOS_VLDB_ENTRY_MOVE) {
516 printf("%s\tVOS_VLDB_ENTRY_MOVE\n", prefix);
518 if (entry->status & VOS_VLDB_ENTRY_RELEASE) {
519 printf("%s\tVOS_VLDB_ENTRY_RELEASE\n", prefix);
521 if (entry->status & VOS_VLDB_ENTRY_BACKUP) {
522 printf("%s\tVOS_VLDB_ENTRY_BACKUP\n", prefix);
524 if (entry->status & VOS_VLDB_ENTRY_DELETE) {
525 printf("%s\tVOS_VLDB_ENTRY_DELETE\n", prefix);
527 if (entry->status & VOS_VLDB_ENTRY_DUMP) {
528 printf("%s\tVOS_VLDB_ENTRY_DUMP\n", prefix);
530 if (entry->status & VOS_VLDB_ENTRY_LOCKED) {
531 printf("%s\tVOS_VLDB_ENTRY_LOCKED\n", prefix);
533 if (entry->status & VOS_VLDB_ENTRY_RWEXISTS) {
534 printf("%s\tVOS_VLDB_ENTRY_RWEXISTS\n", prefix);
536 if (entry->status & VOS_VLDB_ENTRY_ROEXISTS) {
537 printf("%s\tVOS_VLDB_ENTRY_ROEXISTS\n", prefix);
539 if (entry->status & VOS_VLDB_ENTRY_BACKEXISTS) {
540 printf("%s\tVOS_VLDB_ENTRY_BACKEXISTS\n", prefix);
543 printf("%sVolume location information for replicas:\n", prefix);
544 for(i=0;i<entry->numServers;i++) {
545 printf("%s\tServer %x\n",
547 entry->volumeSites[i].serverAddress);
548 printf("%s\tPartition %x\n",
550 entry->volumeSites[i].serverPartition);
551 if (entry->volumeSites[i].serverFlags & VOS_VLDB_NEW_REPSITE) {
552 printf("%s\tVOS_VLDB_NEW_REPSITE\n", prefix);
554 if (entry->volumeSites[i].serverFlags & VOS_VLDB_READ_ONLY) {
555 printf("%s\tVOS_VLDB_READ_ONLY\n", prefix);
557 if (entry->volumeSites[i].serverFlags & VOS_VLDB_READ_WRITE) {
558 printf("%s\tVOS_VLDB_READ_WRITE\n", prefix);
560 if (entry->volumeSites[i].serverFlags & VOS_VLDB_BACKUP) {
561 printf("%s\tVOS_VLDB_BACKUP\n", prefix);
563 if (entry->volumeSites[i].serverFlags & VOS_VLDB_DONT_USE) {
564 printf("%s\tVOS_VLDB_DONT_USE\n", prefix);
571 DoVosVLDBGet(struct cmd_syndesc *as, char *arock)
573 typedef enum {VOLUME}
576 vos_vldbEntry_t entry;
577 unsigned int volume_id;
578 const char *volume_name = NULL;
580 if (as->parms[VOLUME].items) {
581 const char *volume = as->parms[VOLUME].items->data;
582 volume_id = GetVolumeIdFromString(volume);
586 if (!vos_VLDBGet(cellHandle,
592 ERR_ST_EXT("vos_VLDBGet", st);
595 Print_vos_vldbEntry_p(&entry, "");
601 DoVosVLDBList(struct cmd_syndesc *as, char *arock)
603 typedef enum {SERVER, PARTITION}
604 DoVosVLDBList_parm_t;
606 void *vos_server = NULL;
607 unsigned int partition_id;
608 unsigned int *part_ptr = NULL;
610 vos_vldbEntry_t entry;
613 if (as->parms[SERVER].items) {
614 if (!vos_ServerOpen(cellHandle,
615 as->parms[SERVER].items->data,
618 ERR_ST_EXT("vos_ServerOpen", st);
623 if (as->parms[PARTITION].items) {
625 ERR_EXT("must specify server when specifying partition");
627 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
628 part_ptr = &partition_id;
631 if (!vos_VLDBGetBegin(cellHandle,
637 ERR_ST_EXT("vos_VLDBGetBegin", st);
640 while(vos_VLDBGetNext(iter, &entry, &st)) {
641 Print_vos_vldbEntry_p(&entry, "");
644 if (st != ADMITERATORDONE) {
645 ERR_ST_EXT("vos_VLDBGetNext", st);
648 if (!vos_VLDBGetDone(iter,
650 ERR_ST_EXT("vos_VLDBGetDone", st);
657 DoVosVLDBEntryRemove(struct cmd_syndesc *as, char *arock)
659 typedef enum {SERVER, PARTITION, VOLUME}
660 DoVosVLDBEntryRemove_parm_t;
662 void *vos_server = NULL;
663 unsigned int partition_id;
664 unsigned int *part_ptr = NULL;
666 unsigned int volume_id;
667 unsigned int *vol_ptr = NULL;
669 if (as->parms[SERVER].items) {
670 if (!vos_ServerOpen(cellHandle,
671 as->parms[SERVER].items->data,
674 ERR_ST_EXT("vos_ServerOpen", st);
679 if (as->parms[PARTITION].items) {
681 ERR_EXT("must specify server when specifying partition");
683 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
684 part_ptr = &partition_id;
687 if (as->parms[VOLUME].items) {
688 const char *volume = as->parms[VOLUME].items->data;
689 volume_id = GetVolumeIdFromString(volume);
690 vol_ptr = &volume_id;
693 if (!vos_VLDBEntryRemove(cellHandle,
699 ERR_ST_EXT("vos_VLDBEntryRemove", st);
706 DoVosVLDBUnlock(struct cmd_syndesc *as, char *arock)
708 typedef enum {SERVER, PARTITION}
709 DoVosVLDBUnlock_parm_t;
711 void *vos_server = NULL;
712 unsigned int partition_id;
713 unsigned int *part_ptr = NULL;
716 if (as->parms[SERVER].items) {
717 if (!vos_ServerOpen(cellHandle,
718 as->parms[SERVER].items->data,
721 ERR_ST_EXT("vos_ServerOpen", st);
726 if (as->parms[PARTITION].items) {
728 ERR_EXT("must specify server when specifying partition");
730 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
731 part_ptr = &partition_id;
734 if (!vos_VLDBUnlock(cellHandle,
739 ERR_ST_EXT("vos_VLDBUnlock", st);
746 DoVosVLDBEntryLock(struct cmd_syndesc *as, char *arock)
748 typedef enum {VOLUME}
749 DoVosVLDBEntryLoc_parm_tk;
751 unsigned int volume_id;
753 if (as->parms[VOLUME].items) {
754 const char *volume = as->parms[VOLUME].items->data;
755 volume_id = GetVolumeIdFromString(volume);
758 if (!vos_VLDBEntryLock(cellHandle,
762 ERR_ST_EXT("vos_VLDBEntryLock", st);
769 DoVosVLDBEntryUnlock(struct cmd_syndesc *as, char *arock)
771 typedef enum {VOLUME}
772 DoVosVLDBEntryUnlock_parm_t;
774 unsigned int volume_id;
776 if (as->parms[VOLUME].items) {
777 const char *volume = as->parms[VOLUME].items->data;
778 volume_id = GetVolumeIdFromString(volume);
781 if (!vos_VLDBEntryUnlock(cellHandle,
785 ERR_ST_EXT("vos_VLDBEntryUnlock", st);
792 DoVosVLDBReadOnlySiteCreate(struct cmd_syndesc *as, char *arock)
794 typedef enum {SERVER, PARTITION, VOLUME}
795 DoVosVLDBReadOnlySiteCreate_parm_t;
797 void *vos_server = NULL;
798 unsigned int partition_id;
799 unsigned int volume_id;
801 if (as->parms[SERVER].items) {
802 if (!vos_ServerOpen(cellHandle,
803 as->parms[SERVER].items->data,
806 ERR_ST_EXT("vos_ServerOpen", st);
810 if (as->parms[PARTITION].items) {
811 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
814 if (as->parms[VOLUME].items) {
815 const char *volume = as->parms[VOLUME].items->data;
816 volume_id = GetVolumeIdFromString(volume);
819 if (!vos_VLDBReadOnlySiteCreate(cellHandle,
825 ERR_ST_EXT("vos_VLDBReadOnlySiteCreate", st);
831 DoVosVLDBReadOnlySiteDelete(struct cmd_syndesc *as, char *arock)
833 typedef enum {SERVER, PARTITION, VOLUME}
834 DoVosVLDBReadOnlySiteDelete_parm_t;
836 void *vos_server = NULL;
837 unsigned int partition_id;
838 unsigned int volume_id;
840 if (as->parms[SERVER].items) {
841 if (!vos_ServerOpen(cellHandle,
842 as->parms[SERVER].items->data,
845 ERR_ST_EXT("vos_ServerOpen", st);
849 if (as->parms[PARTITION].items) {
850 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
853 if (as->parms[VOLUME].items) {
854 const char *volume = as->parms[VOLUME].items->data;
855 volume_id = GetVolumeIdFromString(volume);
858 if (!vos_VLDBReadOnlySiteDelete(cellHandle,
864 ERR_ST_EXT("vos_VLDBReadOnlySiteDelete", st);
871 DoVosVLDBSync(struct cmd_syndesc *as, char *arock)
873 typedef enum {SERVER, PARTITION, FORCE}
874 DoVosVLDBSync_parm_t;
876 void *vos_server = NULL;
877 unsigned int partition_id;
878 unsigned int *part_ptr = NULL;
880 vos_force_t force = VOS_NORMAL;
882 if (as->parms[SERVER].items) {
883 if (!vos_ServerOpen(cellHandle,
884 as->parms[SERVER].items->data,
887 ERR_ST_EXT("vos_ServerOpen", st);
892 if (as->parms[PARTITION].items) {
894 ERR_EXT("must specify server when specifying partition");
896 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
897 part_ptr = &partition_id;
900 if (as->parms[FORCE].items) {
904 if (!vos_VLDBSync(cellHandle,
910 ERR_ST_EXT("vos_VLDBSync", st);
917 DoVosVolumeCreate(struct cmd_syndesc *as, char *arock)
919 typedef enum {SERVER, PARTITION, VOLUME, QUOTA}
920 DoVosVolumeCreate_parm_t;
922 void *vos_server = NULL;
923 unsigned int partition_id;
924 unsigned int volume_id;
925 const char *volume = NULL;
928 if (as->parms[SERVER].items) {
929 if (!vos_ServerOpen(cellHandle,
930 as->parms[SERVER].items->data,
933 ERR_ST_EXT("vos_ServerOpen", st);
937 if (as->parms[PARTITION].items) {
938 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
941 if (as->parms[VOLUME].items) {
942 volume = as->parms[VOLUME].items->data;
945 if (as->parms[QUOTA].items) {
946 quota = GetIntFromString(as->parms[QUOTA].items->data,
950 if (!vos_VolumeCreate(cellHandle,
958 ERR_ST_EXT("vos_VolumeCreate", st);
961 printf("Created volume %u\n", volume_id);
967 DoVosVolumeDelete(struct cmd_syndesc *as, char *arock)
969 typedef enum {SERVER, PARTITION, VOLUME}
970 DoVosVolumeDelete_parm_t;
972 void *vos_server = NULL;
973 unsigned int partition_id;
974 unsigned int volume_id;
976 if (as->parms[SERVER].items) {
977 if (!vos_ServerOpen(cellHandle,
978 as->parms[SERVER].items->data,
981 ERR_ST_EXT("vos_ServerOpen", st);
985 if (as->parms[PARTITION].items) {
986 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
989 if (as->parms[VOLUME].items) {
990 const char *volume = as->parms[VOLUME].items->data;
991 volume_id = GetVolumeIdFromString(volume);
994 if (!vos_VolumeDelete(cellHandle,
1000 ERR_ST_EXT("vos_VolumeDelete", st);
1007 DoVosVolumeRename(struct cmd_syndesc *as, char *arock)
1009 typedef enum {OLDVOLUME, NEWVOLUME}
1010 DoVosVolumeRename_parm_t;
1011 afs_status_t st = 0;
1012 unsigned int old_volume;
1013 const char *new_volume;
1015 if (as->parms[OLDVOLUME].items) {
1016 const char *volume = as->parms[OLDVOLUME].items->data;
1017 old_volume = GetVolumeIdFromString(volume);
1020 if (as->parms[NEWVOLUME].items) {
1021 new_volume = as->parms[NEWVOLUME].items->data;
1024 if (!vos_VolumeRename(cellHandle,
1029 ERR_ST_EXT("vos_VolumeRename", st);
1036 DoVosVolumeDump(struct cmd_syndesc *as, char *arock)
1038 typedef enum {SERVER, PARTITION, VOLUME, STARTTIME, DUMPFILE}
1039 DoVosVolumeDump_parm_t;
1040 afs_status_t st = 0;
1041 void *vos_server = NULL;
1042 unsigned int partition_id;
1043 unsigned int *part_ptr = NULL;
1044 int have_server = 0;
1045 unsigned int volume_id;
1046 unsigned int start_time;
1047 const char *dumpfile;
1049 if (as->parms[SERVER].items) {
1050 if (!vos_ServerOpen(cellHandle,
1051 as->parms[SERVER].items->data,
1054 ERR_ST_EXT("vos_ServerOpen", st);
1059 if (as->parms[PARTITION].items) {
1061 ERR_EXT("must specify server when specifying partition");
1063 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1064 part_ptr = &partition_id;
1067 if (as->parms[VOLUME].items) {
1068 const char *volume = as->parms[VOLUME].items->data;
1069 volume_id = GetVolumeIdFromString(volume);
1072 if (as->parms[STARTTIME].items) {
1073 start_time = GetIntFromString(as->parms[STARTTIME].items->data,
1074 "invalid start time");
1077 if (as->parms[DUMPFILE].items) {
1078 dumpfile = as->parms[DUMPFILE].items->data;
1081 if (!vos_VolumeDump(cellHandle,
1089 ERR_ST_EXT("vos_VolumeDump", st);
1096 DoVosVolumeRestore(struct cmd_syndesc *as, char *arock)
1098 typedef enum {SERVER, PARTITION, ID, VOLUME, DUMPFILE, FULL}
1099 DoVosVolumeRestore_parm_t;
1100 afs_status_t st = 0;
1101 void *vos_server = NULL;
1102 unsigned int partition_id;
1103 unsigned int volume_id;
1104 unsigned int *vol_ptr = NULL;
1105 const char *dumpfile;
1106 const char *volume_name;
1107 vos_volumeRestoreType_t restore = VOS_RESTORE_INCREMENTAL;
1109 if (as->parms[SERVER].items) {
1110 if (!vos_ServerOpen(cellHandle,
1111 as->parms[SERVER].items->data,
1114 ERR_ST_EXT("vos_ServerOpen", st);
1118 if (as->parms[PARTITION].items) {
1119 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1122 if (as->parms[VOLUME].items) {
1123 volume_name = as->parms[VOLUME].items->data;
1126 if (as->parms[ID].items) {
1127 const char *volume = as->parms[ID].items->data;
1128 volume_id = GetVolumeIdFromString(volume);
1129 vol_ptr = &volume_id;
1132 if (as->parms[DUMPFILE].items) {
1133 dumpfile = as->parms[DUMPFILE].items->data;
1136 if (as->parms[FULL].items) {
1137 restore = VOS_RESTORE_FULL;
1140 if (!vos_VolumeRestore(cellHandle,
1149 ERR_ST_EXT("vos_VolumeRestore", st);
1156 DoVosVolumeOnline(struct cmd_syndesc *as, char *arock)
1158 typedef enum {SERVER, PARTITION, VOLUME, SLEEP, BUSY}
1159 DoVosVolumeOnline_parm_t;
1160 afs_status_t st = 0;
1161 void *vos_server = NULL;
1162 unsigned int partition_id;
1163 unsigned int volume_id;
1165 vos_volumeOnlineType_t type = VOS_ONLINE_OFFLINE;
1167 if (as->parms[SERVER].items) {
1168 if (!vos_ServerOpen(cellHandle,
1169 as->parms[SERVER].items->data,
1172 ERR_ST_EXT("vos_ServerOpen", st);
1176 if (as->parms[PARTITION].items) {
1177 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1180 if (as->parms[VOLUME].items) {
1181 const char *volume = as->parms[VOLUME].items->data;
1182 volume_id = GetVolumeIdFromString(volume);
1185 if (as->parms[SLEEP].items) {
1186 sleep = GetIntFromString(as->parms[SLEEP].items->data,
1187 "invalid sleep time");
1190 if (as->parms[BUSY].items) {
1191 type = VOS_ONLINE_BUSY;
1194 if (!vos_VolumeOnline(vos_server,
1201 ERR_ST_EXT("vos_VolumeOnline", st);
1208 DoVosVolumeOffline(struct cmd_syndesc *as, char *arock)
1210 typedef enum {SERVER, PARTITION, VOLUME}
1211 DoVosVolumeOffline_parm_t;
1212 afs_status_t st = 0;
1213 void *vos_server = NULL;
1214 unsigned int partition_id;
1215 unsigned int volume_id;
1217 if (as->parms[SERVER].items) {
1218 if (!vos_ServerOpen(cellHandle,
1219 as->parms[SERVER].items->data,
1222 ERR_ST_EXT("vos_ServerOpen", st);
1226 if (as->parms[PARTITION].items) {
1227 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1230 if (as->parms[VOLUME].items) {
1231 const char *volume = as->parms[VOLUME].items->data;
1232 volume_id = GetVolumeIdFromString(volume);
1235 if (!vos_VolumeOffline(vos_server,
1240 ERR_ST_EXT("vos_VolumeOffline", st);
1247 Print_vos_volumeEntry_p(
1248 vos_volumeEntry_p entry, const char *prefix)
1250 if (entry->status == VOS_OK) {
1251 printf("%sVolume name %s id %u\n", prefix, entry->name, entry->id);
1252 printf("%sRead write id %u\n", prefix, entry->readWriteId);
1253 printf("%sRead only id %u\n", prefix, entry->readOnlyId);
1254 printf("%sBackup id %u\n", prefix, entry->backupId);
1255 printf("%sCreation date %lu\n", prefix, entry->creationDate);
1256 printf("%sLast access date %lu\n", prefix, entry->lastAccessDate);
1257 printf("%sLast update date %lu\n", prefix, entry->lastUpdateDate);
1258 printf("%sLast backup date %lu\n", prefix, entry->lastBackupDate);
1259 printf("%sLast copy creation date %lu\n", prefix, entry->copyCreationDate);
1260 printf("%sAccesses since midnight %d\n",
1262 entry->accessesSinceMidnight);
1263 printf("%sFile count %d\n", prefix, entry->fileCount);
1264 printf("%sMax quota %d\n", prefix, entry->maxQuota);
1265 printf("%sCurrent size %d\n", prefix, entry->currentSize);
1267 printf("%sVolume status: VOS_OK\n", prefix);
1269 printf("%sVolume disposition:\n", prefix);
1271 switch(entry->volumeDisposition) {
1273 printf("%s\tVOS_OK\n", prefix);
1276 printf("%s\tVOS_SALVAGE\n", prefix);
1279 printf("%s\tVOS_NO_VNODE\n", prefix);
1282 printf("%s\tVOS_NO_VOL\n", prefix);
1284 case VOS_VOL_EXISTS:
1285 printf("%s\tVOS_VOL_EXISTS\n", prefix);
1287 case VOS_NO_SERVICE:
1288 printf("%s\tVOS_NO_SERVICE\n", prefix);
1291 printf("%s\tVOS_OFFLINE\n", prefix);
1294 printf("%s\tVOS_ONLINE\n", prefix);
1297 printf("%s\tVOS_DISK_FULL\n", prefix);
1299 case VOS_OVER_QUOTA:
1300 printf("%s\tVOS_OVER_QUOTA\n", prefix);
1303 printf("%s\tVOS_BUSY\n", prefix);
1306 printf("%s\tVOS_MOVED\n", prefix);
1309 printf("Unknown volume disposition %d\n", entry->volumeDisposition);
1313 printf("%sVolume type: ", prefix);
1315 if (entry->type == VOS_READ_WRITE_VOLUME) {
1316 printf("read write\n");
1317 } else if (entry->type == VOS_READ_ONLY_VOLUME) {
1318 printf("read only\n");
1323 printf("\n%s\tSame Network\tSame Network Authenticated"
1324 "\tDifferent Network\tDifferent Network Authenticated\n\n",
1326 printf("%sRead\t%d\t%d\t%d\t%d\n",
1328 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK],
1329 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK_AUTHENTICATED],
1330 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK],
1331 entry->readStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK_AUTHENTICATED]);
1332 printf("%sWrite\t%d\t%d\t%d\t%d\n",
1334 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK],
1335 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK_AUTHENTICATED],
1336 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK],
1337 entry->writeStats[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK_AUTHENTICATED]);
1339 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);
1340 printf("%sFile Author Write Same Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1342 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1343 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1344 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1345 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1346 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1347 entry->fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1348 printf("%sFile Author Write Diff Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1350 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1351 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1352 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1353 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1354 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1355 entry->fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1356 printf("%sDir Author Write Same Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1358 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1359 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1360 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1361 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1362 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1363 entry->dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1364 printf("%sDir Author Write Diff Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1366 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS],
1367 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES],
1368 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES],
1369 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS],
1370 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS],
1371 entry->dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS]);
1373 printf("%sUnable to print volume because volume status:\n", prefix);
1374 switch(entry->status) {
1376 printf("%s\tVOS_SALVAGE\n", prefix);
1379 printf("%s\tVOS_NO_VNODE\n", prefix);
1382 printf("%s\tVOS_NO_VOL\n", prefix);
1384 case VOS_VOL_EXISTS:
1385 printf("%s\tVOS_VOL_EXISTS\n", prefix);
1387 case VOS_NO_SERVICE:
1388 printf("%s\tVOS_NO_SERVICE\n", prefix);
1391 printf("%s\tVOS_OFFLINE\n", prefix);
1394 printf("%s\tVOS_ONLINE\n", prefix);
1397 printf("%s\tVOS_DISK_FULL\n", prefix);
1399 case VOS_OVER_QUOTA:
1400 printf("%s\tVOS_OVER_QUOTA\n", prefix);
1403 printf("%s\tVOS_BUSY\n", prefix);
1406 printf("%s\tVOS_MOVED\n", prefix);
1409 printf("Unknown volume status %d\n", entry->status);
1416 DoVosVolumeGet(struct cmd_syndesc *as, char *arock)
1418 typedef enum {SERVER, PARTITION, VOLUME}
1419 DoVosVolumeGet_parm_t;
1420 afs_status_t st = 0;
1421 void *vos_server = NULL;
1422 unsigned int partition_id;
1423 unsigned int volume_id;
1424 vos_volumeEntry_t entry;
1426 if (as->parms[SERVER].items) {
1427 if (!vos_ServerOpen(cellHandle,
1428 as->parms[SERVER].items->data,
1431 ERR_ST_EXT("vos_ServerOpen", st);
1435 if (as->parms[PARTITION].items) {
1436 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1439 if (as->parms[VOLUME].items) {
1440 const char *volume = as->parms[VOLUME].items->data;
1441 volume_id = GetVolumeIdFromString(volume);
1444 if (!vos_VolumeGet(cellHandle,
1451 ERR_ST_EXT("vos_VolumeGet", st);
1454 Print_vos_volumeEntry_p(&entry, "");
1460 DoVosVolumeList(struct cmd_syndesc *as, char *arock)
1462 typedef enum {SERVER, PARTITION}
1463 DoVosVolumeList_parm_t;
1464 afs_status_t st = 0;
1465 void *vos_server = NULL;
1467 unsigned int partition_id;
1468 vos_volumeEntry_t entry;
1470 if (as->parms[SERVER].items) {
1471 if (!vos_ServerOpen(cellHandle,
1472 as->parms[SERVER].items->data,
1475 ERR_ST_EXT("vos_ServerOpen", st);
1479 if (as->parms[PARTITION].items) {
1480 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1483 if (!vos_VolumeGetBegin(cellHandle,
1489 ERR_ST_EXT("vos_VolumeGetBegin", st);
1492 printf("Volumes located at %s partition %s\n",
1493 as->parms[SERVER].items->data,
1494 as->parms[PARTITION].items->data);
1496 while(vos_VolumeGetNext(iter, &entry, &st)) {
1497 Print_vos_volumeEntry_p(&entry, " ");
1501 if (st != ADMITERATORDONE) {
1502 ERR_ST_EXT("vos_VolumeGetNext", st);
1505 if (!vos_VolumeGetDone(iter,
1507 ERR_ST_EXT("vos_VolumeGetDone", st);
1514 DoVosVolumeMove(struct cmd_syndesc *as, char *arock)
1516 typedef enum {VOLUME, FROMSERVER, FROMPARTITION, TOSERVER, TOPARTITION}
1517 DoVosVolumeMove_parm_t;
1518 afs_status_t st = 0;
1519 void *from_server = NULL;
1520 void *to_server = NULL;
1521 unsigned int from_partition;
1522 unsigned int to_partition;
1523 unsigned int volume_id;
1525 if (as->parms[FROMSERVER].items) {
1526 if (!vos_ServerOpen(cellHandle,
1527 as->parms[FROMSERVER].items->data,
1530 ERR_ST_EXT("vos_ServerOpen", st);
1534 if (as->parms[TOSERVER].items) {
1535 if (!vos_ServerOpen(cellHandle,
1536 as->parms[TOSERVER].items->data,
1539 ERR_ST_EXT("vos_ServerOpen", st);
1543 if (as->parms[FROMPARTITION].items) {
1544 from_partition = GetPartitionIdFromString(as->parms[FROMPARTITION].items->data);
1547 if (as->parms[TOPARTITION].items) {
1548 to_partition = GetPartitionIdFromString(as->parms[TOPARTITION].items->data);
1551 if (as->parms[VOLUME].items) {
1552 const char *volume = as->parms[VOLUME].items->data;
1553 volume_id = GetVolumeIdFromString(volume);
1556 if (!vos_VolumeMove(cellHandle,
1564 ERR_ST_EXT("vos_VolumeMove", st);
1571 DoVosVolumeRelease(struct cmd_syndesc *as, char *arock)
1573 typedef enum {VOLUME, FORCE}
1574 DoVosVolumeRelease_parm_t;
1575 afs_status_t st = 0;
1576 unsigned int volume_id;
1577 vos_force_t force = VOS_NORMAL;
1579 if (as->parms[VOLUME].items) {
1580 const char *volume = as->parms[VOLUME].items->data;
1581 volume_id = GetVolumeIdFromString(volume);
1584 if (as->parms[FORCE].items) {
1588 if (!vos_VolumeRelease(cellHandle,
1593 ERR_ST_EXT("vos_VolumeRelease", st);
1599 DoVosVolumeZap(struct cmd_syndesc *as, char *arock)
1601 typedef enum {SERVER, PARTITION, VOLUME, FORCE}
1602 DoVosVolumeZap_parm_t;
1603 afs_status_t st = 0;
1604 void *vos_server = NULL;
1605 unsigned int partition_id;
1606 unsigned int volume_id;
1607 vos_force_t force = VOS_NORMAL;
1609 if (as->parms[SERVER].items) {
1610 if (!vos_ServerOpen(cellHandle,
1611 as->parms[SERVER].items->data,
1614 ERR_ST_EXT("vos_ServerOpen", st);
1618 if (as->parms[PARTITION].items) {
1619 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1622 if (as->parms[VOLUME].items) {
1623 const char *volume = as->parms[VOLUME].items->data;
1624 volume_id = GetVolumeIdFromString(volume);
1627 if (as->parms[FORCE].items) {
1631 if (!vos_VolumeZap(cellHandle,
1638 ERR_ST_EXT("vos_VolumeZap", st);
1645 DoVosPartitionNameToId(struct cmd_syndesc *as, char *arock)
1647 typedef enum {PARTITION}
1648 DoVosPartitionNameToId_parm_t;
1649 afs_status_t st = 0;
1650 unsigned int partition_id;
1652 if (as->parms[PARTITION].items) {
1653 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1656 printf("The id for partition %s is %u\n",
1657 as->parms[PARTITION].items->data,
1664 DoVosPartitionIdToName(struct cmd_syndesc *as, char *arock)
1666 typedef enum {PARTITIONID}
1667 DoVosPartitionIdToName_parm_t;
1668 afs_status_t st = 0;
1669 unsigned int partition_id;
1670 char partition[VOS_MAX_PARTITION_NAME_LEN];
1672 if (as->parms[PARTITIONID].items) {
1673 partition_id = GetIntFromString(as->parms[PARTITIONID].items->data,
1674 "bad partition id");
1677 if (!vos_PartitionIdToName(partition_id, partition, &st)) {
1678 ERR_ST_EXT("bad partition id", st);
1681 printf("The partition for id %u is %s\n",
1689 DoVosVolumeQuotaChange(struct cmd_syndesc *as, char *arock)
1691 typedef enum {SERVER, PARTITION, VOLUME, QUOTA}
1692 DoVosVolumeQuotaChange_parm_t;
1693 afs_status_t st = 0;
1694 void *vos_server = NULL;
1695 unsigned int partition_id;
1696 unsigned int volume_id;
1699 if (as->parms[SERVER].items) {
1700 if (!vos_ServerOpen(cellHandle,
1701 as->parms[SERVER].items->data,
1704 ERR_ST_EXT("vos_ServerOpen", st);
1708 if (as->parms[PARTITION].items) {
1709 partition_id = GetPartitionIdFromString(as->parms[PARTITION].items->data);
1712 if (as->parms[VOLUME].items) {
1713 const char *volume = as->parms[VOLUME].items->data;
1714 volume_id = GetVolumeIdFromString(volume);
1717 if (as->parms[QUOTA].items) {
1718 quota = GetIntFromString(as->parms[QUOTA].items->data,
1722 if (!vos_VolumeQuotaChange(cellHandle,
1729 ERR_ST_EXT("vos_VolumeQuotaChange", st);
1736 SetupVosAdminCmd(void)
1738 struct cmd_syndesc *ts;
1740 ts = cmd_CreateSyntax("VosBackupVolumeCreate",
1741 DoVosBackupVolumeCreate, 0,
1742 "create a backup volume");
1747 "volume to back up");
1748 SetupCommonCmdArgs(ts);
1750 ts = cmd_CreateSyntax("VosBackupVolumeCreateMultiple",
1751 DoVosBackupVolumeCreateMultiple,
1753 "create a backup volume");
1758 "server housing volumes to back up");
1763 "partition housing volumes to back up");
1768 "common prefix of volumes to back up");
1773 "exclude volumes from backup that match prefix");
1774 SetupCommonCmdArgs(ts);
1776 ts = cmd_CreateSyntax("VosPartitionGet",
1779 "get information about a partition");
1784 "server housing partition of interest");
1789 "partition to query");
1790 SetupCommonCmdArgs(ts);
1792 ts = cmd_CreateSyntax("VosPartitionList",
1795 "list information about all partitions at a server");
1800 "server housing partitions of interest");
1801 SetupCommonCmdArgs(ts);
1803 ts = cmd_CreateSyntax("VosServerSync",
1806 "sync server with vldb");
1816 "partition to sync");
1817 SetupCommonCmdArgs(ts);
1819 ts = cmd_CreateSyntax("VosFileServerAddressChange",
1820 DoVosFileServerAddressChange,
1822 "change a server's address in the vldb");
1827 "old address to change");
1833 SetupCommonCmdArgs(ts);
1835 ts = cmd_CreateSyntax("VosFileServerAddressRemove",
1836 DoVosFileServerAddressRemove,
1838 "remove a server's address from the vldb");
1843 "address to remove");
1844 SetupCommonCmdArgs(ts);
1846 ts = cmd_CreateSyntax("VosFileServerList",
1847 DoVosFileServerList,
1849 "list the file servers in a cell");
1850 SetupCommonCmdArgs(ts);
1852 ts = cmd_CreateSyntax("VosServerTransactionStatusList",
1853 DoVosServerTransactionStatusList,
1855 "list the active transactions at a server");
1861 SetupCommonCmdArgs(ts);
1863 ts = cmd_CreateSyntax("VosVLDBGet",
1866 "get a vldb entry for a volume");
1871 "volume to retrieve");
1872 SetupCommonCmdArgs(ts);
1874 ts = cmd_CreateSyntax("VosVLDBList",
1877 "list a group of vldb entries");
1882 "limit entries to a particular server");
1887 "limit entries to a particular partition");
1888 SetupCommonCmdArgs(ts);
1890 ts = cmd_CreateSyntax("VosVLDBEntryRemove",
1891 DoVosVLDBEntryRemove,
1893 "remove vldb entries");
1898 "limit entries to a particular server");
1903 "limit entries to a particular partition");
1908 "volume to remove");
1909 SetupCommonCmdArgs(ts);
1911 ts = cmd_CreateSyntax("VosVLDBUnlock",
1914 "unlock a group of vldb entries");
1919 "limit entries to a particular server");
1924 "limit entries to a particular partition");
1925 SetupCommonCmdArgs(ts);
1927 ts = cmd_CreateSyntax("VosVLDBEntryLock",
1930 "lock a single vldb entry");
1936 SetupCommonCmdArgs(ts);
1938 ts = cmd_CreateSyntax("VosVLDBEntryUnlock",
1939 DoVosVLDBEntryUnlock,
1941 "unlock a single vldb entry");
1946 "volume to unlock");
1947 SetupCommonCmdArgs(ts);
1949 ts = cmd_CreateSyntax("VosVLDBReadOnlySiteCreate",
1950 DoVosVLDBReadOnlySiteCreate,
1952 "create a read only site");
1957 "server where read only will be created");
1962 "partition where read only will be created");
1967 "volume to replicate");
1968 SetupCommonCmdArgs(ts);
1970 ts = cmd_CreateSyntax("VosVLDBReadOnlySiteDelete",
1971 DoVosVLDBReadOnlySiteDelete,
1973 "delete a read only site before initial replication");
1978 "server where read only will be deleted");
1983 "partition where read only will be deleted");
1988 "volume to delete");
1989 SetupCommonCmdArgs(ts);
1991 ts = cmd_CreateSyntax("VosVLDBSync",
1994 "sync vldb with server");
2004 "limit sync to a particular partition");
2009 "force sync to occur");
2010 SetupCommonCmdArgs(ts);
2012 ts = cmd_CreateSyntax("VosVolumeCreate",
2015 "create a read write volume");
2020 "server where volume will be created");
2025 "partition where volume will be created");
2030 "name of new volume");
2035 "size quota of new volume in 1kb units");
2036 SetupCommonCmdArgs(ts);
2038 ts = cmd_CreateSyntax("VosVolumeDelete",
2046 "server where volume exists");
2051 "partition where volume exists");
2056 "volume to delete");
2057 SetupCommonCmdArgs(ts);
2059 ts = cmd_CreateSyntax("VosVolumeRename",
2073 SetupCommonCmdArgs(ts);
2075 ts = cmd_CreateSyntax("VosVolumeDump",
2078 "dump a volume to a file");
2083 "dump volume at a particular server");
2088 "dump volume at a particular partition");
2098 "files modified after this time will be dumped");
2103 "file to contain dump results");
2104 SetupCommonCmdArgs(ts);
2106 ts = cmd_CreateSyntax("VosVolumeRestore",
2109 "restore a volume from a dumpfile");
2114 "server that houses volume to restore");
2119 "partition that houses volume to restore");
2124 "id of volume restored");
2129 "name of volume restored");
2134 "file contained dump of volume");
2139 "does a full restore of volume");
2140 SetupCommonCmdArgs(ts);
2142 ts = cmd_CreateSyntax("VosVolumeOnline",
2145 "bring a volume online");
2150 "server that houses volume");
2155 "partition that houses volume");
2160 "volume to bring online");
2165 "seconds to sleep");
2170 "mark volume busy");
2171 SetupCommonCmdArgs(ts);
2173 ts = cmd_CreateSyntax("VosVolumeOffline",
2176 "take a volume offline");
2181 "server that houses volume");
2186 "partition that houses volume");
2191 "volume to bring offline");
2192 SetupCommonCmdArgs(ts);
2194 ts = cmd_CreateSyntax("VosVolumeGet",
2197 "get a volume entry");
2202 "server that houses volume");
2207 "partition that houses volume");
2212 "volume to retrieve");
2213 SetupCommonCmdArgs(ts);
2215 ts = cmd_CreateSyntax("VosVolumeList",
2218 "list a group of volumes");
2223 "limit volumes to a particular server");
2228 "limit volumes to a particular partition");
2229 SetupCommonCmdArgs(ts);
2231 ts = cmd_CreateSyntax("VosVolumeMove",
2249 "source partition");
2254 "destination server");
2259 "destination partition");
2260 SetupCommonCmdArgs(ts);
2262 ts = cmd_CreateSyntax("VosVolumeRelease",
2265 "release updates to read only");
2270 "volume to replicate");
2275 "force release to occur");
2276 SetupCommonCmdArgs(ts);
2278 ts = cmd_CreateSyntax("VosVolumeZap",
2286 "server that houses the volume to zap");
2291 "partition that houses the volume to zap");
2302 SetupCommonCmdArgs(ts);
2304 ts = cmd_CreateSyntax("VosPartitionNameToId",
2305 DoVosPartitionNameToId,
2307 "convert a partition name to a number");
2312 "partition to convert");
2313 SetupCommonCmdArgs(ts);
2315 ts = cmd_CreateSyntax("VosPartitionIdToName",
2316 DoVosPartitionIdToName,
2318 "convert a number to a partition");
2323 "number to convert");
2324 SetupCommonCmdArgs(ts);
2326 ts = cmd_CreateSyntax("VosVolumeQuotaChange",
2327 DoVosVolumeQuotaChange,
2329 "change the quota for a partition");
2334 "server that houses the volume");
2339 "partition that houses the volume");
2344 "volume to change");
2349 "new quota in 1kb units");
2350 SetupCommonCmdArgs(ts);