diff --git a/postfix/HISTORY b/postfix/HISTORY
index 6a75cbb04..c01254ea9 100644
--- a/postfix/HISTORY
+++ b/postfix/HISTORY
@@ -18288,3 +18288,13 @@ Apologies for any names omitted.
20130318
Portability: botched #ifdef. File: util/dict_lmdb.c.
+
+20130319
+
+ Postfix support for LMDB databases is withdrawn due to the
+ existence of a hard limit (an "out of storage" failure mode
+ that cannot be resolved by increasing the database size).
+
+ Postfix may support LMDB again when without exceptions all
+ "out of storage" failure modes are resolved by increasing
+ the database size.
diff --git a/postfix/README_FILES/DATABASE_README b/postfix/README_FILES/DATABASE_README
index ceb661b7d..a9fe9b06a 100644
--- a/postfix/README_FILES/DATABASE_README
+++ b/postfix/README_FILES/DATABASE_README
@@ -210,12 +210,11 @@ To find out what database types your Postfix system supports, use the "ppooss
iinntteerrnnaall
A non-shared, in-memory hash table. Its content are lost when a process
terminates.
- llmmddbb
+ llmmddbb (unsupported)
The OpenLDAP LMDB database (a memory-mapped, persistent file). Database
files are created with the postmap(1) or postalias(1) command. The
database name as used in "lmdb:table" is the database file name without
- the ".lmdb" suffix. This database type has unexpected limitations and
- is therefore not part of the stable Postfix release.
+ the ".lmdb" suffix.
llddaapp (read-only)
Perform lookups using the LDAP protocol. Configuration details are
given in the ldap_table(5).
diff --git a/postfix/README_FILES/LMDB_README b/postfix/README_FILES/LMDB_README
index e39d2777d..da1be827d 100644
--- a/postfix/README_FILES/LMDB_README
+++ b/postfix/README_FILES/LMDB_README
@@ -4,6 +4,14 @@ PPoossttffiixx OOppeennLLDDAAPP LLMMDDBB HHoowwttoo
IInnttrroodduuccttiioonn
+Note:
+ Postfix support for LMDB databases is withdrawn due to the existence of a
+ hard limit (an "out of storage" failure mode that cannot be resolved by
+ increasing the database size).
+
+ Postfix may support LMDB again when without exception all "out of storage"
+ failure modes are resolved by increasing the database size.
+
Postfix uses databases of various kinds to store and look up information.
Postfix databases are specified as "type:name". OpenLDAP LMDB implements the
Postfix database type "lmdb". The name of a Postfix OpenLDAP LMDB database is
@@ -70,6 +78,20 @@ that don't exist with other Postfix databases.
UUnneexxppeecctteedd ppoossttmmaapp((11))//ppoossttaalliiaass((11)) ""ddaattaabbaassee ffuullll"" eerrrroorrss..
+Problem:
+ The "postmap lmdb:filename" command fails with an MDB_TXN_FULL error. This
+ problem does not exist with other Postfix databases.
+
+Background:
+ The LMDB implementation has a hard limit on the total transaction size.
+ This limit is independent of the LMDB database size. Therefore, the problem
+ cannot be resolved by increasing the lmdb_map_size value.
+
+ This symptom is indicative of a flawed design. All LMDB data structures
+ should share the same storage pool so that they can scale with the database
+ size, and so that all "out of storage" errors are resolved by increasing
+ the database size.
+
Problem:
The "postmap lmdb:filename" command fails with an MDB_MAP_FULL error. This
problem does not exist with other Postfix databases.
diff --git a/postfix/RELEASE_NOTES b/postfix/RELEASE_NOTES
index ef167571b..6a9e1a782 100644
--- a/postfix/RELEASE_NOTES
+++ b/postfix/RELEASE_NOTES
@@ -14,6 +14,16 @@ specifies the release date of a stable release or snapshot release.
If you upgrade from Postfix 2.9 or earlier, read RELEASE_NOTES-2.10
before proceeding.
+Major changes with snapshot 20130319
+====================================
+
+Postfix support for LMDB databases is withdrawn due to the existence
+of a hard limit (an "out of storage" failure mode that cannot be
+resolved by increasing the database size).
+
+Postfix may support LMDB again when without exception all "out of
+storage" failure modes are resolved by increasing the database size.
+
Major changes with snapshot 20130315
====================================
diff --git a/postfix/html/DATABASE_README.html b/postfix/html/DATABASE_README.html
index 0c1169d99..775db1445 100644
--- a/postfix/html/DATABASE_README.html
+++ b/postfix/html/DATABASE_README.html
@@ -311,14 +311,12 @@ name as used in "hash:table" is the database file name without the
A non-shared, in-memory hash table. Its content are lost when
a process terminates.
- lmdb
+ lmdb (unsupported)
The OpenLDAP LMDB database (a memory-mapped, persistent file).
Database files are created with the postmap(1) or postalias(1)
command. The database name as used in "lmdb:table" is the database
-file name without the ".lmdb" suffix. This database type has
-unexpected limitations and is therefore not part of the stable
-Postfix release.
+file name without the ".lmdb" suffix.
ldap (read-only)
diff --git a/postfix/html/LMDB_README.html b/postfix/html/LMDB_README.html
index 4b3368145..f26210325 100644
--- a/postfix/html/LMDB_README.html
+++ b/postfix/html/LMDB_README.html
@@ -19,6 +19,13 @@
Introduction
+ - Note:
-
Postfix support for LMDB databases
+is withdrawn due to the existence of a hard limit (an "out of
+storage" failure mode that cannot be resolved by increasing the
+database size).
Postfix may support LMDB again when without
+exception all "out of storage" failure modes are resolved by
+increasing the database size.
+
Postfix uses databases of various kinds to store and look up
information. Postfix databases are specified as "type:name".
OpenLDAP LMDB implements the Postfix database type "lmdb".
@@ -120,6 +127,24 @@ errors.
+- Problem:
-
The "postmap lmdb:filename" command
+fails with an MDB_TXN_FULL error. This problem does not exist with
+other Postfix databases.
+
+- Background:
+
+-
+
+
The LMDB implementation has a hard limit on the total transaction
+size. This limit is independent of the LMDB database size. Therefore,
+the problem cannot be resolved by increasing the lmdb_map_size
+value.
+
+ This symptom is indicative of a flawed design. All LMDB data
+structures should share the same storage pool so that they can scale
+with the database size, and so that all "out of storage" errors are
+resolved by increasing the database size.
+
- Problem:
-
The "postmap lmdb:filename" command
fails with an MDB_MAP_FULL error. This problem does not exist with
other Postfix databases.
diff --git a/postfix/html/postconf.1.html b/postfix/html/postconf.1.html
index 309215529..e411e8c22 100644
--- a/postfix/html/postconf.1.html
+++ b/postfix/html/postconf.1.html
@@ -195,8 +195,12 @@ POSTCONF(1) POSTCONF(1)
A non-shared, in-memory hash table. Its con-
tent are lost when a process terminates.
+ lmdb (unsupported)
+ The OpenLDAP LMDB database (a memory-mapped,
+ persistent file).
+
ldap (read-only)
- Perform lookups using the LDAP protocol.
+ Perform lookups using the LDAP protocol.
This is described in ldap_table(5).
memcache
@@ -204,156 +208,156 @@ POSTCONF(1) POSTCONF(1)
This is described in memcache_table(5).
mysql (read-only)
- Perform lookups using the MYSQL protocol.
+ Perform lookups using the MYSQL protocol.
This is described in mysql_table(5).
pcre (read-only)
A lookup table based on Perl Compatible Reg-
- ular Expressions. The file format is
+ ular Expressions. The file format is
described in pcre_table(5).
pgsql (read-only)
- Perform lookups using the PostgreSQL proto-
+ Perform lookups using the PostgreSQL proto-
col. This is described in pgsql_table(5).
- proxy A lookup table that is implemented via the
- Postfix proxymap(8) service. The table name
+ proxy A lookup table that is implemented via the
+ Postfix proxymap(8) service. The table name
syntax is type:name.
regexp (read-only)
A lookup table based on regular expressions.
- The file format is described in regexp_ta-
+ The file format is described in regexp_ta-
ble(5).
sdbm An indexed file type based on hashing. This
- is available on systems with support for
+ is available on systems with support for
SDBM databases.
socketmap (read-only)
Query a Sendmail-style socketmap server. The
- name of the table specifies
- inet:host:port:socketmap-name for a TCP-
+ name of the table specifies
+ inet:host:port:socketmap-name for a TCP-
based server, or unix:pathname:socketmap-
name for a UNIX-domain server. In both
- cases, socketmap-name is the name of the
+ cases, socketmap-name is the name of the
socketmap.
sqlite (read-only)
- Perform lookups from SQLite database files.
+ Perform lookups from SQLite database files.
This is described in sqlite_table(5).
static (read-only)
- A table that always returns its name as
- lookup result. For example, static:foobar
- always returns the string foobar as lookup
+ A table that always returns its name as
+ lookup result. For example, static:foobar
+ always returns the string foobar as lookup
result.
tcp (read-only)
Perform lookups using a simple request-reply
- protocol that is described in tcp_table(5).
+ protocol that is described in tcp_table(5).
texthash (read-only)
- Produces similar results as hash: files,
+ Produces similar results as hash: files,
except that you don't need to run the
- postmap(1) command before you can use the
- file, and that it does not detect changes
+ postmap(1) command before you can use the
+ file, and that it does not detect changes
after the file is read.
unix (read-only)
- A limited way to query the UNIX authentica-
+ A limited way to query the UNIX authentica-
tion database. The following tables are
implemented:
unix:passwd.byname
- The table is the UNIX password data-
- base. The key is a login name. The
- result is a password file entry in
+ The table is the UNIX password data-
+ base. The key is a login name. The
+ result is a password file entry in
passwd(5) format.
unix:group.byname
The table is the UNIX group database.
- The key is a group name. The result
- is a group file entry in group(5)
+ The key is a group name. The result
+ is a group file entry in group(5)
format.
- Other table types may exist depending on how Post-
+ Other table types may exist depending on how Post-
fix was built.
- -M Show master.cf file contents instead of main.cf
- file contents. Specify -Mf to fold long lines for
+ -M Show master.cf file contents instead of main.cf
+ file contents. Specify -Mf to fold long lines for
human readability.
If service ... is specified, only the matching ser-
- vices will be output. For example, "postconf -Mf
- inet" will output all services that listen on the
+ vices will be output. For example, "postconf -Mf
+ inet" will output all services that listen on the
network.
- Specify zero or more arguments, each with a ser-
- vice-type name (inet, unix, fifo, or pass) or with
- a service-name.service-type pair, where service-
+ Specify zero or more arguments, each with a ser-
+ vice-type name (inet, unix, fifo, or pass) or with
+ a service-name.service-type pair, where service-
name is the first field of a master.cf entry.
- This feature is available with Postfix 2.9 and
+ This feature is available with Postfix 2.9 and
later.
- -n Show only configuration parameters that have
- explicit name=value settings in main.cf. Specify
+ -n Show only configuration parameters that have
+ explicit name=value settings in main.cf. Specify
-nf to fold long lines for human readability (Post-
fix 2.9 and later).
-o name=value
Override main.cf parameter settings.
- This feature is available with Postfix 2.10 and
+ This feature is available with Postfix 2.10 and
later.
-t [template_file]
- Display the templates for text that appears at the
- beginning of delivery status notification (DSN)
+ Display the templates for text that appears at the
+ beginning of delivery status notification (DSN)
messages, without expanding $name expressions.
- To override the built-in templates, specify a tem-
- plate file name at the end of the postconf(1) com-
- mand line, or specify a file name in main.cf with
+ To override the built-in templates, specify a tem-
+ plate file name at the end of the postconf(1) com-
+ mand line, or specify a file name in main.cf with
the bounce_template_file parameter.
To force selection of the built-in templates, spec-
- ify an empty template file name on the postconf(1)
+ ify an empty template file name on the postconf(1)
command line (in shell language: "").
- This feature is available with Postfix 2.3 and
+ This feature is available with Postfix 2.3 and
later.
-v Enable verbose logging for debugging purposes. Mul-
- tiple -v options make the software increasingly
+ tiple -v options make the software increasingly
verbose.
-x Expand $name in main.cf or master.cf parameter val-
ues. The expansion is recursive.
- This feature is available with Postfix 2.10 and
+ This feature is available with Postfix 2.10 and
later.
-X Edit the main.cf configuration file, and remove the
- parameters named on the postconf(1) command line.
+ parameters named on the postconf(1) command line.
The file is copied to a temporary file then renamed
into place. Specify a list of parameter names, not
- "name=value" pairs. There is no postconf(1) com-
+ "name=value" pairs. There is no postconf(1) com-
mand to perform the reverse operation.
- This feature is available with Postfix 2.10 and
+ This feature is available with Postfix 2.10 and
later.
- -# Edit the main.cf configuration file, and comment
+ -# Edit the main.cf configuration file, and comment
out the parameters named on the postconf(1) command
- line, so that those parameters revert to their
- default values. The file is copied to a temporary
- file then renamed into place. Specify a list of
- parameter names, not "name=value" pairs. There is
+ line, so that those parameters revert to their
+ default values. The file is copied to a temporary
+ file then renamed into place. Specify a list of
+ parameter names, not "name=value" pairs. There is
no postconf(1) command to perform the reverse oper-
ation.
- This feature is available with Postfix 2.6 and
+ This feature is available with Postfix 2.6 and
later.
DIAGNOSTICS
@@ -364,18 +368,18 @@ POSTCONF(1) POSTCONF(1)
Directory with Postfix configuration files.
CONFIGURATION PARAMETERS
- The following main.cf parameters are especially relevant
+ The following main.cf parameters are especially relevant
to this program.
- The text below provides only a parameter summary. See
+ The text below provides only a parameter summary. See
postconf(5) for more details including examples.
config_directory (see 'postconf -d' output)
- The default location of the Postfix main.cf and
+ The default location of the Postfix main.cf and
master.cf configuration files.
bounce_template_file (empty)
- Pathname of a configuration file with bounce mes-
+ Pathname of a configuration file with bounce mes-
sage templates.
FILES
@@ -391,7 +395,7 @@ POSTCONF(1) POSTCONF(1)
DATABASE_README, Postfix lookup table overview
LICENSE
- The Secure Mailer license must be distributed with this
+ The Secure Mailer license must be distributed with this
software.
AUTHOR(S)
diff --git a/postfix/man/man1/postconf.1 b/postfix/man/man1/postconf.1
index 9cbd7518c..080087767 100644
--- a/postfix/man/man1/postconf.1
+++ b/postfix/man/man1/postconf.1
@@ -183,6 +183,9 @@ databases.
.IP \fBinternal\fR
A non-shared, in-memory hash table. Its content are lost
when a process terminates.
+.IP "\fBlmdb\fR (unsupported)"
+The OpenLDAP LMDB database (a memory-mapped, persistent
+file).
.IP "\fBldap\fR (read-only)"
Perform lookups using the LDAP protocol. This is described
in \fBldap_table\fR(5).
diff --git a/postfix/proto/DATABASE_README.html b/postfix/proto/DATABASE_README.html
index 0de4f55a2..591cf0d02 100644
--- a/postfix/proto/DATABASE_README.html
+++ b/postfix/proto/DATABASE_README.html
@@ -311,14 +311,12 @@ name as used in "hash:table" is the database file name without the
- A non-shared, in-memory hash table. Its content are lost when
a process terminates.
-- lmdb
+- lmdb (unsupported)
- The OpenLDAP LMDB database (a memory-mapped, persistent file).
Database files are created with the postmap(1) or postalias(1)
command. The database name as used in "lmdb:table" is the database
-file name without the ".lmdb" suffix. This database type has
-unexpected limitations and is therefore not part of the stable
-Postfix release.
+file name without the ".lmdb" suffix.
- ldap (read-only)
diff --git a/postfix/proto/LMDB_README.html b/postfix/proto/LMDB_README.html
index 4220785dd..df47dc431 100644
--- a/postfix/proto/LMDB_README.html
+++ b/postfix/proto/LMDB_README.html
@@ -19,6 +19,13 @@
Introduction
+ - Note:
-
Postfix support for LMDB databases
+is withdrawn due to the existence of a hard limit (an "out of
+storage" failure mode that cannot be resolved by increasing the
+database size).
Postfix may support LMDB again when without
+exception all "out of storage" failure modes are resolved by
+increasing the database size.
+
Postfix uses databases of various kinds to store and look up
information. Postfix databases are specified as "type:name".
OpenLDAP LMDB implements the Postfix database type "lmdb".
@@ -120,6 +127,24 @@ errors.
+- Problem:
-
The "postmap lmdb:filename" command
+fails with an MDB_TXN_FULL error. This problem does not exist with
+other Postfix databases.
+
+- Background:
+
+-
+
+
The LMDB implementation has a hard limit on the total transaction
+size. This limit is independent of the LMDB database size. Therefore,
+the problem cannot be resolved by increasing the lmdb_map_size
+value.
+
+ This symptom is indicative of a flawed design. All LMDB data
+structures should share the same storage pool so that they can scale
+with the database size, and so that all "out of storage" errors are
+resolved by increasing the database size.
+
- Problem:
-
The "postmap lmdb:filename" command
fails with an MDB_MAP_FULL error. This problem does not exist with
other Postfix databases.
diff --git a/postfix/src/postconf/postconf.c b/postfix/src/postconf/postconf.c
index 95bea1702..9b0344c69 100644
--- a/postfix/src/postconf/postconf.c
+++ b/postfix/src/postconf/postconf.c
@@ -177,6 +177,9 @@
/* .IP \fBinternal\fR
/* A non-shared, in-memory hash table. Its content are lost
/* when a process terminates.
+/* .IP "\fBlmdb\fR (unsupported)"
+/* The OpenLDAP LMDB database (a memory-mapped, persistent
+/* file).
/* .IP "\fBldap\fR (read-only)"
/* Perform lookups using the LDAP protocol. This is described
/* in \fBldap_table\fR(5).
diff --git a/postfix/src/util/dict_lmdb.c b/postfix/src/util/dict_lmdb.c
index 62d882a3a..3b692facb 100644
--- a/postfix/src/util/dict_lmdb.c
+++ b/postfix/src/util/dict_lmdb.c
@@ -22,11 +22,11 @@
/* size the table can grow to, so it must be set large enough
/* to accomodate the largest tables in use.
/*
-/* As a safety measure, when Postfix opens an LMDB database it
-/* will set the memory size limit to at least 3x the
-/* ".lmdb" file size, so that there is room for the file to
-/* grow. This ensures continued availability of Postfix daemon
-/* processes.
+/* As a safety measure, when Postfix opens an LMDB database
+/* it will set the memory map size to at least 3x the ".lmdb"
+/* file size, so that there is room for the file to grow. This
+/* ensures that a process can recover from a "table full" error
+/* with a simple terminate-and-restart.
/* DIAGNOSTICS
/* Fatal errors: cannot open file, file write error, out of memory.
/* SEE ALSO
@@ -472,11 +472,11 @@ DICT *dict_lmdb_open(const char *path, int open_flags, int dict_flags)
/*
* Try to ensure that the LMDB size limit is at least 3x the current LMDB
- * file size. This should be sufficient to ensure that short-lived
- * Postfix daemon processes can recover from a "table full" error.
+ * file size. This ensures that Postfix daemon processes can recover from
+ * a "table full" error with a simple terminate-and-restart.
*
- * Note: readers must increase their LMDB size limit, too, otherwise they
- * won't be able to continue reading a table after grows.
+ * Note: read-only applications must increase their LMDB size limit, too,
+ * otherwise they won't be able to read a table after it grows.
*/
#ifndef SIZE_T_MAX
#define SIZE_T_MAX __MAXINT__(size_t)