summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/legacystore/jrnl/jerrno.h
blob: 4c8b71c42379177c210c62869cc0042c66892534 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/*
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 */

/**
 * \file jerrno.h
 *
 * Qpid asynchronous store plugin library
 *
 * File containing code for class mrg::journal::jerrno (journal error
 * codes). See class documentation for details.
 *
 * \author Kim van der Riet
 */

#ifndef QPID_LEGACYSTORE_JRNL_JERRNO_H
#define QPID_LEGACYSTORE_JRNL_JERRNO_H

namespace mrg
{
namespace journal
{
class jerrno;
}
}

#include <map>
#include <string>
#include <sys/types.h>

namespace mrg
{
namespace journal
{

    /**
    * \class jerrno
    * \brief Class containing static error definitions and static map for error messages.
    */
    class jerrno
    {
        static std::map<u_int32_t, const char*> _err_map; ///< Map of error messages
        static std::map<u_int32_t, const char*>::iterator _err_map_itr; ///< Iterator
        static bool _initialized;                       ///< Dummy flag, used to initialise map.

    public:
        // generic errors
        static const u_int32_t JERR__MALLOC;            ///< Buffer memory allocation failed
        static const u_int32_t JERR__UNDERFLOW;         ///< Underflow error
        static const u_int32_t JERR__NINIT;             ///< Operation on uninitialized class
        static const u_int32_t JERR__AIO;               ///< AIO failure
        static const u_int32_t JERR__FILEIO;            ///< File read or write failure
        static const u_int32_t JERR__RTCLOCK;           ///< Reading real-time clock failed
        static const u_int32_t JERR__PTHREAD;           ///< pthread failure
        static const u_int32_t JERR__TIMEOUT;           ///< Timeout waiting for an event
        static const u_int32_t JERR__UNEXPRESPONSE;     ///< Unexpected response to call or event
        static const u_int32_t JERR__RECNFOUND;         ///< Record not found
        static const u_int32_t JERR__NOTIMPL;           ///< Not implemented

        // class jcntl
        static const u_int32_t JERR_JCNTL_STOPPED;      ///< Operation on stopped journal
        static const u_int32_t JERR_JCNTL_READONLY;     ///< Write operation on read-only journal
        static const u_int32_t JERR_JCNTL_AIOCMPLWAIT;  ///< Timeout waiting for AIOs to complete
        static const u_int32_t JERR_JCNTL_UNKNOWNMAGIC; ///< Found record with unknown magic
        static const u_int32_t JERR_JCNTL_NOTRECOVERED; ///< Req' recover() to be called first
        static const u_int32_t JERR_JCNTL_RECOVERJFULL; ///< Journal data files full, cannot write
        static const u_int32_t JERR_JCNTL_OWIMISMATCH;  ///< OWI change found in unexpected location

        // class jdir
        static const u_int32_t JERR_JDIR_NOTDIR;        ///< Exists but is not a directory
        static const u_int32_t JERR_JDIR_MKDIR;         ///< Directory creation failed
        static const u_int32_t JERR_JDIR_OPENDIR;       ///< Directory open failed
        static const u_int32_t JERR_JDIR_READDIR;       ///< Directory read failed
        static const u_int32_t JERR_JDIR_CLOSEDIR;      ///< Directory close failed
        static const u_int32_t JERR_JDIR_RMDIR;         ///< Directory delete failed
        static const u_int32_t JERR_JDIR_NOSUCHFILE;    ///< File does not exist
        static const u_int32_t JERR_JDIR_FMOVE;         ///< File move failed
        static const u_int32_t JERR_JDIR_STAT;          ///< File stat failed
        static const u_int32_t JERR_JDIR_UNLINK;        ///< File delete failed
        static const u_int32_t JERR_JDIR_BADFTYPE;      ///< Bad or unknown file type (stat mode)

        // class fcntl
        static const u_int32_t JERR_FCNTL_OPENWR;       ///< Unable to open file for write
        static const u_int32_t JERR_FCNTL_WRITE;        ///< Unable to write to file
        static const u_int32_t JERR_FCNTL_CLOSE;        ///< File close failed
        static const u_int32_t JERR_FCNTL_FILEOFFSOVFL; ///< Increased offset past file size
        static const u_int32_t JERR_FCNTL_CMPLOFFSOVFL; ///< Increased cmpl offs past subm offs
        static const u_int32_t JERR_FCNTL_RDOFFSOVFL;   ///< Increased read offs past write offs

        // class lfmgr
        static const u_int32_t JERR_LFMGR_BADAEFNUMLIM; ///< Bad auto-expand file number limit
        static const u_int32_t JERR_LFMGR_AEFNUMLIMIT;  ///< Exceeded auto-expand file number limit
        static const u_int32_t JERR_LFMGR_AEDISABLED;   ///< Attempted to expand with auto-expand disabled

        // class rrfc
        static const u_int32_t JERR_RRFC_OPENRD;        ///< Unable to open file for read

        // class jrec, enq_rec, deq_rec, txn_rec
        static const u_int32_t JERR_JREC_BADRECHDR;     ///< Invalid data record header
        static const u_int32_t JERR_JREC_BADRECTAIL;    ///< Invalid data record tail

        // class wmgr
        static const u_int32_t JERR_WMGR_BADPGSTATE;    ///< Page buffer in illegal state.
        static const u_int32_t JERR_WMGR_BADDTOKSTATE;  ///< Data token in illegal state.
        static const u_int32_t JERR_WMGR_ENQDISCONT;    ///< Enq. new dtok when previous part compl.
        static const u_int32_t JERR_WMGR_DEQDISCONT;    ///< Deq. new dtok when previous part compl.
        static const u_int32_t JERR_WMGR_DEQRIDNOTENQ;  ///< Deq. rid not enqueued

        // class rmgr
        static const u_int32_t JERR_RMGR_UNKNOWNMAGIC;  ///< Found record with unknown magic
        static const u_int32_t JERR_RMGR_RIDMISMATCH;   ///< RID mismatch between rec and dtok
        //static const u_int32_t JERR_RMGR_FIDMISMATCH;   ///< FID mismatch between emap and rrfc
        static const u_int32_t JERR_RMGR_ENQSTATE;      ///< Attempted read when wstate not ENQ
        static const u_int32_t JERR_RMGR_BADRECTYPE;    ///< Attempted op on incorrect rec type

        // class data_tok
        static const u_int32_t JERR_DTOK_ILLEGALSTATE;  ///< Attempted to change to illegal state
//         static const u_int32_t JERR_DTOK_RIDNOTSET;     ///< Record ID not set

        // class enq_map, txn_map
        static const u_int32_t JERR_MAP_DUPLICATE;      ///< Attempted to insert using duplicate key
        static const u_int32_t JERR_MAP_NOTFOUND;       ///< Key not found in map
        static const u_int32_t JERR_MAP_LOCKED;         ///< rid locked by pending txn

        // class jinf
        static const u_int32_t JERR_JINF_CVALIDFAIL;    ///< Compatibility validation failure
        static const u_int32_t JERR_JINF_NOVALUESTR;    ///< No value attr found in jinf file
        static const u_int32_t JERR_JINF_BADVALUESTR;   ///< Bad format for value attr in jinf file
        static const u_int32_t JERR_JINF_JDATEMPTY;     ///< Journal data files empty
        static const u_int32_t JERR_JINF_TOOMANYFILES;  ///< Too many journal data files
        static const u_int32_t JERR_JINF_INVALIDFHDR;   ///< Invalid file header
        static const u_int32_t JERR_JINF_STAT;          ///< Error while trying to stat a file
        static const u_int32_t JERR_JINF_NOTREGFILE;    ///< Target file is not a regular file
        static const u_int32_t JERR_JINF_BADFILESIZE;   ///< File is of incorrect or unexpected size
        static const u_int32_t JERR_JINF_OWIBAD;        ///< OWI inconsistent (>1 transition in non-ae journal)
        static const u_int32_t JERR_JINF_ZEROLENFILE;   ///< Journal info file is zero length (empty).

        // Negative returns for some functions
        static const int32_t AIO_TIMEOUT;               ///< Timeout waiting for AIO return
        static const int32_t LOCK_TAKEN;                ///< Attempted to take lock, but it was taken by another thread
        /**
        * \brief Method to access error message from known error number.
        */
        static const char* err_msg(const u_int32_t err_no) throw ();

    private:
        /**
        * \brief Static function to initialize map.
        */
        static bool __init();
    };

} // namespace journal
} // namespace mrg

#endif // ifndef QPID_LEGACYSTORE_JRNL_JERRNO_H