1 | Index: ChangeLog
|
---|
2 | ===================================================================
|
---|
3 | --- ChangeLog (revision 8425)
|
---|
4 | +++ ChangeLog (revision 8426)
|
---|
5 | @@ -1,3 +1,19 @@
|
---|
6 | +Thu May 03 00:05:23 BST 2007 Richard Boulton <richard@lemurconsulting.com>
|
---|
7 | +
|
---|
8 | + * backends/flint/: Remove unused (and unimplemented) declarations
|
---|
9 | + of begin_transaction_(), commit_transaction_() and
|
---|
10 | + cancel_transaction_() from FlintWritableDatabase class. Tidy up
|
---|
11 | + handling of metainfo (total_length and lastdocid) to avoid
|
---|
12 | + repeatedly parsing the special record, and make it easier to
|
---|
13 | + store additional metainfo in future.
|
---|
14 | + Also, remove code which ensures that there is always a special
|
---|
15 | + record - this was added in revision 5459 when the special record
|
---|
16 | + was stored in the record table, so that the number of documents
|
---|
17 | + in the database could always be calculated by subtracting 1 from
|
---|
18 | + the number of entries in the record table. Now that the special
|
---|
19 | + record is stored in the postlist table, this is no longer
|
---|
20 | + necessary.
|
---|
21 | +
|
---|
22 | Wed May 02 17:56:39 BST 2007 Olly Betts <olly@survex.com>
|
---|
23 |
|
---|
24 | * backends/dbfactory_remote.cc,include/xapian/dbfactory.h:
|
---|
25 | Index: backends/flint/flint_database.h
|
---|
26 | ===================================================================
|
---|
27 | --- backends/flint/flint_database.h (revision 8425)
|
---|
28 | +++ backends/flint/flint_database.h (revision 8426)
|
---|
29 | @@ -94,6 +94,14 @@
|
---|
30 | /// Lock object.
|
---|
31 | FlintLock lock;
|
---|
32 |
|
---|
33 | + /** Total length of all documents including unflushed modifications.
|
---|
34 | + */
|
---|
35 | + flint_totlen_t total_length;
|
---|
36 | +
|
---|
37 | + /** Highest document ID ever allocated by this database.
|
---|
38 | + */
|
---|
39 | + Xapian::docid lastdocid;
|
---|
40 | +
|
---|
41 | /** Return true if a database exists at the path specified for this
|
---|
42 | * database.
|
---|
43 | */
|
---|
44 | @@ -301,9 +309,6 @@
|
---|
45 | PositionList * open_position_list(Xapian::docid did,
|
---|
46 | const string & tname) const;
|
---|
47 | TermList * open_allterms() const;
|
---|
48 | - void begin_transaction_();
|
---|
49 | - void commit_transaction_();
|
---|
50 | - void cancel_transaction_();
|
---|
51 | //@}
|
---|
52 | };
|
---|
53 |
|
---|
54 | Index: backends/flint/flint_database.cc
|
---|
55 | ===================================================================
|
---|
56 | --- backends/flint/flint_database.cc (revision 8425)
|
---|
57 | +++ backends/flint/flint_database.cc (revision 8426)
|
---|
58 | @@ -87,6 +87,7 @@
|
---|
59 | }
|
---|
60 | // Can still allow searches even if recovery is needed
|
---|
61 | open_tables_consistent();
|
---|
62 | + postlist_table.get_metainfo_entry(total_length, lastdocid);
|
---|
63 | } else {
|
---|
64 | if (!dbexists) {
|
---|
65 | // FIXME: if we allow Xapian::DB_OVERWRITE, check it here
|
---|
66 | @@ -143,9 +144,7 @@
|
---|
67 | value_table.commit(new_revision);
|
---|
68 | record_table.commit(new_revision);
|
---|
69 | }
|
---|
70 | - if (record_table.get_doccount() == 0) {
|
---|
71 | - postlist_table.set_total_length_and_lastdocid(0, postlist_table.get_lastdocid());
|
---|
72 | - }
|
---|
73 | + postlist_table.get_metainfo_entry(total_length, lastdocid);
|
---|
74 | }
|
---|
75 | }
|
---|
76 |
|
---|
77 | @@ -196,7 +195,11 @@
|
---|
78 | revision != postlist_table.get_open_revision_number()) {
|
---|
79 | throw Xapian::DatabaseCreateError("Newly created tables are not in consistent state");
|
---|
80 | }
|
---|
81 | - postlist_table.set_total_length_and_lastdocid(0, 0);
|
---|
82 | +
|
---|
83 | + // Set metainfo
|
---|
84 | + total_length = 0;
|
---|
85 | + lastdocid = 0;
|
---|
86 | + postlist_table.set_metainfo_entry(total_length, lastdocid);
|
---|
87 | }
|
---|
88 |
|
---|
89 | void
|
---|
90 | @@ -306,6 +309,7 @@
|
---|
91 | DEBUGCALL(DB, void, "FlintDatabase::reopen", "");
|
---|
92 | if (readonly) {
|
---|
93 | open_tables_consistent();
|
---|
94 | + postlist_table.get_metainfo_entry(total_length, lastdocid);
|
---|
95 | }
|
---|
96 | }
|
---|
97 |
|
---|
98 | @@ -392,7 +396,7 @@
|
---|
99 | FlintDatabase::get_lastdocid() const
|
---|
100 | {
|
---|
101 | DEBUGCALL(DB, Xapian::docid, "FlintDatabase::get_lastdocid", "");
|
---|
102 | - RETURN(postlist_table.get_lastdocid());
|
---|
103 | + RETURN(lastdocid);
|
---|
104 | }
|
---|
105 |
|
---|
106 | Xapian::doclength
|
---|
107 | @@ -401,7 +405,7 @@
|
---|
108 | DEBUGCALL(DB, Xapian::doclength, "FlintDatabase::get_avlength", "");
|
---|
109 | Xapian::doccount docs = record_table.get_doccount();
|
---|
110 | if (docs == 0) RETURN(0);
|
---|
111 | - RETURN(double(postlist_table.get_total_length()) / docs);
|
---|
112 | + RETURN(double(total_length) / docs);
|
---|
113 | }
|
---|
114 |
|
---|
115 | Xapian::doclength
|
---|
116 | @@ -532,12 +536,11 @@
|
---|
117 | doclens(),
|
---|
118 | mod_plists(),
|
---|
119 | database_ro(dir, action, block_size),
|
---|
120 | - total_length(database_ro.postlist_table.get_total_length()),
|
---|
121 | - lastdocid(database_ro.get_lastdocid()),
|
---|
122 | changes_made(0)
|
---|
123 | {
|
---|
124 | DEBUGCALL(DB, void, "FlintWritableDatabase", dir << ", " << action << ", "
|
---|
125 | << block_size);
|
---|
126 | + database_ro.postlist_table.get_metainfo_entry(total_length, lastdocid);
|
---|
127 | if (flush_threshold == 0) {
|
---|
128 | const char *p = getenv("XAPIAN_FLUSH_THRESHOLD");
|
---|
129 | if (p) flush_threshold = atoi(p);
|
---|
130 | @@ -567,8 +570,7 @@
|
---|
131 | database_ro.postlist_table.merge_changes(mod_plists, doclens, freq_deltas);
|
---|
132 |
|
---|
133 | // Update the total document length and last used docid.
|
---|
134 | - database_ro.postlist_table.set_total_length_and_lastdocid(total_length,
|
---|
135 | - lastdocid);
|
---|
136 | + database_ro.postlist_table.set_metainfo_entry(total_length, lastdocid);
|
---|
137 | database_ro.apply();
|
---|
138 | freq_deltas.clear();
|
---|
139 | doclens.clear();
|
---|
140 | @@ -1070,8 +1072,7 @@
|
---|
141 | FlintWritableDatabase::cancel()
|
---|
142 | {
|
---|
143 | database_ro.cancel();
|
---|
144 | - total_length = database_ro.postlist_table.get_total_length();
|
---|
145 | - lastdocid = database_ro.get_lastdocid();
|
---|
146 | + database_ro.postlist_table.get_metainfo_entry(total_length, lastdocid);
|
---|
147 | freq_deltas.clear();
|
---|
148 | doclens.clear();
|
---|
149 | mod_plists.clear();
|
---|
150 | Index: backends/flint/flint_postlist.cc
|
---|
151 | ===================================================================
|
---|
152 | --- backends/flint/flint_postlist.cc (revision 8425)
|
---|
153 | +++ backends/flint/flint_postlist.cc (revision 8426)
|
---|
154 | @@ -30,55 +30,40 @@
|
---|
155 | // next free docid and total length of all documents
|
---|
156 | static const string METAINFO_KEY("", 1);
|
---|
157 |
|
---|
158 | -Xapian::docid
|
---|
159 | -FlintPostListTable::get_lastdocid() const
|
---|
160 | +void
|
---|
161 | +FlintPostListTable::get_metainfo_entry(flint_totlen_t & totlen,
|
---|
162 | + Xapian::docid & did) const
|
---|
163 | {
|
---|
164 | - DEBUGCALL(DB, Xapian::docid, "FlintPostListTable::get_lastdocid", "");
|
---|
165 | + DEBUGCALL(DB, void, "FlintPostListTable::get_metainfo_entry", "");
|
---|
166 |
|
---|
167 | string tag;
|
---|
168 | - if (!get_exact_entry(METAINFO_KEY, tag)) RETURN(0u);
|
---|
169 | + if (!get_exact_entry(METAINFO_KEY, tag)) {
|
---|
170 | + totlen = 0;
|
---|
171 | + did = 0;
|
---|
172 | + return;
|
---|
173 | + }
|
---|
174 |
|
---|
175 | - Xapian::docid did;
|
---|
176 | const char * data = tag.data();
|
---|
177 | const char * end = data + tag.size();
|
---|
178 | if (!unpack_uint(&data, end, &did)) {
|
---|
179 | throw Xapian::DatabaseCorruptError("Record containing meta information is corrupt.");
|
---|
180 | }
|
---|
181 | - RETURN(did);
|
---|
182 | + if (!unpack_uint_last(&data, end, &totlen)) {
|
---|
183 | + throw Xapian::DatabaseCorruptError("Record containing meta information is corrupt.");
|
---|
184 | + }
|
---|
185 | }
|
---|
186 |
|
---|
187 | void
|
---|
188 | -FlintPostListTable::set_total_length_and_lastdocid(flint_totlen_t totlen,
|
---|
189 | - Xapian::docid did)
|
---|
190 | +FlintPostListTable::set_metainfo_entry(flint_totlen_t totlen,
|
---|
191 | + Xapian::docid did)
|
---|
192 | {
|
---|
193 | - DEBUGCALL(DB, void, "FlintPostListTable::set_total_length_and_lastdocid",
|
---|
194 | + DEBUGCALL(DB, void, "FlintPostListTable::set_metainfo_entry",
|
---|
195 | totlen << ", " << did);
|
---|
196 | string tag = pack_uint(did);
|
---|
197 | tag += pack_uint_last(totlen);
|
---|
198 | add(METAINFO_KEY, tag);
|
---|
199 | }
|
---|
200 |
|
---|
201 | -flint_totlen_t
|
---|
202 | -FlintPostListTable::get_total_length() const
|
---|
203 | -{
|
---|
204 | - DEBUGCALL(DB, flint_totlen_t, "FlintPostListTable::get_total_length", "");
|
---|
205 | -
|
---|
206 | - string tag;
|
---|
207 | - if (!get_exact_entry(METAINFO_KEY, tag)) RETURN(0);
|
---|
208 | -
|
---|
209 | - Xapian::docid did;
|
---|
210 | - flint_totlen_t totlen;
|
---|
211 | - const char * data = tag.data();
|
---|
212 | - const char * end = data + tag.size();
|
---|
213 | - if (!unpack_uint(&data, end, &did)) {
|
---|
214 | - throw Xapian::DatabaseCorruptError("Record containing meta information is corrupt.");
|
---|
215 | - }
|
---|
216 | - if (!unpack_uint_last(&data, end, &totlen)) {
|
---|
217 | - throw Xapian::DatabaseCorruptError("Record containing meta information is corrupt.");
|
---|
218 | - }
|
---|
219 | - RETURN(totlen);
|
---|
220 | -}
|
---|
221 | -
|
---|
222 | /// Make a key for accessing the postlist.
|
---|
223 | static void
|
---|
224 | make_key(const string & tname, Xapian::docid did, string & key)
|
---|
225 | Index: backends/flint/flint_postlist.h
|
---|
226 | ===================================================================
|
---|
227 | --- backends/flint/flint_postlist.h (revision 8425)
|
---|
228 | +++ backends/flint/flint_postlist.h (revision 8426)
|
---|
229 | @@ -67,18 +67,15 @@
|
---|
230 | Xapian::docid did, bool adding,
|
---|
231 | PostlistChunkReader ** from, PostlistChunkWriter **to);
|
---|
232 |
|
---|
233 | - /** Return the total length of all the records in the table.
|
---|
234 | + /** Get the total length, last document ID used, and metadata.
|
---|
235 | */
|
---|
236 | - flint_totlen_t get_total_length() const;
|
---|
237 | + void get_metainfo_entry(flint_totlen_t & totlen,
|
---|
238 | + Xapian::docid & lastdocid) const;
|
---|
239 |
|
---|
240 | - /** Get the last document id used.
|
---|
241 | + /** Set the total length, last document ID used, and metadata.
|
---|
242 | */
|
---|
243 | - Xapian::docid get_lastdocid() const;
|
---|
244 | -
|
---|
245 | - /** Set the total length and last document ID used.
|
---|
246 | - */
|
---|
247 | - void set_total_length_and_lastdocid(flint_totlen_t totlen,
|
---|
248 | - Xapian::docid did);
|
---|
249 | + void set_metainfo_entry(flint_totlen_t totlen,
|
---|
250 | + Xapian::docid lastdocid);
|
---|
251 | };
|
---|
252 |
|
---|
253 | /** A postlist in a flint database.
|
---|