vos: vos release -force-reclone option
[openafs.git] / src / volser / volser.p.h
index 620db3b..899c824 100644 (file)
@@ -1,14 +1,21 @@
 /*
- * (C) COPYRIGHT IBM CORPORATION 1988
- * LICENSED MATERIALS - PROPERTY OF IBM
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
+ *
+ * This software has been released under the terms of the IBM Public
+ * License.  For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
  */
 
-/*===============================================================
- * Copyright (C) 1989 Transarc Corporation - All rights reserved 
- *===============================================================*/
-
 #ifndef _VOLSER_
 #define _VOLSER_ 1
+
+#ifdef AFS_PTHREAD_ENV
+#include <pthread.h>
+#endif
+
+#include <afs/voldefs.h>
+
 /* vflags, representing state of the volume */
 #define        VTDeleteOnSalvage       1       /* delete on next salvage */
 #define        VTOutOfService          2       /* never put this volume online */
@@ -17,7 +24,7 @@
 /* iflags, representing "attach mode" for this volume at the start of this transaction */
 #define        ITOffline       1       /* volume offline on server (returns VOFFLINE) */
 #define        ITBusy          2       /* volume busy on server (returns VBUSY) */
-#define        ITReadOnly      8       /* volume readonly on client, readwrite on server -DO NOT USE*/
+#define        ITReadOnly      8       /* volume readonly on client, readwrite on server -DO NOT USE */
 #define        ITCreate        0x10    /* volume does not exist correctly yet */
 #define        ITCreateVolID   0x1000  /* create volid */
 
 #define volser_RW      0
 #define volser_RO      1
 #define        volser_BACK     2
+#define        volser_RWREPL   3
 
 #define        THOLD(tt)       ((tt)->refCount++)
 
 struct volser_trans {
-    struct volser_trans        *next;  /* next ptr in active trans list */
-    afs_int32 tid;                 /* transaction id */
-    afs_int32 time;                /* time transaction was last active (for timeouts) */
-    afs_int32 creationTime;        /* time the transaction started */
-    afs_int32 returnCode;          /* transaction error code */
-    struct Volume *volume;  /* pointer to open volume */
-    afs_int32 volid;               /* open volume's id */
-    afs_int32 partition;           /* open volume's partition */
-    afs_int32 dumpTransId;         /* other side's trans id during a dump */
-    afs_int32 dumpSeq;     /* next sequence number to use during a dump */
-    short refCount;        /* reference count on this structure */
-    short iflags;          /* initial attach mode flags (IT*) */
-    char vflags;           /* current volume status flags (VT*) */
-    char tflags;           /* transaction flags (TT*) */
-    char incremental;      /* do an incremental restore */
+    struct volser_trans *next; /* next ptr in active trans list */
+    afs_int32 tid;             /* transaction id */
+    afs_int32 time;            /* time transaction was last active (for timeouts) */
+    afs_int32 creationTime;    /* time the transaction started */
+    afs_int32 returnCode;      /* transaction error code */
+    struct Volume *volume;     /* pointer to open volume */
+    VolumeId volid;            /* open volume's id */
+    afs_int32 partition;       /* open volume's partition */
+    afs_int32 dumpTransId;     /* other side's trans id during a dump */
+    afs_int32 dumpSeq;         /* next sequence number to use during a dump */
+    short refCount;            /* reference count on this structure */
+    short iflags;              /* initial attach mode flags (IT*) */
+    char vflags;               /* current volume status flags (VT*) */
+    char tflags;               /* transaction flags (TT*) */
+    char incremental;          /* do an incremental restore */
     /* the fields below are useful for debugging */
-    char lastProcName[30];  /* name of the last procedure which used transaction */
-    struct rx_call *rxCallPtr; /* pointer to latest associated rx_call */
-    
+    char lastProcName[30];     /* name of the last procedure which used transaction */
+    struct rx_call *rxCallPtr; /* pointer to latest associated rx_call */
+#ifdef AFS_PTHREAD_ENV
+    pthread_mutex_t lock;       /* per transaction lock */
+#endif
+
 };
 
-/* This is how often the garbage collection thread wakes up and 
+/* This is how often the garbage collection thread wakes up and
  * checks for transactions that have timed out: BKGLoop()
  */
 #define GCWAKEUP            30
 
-struct volser_dest {
-    afs_int32 destHost;
-    afs_int32 destPort;
-    afs_int32 destSSID;
-};
+#ifdef AFS_PTHREAD_ENV
+#define VTRANS_OBJ_LOCK_INIT(tt) \
+  opr_mutex_init(&((tt)->lock));
+#define VTRANS_OBJ_LOCK_DESTROY(tt) \
+  opr_mutex_destroy(&((tt)->lock))
+#define VTRANS_OBJ_LOCK(tt) \
+  opr_mutex_enter(&((tt)->lock))
+#define VTRANS_OBJ_UNLOCK(tt) \
+  opr_mutex_exit(&((tt)->lock))
+#else
+#define VTRANS_OBJ_LOCK_INIT(tt)
+#define VTRANS_OBJ_LOCK_DESTROY(tt)
+#define VTRANS_OBJ_LOCK(tt)
+#define VTRANS_OBJ_UNLOCK(tt)
+#endif /* AFS_PTHREAD_ENV */
 
 #define        MAXHELPERS          10
 /* flags for vol helper busyFlags array.  First, VHIdle goes on when a server
@@ -70,8 +91,8 @@ struct volser_dest {
  * trans is queued.  Finally, VHRequest goes off (but VHIdle stays off) when
  * helper is done.  VHIdle goes on again when an lwp waits for work.
  */
-#define        VHIdle              1       /* vol helper is waiting for a request here */
-#define        VHRequest           2       /* a request has been queued here */
+#define        VHIdle              1   /* vol helper is waiting for a request here */
+#define        VHRequest           2   /* a request has been queued here */
 extern struct volser_trans *QI_GlobalWriteTrans;
 
 /* the stuff below is from errors.h in vol directory */
@@ -79,43 +100,40 @@ extern struct volser_trans *QI_GlobalWriteTrans;
 
 #define VSALVAGE       101     /* Volume needs salvage */
 #define VNOVNODE       102     /* Bad vnode number quoted */
-#define VNOVOL         103     /* Volume not attached, doesn't exist, 
-                                  not created or not online */
+#define VNOVOL         103     /* Volume not attached, doesn't exist,
+                                * not created or not online */
 #define VVOLEXISTS     104     /* Volume already exists */
 #define VNOSERVICE     105     /* Volume is not in service (i.e. it's
-                                  is out of funds, is obsolete, or somesuch) */
+                                * is out of funds, is obsolete, or somesuch) */
 #define VOFFLINE       106     /* Volume is off line, for the reason
-                                  given in the offline message */
+                                * given in the offline message */
 #define VONLINE                107     /* Volume is already on line */
 #define VDISKFULL      108     /* Partition is "full", i.e. rougly within
-                                  n% of full */
+                                * n% of full */
 #define VOVERQUOTA     109     /* Volume max quota exceeded */
 #define VBUSY          110     /* Volume temporarily unavailable; try again.
-                                  The volume should be available again shortly; if
-                                  it isn't something is wrong.  Not normally to be
-                                  propagated to the application level */
+                                * The volume should be available again shortly; if
+                                * it isn't something is wrong.  Not normally to be
+                                * propagated to the application level */
 #define VMOVED         111     /* Volume has moved to another server; do a VGetVolumeInfo
-                                  to THIS server to find out where */
+                                * to THIS server to find out where */
 
-#define MyPort 5003
-#define NameLen 80
 #define VLDB_MAXSERVERS 10
 #define VOLSERVICE_ID 4
 #define INVALID_BID 0
 #define VOLSER_MAXVOLNAME 65
 #define VOLSER_OLDMAXVOLNAME 32
-#define        VOLMAXPARTS     255
 
 /*flags used for interfacing with the  backup system */
-struct volDescription {    /*used for interfacing with the backup system */
-    char volName[VOLSER_MAXVOLNAME];/* should be VNAMESIZE as defined in volume.h*/
-    afs_int32 volId;
+struct volDescription {                /*used for interfacing with the backup system */
+    char volName[VOLSER_MAXVOLNAME];   /* should be VNAMESIZE as defined in volume.h */
+    afs_uint32 volId;
     int volSize;
     afs_int32 volFlags;
-    afs_int32 volCloneId;
+    afs_uint32 volCloneId;
 };
 
-struct partList {   /*used by the backup system */
+struct partList {              /*used by the backup system */
     afs_int32 partId[VOLMAXPARTS];
     afs_int32 partFlags[VOLMAXPARTS];
 };
@@ -135,10 +153,11 @@ struct partList {   /*used by the backup system */
 #define ITSROVOL    0x02
 #define ITSRWVOL    0x04
 #define ITSBACKVOL  0x08
+#define ITSRWREPL   0x10
 #define RO_DONTUSE  0x20
 
-#define VLOP_RESTORE 0x100/*this is bogus, clashes with VLOP_DUMP */
-#define VLOP_ADDSITE 0x80 /*this is bogus, clashes with VLOP_DELETE*/
+#define VLOP_RESTORE 0x100     /*this is bogus, clashes with VLOP_DUMP */
+#define VLOP_ADDSITE 0x80      /*this is bogus, clashes with VLOP_DELETE */
 #define PARTVALID 0x01
 #define CLONEVALID 0x02
 #define CLONEZAPPED 0x04
@@ -147,17 +166,36 @@ struct partList {   /*used by the backup system */
 #define SIZEVALID 0x20
 #define ENTRYVALID 0x40
 #define REUSECLONEID 0x80
-#define        VOK 0x02 
+#define        VOK 0x02
 
 /* Values for the UV_RestoreVolume flags parameter */
-#define RV_FULLRST 0x1
-#define RV_OFFLINE 0x2
-
+/* Also used for UV_CopyVolume and UV_CloneVolume */
+#define RV_FULLRST     0x000001
+#define RV_OFFLINE     0x000002
+#define RV_CRDUMP      0x000010
+#define RV_CRKEEP      0x000020
+#define RV_CRNEW       0x000040
+#define RV_LUDUMP      0x000100
+#define RV_LUKEEP      0x000200
+#define RV_LUNEW       0x000400
+#define RV_RDONLY      0x010000
+#define RV_CPINCR      0x020000
+#define RV_NOVLDB      0x040000
+#define RV_NOCLONE     0x080000
+#define RV_NODEL        0x100000
+#define RV_RWONLY      0x200000
+
+/* Values for the UV_ReleaseVolume flags parameters */
+#define REL_COMPLETE    0x000001  /* force a complete release */
+#define REL_FULLDUMPS   0x000002  /* force full dumps */
+#define REL_STAYUP      0x000004  /* dump to clones to avoid offline time */
+
+struct ubik_client;
+extern afs_uint32 vsu_GetVolumeID(char *astring, struct ubik_client *acstruct, afs_int32 *errp);
+extern int vsu_ExtractName(char rname[], char name[]);
+extern afs_int32 vsu_ClientInit(const char *confDir, char *cellName,
+                               int secFlags,
+                               int (*secproc)(struct rx_securityClass *,
+                                              afs_int32),
+                               struct ubik_client **uclientp);
 #endif /* _VOLSER_ */
-
-
-
-
-
-
-