1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

lib: Make ctdbd_parse return 0/errno

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Volker Lendecke 2015-10-02 20:42:05 -07:00 committed by Jeremy Allison
parent 4636912985
commit b78c282a91
3 changed files with 21 additions and 18 deletions

View File

@ -56,11 +56,11 @@ int ctdbd_db_attach(struct ctdbd_connection *conn, const char *name,
int ctdbd_migrate(struct ctdbd_connection *conn, uint32_t db_id, TDB_DATA key);
NTSTATUS ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
TDB_DATA key, bool local_copy,
void (*parser)(TDB_DATA key, TDB_DATA data,
void *private_data),
void *private_data);
int ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
TDB_DATA key, bool local_copy,
void (*parser)(TDB_DATA key, TDB_DATA data,
void *private_data),
void *private_data);
NTSTATUS ctdbd_traverse(struct ctdbd_connection *master, uint32_t db_id,
void (*fn)(TDB_DATA key, TDB_DATA data,

View File

@ -973,18 +973,17 @@ int ctdbd_migrate(struct ctdbd_connection *conn, uint32_t db_id, TDB_DATA key)
/*
* Fetch a record and parse it
*/
NTSTATUS ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
TDB_DATA key, bool local_copy,
void (*parser)(TDB_DATA key, TDB_DATA data,
void *private_data),
void *private_data)
int ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
TDB_DATA key, bool local_copy,
void (*parser)(TDB_DATA key, TDB_DATA data,
void *private_data),
void *private_data)
{
struct ctdb_req_call req;
struct ctdb_req_header *hdr = NULL;
struct ctdb_reply_call *reply;
struct iovec iov[2];
ssize_t nwritten;
NTSTATUS status;
uint32_t flags;
int ret;
@ -1022,7 +1021,7 @@ NTSTATUS ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
if ((hdr == NULL) || (hdr->operation != CTDB_REPLY_CALL)) {
DEBUG(0, ("received invalid reply\n"));
status = NT_STATUS_INTERNAL_ERROR;
ret = EIO;
goto fail;
}
reply = (struct ctdb_reply_call *)hdr;
@ -1031,17 +1030,17 @@ NTSTATUS ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
/*
* Treat an empty record as non-existing
*/
status = NT_STATUS_NOT_FOUND;
ret = ENOENT;
goto fail;
}
parser(key, make_tdb_data(&reply->data[0], reply->datalen),
private_data);
status = NT_STATUS_OK;
ret = 0;
fail:
TALLOC_FREE(hdr);
return status;
return ret;
}
/*

View File

@ -1009,7 +1009,6 @@ static struct db_record *fetch_locked_internal(struct db_ctdb_ctx *ctx,
{
struct db_record *result;
struct db_ctdb_rec *crec;
NTSTATUS status;
TDB_DATA ctdb_data;
int migrate_attempts;
struct timeval migrate_start;
@ -1256,6 +1255,7 @@ static NTSTATUS db_ctdb_parse_record(struct db_context *db, TDB_DATA key,
db->private_data, struct db_ctdb_ctx);
struct db_ctdb_parse_record_state state;
NTSTATUS status;
int ret;
state.parser = parser;
state.private_data = private_data;
@ -1293,8 +1293,12 @@ static NTSTATUS db_ctdb_parse_record(struct db_context *db, TDB_DATA key,
return NT_STATUS_OK;
}
return ctdbd_parse(messaging_ctdbd_connection(), ctx->db_id, key,
state.ask_for_readonly_copy, parser, private_data);
ret = ctdbd_parse(messaging_ctdbd_connection(), ctx->db_id, key,
state.ask_for_readonly_copy, parser, private_data);
if (ret != 0) {
return map_nt_error_from_unix(ret);
}
return NT_STATUS_OK;
}
struct traverse_state {