mco_translog_play
此函数读取指定的日志文件或管道,如果日志文件“兼容”,则通过调用用户定义的回调来迭代其内容,并触发已注册的事件。
有关概述,请参阅事务日志记录应用页面。
原型
MCO_RET mco_translog_play ( 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,
mco_translog_register_event_handlers_t register_callback,
void *regevent_user_ctx)
参数
file_path | 日志文件的路径和文件名或管道溢出文件的名称。注意!如果使用没有溢出文件的管道,则它可能为 0。 |
分贝 | 管道所连接的原始数据库的连接手柄。注意:如果该函数使用简单的日志文件,则可能为 NULL。 |
iteration_proc | 用户定义的回调函数,用于迭代存储在日志中的对象。注意!如果只需要事件处理,则可能为 NULL。 |
user_ctx | Void 指向将传递给用户定义的迭代回调的用户数据的指针。 |
dict (字典) | 正在记录其事务的数据库的字典。 |
mem_ptr | 指向临时数据缓冲区的指针,如果使用常规内存,则执行迭代,如果使用共享内存,则为 0。注意!指针必须与 8 个字节对齐。(使用函数符合此要求。malloc() |
mem_size | 临时数据缓冲区的大小。它的大小应至少是最大存储事务的两倍。 |
register_callback | 用户定义的回调函数,用于注册事件处理程序。注意!如果只需要迭代对象,则可能为 NULL。 |
regevent_user_ctx | Void 指向将传递给用户定义的 register 事件处理程序回调的用户数据的指针。 |
描述
此函数是 function 的副本,但此外,它还允许注册用户定义的回调,该回调反过来注册事件处理程序。Function 读取指定的日志文件或 pipe 并通过用户定义的回调迭代其内容并触发适当的事件。(请注意,无法通过 JNI 或 C# API 获得等效的 。mco_translog_iterate()``mco_translog_play()``mco_translog_play()
返回
MCO_S_OK | 已成功读取日志文件 |
除 MCO_S_OK 以外的用户定义代码 | 如果用户定义的回调返回除 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_LOST | 在调用此函数之前,与管道的所有连接都已关闭,并且其数据已丢失。 |
MCO_E_NOMEM | 内存不足,无法完成操作。增加 的值。mem_size |