mco_translog_iterate
该函数读取指定的日志文件或 Pipe,并通过用户定义的回调迭代其内容。
有关概述,请参阅事务日志记录应用页面。
原型
MCO_RET mco_translog_iterate ( char const *file_path,
mco_db_h db,
mco_trans_iterator_callback_t iteration_proc,
void *user_ctx,
mco_dictionary_h dict,
void *mem_ptr,
mco_size_t mem_size )
参数
file_path | 日志文件的路径和文件名或管道溢出文件的名称。注意!如果使用没有溢出文件的管道,则它可能为 0。 |
db | 管道所连接的原始数据库的句柄。注意:如果该函数使用简单的日志文件,则可能为 NULL。 |
iteration_proc | 用户定义的回调函数,用于迭代存储在日志中的对象。 |
user_ctx | 指向用户数据的 Void 指针,该数据将传递给用户定义的迭代回调 |
dict | 正在记录其事务的数据库的字典。 |
mem_ptr | 指向临时数据缓冲区的指针,如果使用常规内存,则执行迭代,如果使用共享内存,则为 0。注意!指针必须与 8 个字节对齐。使用函数 malloc() 符合此要求。 |
mem_size | 临时数据缓冲区的大小。它的大小应至少是最大存储事务的两倍。 |
描述
此函数读取指定的日志文件或管道,如果日志文件“兼容”,则通过调用用户定义的回调来迭代其内容。
返回
MCO_S_OK | 已成功读取日志文件。 |
除 MCO_S_OK 以外的用户定义代码 | 如果用户定义的回调返回除 then 以外的任何值,则函数将中止并将此代码作为其自己的返回代码返回。如果在用户定义的迭代回调中发生错误情况,这是中断迭代循环的正确方法。MCO_S_OK``mco_translog_iterate() |
MCO_E_TL_INVAL | 参数错误或不相容。 |
MCO_E_TL_NOT_ITERABLE | 创建日志时没有 flag 。MCO_TRANSLOG_ITERABLE |
MCO_E_TL_LOG_NOT_OPENED | 无法打开日志文件。 |
MCO_E_TL_IO_ERROR | 磁盘 IO 错误。 |
MCO_E_VERS_MISMATCH | 日志文件与运行时设置或数据库版本不兼容。 |
MCO_E_TL_INVFORMAT | 日志文件或 pipe 数据已损坏。 |
MCO_S_TL_INVDATA | 日志文件或管道未完全读取,但找到了一些事务,或者未找到文件结束。 |
MCO_E_TL_PIPE_USED | 管道已由另一个 .mco_trans_iterate() |
MCO_E_TL_PIPE_TERM | 日志记录在上一次调用 期间终止,但仍未由 writer 重新初始化。此错误代码处理了通知用户任何可能阻止传输数据一致性的必要性,并防止任何无法传输到辅助数据库的事务提交。这就是为什么必须重新启动日志记录并且每次失败后都必须重新提交事务的原因。mco_trans_iterate() 因此,错误代码不会在不检查数据一致性的动态管道中实现(读取器可以在任意时刻连接和分离管道)。MCO_E_TL_PIPE_TERM |
MCO_E_TL_PIPE_LOST | 在调用此函数之前,与管道的所有连接都已关闭,并且其数据已丢失。然后开始读取,管道不会丢失。 |
MCO_E_NOMEM | 内存不足,无法完成操作。增加 mem_size 的值。 |