2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-22 09:57:34 +00:00

postfix-2.11-20130319

This commit is contained in:
Wietse Venema 2013-03-18 22:12:26 -04:00 committed by Viktor Dukhovni
parent 8db6af2ac4
commit 2bb602fd21
12 changed files with 177 additions and 80 deletions

View File

@ -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.

View File

@ -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).

View File

@ -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.

View File

@ -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
====================================

View File

@ -311,14 +311,12 @@ name as used in "hash:table" is the database file name without the
<dd> A non-shared, in-memory hash table. Its content are lost when
a process terminates. </dd>
<dt> <b>lmdb</b> </dt>
<dt> <b>lmdb</b> (unsupported) </dt>
<dd> The OpenLDAP LMDB database (a memory-mapped, persistent file).
Database files are created with the <a href="postmap.1.html">postmap(1)</a> or <a href="postalias.1.html">postalias(1)</a>
command. The database name as used in "<a href="LMDB_README.html">lmdb</a>: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.
<dt> <b>ldap</b> (read-only) </dt>

View File

@ -19,6 +19,13 @@
<h2>Introduction</h2>
<dl> <dt> Note: </dt> <dd> <p> 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). </p> <p> Postfix may support LMDB again when without
exception all "out of storage" failure modes are resolved by
increasing the database size. </p> </dd> </dl>
<p> 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. </strong></p>
<dl>
<dt> Problem: </dt> <dd> <p> The "postmap <a href="LMDB_README.html">lmdb</a>:filename" command
fails with an MDB_TXN_FULL error. This problem does not exist with
other Postfix databases. </p> </dd>
<dt> Background: </dt>
<dd>
<p> 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 <a href="postconf.5.html#lmdb_map_size">lmdb_map_size</a>
value. </p>
<p> 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. </p> </dd>
<dt> Problem: </dt> <dd> <p> The "postmap <a href="LMDB_README.html">lmdb</a>:filename" command
fails with an MDB_MAP_FULL error. This problem does not exist with
other Postfix databases. </p> </dd>

View File

@ -195,8 +195,12 @@ POSTCONF(1) POSTCONF(1)
A non-shared, in-memory hash table. Its con-
tent are lost when a process terminates.
<b>lmdb</b> (unsupported)
The OpenLDAP LMDB database (a memory-mapped,
persistent file).
<b>ldap</b> (read-only)
Perform lookups using the LDAP protocol.
Perform lookups using the LDAP protocol.
This is described in <a href="ldap_table.5.html"><b>ldap_table</b>(5)</a>.
<b>memcache</b>
@ -204,156 +208,156 @@ POSTCONF(1) POSTCONF(1)
This is described in <a href="memcache_table.5.html"><b>memcache_table</b>(5)</a>.
<b>mysql</b> (read-only)
Perform lookups using the MYSQL protocol.
Perform lookups using the MYSQL protocol.
This is described in <a href="mysql_table.5.html"><b>mysql_table</b>(5)</a>.
<b>pcre</b> (read-only)
A lookup table based on Perl Compatible Reg-
ular Expressions. The file format is
ular Expressions. The file format is
described in <a href="pcre_table.5.html"><b>pcre_table</b>(5)</a>.
<b>pgsql</b> (read-only)
Perform lookups using the PostgreSQL proto-
Perform lookups using the PostgreSQL proto-
col. This is described in <a href="pgsql_table.5.html"><b>pgsql_table</b>(5)</a>.
<b>proxy</b> A lookup table that is implemented via the
Postfix <a href="proxymap.8.html"><b>proxymap</b>(8)</a> service. The table name
<b>proxy</b> A lookup table that is implemented via the
Postfix <a href="proxymap.8.html"><b>proxymap</b>(8)</a> service. The table name
syntax is <i>type</i><b>:</b><i>name</i>.
<b>regexp</b> (read-only)
A lookup table based on regular expressions.
The file format is described in <a href="regexp_table.5.html"><b>regexp_ta-</b></a>
The file format is described in <a href="regexp_table.5.html"><b>regexp_ta-</b></a>
<a href="regexp_table.5.html"><b>ble</b>(5)</a>.
<b>sdbm</b> An indexed file type based on hashing. This
is available on systems with support for
is available on systems with support for
SDBM databases.
<b>socketmap</b> (read-only)
Query a Sendmail-style socketmap server. The
name of the table specifies
<b>inet</b>:<i>host</i>:<i>port</i>:<i>socketmap-name</i> for a TCP-
name of the table specifies
<b>inet</b>:<i>host</i>:<i>port</i>:<i>socketmap-name</i> for a TCP-
based server, or <b>unix</b>:<i>pathname</i>:<i>socketmap-</i>
<i>name</i> for a UNIX-domain server. In both
cases, <i>socketmap-name</i> is the name of the
cases, <i>socketmap-name</i> is the name of the
socketmap.
<b>sqlite</b> (read-only)
Perform lookups from SQLite database files.
Perform lookups from SQLite database files.
This is described in <a href="sqlite_table.5.html"><b>sqlite_table</b>(5)</a>.
<b>static</b> (read-only)
A table that always returns its name as
lookup result. For example, <b><a href="DATABASE_README.html#types">static</a>:foobar</b>
always returns the string <b>foobar</b> as lookup
A table that always returns its name as
lookup result. For example, <b><a href="DATABASE_README.html#types">static</a>:foobar</b>
always returns the string <b>foobar</b> as lookup
result.
<b>tcp</b> (read-only)
Perform lookups using a simple request-reply
protocol that is described in <a href="tcp_table.5.html"><b>tcp_table</b>(5)</a>.
protocol that is described in <a href="tcp_table.5.html"><b>tcp_table</b>(5)</a>.
<b>texthash</b> (read-only)
Produces similar results as hash: files,
Produces similar results as hash: files,
except that you don't need to run the
<a href="postmap.1.html"><b>postmap</b>(1)</a> command before you can use the
file, and that it does not detect changes
<a href="postmap.1.html"><b>postmap</b>(1)</a> command before you can use the
file, and that it does not detect changes
after the file is read.
<b>unix</b> (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:
<b>unix:passwd.byname</b>
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
<b>passwd</b>(5) format.
<b>unix:group.byname</b>
The table is the UNIX group database.
The key is a group name. The result
is a group file entry in <b>group</b>(5)
The key is a group name. The result
is a group file entry in <b>group</b>(5)
format.
Other table types may exist depending on how Post-
Other table types may exist depending on how Post-
fix was built.
<b>-M</b> Show <a href="master.5.html"><b>master.cf</b></a> file contents instead of <a href="postconf.5.html"><b>main.cf</b></a>
file contents. Specify <b>-Mf</b> to fold long lines for
<b>-M</b> Show <a href="master.5.html"><b>master.cf</b></a> file contents instead of <a href="postconf.5.html"><b>main.cf</b></a>
file contents. Specify <b>-Mf</b> to fold long lines for
human readability.
If <i>service ...</i> is specified, only the matching ser-
vices will be output. For example, "<b>postconf -Mf</b>
<b>inet</b>" will output all services that listen on the
vices will be output. For example, "<b>postconf -Mf</b>
<b>inet</b>" will output all services that listen on the
network.
Specify zero or more arguments, each with a <i>ser-</i>
<i>vice-type</i> name (<b>inet</b>, <b>unix</b>, <b>fifo</b>, or <b>pass</b>) or with
a <i>service-name.service-type</i> pair, where <i>service-</i>
Specify zero or more arguments, each with a <i>ser-</i>
<i>vice-type</i> name (<b>inet</b>, <b>unix</b>, <b>fifo</b>, or <b>pass</b>) or with
a <i>service-name.service-type</i> pair, where <i>service-</i>
<i>name</i> is the first field of a <a href="master.5.html">master.cf</a> entry.
This feature is available with Postfix 2.9 and
This feature is available with Postfix 2.9 and
later.
<b>-n</b> Show only configuration parameters that have
explicit <i>name=value</i> settings in <a href="postconf.5.html"><b>main.cf</b></a>. Specify
<b>-n</b> Show only configuration parameters that have
explicit <i>name=value</i> settings in <a href="postconf.5.html"><b>main.cf</b></a>. Specify
<b>-nf</b> to fold long lines for human readability (Post-
fix 2.9 and later).
<b>-o</b> <i>name=value</i>
Override <a href="postconf.5.html"><b>main.cf</b></a> parameter settings.
This feature is available with Postfix 2.10 and
This feature is available with Postfix 2.10 and
later.
<b>-t</b> [<i>template</i><b>_</b><i>file</i>]
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 $<b>name</b> expressions.
To override the built-in templates, specify a tem-
plate file name at the end of the <a href="postconf.1.html"><b>postconf</b>(1)</a> com-
mand line, or specify a file name in <a href="postconf.5.html"><b>main.cf</b></a> with
To override the built-in templates, specify a tem-
plate file name at the end of the <a href="postconf.1.html"><b>postconf</b>(1)</a> com-
mand line, or specify a file name in <a href="postconf.5.html"><b>main.cf</b></a> with
the <b><a href="postconf.5.html#bounce_template_file">bounce_template_file</a></b> parameter.
To force selection of the built-in templates, spec-
ify an empty template file name on the <a href="postconf.1.html"><b>postconf</b>(1)</a>
ify an empty template file name on the <a href="postconf.1.html"><b>postconf</b>(1)</a>
command line (in shell language: "").
This feature is available with Postfix 2.3 and
This feature is available with Postfix 2.3 and
later.
<b>-v</b> Enable verbose logging for debugging purposes. Mul-
tiple <b>-v</b> options make the software increasingly
tiple <b>-v</b> options make the software increasingly
verbose.
<b>-x</b> Expand <i>$name</i> in <a href="postconf.5.html"><b>main.cf</b></a> or <a href="master.5.html"><b>master.cf</b></a> 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.
<b>-X</b> Edit the <a href="postconf.5.html"><b>main.cf</b></a> configuration file, and remove the
parameters named on the <a href="postconf.1.html"><b>postconf</b>(1)</a> command line.
parameters named on the <a href="postconf.1.html"><b>postconf</b>(1)</a> command line.
The file is copied to a temporary file then renamed
into place. Specify a list of parameter names, not
"<i>name=value</i>" pairs. There is no <a href="postconf.1.html"><b>postconf</b>(1)</a> com-
"<i>name=value</i>" pairs. There is no <a href="postconf.1.html"><b>postconf</b>(1)</a> 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.
<b>-#</b> Edit the <a href="postconf.5.html"><b>main.cf</b></a> configuration file, and comment
<b>-#</b> Edit the <a href="postconf.5.html"><b>main.cf</b></a> configuration file, and comment
out the parameters named on the <a href="postconf.1.html"><b>postconf</b>(1)</a> 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 "<i>name=value</i>" 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 "<i>name=value</i>" pairs. There is
no <a href="postconf.1.html"><b>postconf</b>(1)</a> 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.
<b>DIAGNOSTICS</b>
@ -364,18 +368,18 @@ POSTCONF(1) POSTCONF(1)
Directory with Postfix configuration files.
<b>CONFIGURATION PARAMETERS</b>
The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
The following <a href="postconf.5.html"><b>main.cf</b></a> 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
<a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including examples.
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
<a href="master.5.html">master.cf</a> configuration files.
<b><a href="postconf.5.html#bounce_template_file">bounce_template_file</a> (empty)</b>
Pathname of a configuration file with bounce mes-
Pathname of a configuration file with bounce mes-
sage templates.
<b>FILES</b>
@ -391,7 +395,7 @@ POSTCONF(1) POSTCONF(1)
<a href="DATABASE_README.html">DATABASE_README</a>, Postfix lookup table overview
<b>LICENSE</b>
The Secure Mailer license must be distributed with this
The Secure Mailer license must be distributed with this
software.
<b>AUTHOR(S)</b>

View File

@ -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).

View File

@ -311,14 +311,12 @@ name as used in "hash:table" is the database file name without the
<dd> A non-shared, in-memory hash table. Its content are lost when
a process terminates. </dd>
<dt> <b>lmdb</b> </dt>
<dt> <b>lmdb</b> (unsupported) </dt>
<dd> 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.
<dt> <b>ldap</b> (read-only) </dt>

View File

@ -19,6 +19,13 @@
<h2>Introduction</h2>
<dl> <dt> Note: </dt> <dd> <p> 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). </p> <p> Postfix may support LMDB again when without
exception all "out of storage" failure modes are resolved by
increasing the database size. </p> </dd> </dl>
<p> 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. </strong></p>
<dl>
<dt> Problem: </dt> <dd> <p> The "postmap lmdb:filename" command
fails with an MDB_TXN_FULL error. This problem does not exist with
other Postfix databases. </p> </dd>
<dt> Background: </dt>
<dd>
<p> 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. </p>
<p> 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. </p> </dd>
<dt> Problem: </dt> <dd> <p> The "postmap lmdb:filename" command
fails with an MDB_MAP_FULL error. This problem does not exist with
other Postfix databases. </p> </dd>

View File

@ -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).

View File

@ -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)