/
CHANGES.txt
387 lines (276 loc) · 13.6 KB
/
CHANGES.txt
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
================
Change History
================
Unreleased
==========
- Enforced usage of bytes for '_p_serial' of persistent objects (fixes
compatibility with recent persistent releases).
4.0.0a3 (2012-12-01)
=====================
- Fixed: An elaborate test for trvial logic corrupted module state in a
way that made other tests fail spuriously.
4.0.0a2 (2012-11-13)
=====================
Bugs Fixed
----------
- An unneeded left-over setting in setup.py caused installation with
pip to fail.
4.0.0a1 (2012-11-07)
=====================
New Features
------------
- The ``persistent`` and ``BTrees`` packages are now released as separate
distributions, on which ZODB now depends.
- ZODB no longer depends on zope.event. It now uses ZODB.event, which
uses zope.event if it is installed. You can override
ZODB.event.notify to provide your own event handling, although
zope.event is recommended.
- BTrees allowed object keys with insane comparison. (Comparison
inherited from object, which compares based on in-process address.)
Now BTrees raise TypeError if an attempt is made to save a key with
comparison inherited from object. (This doesn't apply to old-style
class instances.)
Bugs Fixed
----------
- Ensured that the export file and index file created by ``repozo`` share
the same timestamp.
https://bugs.launchpad.net/zodb/+bug/993350
- Pinned the ``transaction`` and ``manuel`` dependencies to Python 2.5-
compatible versions when installing under Python 2.5.
3.10.5 (2011-11-19)
===================
Bugs Fixed
----------
- Conflict resolution failed when state included cross-database
persistent references with classes that couldn't be imported.
3.10.4 (2011-11-17)
===================
Bugs Fixed
----------
- Conflict resolution failed when state included persistent references
with classes that couldn't be imported.
3.10.3 (2011-04-12)
===================
Bugs Fixed
----------
- "activity monitor not updated for subconnections when connection
returned to pool"
https://bugs.launchpad.net/zodb/+bug/737198
- "Blob temp file get's removed before it should",
https://bugs.launchpad.net/zodb/+bug/595378
A way this to happen is that a transaction is aborted after the
commit process has started. I don't know how this would happen in
the wild.
In 3.10.3, the ZEO tpc_abort call to the server is changed to be
synchronous, which should address this case. Maybe there's another
case.
Performance enhancements
------------------------
- Improved ZEO client cache implementation to make it less likely to
evict objects that are being used.
- Small (possibly negligable) reduction in CPU in ZEO storage servers
to service object loads and in networking code.
3.10.2 (2011-02-12)
===================
Bugs Fixed
----------
- 3.10 introduced an optimization to try to address BTree conflict
errors arrising for basing BTree keys on object ids. The
optimization caused object ids allocated in aborted transactions to
be reused. Unfortunately, this optimzation led to some rather
severe failures in some applications. The symptom is a conflict
error in which one of the serials mentioned is zero. This
optimization has been removed.
See (for example): https://bugs.launchpad.net/zodb/+bug/665452
- ZEO server transaction timeouts weren't logged as critical.
https://bugs.launchpad.net/zodb/+bug/670986
3.10.1 (2010-10-27)
===================
Bugs Fixed
----------
- When a transaction rolled back a savepoint after adding objects and
subsequently added more objects and committed, an error could be
raised "ValueError: A different object already has the same oid"
causing the transaction to fail. Worse, this could leave a database
in a state where subsequent transactions in the same process would
fail.
https://bugs.launchpad.net/zodb/+bug/665452
- Unix domain sockets didn't work for ZEO (since the addition of IPv6
support). https://bugs.launchpad.net/zodb/+bug/663259
- Removed a missfeature that can cause performance problems when using
an external garbage collector with ZEO. When objects were deleted
from a storage, invalidations were sent to clients. This makes no
sense. It's wildly unlikely that the other connections/clients have
copies of the garbage. In normal storage garbage collection, we
don't send invalidations. There's no reason to send them when an
external garbage collector is used.
- ZEO client cache simulation misshandled invalidations
causing incorrect statistics and errors.
3.10.0 (2010-10-08)
===================
New Features
------------
- There are a number of performance enhancements for ZEO storage
servers.
- FileStorage indexes use a new format. They are saved and loaded much
faster and take less space. Old indexes can still be read, but new
indexes won't be readable by older versions of ZODB.
- The API for undoing multiple transactions has changed. To undo
multiple transactions in a single transaction, pass a list of
transaction identifiers to a database's undoMultiple method. Calling a
database's undo method multiple times in the same transaction now
raises an exception.
- The ZEO protocol for undo has changed. The only user-visible
consequence of this is that when ZODB 3.10 ZEO servers won't support
undo for older clients.
- The storage API (IStorage) has been tightened. Now, storages should
raise a StorageTransactionError when invalid transactions are passed
to tpc_begin, tpc_vote, or tpc_finish.
- ZEO clients (``ClientStorage`` instances) now work in forked processes,
including those created via ``multiprocessing.Process`` instances.
- Broken objects now provide the IBroken interface.
- As a convenience, you can now pass an integer port as an address to
the ZEO ClientStorage constructor.
- As a convenience, there's a new ``client`` function in the ZEO
package for constructing a ClientStorage instance. It takes the
same arguments as the ClientStorage constructor.
- DemoStorages now accept constructor athuments, close_base_on_close
and close_changes_on_close, to control whether underlying storages
are closed when the DemoStorage is closed.
https://bugs.launchpad.net/zodb/+bug/118512
- Removed the dependency on zope.proxy.
- Removed support for the _p_independent mini framework, which was
made moot by the introduction of multi-version concurrency control
several years ago.
- Added support for the transaction retry convenience
(transaction-manager attempts method) introduced in the
``transaction`` 1.1.0 release.
- Enhanced the database opening conveniences:
- You can now pass storage keyword arguments to ZODB.DB and
ZODB.connection.
- You can now pass None (rather than a storage or file name) to get
a database with a mapping storage.
- Databases now warn when committing very large records (> 16MB).
This is to try to warn people of likely design mistakes. There is a
new option (large_record_size/large-record-size) to control the
record size at which the warning is issued.
- Added support for wrapper storages that transform pickle data.
Applications for this include compression and encryption. An
example wrapper storage implementation, ZODB.tests.hexstorage, was
included for testing.
It is important that storage implementations not assume that
storages contain pickles. Renamed IStorageDB to IStorageWrapper and
expanded it to provide methods for transforming and untransforming
data records. Storages implementations should use these methods to
get pickle data from stored records.
- Deprecated ZODB.interfaces.StorageStopIteration. Storage
iterator implementations should just raise StopIteration, which
means they can now be implemented as generators.
- The filestorage packer configuration option noe accepts values of
the form ``modname:expression``, allowing the use of packer
factories with options.
- Added a new API that allows applications to make sure that current
data are read. For example, with::
self._p_jar.readCurrent(ob)
A conflict error will be raised if the version of ob read by the
transaction isn't current when the transaction is committed.
Normally, ZODB only assures that objects read are consistent, but not
necessarily up to date. Checking whether an object is up to date is
important when information read from one object is used to update
another.
BTrees are an important case of reading one object to update
another. Internal nodes are read to decide which leave notes are
updated when a BTree is updated. BTrees now use this new API to
make sure that internal nodes are up to date on updates.
- When transactions are aborted, new object ids allocated during the
transaction are saved and used in subsequent transactions. This can
help in situations where object ids are used as BTree keys and the
sequential allocation of object ids leads to conflict errors.
- ZEO servers now support a server_status method for for getting
information on the number of clients, lock requests and general
statistics.
- ZEO clients now support a client_label constructor argument and
client-label configuration-file option to specify a label for a
client in server logs. This makes it easier to identify specific
clients corresponding to server log entries, especially when there
are multiple clients originating from the same machine.
- Improved ZEO server commit lock logging. Now, locking activity is
logged at the debug level until the number of waiting lock requests
gets above 3. Log at the critical level when the number of waiting
lock requests gets above 9.
- The file-storage backup script, repozo, will now create a backup
index file if an output file name is given via the --output/-o
option.
- Added a '--kill-old-on-full' argument to the repozo backup options:
if passed, remove any older full or incremental backup files from the
repository after doing a full backup.
(https://bugs.launchpad.net/zope2/+bug/143158)
- The mkzeoinst script has been moved to a separate project:
http://pypi.python.org/pypi/zope.mkzeoinstance
and is no-longer included with ZODB.
- Removed untested unsupported dbmstorage fossile.
- ZEO servers no longer log their pids in every log message. It's just
not interesting. :)
Bugs fixed
----------
- When a pool timeout was specified for a database and old connections
were removed due to timing out, an error occured due to a bug in the
connection cleanup logic.
- When multi-database connections were no longer used and cleaned up,
their subconnections weren't cleaned up properly.
- ZEO didn't work with IPv6 addrsses.
Added IPv6 support contributed by Martin v. Löwis.
- A file storage bug could cause ZEO clients to have incorrect
information about current object revisions after reconnecting to a
database server.
- Updated the 'repozo --kill-old-on-full' option to remove any '.index'
files corresponding to backups being removed.
- ZEO extension methods failed when a client reconnected to a
storage. (https://bugs.launchpad.net/zodb/+bug/143344)
- Clarified the return Value for lastTransaction in the case when
there aren't any transactions. Now a string of 8 nulls (aka "z64")
is specified.
- Setting _p_changed on a blob wo actually writing anything caused an
error. (https://bugs.launchpad.net/zodb/+bug/440234)
- The verbose mode of the fstest was broken.
(https://bugs.launchpad.net/zodb/+bug/475996)
- Object ids created in a savepoint that is rolled back wren't being
reused. (https://bugs.launchpad.net/zodb/+bug/588389)
- Database connections didn't invalidate cache entries when conflict
errors were raised in response to checkCurrentSerialInTransaction
errors. Normally, this shouldn't be a problem, since there should be
pending invalidations for these oids which will cause the object to
be invalidated. There have been issues with ZEO persistent cache
management that have caused out of date data to remain in the cache.
(It's possible that the last of these were addressed in the
3.10.0b5.) Invalidating read data when there is a conflict error
provides some extra insurance.
- The interface, ZODB.interfaces.IStorage was incorrect. The store
method should never return a sequence of oid and serial pairs.
- When a demo storage push method was used to create a new demo
storage and the new storage was closed, the original was
(incorrectly) closed.
- There were numerous bugs in the ZEO cache tracing and analysis code.
Cache simulation, while not perfect, seems to be much more accurate
now than it was before.
The ZEO cache trace statistics and simulation scripts have been
given more descriptive names and moved to the ZEO scripts package.
- BTree sets and tree sets didn't correctly check values passed to
update or to constructors, causing Python to exit under certain
circumstances.
- Fixed bug in copying a BTrees.Length instance.
(https://bugs.launchpad.net/zodb/+bug/516653)
- Fixed a serious bug that caused cache failures when run
with Python optimization turned on.
https://bugs.launchpad.net/zodb/+bug/544305
- When using using a ClientStorage in a Storage server, there was a
threading bug that caused clients to get disconnected.
- On Mac OS X, clients that connected and disconnected quickly could
cause a ZEO server to stop accepting connections, due to a failure
to catch errors in the initial part of the connection process.
The failure to properly handle exceptions while accepting
connections is potentially problematic on other platforms.
Fixes: https://bugs.launchpad.net/zodb/+bug/135108
- Object state management wasn't done correctly when classes
implemented custom _p_deavtivate methods.
(https://bugs.launchpad.net/zodb/+bug/185066)