查看源代码 Mnesia 发行说明

本文档描述了 Mnesia 系统从一个版本到另一个版本所做的更改。本文档的目的是列出 Mnesia 的每个版本的所有不兼容性以及所有增强功能和错误修复。因此,Mnesia 的每个版本都构成了本文档中的一个部分。每个部分的标题是 Mnesia 的版本号。

Mnesia 4.23.3

修复的错误和故障

  • ext_copies 转换为 disc_copies 的 Mnesia 表现在将正确保存到磁盘。

    自身 ID:OTP-19292 辅助 ID:PR-8921GH-8706

  • 如果在检查点初始化期间删除了表,Mnesia 可能会崩溃。

    自身 ID:OTP-19368 辅助 ID:ERIERL-1154,PR-9093

Mnesia 4.23.2

修复的错误和故障

  • mnesia_registry 模块已被弃用。

    自身 ID:OTP-18994

改进和新功能

  • 文档已迁移为使用 Markdown 和 ExDoc。

    自身 ID:OTP-18955 辅助 ID:PR-8026

Mnesia 4.23.1.1

修复的错误和故障

  • 如果在检查点初始化期间删除了表,Mnesia 可能会崩溃。

    自身 ID:OTP-19368 辅助 ID:ERIERL-1154,PR-9093

Mnesia 4.23.1

修复的错误和故障

  • 如果在加载表时调用 del_table_copy/2add_table_copy/3,Mnesia 可能会在启动期间崩溃。

    自身 ID:OTP-19076 辅助 ID:ERIERL-1073

Mnesia 4.23

修复的错误和故障

改进和新功能

  • 如果 disc_only 表具有索引,则恢复重建可能会崩溃。

    自身 ID:OTP-18843 辅助 ID:GH-7766

Mnesia 4.22.1

修复的错误和故障

  • 如果新备份失败,则不要删除旧备份文件。

    自身 ID:OTP-18711 辅助 ID:ERIERL-963

Mnesia 4.22

改进和新功能

  • 添加了活动事务的调试统计信息。

    自身 ID:OTP-18309 辅助 ID:PR-6377

  • 已修复实现,以在适当的情况下使用 proc_lib:init_fail/2,3,而不是 proc_lib:init_ack/1,2

    * 可能不兼容 *

    自身 ID:OTP-18490 辅助 ID:OTP-18471,GH-6339,PR-6843

Mnesia 4.21.4.3

修复的错误和故障

  • 如果在加载表时调用 del_table_copy/2add_table_copy/3,Mnesia 可能会在启动期间崩溃。

    自身 ID:OTP-19076 辅助 ID:ERIERL-1073

Mnesia 4.21.4.2

修复的错误和故障

Mnesia 4.21.4.1

修复的错误和故障

  • 如果新备份失败,则不要删除旧备份文件。

    自身 ID:OTP-18711 辅助 ID:ERIERL-963

Mnesia 4.21.4

修复的错误和故障

  • 当使用 add_table_copy/3 添加表时,提高了脏写的兼容性。

    修复了粘性写入问题,该问题可能导致数据不一致。

    自身 ID:OTP-18412

改进和新功能

  • 将 size/1 替换为 tuple_size/1 或 byte_size/1

    JIT 不会优化 size/1 BIF,并且其使用可能会导致 Dialyzer 的类型更差。

    当知道被测试的值必须是元组时,应始终首选 tuple_size/1

    当知道被测试的值必须是二进制时,应首选 byte_size/1。但是,byte_size/1 也接受位串(将大小向上舍入为整数个字节),因此必须确保在调用 byte_size/ 之前调用 is_binary/1 以确保拒绝位串。请注意,编译器会删除对 is_binary/1 的冗余调用,因此如果不确定之前的代码是否已确保参数是二进制,则在调用 byte_size/1 之前添加 is_binary/1 测试不会造成任何损害。

    自身 ID:OTP-18432 辅助 ID:GH-6672,PR-6793,PR-6784,PR-6787,PR-6785,PR-6682,PR-6800,PR-6797,PR-6798,PR-6799,PR-6796,PR-6813,PR-6671,PR-6673,PR-6684,PR-6694,GH-6677,PR-6696,PR-6670,PR-6674

Mnesia 4.21.3

修复的错误和故障

  • 修复了如果从远程节点发送过多的决策,则可能在启动期间发生的崩溃。

    自身 ID:OTP-18319 辅助 ID:ERIERL-875

Mnesia 4.21.2

修复的错误和故障

  • 如果由于分区网络导致 mnesia 无法连接到所有节点,则不要填写日志。

    自身 ID:OTP-18288 辅助 ID:ERIERL-868

Mnesia 4.21.1

修复的错误和故障

  • 修复了 add_table_copy,如果在操作期间接收节点关闭,则可能留下表锁。

    自身 ID:OTP-18128 辅助 ID:PR-6013

Mnesia 4.21

改进和新功能

  • 文档修复。

    自身 ID:OTP-17930

Mnesia 4.20.4.4

修复的错误和故障

Mnesia 4.20.4.3

修复的错误和故障

  • 如果新备份失败,则不要删除旧备份文件。

    自身 ID:OTP-18711 辅助 ID:ERIERL-963

Mnesia 4.20.4.2

修复的错误和故障

  • 如果由于分区网络导致 mnesia 无法连接到所有节点,则不要填写日志。

    自身 ID:OTP-18288 辅助 ID:ERIERL-868

  • 修复了如果从远程节点发送过多的决策,则可能在启动期间发生的崩溃。

    自身 ID:OTP-18319 辅助 ID:ERIERL-875

Mnesia 4.20.4.1

修复的错误和故障

  • 修复了 add_table_copy,如果在操作期间接收节点关闭,则可能留下表锁。

    自身 ID:OTP-18128 辅助 ID:PR-6013

Mnesia 4.20.4

修复的错误和故障

  • 修复了 mnesia:add_table_copy/3,以便在另一个节点上启动 mnesia 时调用它不会失败或导致节点挂起。

    自身 ID:OTP-18056

Mnesia 4.20.3

改进和新功能

  • 优化锁定器以处理同一记录上的多个读取锁。

    自身 ID:OTP-17973 辅助 ID:ERIERL-772

Mnesia 4.20.2

改进和新特性

  • 减少表复制期间获取的锁的数量,应缩短大型系统上的启动时间。

    自身 ID:OTP-17656 辅助 ID:ERIERL-688

Mnesia 4.20.1

修复的错误和故障

  • 文档和少量代码清理。

    自身 ID:OTP-17727

Mnesia 4.20

修复的错误和故障

  • 修复了当 mnesia:delete_object/1 尝试删除不存在的记录时,集合表的索引键被删除的问题。

    自身 ID:OTP-17564 辅助 ID:GH-5040

改进和新特性

  • 优化了表加载,并添加了 max_transfer_size 配置参数。

    自身 ID:OTP-17508

Mnesia 4.19.1

修复的错误和故障

  • 已将弃用警告的抑制添加到 Mnesia 应用程序的源文件中。

    自身 ID:OTP-17217

  • 修复了后端插件初始化仅执行一次的问题。

    自身 ID:OTP-17294 辅助 ID:GH-4525 PR-4674

Mnesia 4.19

修复的错误和故障

  • 修复了 disc_only_copies 的类型规范。

    自身 ID:OTP-17249 辅助 ID:PR-4578

  • 如果 mnesia 正在停止或启动,则不要在 mnesia:change_config/2 中崩溃。

    自身 ID:OTP-17274 辅助 ID:GH-4616

改进和新特性

  • 优化了在加载期间更新的表的表加载时间。

    自身 ID:OTP-17271 辅助 ID:PR-4575

Mnesia 4.18.1

修复的错误和故障

  • 避免潜在的性能问题,如果 mnesia_tm 的输入队列很长。

    自身 ID:OTP-17066 辅助 ID:PR-2889

Mnesia 4.18

修复的错误和故障

  • 修复了事务存储中 mnesia 删除对象的处理。在事务中,mnesia:read/1 可能会指示在删除另一个对象后,存在的对象不存在。

    自身 ID:OTP-16782 辅助 ID:PR-2663

改进和新特性

  • 修复了启动期间可能发生的崩溃,如果另一个节点上删除了表。

    自身 ID:OTP-16815 辅助 ID:ERIERL-500

Mnesia 4.17

修复的错误和故障

  • 使 mnesia:create_table/2 返回正确的 badarg 值。

    自身 ID:OTP-16072 辅助 ID:PR-2320

  • 修复了 mnesia 有时在启动期间不等待非对称事务提交决定的错误。

    自身 ID:OTP-16634 辅助 ID:PR-2610 ERL-1227

改进和新特性

  • 删除 I/O 协议旧请求的使用和文档。

    自身 ID:OTP-15695

  • 避免使用 rpc 调用来读取表,这将减少 rpc 服务器的负载并提高性能。

    自身 ID:OTP-16189

Mnesia 4.16.3.1

改进和新特性

  • 修复了启动期间可能发生的崩溃,如果另一个节点上删除了表。

    自身 ID:OTP-16815 辅助 ID:ERIERL-500

Mnesia 4.16.3

修复的错误和故障

  • 修复了卸载回退功能中的定时问题。

    自身 ID:OTP-16468 辅助 ID:ERL-1151

Mnesia 4.16.2

修复的错误和故障

  • 修复了尝试从包含 sticky_locks 的事务失败中恢复时可能发生的 mnesia 崩溃。

    自身 ID:OTP-16286 辅助 ID:ERL-1077

  • 修复了 mnesia 索引问题。当使用索引插件后端更新记录时可能会发生。

    自身 ID:OTP-16291 辅助 ID:ERL-1091

Mnesia 4.16.1

修复的错误和故障

  • 如果在新节点启动时调用 mnesia:add_table_copy/3,可能会导致死锁。

    自身 ID:OTP-15933 辅助 ID:ERL-872

  • 带有粘性锁的事务可能会使用 async_asym 事务以错误的顺序提交,因为 asym 事务是在远程节点上生成的。

    为了修复此错误,必须更新 mnesia 节点之间的通信协议,因此 mnesia 将不再能够连接到早于 mnesia-4.14、OTP-19.0 的节点。

    * 可能不兼容 *

    自身 ID:OTP-15979 辅助 ID:ERL-768

Mnesia 4.16

修复的错误和故障

  • 如果数据在同一事务中写入,则优化 mnesia:read/1。

    自身 ID:OTP-15550 辅助 ID:PR-2029

  • 修复了表索引插件处理中的错误。

    自身 ID:OTP-15689 辅助 ID:PR-1695 ERL-556

改进和新特性

  • 优化了使用插件后端的表的转储。

    自身 ID:OTP-15588 辅助 ID:PR-2102

  • 如果脏活动出错,则在异常中包含堆栈跟踪,因此如果用户匹配抛出的错误,则可能不再匹配。

    * 可能不兼容 *

    自身 ID:OTP-15804 辅助 ID:PR-2216

Mnesia 4.15.6

修复的错误和故障

  • 避免由于竞争条件引起的过载警告。

    自身 ID:OTP-15619 辅助 ID:ERIERL-310

Mnesia 4.15.5

修复的错误和故障

  • 修复了 mnesia:change_config/2 的类型规范。

    自身 ID:OTP-15201 辅助 ID:PR-1881

  • 当没有可用的 disc_copies 时,如果设置了主节点,请不要强制从 ram_copies 副本加载,因为那样会加载一个空表。等待直到磁盘副本可用或直到用户显式强制加载该表。

    自身 ID:OTP-15221 辅助 ID:ERIERL-217

  • 即使所有其他副本都已关闭,也允许添加副本,如果其他副本未存储在磁盘上。

    自身 ID:OTP-15226 辅助 ID:ERIERL-221

  • 修复了 mnesia:delete_object/1 错误,其中如果 delete_object 在同一事务中写入,即使写入了不同的值,也会删除记录。

    自身 ID:OTP-15231 辅助 ID:PR-1858

  • 修复了删除对象时未删除包表索引数据的错误。

    自身 ID:OTP-15243

Mnesia 4.15.4

改进和新特性

  • 删除了对 erlang:get_stacktrace() 的调用。

    自身 ID:OTP-14861

Mnesia 4.15.3.1

修复的错误和故障

  • 当没有可用的 disc_copies 时,如果设置了主节点,请不要强制从 ram_copies 副本加载,因为那样会加载一个空表。等待直到磁盘副本可用或直到用户显式强制加载该表。

    自身 ID:OTP-15221 辅助 ID:ERIERL-217

  • 即使所有其他副本都已关闭,也允许添加副本,如果其他副本未存储在磁盘上。

    自身 ID:OTP-15226 辅助 ID:ERIERL-221

Mnesia 4.15.3

修复的错误和故障

  • 删除了启动时的二次行为。此更改意味着必须在创建架构时或在 mnesia 启动之前通过配置参数设置后端插件(如果使用)。

    自身 ID:OTP-14829 辅助 ID:ERIERL-84

  • 在具有相同检查点名称的不同表上停用并重新激活检查点后,糟糕的计时可能会导致 mnesia 崩溃。

    自身 ID:OTP-14841 辅助 ID:ERIERL-113

Mnesia 4.15.2

修复的错误和故障

  • 修复了备份错误处理,未返回真正的失败原因。

    自身 ID:OTP-14776 辅助 ID:ERIERL-103

Mnesia 4.15.1

改进和新特性

  • 常规 Unicode 改进。

    自身 ID:OTP-14462

Mnesia 4.15

改进和新特性

  • 删除了扩展插件处理中选择延续的包装。如果使用,这可能需要用户重写用户后端插件。

    * 可能不兼容 *

    自有 ID: OTP-14039

Mnesia 4.14.3

修复的 Bug 和故障

  • 修复了在备份期间删除表时检查点处理中的崩溃问题。

    自有 ID: OTP-14167

Mnesia 4.14.2

修复的 Bug 和故障

  • mnesia:select/[14] 返回的延续应可在不同的非事务性活动中重用。

    自有 ID: OTP-13944 辅助 ID: PR-1184

  • 修复了多次调用 block_table 时发生的崩溃问题。当长时间持有锁并重启 mnesia 时可能发生这种情况。

    自有 ID: OTP-13970 辅助 ID: Seq-13198

  • 更改 mnesia_tm 进程以拥有堆外消息,因为 mnesia_tm 可以是来自其他节点的许多非同步消息的接收者。

    自有 ID: OTP-14074

Mnesia 4.14.1

改进和新功能

  • 修正了一些小的文档问题。

    自有 ID: OTP-13891

Mnesia 4.14

改进和新功能

  • 添加了实验性的外部后端插件 API。这增加了用户编写其他数据存储后端的可能性,例如通过使用共享内存或 RAM 缓存的磁盘存储。

    该插件 API 在经过实战测试后,可能会在未来的版本中发生变化。

    自有 ID: OTP-13058

Mnesia 4.13.4

修复的 Bug 和故障

  • Mnesia 事务在等待已停止的节点的响应时可能会挂起。

    自有 ID: OTP-13423

Mnesia 4.13.3

修复的 Bug 和故障

Mnesia 4.13.2

修复的 Bug 和故障

  • 修复了 mnesia:restore/2 中的进程和文件描述符泄漏问题。

    自有 ID: OTP-13025 辅助 ID: seq12957

Mnesia 4.13.1

修复的 Bug 和故障

  • 改进了索引更新,以避免 dirty_index_read 中的时序故障。

    自有 ID: OTP-12972

Mnesia 4.13

修复的 Bug 和故障

  • 当发生错误时,Mnesia 的 dirty 函数并非总是按文档记录的那样以 {aborted, Reason} 退出。

    自有 ID: OTP-12714

  • 将文件描述符限制 (emfile) 视为致命错误,并且不删除日志文件。以前,该错误被视为磁盘损坏,并且删除了日志文件,从而导致数据丢失。

    自有 ID: OTP-12807

改进和新功能

  • 使 Mnesia DCD 在启动时的转储行为成为可选的,关闭后,mnesia 加载大型 disc_copies 表的速度会更快。

    自有 ID: OTP-12481

Mnesia 4.12.5

修复的 Bug 和故障

  • 修复了协议协商中的竞争条件。

    自有 ID: OTP-12473

改进和新功能

  • 语法更正。(感谢 Derek Brown)

    自有 ID: OTP-12400

Mnesia 4.12.4

修复的 Bug 和故障

  • 修复了 mnesia 文档中的拼写错误。

    自有 ID: OTP-12278

  • 当在调用匹配之前在同一事务中写入数据时,使用 mnesia:match_object/1 匹配数据在某些情况下无法按预期工作。

    自有 ID: OTP-12304 辅助 ID: Seq12745

Mnesia 4.12.3

修复的 Bug 和故障

  • 各种日志修复,包括:将运行队列索引添加到崩溃转储中的进程转储中。
    崩溃时将线程索引添加到 enomem 标语中。
    删除向同一节点的旧实例发送消息的错误记录器消息。

    自有 ID: OTP-12115

Mnesia 4.12.2

修复的 Bug 和故障

  • 修复了在事务期间节点关闭时可能导致 create_table 失败的竞争问题。

    自有 ID: OTP-12124 辅助 ID: seq12694

Mnesia 4.12.1

修复的 Bug 和故障

  • 当节点在启动期间消失时,强制加载表可能会挂起。

    自有 ID: OTP-11948 辅助 ID: seq12585

  • 大大减少了为具有大量锁的事务插入锁的时间。

    自有 ID: OTP-11981

Mnesia 4.12

修复的 Bug 和故障

  • 一些从列表中删除最后一个元素的本地实现被 lists:droplast/1 替换。请注意,这至少需要 stdlib-2.0,它是 OTP 17.0 中提供的 stdlib 版本。(感谢 Hans Svensson)

    自有 ID: OTP-11678

  • 以下应用程序的应用程序升级 (appup) 文件已更正

    asn1、common_test、compiler、crypto、debugger、dialyzer、edoc、eldap、erl_docgen、et、eunit、gs、hipe、inets、observer、odbc、os_mon、otp_mibs、parsetools、percept、public_key、reltool、runtime_tools、ssh、syntax_tools、test_server、tools、typer、webtool、wx、xmerl

    在 test_server 中添加了一个用于测试 appup 文件的新测试实用程序。现在,OTP 中的大多数应用程序都使用它。

    (感谢 Tobias Schlager)

    自有 ID: OTP-11744

改进和新功能

  • 为了防止在收到节点关闭和节点启动事件时出现短暂的通信问题,现在存储这些事件,并在 mnesia 将节点标记为关闭之前检查该节点是否刚刚启动。(感谢 Jonas Falkevik)

    自有 ID: OTP-11497

  • 添加了 mnesia:sync_log/0 以显式同步 mnesia 的事务日志。

    自有 ID: OTP-11729

Mnesia 4.11

修复的 Bug 和故障

  • 修复了 mnesia 中的一个竞争问题,该问题在使用粘性锁时可能导致事务挂起。感谢 janchochol。

    自有 ID: OTP-11375

  • 修复了 dirty_update_counter 可能返回 ok 的问题,感谢 Anton Ryabkov。

    自有 ID: OTP-11485

Mnesia 4.10

修复的 Bug 和故障

  • 修复了检查点创建中的时序问题。

    自有 ID: OTP-10957

改进和新功能

  • 修复了在调用 mnesia:uninstall_fallback 且 mnesia 未启动时删除回退 BUP 文件的问题。

    自有 ID: OTP-11241

Mnesia 4.9

修复的 Bug 和故障

  • 如果在表加载期间在该表上调用 mnesia:clear_table/2,则会将模式记录写入表,而不是清除表。

    自有 ID: OTP-11030 辅助 ID: seq12267

改进和新功能

  • 优化了 Mnesia set 表的索引创建。感谢 Nick Marino。

    自有 ID: OTP-11103

Mnesia 4.8

修复的 Bug 和故障

  • 使用链式 send_after 而不是 send_interval,以减少睡眠后发送的消息数量(感谢 James Wheare)

    自有 ID: OTP-10636

  • 修复了 mnesia 过载消息的格式(感谢 Ahmed Omar)

    自有 ID: OTP-10639

改进和新功能

  • 添加了一个用于执行 Erlang/OTP 基准测试的通用框架。Erlang VM 和 mnesia 的基准测试已纳入该框架中。

    有关如何添加更多基准测试的详细信息,请参阅源代码发行版中的 $ERL_TOP/HOWTO/BENCHMARKS.md。

    自有 ID: OTP-10156

  • 在必要时,已将声明编码的注释添加到 Erlang 文件中。当 UTF-8 成为默认编码时,该注释将在 Erlang/OTP R17B 中删除。

    自有 ID: OTP-10630

  • 删除了对查询关键字和查询表达式的支持。感谢 Loïc Hoguin。

    自有 ID: OTP-10729

Mnesia 4.7.1

修复的 Bug 和故障

  • 添加测试以表明尝试删除不存在的对象可能会损坏该对象

    对于 bag 表,尝试删除不存在的对象会导致索引损坏。如果我们要删除的不存在的对象恰好与其键和索引字段值与表中的单个现有对象共享,则会发生这种情况。结果:删除与现有对象对应的索引条目。

    防止在删除不存在的项目时索引损坏

    我们必须确保在删除索引之前实际删除具有给定 (key, index) 对的最后一个对象。感谢 Bartlomiej Puzon

    自有 ID: OTP-10220

Mnesia 4.7

修复的 Bug 和故障

  • 如果找不到表副本,则为 mnesia_loader:disc_load_table/2 返回与 mnesia_loader:net_load_table/4 相同的值。(感谢 Uwe Dauernheim)

    自有 ID: OTP-10015

改进和新特性

  • 改进了表锁算法。

    内部ID: OTP-9890

Mnesia 4.6

修复的 Bug 和故障

  • 减少 key_to_frag_number 中的 phash 调用次数

    原始代码根据哈希键的目标片段和现有片段的数量,调用 phash 1..2 次。新代码始终只调用 phash 一次。

    添加 mnesia_frag_hash 测试 (感谢 Philip Robinson)

    内部ID: OTP-9722

  • 修复了一个粘滞锁的 bug,该 bug 导致 mnesia:read(Tab, Key, write) 返回 undefined。

    内部ID: OTP-9786

  • 在 mnesia_log:ets2dcd() 中使用同步 log_terms 代替 alog_terms

    这避免了 mnesia 将一个非常大的 ets 表完全转储到 disk_log 进程的消息队列中,从而导致内存爆炸并阻塞磁盘记录器的情况。(感谢 Richard Carlsson)

    内部ID: OTP-9804

改进和新特性

  • 为 mnesia:create_table/2 实现了一个新选项,允许用户分配 mnesia 中不可用的 'ets' 和 'dets' 选项。

    内部ID: OTP-8970

Mnesia 4.5.1

修复的 Bug 和故障

  • 修复了 mnesia:del_table_copy/2 中的死锁。

    内部ID: OTP-9689 辅助ID: seq11927

改进和新特性

  • 允许在使用不同 mnesia 版本时进行模式操作。

    内部ID: OTP-9657 辅助ID: seq11926

Mnesia 4.5

修复的 Bug 和故障

  • 修复了协议问题。Mnesia-4.4.19 无法与旧节点通信。

    内部ID: OTP-9473

  • XML 文件已更正。

    内部ID: OTP-9550 辅助ID: OTP-9541

改进和新特性

  • 即使本地节点上没有调用任何事务,也会转储日志,否则日志会随着其他在磁盘上有表的节点的决策而无限增长。感谢 Marek Majkowski。

    内部ID: OTP-9551

  • 使用专用的 api 来清除表,即使用 delete_all_objects 代替 match_delete。感谢 KukHyun Lee。

    内部ID: OTP-9558

Mnesia 4.4.19

修复的 Bug 和故障

  • 如果在所有节点上加载表之前调用 mnesia:add_table_index/2,Mnesia 可能会崩溃。

    内部ID: OTP-9285 辅助ID: seq11844

  • 添加每个表的 {majority, boolean()} 选项。

    如果表的 {majority, true} 设置,则如果写入事务无法提交到拥有该表副本的大多数节点,则该事务将中止。目前,该实现挂钩到 prepare_commit,如果提交集影响任何设置了 majority 标志的表,则强制执行不对称事务。在提交本身中,如果事务无法满足所有涉及的表的多数要求,则该事务将中止。(感谢 Ulf Wiger)

    内部ID: OTP-9304

Mnesia 4.4.18

修复的 Bug 和故障

  • 调用 chmod 时不带 "-f" 标志

    "-f" 是一个非标准的 chmod 选项,至少 SGI IRIX 和 HP UX 不支持。 由于 "-f" 标志的唯一作用是抑制警告消息,因此可以安全地省略。(感谢 Holger Weiß)

    内部ID: OTP-9170

  • Mnesia 有时无法更新大型系统中的元信息,这可能会导致节点之间的表内容不一致。

    内部ID: OTP-9186 辅助ID: seq11728

Mnesia 4.4.17

修复的 Bug 和故障

  • 在空的分片表上调用 mnesia:first/1 可以工作。感谢 Magnus Henoch。

    内部ID: OTP-9108

  • 如果 Mnesia 检测到网络在启动期间未完全连接,则 Mnesia 将不会启动,直到所有节点都可访问为止。

    内部ID: OTP-9115 辅助ID: seq-11728

改进和新特性

  • 修复了 dialyzer 报告的问题。

    内部ID: OTP-9107

Mnesia 4.4.16

修复的 Bug 和故障

  • 当使用 'recreate_tables' 选项调用 mnesia:restore/2 时,有时会在表中添加 'log_header' 记录。感谢 Vance Shipley。

    内部ID: OTP-8960

改进和新特性

  • 消除了编译器警告。

    内部ID: OTP-8855

Mnesia 4.4.15

改进和新特性

  • 消除了自动导入 BIF 冲突的警告。

    内部ID: OTP-8840

Mnesia 4.4.14

改进和新特性

  • 添加了 Bernard Duggan 贡献的 mnesia:subscribe(activity)。

    内部ID: OTP-8519

Mnesia 4.4.13

修复的 Bug 和故障

  • 当调用 mnesia:sync_transaction/[1,2] 时,如果节点崩溃,事务可能会挂起。 感谢 Igor Ribeiro Sucupira。

    内部ID: OTP-8402

改进和新特性

  • Igor Ribeiro Sucupira 添加了在 Mnesia 节点之间复制表时压缩数据的选项。

    内部ID: OTP-8406

Mnesia 4.4.12

改进和新特性

  • 现在使用大多数平台上都存在的开源工具(xsltproc 和 fop)来构建文档。一个可见的变化是删除了框架。

    内部ID: OTP-8250

Mnesia 4.4.11

改进和新特性

  • 修复了在 ordered_set 表上使用 mnesia:index_read() 时的重复结果。由 Sam Bobroff 报告。

    修复了 mnesia:index_read() 中的锁定,该锁定现在会获取读取表锁以确保正确性,这可能会减慢操作速度或阻止其他进程尝试访问同一表。

    调用 mnesia:dump_log() 可能会导致 mnesia 崩溃,由 Igor Ribeiro Sucupira 报告。

    内部ID: OTP-8074

Mnesia 4.4.10

修复的 Bug 和故障

  • 当 mnesia 在另一个节点停止时,如果 qlc 查询在事务内部运行,Mnesia 会崩溃。感谢 Teemu Antti-Poika。

    内部ID: OTP-7968

  • 加载 local_content 表时 Mnesia 可能会崩溃。

    内部ID: OTP-8002 辅助ID: seq11277

改进和新特性

  • 小的 (smp) 优化。

    内部ID: OTP-7928

Mnesia 4.4.9

修复的 Bug 和故障

  • 如果在事务内部调用,mnesia:clear_table/1 会崩溃而不是返回 {aborted,..}

    内部ID: OTP-7911

Mnesia 4.4.8

修复的 Bug 和故障

  • 在 mnesia 关闭时,如果时机不佳,几个 api 函数可能会返回或退出并显示错误消息。

    内部ID: OTP-7753 辅助ID: seq11179

  • mnesia:clear_table/1 清除了所有节点的表内容,即使该表是 local_content 类型。

    内部ID: OTP-7835

Mnesia 4.4.7

修复的 Bug 和故障

  • 不允许将匹配模式 ('_' 和 '$n') 作为 mnesia:delete_object/1 及其相关函数的参数。

    自有 ID: OTP-7524

改进和新功能

  • 在 Mnesia 中引入了一些新函数:mnesia:read/2, mnesia:first/3, mnesia:last/3, mnesia:prev/4, mnesia:next/4, mnesia_frag:first/1, mnesia_frag:last/1, mnesia_frag:prev/2, mnesia_frag:next/2

    自有 ID: OTP-7625

Mnesia 4.4.6

修复的错误和故障

  • 如果客户端消息队列中出现 EXIT 消息,mnesia:restore/2 将会中止。

    自有 ID: OTP-7585 辅助 ID: seq11046

Mnesia 4.4.5

改进和新功能

  • mnesia:clear_table/1 不再要求表的所有副本都可用。

    自有 ID: OTP-7466 辅助 ID: seq11015

Mnesia 4.4.4

修复的错误和故障

  • 如果在本地节点上没有进行任何事务,Mnesia 不会对基于磁盘节点的事务决策进行垃圾回收。

    自有 ID: OTP-7419

Mnesia 4.4.3

修复的错误和故障

  • 当从模式中移除节点时,外键引用的表没有正确清理 node_pool。感谢 Paul Mineiro。

    自有 ID: OTP-7340

  • 如果在 mnesia 停止时正在运行 schema_transaction,Mnesia 会崩溃并生成核心转储。

    自有 ID: OTP-7378 辅助 ID: seq10964

改进和新功能

  • 现在即使其他磁盘驻留节点已关闭,也可以删除数据库节点。感谢 Paul Mineiro。

    自有 ID: OTP-7383

Mnesia 4.4.2

修复的错误和故障

Mnesia 4.4.1

修复的错误和故障

  • Snmp 索引表在 mnesia-4.4 中未正确初始化。

    自有 ID: OTP-7170 辅助 ID: seq10870

已知错误和问题

  • 重新排列碎片表是一个 O(N^2) 操作。

    自有 ID: OTP-6300

Mnesia 4.4

修复的错误和故障

  • Mnesia 忽略了 mnesia:restore/2 的模块参数。感谢 Paul Minerio。

    自有 ID: OTP-6981

改进和新功能

  • Mnesia 的 snmp 操作 snmp_get_row/2, snmp_get_next_index/2snmp_get_mnesia_key/2 已变为上下文感知,即在事务内部,它们将补偿在同一事务中早期进行的表更新。如果在调用这些函数之前进行了大量更新,这可能会导致性能下降。

    * 可能不兼容 *

    自有 ID: OTP-6856 辅助 ID: seq10671

  • 引入 erlang:phash/2 作为碎片表的新默认值。已存在的表将继续使用它们正在使用的任何哈希函数。

    自有 ID: OTP-6923

  • 引入了 mnesia:is_transaction/0

    自有 ID: OTP-6995 辅助 ID: seq10812

已知错误和问题

  • 重新排列碎片表是一个 O(N^2) 操作。

    自有 ID: OTP-6300