1<!--$Id: 4.4.16.html,v 1.24 2007/05/17 18:17:18 bostic Exp $-->
2<html>
3<head>
4<title>The Berkeley DB Package: DB 4.4.16 Change Log</title>
5<meta name="description" content="Berkeley DB: A database programmatic toolkit.">
6<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods">
7</head>
8<body bgcolor=white>
9
10<h3 align=center>Berkeley DB 4.4.16 Change Log</h3>
11
12<h3>Database or Log File On-Disk Format Changes:</h3>
13<ol>
14
15<li>The on-disk log format has changed.
16
17</ol>
18<h3>New Features:</h3>
19<ol>
20
21<li>Add support to compact an existing Btree database. [#6750]
22<li>Add support for named in-memory databases. [#9927]
23<li>Add support for database environment recovery serialization.  This
24simplifies multiprocess application architectures. Add DB_REGISTER flag
25to DB_ENV-&gt;open(). [#11511]
26<li>Add utility for performing hot backups of a database environment.
27[#11536]
28<li>Add replication configuration API. [#12110]
29<li>Add replication support to return error instead of waiting for
30client sync to complete. [#12110]
31<li>Add replication support for delayed client synchronization. [#12110]
32<li>Add replication support for client-to-client synchronization.
33[#12110]
34<li>Add replication support for bulk transfer. [#12110]
35<li>Add new flags DB_DSYNC_DB and DB_DSYNC_LOG [12941]
36<li>Add DbEnv.log_printf, a new DbEnv method which logs printf style
37formatted strings into the Berkeley DB database environment log.
38[#13241]
39
40</ol>
41<h3>Database Environment Changes:</h3>
42<ol>
43
44<li>Add a feature to support arbitrary alignment of mutexes in order to
45minimize cache line collisions. [#9580]
46<li>Change cache regions on 64-bit machines to allow regions larger than
474GB. [#10668]
48<li>Fix a bug where a loop could occur if the application or system
49failed during modification of the linked list of shared regions.
50[#11532]
51<li>Fix mutex alignment on Linux/PA-RISC, add test-and-set mutexes for
52MIPS and x86_64. [#11575]
53<li>Fix a bug where private database environments (DB_PRIVATE) on 64-bit
54machines would core dump because of 64-bit address truncation. [#11983]
55<li>Fix a bug where freed memory is accessed when DB_PRIVATE
56environments are closed.  This can happen on systems where the operating
57system holds mutex resources that must be freed when the mutex is
58destroyed. [#12591]
59<li>Fix a bug where the DbEnv.stat_print method could self-deadlock and
60hang.  The DbEnv.stat_print method no longer displays statistics for any
61of the database environments databases. [#12039]
62<li>Fix a bug where Berkeley DB could create fragmented
63filesystem-backed shared region files. [#12125]
64<li>Fix a bug where Berkeley DB stat calls could report a cache size of
650 after the statistics were cleared. [#12307]
66<li>Threads of control joining database environments are now configured
67for all of the subsystems (lock, log, cache, or transaction) for which
68the environment was originally configured, it is now an error to attempt
69configuration of additional subsystems after an environment is created.
70[#12422]
71<li>Fix a bug where negative percentages could be displayed in
72statistics output. [#12673]
73<li>Fix a bug that could cause a panic if the cache is filled with
74non-logging updated pages. [#12763]
75<li>Fix a bug that could cause an unreported deadlock if the application
76was using the DB_DIRTY_READ flag and the record was an off page
77duplicate record. [#12893]
78<li>Fix a bug where a handle lock could be incorrectly retained during
79a delete or rename operation. [#12906]
80
81</ol>
82<h3>Concurrent Data Store Changes:</h3>
83<ol>
84
85<li>Lock upgrades and downgrades are now accounted for separately from
86lock requests and releases. [#11155]
87<li>Fix a bug where a second process joining a Concurrent Data Store
88environment, with the DB_CDB_ALLDB flag set, would fail.  This would
89happen if the first thread were not entirely finished with
90initialization. [#12277]
91
92</ol>
93<h3>General Access Method Changes:</h3>
94<ol>
95
96<li>Fix a bug where filesystem operations are improperly synchronized.
97[#10564]
98<li>Add support for database files larger than 2GB on Windows. [#11839]
99<li>Rename DB_DEGREE_2 (and all related flags) to DB_READ_COMMITTED.
100Rename DB_DIRTY (and all related flags) to DB_READ_UNCOMMITTED. [#11776]
101<li>Fix a bug where wrapping of sequences was incorrect when the cache
102size is smaller than the range of the maximum value minus the minimum
103value.  [#11997]
104<li>Fix a bug that could result in a hot backup having a page missing
105from a database file if a file truncation was in progress during the
106backup but was then aborted. [#12017]
107<li>Fix a bug where a long filename could cause one too few bytes to
108be allocated when opening a file. [#12085]
109<li>Fix a bug in secondary cursor code if a write lock is not granted.
110[#12109]
111<li>Fix a bug in secondary cursors where the current record would change
112on error. [#12141]
113<li>Fix a bug in Db-&gt;truncate where the method was not checking to see
114if the handle was opened read-only. [#12179]
115<li>Fix a bug in sequences so that they are now platform independent,
116taking into account little-endian and big-endian architectures. They
117will be automatically upgraded in 4.4. [#12202]
118<li>Fix a bug with non-wrapping sequences when initial value was
119INT64_MIN. [#12390]
120<li>Add a retry for operating system operations that return EIO (IO
121Error) to better support NFS mounted filesystems. [#12426]
122<li>Fix sequence wrapping at INT64 limits. [#12520]
123<li>Fix a bug where errors during DB-&gt;associate could leave secondaries
124half associated. [#13173]
125<li>Fix a bug so that we no longer will update in CDS and DS if the file
126size limit will be exceeded. [#13222]
127
128</ol>
129<h3>Btree Access Method Changes:</h3>
130<ol>
131
132<li>Remove maxkey configuration. [#8904]
133<li>Fix a memory leak in operations on large Btrees. [#12000]
134
135</ol>
136<h3>Hash Access Method Changes:</h3>
137<ol>
138
139<li>Fix a bug where access to HASH or encrypted database pages might be
140blocked during a checkpoint. [#11031]
141<li>Fix a bug where recovery would fail when a database has a hash page
142on the free list and that hash page was freed without using transactions
143and later allocated and aborted within a transaction. [#11214]
144<li>Fix a bug in hash duplicates where if the caller left garbage in the
145partial length field, we were using it.  Fix a bug where a replacement
146of a hash item that should have gone on an overflow page, did not.
147[#11966]
148<li>Fix a bug where free space was miscalculated when adding the first
149duplicate to an existing item and the existing item plus the new item
150does not fit on a page. [#12270]
151<li>Fix a bug where allocations of hash buckets are not recovered
152correctly. [#12846]
153
154</ol>
155<h3>Queue Access Method Changes:</h3>
156<ol>
157
158<li>Improve performance of deletes from a QUEUE database that does not
159have a secondary index. [#11538]
160<li>Fix a bug where updates that do not use transactions, but do enable
161locking,  failed to release locks. [#11669]
162<li>Fix a bug where a transaction might not be rolled forward if the
163site was performing hot backups and an application aborted a prepared
164but not committed transaction. [#12181]
165<li>Fix a bug with queue extents not being reclaimed. [#12249]
166<li>Fix a bug where a record being inserted before the head of the queue
167could appear missing if DB_CONSUME is not specified. [#12919]
168<li>Fix a bug that might cause recovery to move the head or tail of the
169queue to exclude a record that was deleted but whose transaction did not
170commit. [#13256]
171<li>Fix a bug that could cause recovery to move the head or tail pointer
172beyond a record that was aborted but was rolled backward by recovery.
173[#13318]
174
175</ol>
176<h3>Recno Access Method Changes</h3>
177
178None.
179
180<h3>C++-specific API Changes:</h3>
181<ol>
182
183<li>Fix a bug so that a DbMemoryException will be raised during a
184DB_BUFFER_SMALL error. [#13273]
185
186</ol>
187<h3>Java-specific API Changes:</h3>
188<ol>
189
190<li>Add VersionMismatchException to map the DB_VERSION_MISMATCH error.
191[#11429]
192<li>Fix a bug in Environment.getConfiguration() method in non-crypto
193builds. [#11752]
194<li>Fix a bug that caused a NullPointerException when using the
195MultipleDataEntry default constructor. [#11753]
196<li>Fix handling of replication errors. [#11822]
197<li>Remove EnvironmentConfig.setReadOnly() method. [#11882]
198<li>Fix a bug where prefix strings in the error handler may be
199corrupted. [#11967]
200<li>Fix a bug so that nested exceptions will appear in stack traces.
201[#11992]
202<li>Fix a bug on LogSequenceNumber objects in the Java API. [#12223]
203<li>Fix a bug when no files are returned from a call to
204DB_ENV-&gt;log_archive.  [#12383]
205<li>Fix a bug when multiple verbose flags are set. [#12383]
206<li>Fix a bug so that an OutOfMemoryError is thrown when allocation
207fails in the JNI layer. [#13434]
208
209</ol>
210<h3>Java collections and bind API Changes:</h3>
211<ol>
212
213<li>Binding performance has been improved by using System.arraycopy in
214the FastOutputStream and FastInputStream utility classes. [#12002]
215<li>The objectToEntry method is now implemented in all TupleBinding
216subclasses (IntegerBinding, etc) so that tuple bindings are fully
217nestable. An example of this usage is a custom binding that dynamically
218discovers the data types of each of the properties of a Java bean class.
219For each property, it calls TupleBinding.getPrimitiveBinding using the
220property's type (class). When the custom binding's objectToEntry method
221is called, it in turn calls the objectToEntry method of the nested
222bindings for each property. [#12124]
223<li>The getCause method for IOExceptionWrapper and
224RuntimeExceptionWrapper is now defined so that nested exceptions appear
225in stack traces for exceptions thrown by the collections API. [#11992]
226<li>TupleBinding.getPrimitiveBinding can now be passed a primitive type
227class as well as a primitive wrapper class. The return value for
228Integer.TYPE and Integer.class, for example, will be the same binding.
229[#12035]
230<li>Improvements have been made to prevent the buffer used in serial and
231tuple bindings from growing inefficiently, and to provide more
232alternatives for the application to specify the desired size. For
233details see com.sleepycat.bind.serial.SerialBase and
234com.sleepycat.bind.tuple.TupleBase. [#12398]
235<li>Add StoredContainer.getCursorConfig, deprecate isDirtyRead.
236Deprecate StoredCollections.dirtyReadMap (dirtyReadSet, etc) which is
237replaced by configuredMap (configuredSet, etc). Deprecated
238StoredContainer.isDirtyReadAllowed with no replacement (please use
239DatabaseConfig.getDirtyRead). Also note that
240StoredCollections.configuredMap (configuredSet, etc) can be used to
241configure read committed and write lock containers, as well as read
242uncommitted containers, since all CursorConfig properties are supported.
243[#11776]
244<li>Add the protected method SerialBinding.getClassLoader so that
245subclasses may return a specific or dynamically determined class loader.
246Useful for applications which use multiple class loaders, including
247applications that serialize Groovy-defined classes. [#12764] [#12749]
248
249</ol>
250<h3>Tcl-specific API Changes:</h3>
251<ol>
252
253<li>Fix a bug that could cause a memory leak in the replication test
254code. [#13436]
255
256</ol>
257<h3>RPC-specific Client/Server Changes:</h3>
258<ol>
259
260<li>Fix double-free in RPC server when handling an out-of-memory error.
261[#11852]
262
263</ol>
264<h3>Replication Changes:</h3>
265<ol>
266
267<li>Fix race condition (introduced in 4.3) in rep_start function.
268[#11030]
269<li>Changed internal initialization to no longer store records. [#11090]
270<li>Add support for replication bulk transfer. [#11099]
271<li>Berkeley DB now calls check_doreq function for MASTER_REQ messages.
272[#11207]
273<li>Fix a bug where transactions could be counted incorrectly during
274txn_recover. [#11257]
275<li>Add DB_REP_IGNORE flag so that old messages (especially PERM
276messages) can be ignored by applications. [#11585]
277<li>Fix a bug where op_timestamp was not initialized. [#11795]
278<li>Fix a bug in db_refresh where a client would write a log record on
279closing a file. [#11892]
280<li>Fix backward arguments in C++ rep_elect API. [#11906]
281<li>Fix a bug where a race condition could happen between downgrading a
282master and a database update operation. [#11955]
283<li>Fix a bug on VERIFY_REQ. We now honor wait recs/rcvd. [#12097]
284<li>Fix a bug in rebroadcast of verify_req by initializing lp-&gt;wait_recs
285when finding a new master. [#12097]
286<li>Fix a bug by adding lockout checking to __env_rep_enter since
287rename/remove now call it. [#12192]
288<li>Fix a bug so that we now skip __db_chk_meta if we are a rep client.
289[#12316]
290<li>Fix a replication failure on Windows. [#12331]
291<li>Remove master discovery phase from rep_elect as a performance
292improvement to speed up elections. [#12551]
293<li>Fix a bug to avoid multiple data streams when issuing al ALL_REQ.
294[#12595]
295<li>Fix a bug to request the remaining gap again if the gap record is
296dropped after we receive the singleton. [#12974]
297<li>Fix a bug in internal initialization when master changes in the
298middle of initializing. [#13074]
299<li>Fix a bug in replication/archiving with internal init. [#13110]
300<li>Fix pp handling of db_truncate. [#13115]
301<li>Fix a bug where rep_timestamp could be updated when it should not
302be updated. [#13331]
303<li>Fix a bug with bulk transfer when toggling during updates. [#13339]
304<li>Change EINVAL error return to DB_REP_JOIN_FAILURE. [#12110]
305<li>Add C++ exception for DB_REP_HANDLE_DEAD. [#13361]
306<li>Fix a bug where starting an election concurrently with processing a
307NEWMASTER message could cause the send function to be called with an
308invalid eid. [#13403]
309
310</ol>
311<h3>XA Resource Manager Changes:</h3>
312
313None.
314
315<h3>Locking Subsystem Changes:</h3>
316
317None.
318
319<h3>Logging Subsystem Changes:</h3>
320<ol>
321
322<li>Add set_log_filemode for applications that need to set an absolute
323file mode on log files. [#8747]
324<li>Fix a bug that caused Not Found to be returned if a log file exists
325but is not readable. [#11185]
326<li>Removed checksum of records with an in-memory log buffer. [#11280]
327<li>Fix a bug so that the DB_LOG_INMEMORY flag can no longer be set
328after calling DB_ENV-&gt;open. [#11436]
329<li>Fix a bug introduced after release 4.0 where two simultaneous
330checkpoints could cause ckp_lsn values to be out of order. [#12094]
331<li>Fix a bug when in debug mode and using the DEBUG_ROP which will now
332log read operations in __dbc_logging. [#12303]
333<li>Fix a bug where failing to write a log record on a file close would
334result in a core dump later. [#12460]
335<li>Fix a bug where automatic log file removal, or the return of log
336files using an absolute path, could fail silently if the applications
337current working directory could not be reached using the systems getcwd
338library call. [#12505]
339<li>Avoid locking the log region if we are not going to flush the log.
340This can improve performance for some write-intensive application
341workloads. [#13090]
342<li>Fix a bug with a possible segment fault when memp_stat_print is
343called on a temporary database. [#13315]
344<li>Fix a bug where log_stat_print could deadlock with threads during a
345checkpoint. [#13315]
346
347</ol>
348<h3>Memory Pool Subsystem Changes:</h3>
349<ol>
350
351<li>Fix a bug where modified database pages might not be flushed if
352recovery were run and all pages from a database were found in the system
353cache and up to date, followed by a system crash. [#11654]
354
355</ol>
356<h3>Transaction Subsystem Changes:</h3>
357<ol>
358
359<li>Add new DbTxn class methods allowing applications to set/get a
360descriptive name associated with a transaction.  The descriptive name
361is also displayed by the db_stat utility. [#0382]
362<li>Fix a bug where aborting a transaction with a large number of nested
363transactions could take a long time. [#10972]
364<li>Add support to allow the TXN_WRITE_NOSYNC flag to be specified on
365the transaction handle. [#11151]
366<li>Fix a bug that could cause a page to be on the free list twice if
367it was originally put on the free list by a non-transactional update and
368then reallocated in a transaction that aborts. [#11159]
369<li>Remove the requirement for the DB_AUTO_COMMIT flag to make database
370operations transactional. Specifying the database environment as
371transactional or opening the database handle transactionally is
372sufficient. [#11302]
373<li>Fix a bug so that environments created from errant programs that
374called dbp-&gt;close while transactions were still active can now be
375recovered. [#11384]
376<li>Fix a bug that caused free pages at the end of a file to be
377truncated during recovery rather than placed on the free page list.
378[#11643]
379<li>Fix a bug that caused a page to have the wrong type if the truncate
380of a BREE or RECNO database needed to be rolled forward. [#11670]
381<li>Fix a bug when manually undoing a subdb create, dont try to free a
382root page that has not been allocated. [#11925]
383<li>Add a check on database open to see if log files were incorrectly
384removed by system administration mistakes. [#12178]
385<li>Fix a bug when calling DB-&gt;pget and then specifying the
386DB_READ_COMMITTED (DB_DEGREE_2) on a cursor.  If followed by a
387DBC-&gt;c_pget, the primary database would incorrectly remain locked.
388[#12410]
389<li>Fix a bug where the abort of a transaction in which a sub database
390was opened with the DB_TXN_NOT_DURABLE flag could fail. [#12420]
391<li>Fix a bug that could cause an abort transaction that allocated new
392pages to a file that were not flushed to disk prior to the abort
393transaction to report out of disk space. [#12743]
394<li>Fix a bug that could prevent multiple creates and destroys of the
395same file to be recovered correctly. [#13026]
396<li>Fix a bug when recovery previously handled a section of the log that
397did not contain any transactions. [#13139]
398<li>Fix a bug that could result in the loss of durability in
399Transactional Environments on Mac OS X. [#13149]
400<li>Fix a bug that could cause the improper reuse of a transaction id
401when recovery restores prepared transactions. [#13256]
402
403</ol>
404<h3>Utility Changes:</h3>
405<ol>
406
407<li>Add utility for performing hot backups of a database environment.
408[#11536]
409<li>Change the Verify utility to now identify any nodes that have
410incorrect record counts. [#11934]
411<li>Fix a bug in the 1.85 compatibility code supporting per-application
412Btree comparison and prefix compression functions.  The functions would
413not work on big-endian 64-bit hardware. [#13316]
414
415</ol>
416<h3>Configuration, Documentation, Portability and Build Changes:</h3>
417<ol>
418
419<li>Change the ex_tpcb sample application to no longer displays
420intermediate results.  It displays results at the end of the run.
421[#11259]
422<li>Change the Visual Studio projects on Windows so that each is in an
423intermediate directory. [#11441]
424<li>Fix errors in test subdb011. [#11799]
425<li>Fix a bug that could cause applications using gcc on Power PC
426platforms to hang. [#12233]
427<li>Fix a bug where installation will fail if a true program cannot be
428found. [#12278]
429<li>Fix a bug that prevented C++ applications from configuring XA
430[#12300].
431<li>Fix a race condition in the Windows mutex implementation found on
4328-way Itanium systems.  [#12417]
433<li>Add pthread mutex support for IBM OS/390 platform (z/OS or MVS).
434[#12639]
435<li>Fix a bug where the Tcl API did not configure on OS X 10.4. [#12699]
436<li>Fix portability issues with queue or recno primary databases.
437[#12872]
438<li>Fix a bug where utility attempted to send replication message.
439[#13446]
440
441</ol>
442
443</body>
444</html>
445