recdb_add_traverse
db_open_ctdb
db_open_file
函数调用栈:
db_open
db_open_ctdb // 仅仅是增加 db_ctdb_fetch_locked 回调函数
db_ctdb_fetch_locked
fetch_locked_internal
db_ctdb_store
db_ctdb_ltdb_store
ctdbd_backup : write_data_iov //发送数据
write_data_iov //发送数据
ctdb_read_req
messaging_ctdbd_connection
db_open_ctdb 函数://为了初始化
{
db_ctdb->wtdb = tdb_wrap_open(db_ctdb, db_path, hash_size,
lpcfg_tdb_flags(lp_ctx, tdb_flags),
O_RDWR, 0);
result->private_data = (void *)db_ctdb;
result->fetch_locked = db_ctdb_fetch_locked; //设置回调函数
result->try_fetch_locked = db_ctdb_try_fetch_locked;
}
fetch_locked 在哪里调用的?
struct db_record *dbwrap_fetch_locked(struct db_context *db,
TALLOC_CTX *mem_ctx,
TDB_DATA key)
{
return dbwrap_fetch_locked_internal(db, mem_ctx, key,
db->fetch_locked); //db_ctdb_fetch_locked
}
db_open_ctdb 和 dbwrap_fetch_locked 函数的调用关系?
初始化:
smbXsrv_open_global_init -> db_open_ctdb //初始化函数指针
db_open_ctdb: result->fetch_locked = db_ctdb_fetch_locked;
使用:
smbd_smb2_create_send-> file_new-> smbXsrv_open_create-> smbXsrv_open_local_fetch_locked-> dbwrap_fetch_locked
db_ctdb_fetch_locked 调用的 fetch_locked_internal :
fetch_locked_internal 函数:里面有db_ctdb_can_use_local_copy 函数和 ctdbd_migrate 函数。如果本地有,则使用本地,否则发起migrate。
问题1:
db_ctdb_can_use_local_hdr 函数里面的 dmaster 从哪里获取的?ltdb_initial_header 函数初始化dmaster为lmaster
dbwrap_fetch_locked 被很多函数调用,如 smbXsrv_open_local_fetch_locked 函数
//key的产生
static TDB_DATA smbXsrv_open_local_id_to_key(uint32_t id,
uint8_t *key_buf)
{
TDB_DATA key;
RSIVAL(key_buf, 0, id);
key = make_tdb_data(key_buf, SMBXSRV_OPEN_LOCAL_TDB_KEY_SIZE);
return key;
}
CTDB和SAMBA数据库备份代码分析
猜你喜欢
转载自my.oschina.net/itfanr/blog/1627569
今日推荐
周排行