Coda Distributed File System
venusrecov.h
Go to the documentation of this file.
1/* BLURB gpl
2
3 Coda File System
4 Release 8
5
6 Copyright (c) 1987-2021 Carnegie Mellon University
7 Additional copyrights listed below
8
9This code is distributed "AS IS" without warranty of any kind under
10the terms of the GNU General Public Licence Version 2, as shown in the
11file LICENSE. The technical and financial contributors to Coda are
12listed in the file CREDITS.
13
14 Additional copyrights
15 none currently
16
17#*/
18
19/*
20 *
21 * Specification of the Venus Recoverable Storage manager.
22 *
23 */
24
25#ifndef _VENUS_RECOV_H_
26#define _VENUS_RECOV_H_ 1
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#include <stdio.h>
33#include <rpc2/rpc2.h>
34#include <rvmlib.h>
35
36#ifdef __cplusplus
37}
38#endif
39
40/* from venus */
41#include "venus.private.h"
42
43/* Forward declarations. */
45class fsdb;
46class vdb;
47class RealmDB;
48class hdb;
49
50/* ***** Constants ***** */
51
52const int UNSET_IMD = 0; /* do not initialize meta data */
53#define DFLT_RVMT UFS /* meta data store type */
54const unsigned long DFLT_VDDS = 0x400000; /* Venus meta-data device size */
55const unsigned long UNSET_VDDS = (unsigned long)-1;
56const unsigned long MIN_VDDS = 0x080000;
57const int DataToLogSizeRatio = 4;
58const unsigned long DFLT_VLDS =
59 DFLT_VDDS / DataToLogSizeRatio; /* Venus log device size */
60const unsigned long UNSET_VLDS = (unsigned long)-1;
61const unsigned long MIN_VLDS = MIN_VDDS / DataToLogSizeRatio;
62const int DFLT_RDSCS = 64; /* RDS chunk size */
63const int UNSET_RDSCS = -1;
64const int DFLT_RDSNL = 16; /* RDS nlists */
65const int UNSET_RDSNL = -1;
66const int DFLT_CMFP = 600; /* Connected-Mode Flush Period */
67const int UNSET_CMFP = -1;
68const int DFLT_DMFP = 30; /* Disconnected-Mode Flush Period */
69const int UNSET_DMFP = -1;
70const int DFLT_MAXFP = 3600; /* Maximum Flush Period */
71const int UNSET_MAXFP = -1;
72const int DFLT_WITT = 60; /* Worker-Idle time threshold */
73const int UNSET_WITT = -1;
74const unsigned long DFLT_MAXFS = 64 * 1024; /* Maximum Flush-Buffer Size */
75const unsigned long UNSET_MAXFS = (unsigned long)-1;
76const unsigned long DFLT_MAXTS = 256 * 1024; /* Maximum Truncate Size */
77const unsigned long UNSET_MAXTS = (unsigned long)-1;
78
79const int RecovMagicNumber = 0x8675309;
80const int RecovVersionNumber = 41; /* Update this when format changes. */
81
82/* ***** Types ***** */
83/* local-repair modification */
85 int recov_MagicNumber; /* Sanity check */
87 time_t recov_LastInit; /* last initialization time */
88
90
91 fsdb *recov_FSDB; /* FSO database */
92 vdb *recov_VDB; /* Volume database */
93 RealmDB *recov_REALMDB; /* Realm database */
94 hdb *recov_HDB; /* Hoard database */
95
96 char *recov_HeapAddr; /* Base of recoverable heap */
97 unsigned int recov_HeapLength; /* Length of recoverable heap (in bytes) */
98
99 /* We need to have a identifier that is guaranteed to be identical across
100 * crashes and reboots, but unique with respect to all other venii (that
101 * do stores to the same server/volume), _and_ venus reinitializations. So
102 * we cannot use a timestamp, or the local ip/ether-address. This calls
103 * for a UUID, but using that will require modifications to the RPC2
104 * protocol. So for now a random integer is used. */
105#define VenusGenID (rvg->recov_UUID.fields.time_low)
106
107 /* This UUID should be stored in network byte order.
108 * "draft-leach-uuids-guids-01.txt". */
109 union {
110 unsigned char bytes[16];
111 struct {
112 unsigned int time_low;
113 unsigned short time_mid;
114 unsigned short time_hi_version;
115 unsigned char clock_seq_hi_variant;
116 unsigned char clock_seq_low;
117 unsigned char node[6];
120 unsigned int recov_StoreId;
121
122 int validate();
123 void print();
124 void print(FILE *);
125 void print(int);
126};
127
128/* ***** Variables ***** */
129
130extern int RecovInited;
131extern RecovVenusGlobals *rvg;
132extern int TransCount;
133extern float TransElapsed;
134extern int RecovTimeToFlush;
135extern int MapPrivate;
136
138extern rvm_type_t RvmType;
139extern const char *VenusLogDevice;
140extern unsigned long VenusLogDeviceSize;
141extern const char *VenusDataDevice;
142extern unsigned long VenusDataDeviceSize;
143extern int RdsChunkSize;
144extern int RdsNlists;
145extern int CMFP;
146extern int DMFP;
147extern int WITT;
148extern int MAXFP;
149extern unsigned long MAXFS;
150extern unsigned long MAXTS;
151
152/* ***** Functions ***** */
153
154#define Recov_BeginTrans() _Recov_BeginTrans(__FILE__, __LINE__)
155void _Recov_BeginTrans(const char file[], int line) BEGINS_TRANSACTION;
157void Recov_SetBound(int);
159void RecovFlush(int = 0); /* XXX - parameter is now redundant! */
160void RecovTruncate(int = 0); /* XXX - parameter is now redundant! */
161void RecovTerminate();
162void RecovPrint(int);
165void RECOVD_Init(void);
167
169
170#define VALID_REC_PTR(rec_ptr) \
171 ((char *)(rec_ptr) >= rvg->recov_HeapAddr && \
172 (char *)(rec_ptr) < rvg->recov_HeapAddr + rvg->recov_HeapLength)
173
174#endif /* _VENUS_RECOV_H_ */
Definition: realmdb.h:32
Definition: fso.h:121
Definition: venusvol.h:479
#define REQUIRES_TRANSACTION
Definition: coda_tsa.h:107
#define ENDS_TRANSACTION
Definition: coda_tsa.h:106
#define BEGINS_TRANSACTION
Definition: coda_tsa.h:105
#define EXCLUDES_TRANSACTION
Definition: coda_tsa.h:108
FILE * file
Definition: dirtest.c:723
ViceStoreId sid
Definition: objlist.h:65
RPC2_ByteSeq RPC2_String
Definition: rpc2.h:312
rvm_type_t
Definition: rvmlib.h:52
Definition: venusrecov.h:84
vdb * recov_VDB
Definition: venusrecov.h:92
int validate()
Definition: venusrecov.cc:153
char * recov_HeapAddr
Definition: venusrecov.h:96
unsigned short time_hi_version
Definition: venusrecov.h:114
unsigned int time_low
Definition: venusrecov.h:112
hdb * recov_HDB
Definition: venusrecov.h:94
unsigned char clock_seq_hi_variant
Definition: venusrecov.h:115
unsigned char bytes[16]
Definition: venusrecov.h:110
unsigned char clock_seq_low
Definition: venusrecov.h:116
unsigned char node[6]
Definition: venusrecov.h:117
unsigned int recov_HeapLength
Definition: venusrecov.h:97
fsdb * recov_FSDB
Definition: venusrecov.h:91
void print()
Definition: venusrecov.cc:175
RealmDB * recov_REALMDB
Definition: venusrecov.h:93
int recov_MagicNumber
Definition: venusrecov.h:85
int recov_CleanShutDown
Definition: venusrecov.h:89
unsigned int recov_StoreId
Definition: venusrecov.h:120
unsigned short time_mid
Definition: venusrecov.h:113
time_t recov_LastInit
Definition: venusrecov.h:87
struct RecovVenusGlobals::@3::@4 fields
int recov_VersionNumber
Definition: venusrecov.h:86
union RecovVenusGlobals::@3 recov_UUID
int DMFP
Definition: venusrecov.cc:87
void RecovDaemon(void) EXCLUDES_TRANSACTION
Definition: venusrecov.cc:781
const unsigned long MIN_VLDS
Definition: venusrecov.h:61
const int DFLT_CMFP
Definition: venusrecov.h:66
const int RecovMagicNumber
Definition: venusrecov.h:79
const unsigned long UNSET_VLDS
Definition: venusrecov.h:60
const unsigned long UNSET_MAXTS
Definition: venusrecov.h:77
const int UNSET_RDSCS
Definition: venusrecov.h:63
int InitMetaData
Definition: venusrecov.cc:79
const int UNSET_IMD
Definition: venusrecov.h:52
int RecovTimeToFlush
void RecovPrint(int)
Definition: venusrecov.cc:712
const int UNSET_MAXFP
Definition: venusrecov.h:71
void RecovTruncate(int=0)
Definition: venusrecov.cc:630
unsigned long VenusDataDeviceSize
Definition: venusrecov.cc:83
RecovVenusGlobals * rvg
Definition: venusrecov.cc:74
const unsigned long DFLT_MAXFS
Definition: venusrecov.h:74
int WITT
Definition: venusrecov.cc:89
int RdsChunkSize
Definition: venusrecov.cc:84
void RECOVD_Init(void)
Definition: venusrecov.cc:775
int RecovInited
Definition: venusrecov.cc:73
int InitNewInstance
Definition: venusrecov.h:137
float TransElapsed
Definition: venusrecov.cc:76
const unsigned long DFLT_VLDS
Definition: venusrecov.h:58
const int UNSET_WITT
Definition: venusrecov.h:73
void Recov_GenerateStoreId(ViceStoreId *sid) REQUIRES_TRANSACTION
Definition: venusrecov.cc:817
const int DFLT_MAXFP
Definition: venusrecov.h:70
const unsigned long UNSET_VDDS
Definition: venusrecov.h:55
const unsigned long DFLT_VDDS
Definition: venusrecov.h:54
void Free_RPC2_String(RPC2_String &) REQUIRES_TRANSACTION
Definition: venusrecov.cc:762
int CMFP
Definition: venusrecov.cc:86
const int DFLT_DMFP
Definition: venusrecov.h:68
void Recov_SetBound(int)
Definition: venusrecov.cc:583
const int DFLT_RDSNL
Definition: venusrecov.h:64
unsigned long MAXFS
Definition: venusrecov.cc:90
void Recov_EndTrans(int) ENDS_TRANSACTION
Definition: venusrecov.cc:576
const unsigned long DFLT_MAXTS
Definition: venusrecov.h:76
void RecovFlush(int=0)
Definition: venusrecov.cc:599
const int UNSET_DMFP
Definition: venusrecov.h:69
void RecovTerminate()
Definition: venusrecov.cc:660
rvm_type_t RvmType
Definition: rvmlib.c:34
void _Recov_BeginTrans(const char file[], int line) BEGINS_TRANSACTION
Definition: venusrecov.cc:571
const int RecovVersionNumber
Definition: venusrecov.h:80
const int UNSET_CMFP
Definition: venusrecov.h:67
const unsigned long MIN_VDDS
Definition: venusrecov.h:56
int TransCount
Definition: venusrecov.cc:75
const char * VenusDataDevice
Definition: venusrecov.cc:82
const unsigned long UNSET_MAXFS
Definition: venusrecov.h:75
void RecovInit() EXCLUDES_TRANSACTION
Definition: venusrecov.cc:227
unsigned long VenusLogDeviceSize
Definition: venusrecov.cc:81
unsigned long MAXTS
Definition: venusrecov.cc:91
int MapPrivate
Definition: venusrecov.cc:77
RPC2_String Copy_RPC2_String(RPC2_String &) REQUIRES_TRANSACTION
Definition: venusrecov.cc:751
const int DFLT_RDSCS
Definition: venusrecov.h:62
int MAXFP
Definition: venusrecov.cc:88
const int DFLT_WITT
Definition: venusrecov.h:72
const char * VenusLogDevice
Definition: venusrecov.cc:80
int RdsNlists
Definition: venusrecov.cc:85
const int UNSET_RDSNL
Definition: venusrecov.h:65
const int DataToLogSizeRatio
Definition: venusrecov.h:57