svn commit: samba r21045 - in
branches/SAMBA_4_0/source/cluster/ctdb: . common include
tridge at samba.org
tridge at samba.org
Mon Jan 29 11:31:24 GMT 2007
Author: tridge
Date: 2007-01-29 11:31:24 +0000 (Mon, 29 Jan 2007)
New Revision: 21045
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21045
Log:
every call in brlock_ctdb ended up neededing a 32 bit status code, so
rather than allocating a reply_data field each time, I have changed
the ctdb_call API to include a status code. That greatly simplifies
use of the API.
Modified:
branches/SAMBA_4_0/source/cluster/ctdb/brlock_ctdb.c
branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c
branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb.h
branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h
Changeset:
Modified: branches/SAMBA_4_0/source/cluster/ctdb/brlock_ctdb.c
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/brlock_ctdb.c 2007-01-29 11:15:15 UTC (rev 21044)
+++ branches/SAMBA_4_0/source/cluster/ctdb/brlock_ctdb.c 2007-01-29 11:31:24 UTC (rev 21045)
@@ -360,18 +360,8 @@
}
reply:
- call->reply_data = talloc(call, TDB_DATA);
- if (call->reply_data == NULL) {
- return CTDB_ERR_NOMEM;
- }
+ call->status = NT_STATUS_V(status);
- call->reply_data->dptr = talloc_size(call, sizeof(NTSTATUS));
- call->reply_data->dsize = sizeof(NTSTATUS);
- if (call->reply_data->dptr == NULL) {
- return CTDB_ERR_NOMEM;
- }
- *(NTSTATUS *)call->reply_data->dptr = status;
-
return 0;
}
@@ -392,7 +382,6 @@
{
struct ctdb_lock_req req;
struct ctdb_call call;
- NTSTATUS status;
int ret;
call.call_id = FUNC_BRL_LOCK;
@@ -416,10 +405,7 @@
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- status = *(NTSTATUS *)call.reply_data.dptr;
- talloc_free(call.reply_data.dptr);
-
- return status;
+ return NT_STATUS(call.status);
}
#if ENABLE_NOTIFIES
@@ -560,18 +546,8 @@
status = NT_STATUS_RANGE_NOT_LOCKED;
}
- call->reply_data = talloc(call, TDB_DATA);
- if (call->reply_data == NULL) {
- return CTDB_ERR_NOMEM;
- }
+ call->status = NT_STATUS_V(status);
- call->reply_data->dptr = talloc_size(call, sizeof(NTSTATUS));
- call->reply_data->dsize = sizeof(NTSTATUS);
- if (call->reply_data->dptr == NULL) {
- return CTDB_ERR_NOMEM;
- }
- *(NTSTATUS *)call->reply_data->dptr = status;
-
return 0;
}
@@ -586,7 +562,6 @@
{
struct ctdb_call call;
struct ctdb_unlock_req req;
- NTSTATUS status;
int ret;
call.call_id = FUNC_BRL_UNLOCK;
@@ -609,10 +584,7 @@
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- status = *(NTSTATUS *)call.reply_data.dptr;
- talloc_free(call.reply_data.dptr);
-
- return status;
+ return NT_STATUS(call.status);
}
@@ -669,18 +641,8 @@
status = NT_STATUS_RANGE_NOT_LOCKED;
}
- call->reply_data = talloc(call, TDB_DATA);
- if (call->reply_data == NULL) {
- return CTDB_ERR_NOMEM;
- }
+ call->status = NT_STATUS_V(status);
- call->reply_data->dptr = talloc_size(call, sizeof(NTSTATUS));
- call->reply_data->dsize = sizeof(NTSTATUS);
- if (call->reply_data->dptr == NULL) {
- return CTDB_ERR_NOMEM;
- }
- *(NTSTATUS *)call->reply_data->dptr = status;
-
return 0;
}
@@ -690,7 +652,6 @@
{
struct ctdb_call call;
struct ctdb_remove_pending_req req;
- NTSTATUS status;
int ret;
call.call_id = FUNC_BRL_REMOVE_PENDING;
@@ -709,10 +670,7 @@
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- status = *(NTSTATUS *)call.reply_data.dptr;
- talloc_free(call.reply_data.dptr);
-
- return status;
+ return NT_STATUS(call.status);
}
@@ -760,18 +718,8 @@
}
}
- call->reply_data = talloc(call, TDB_DATA);
- if (call->reply_data == NULL) {
- return CTDB_ERR_NOMEM;
- }
+ call->status = NT_STATUS_V(status);
- call->reply_data->dptr = talloc_size(call, sizeof(NTSTATUS));
- call->reply_data->dsize = sizeof(NTSTATUS);
- if (call->reply_data->dptr == NULL) {
- return CTDB_ERR_NOMEM;
- }
- *(NTSTATUS *)call->reply_data->dptr = status;
-
return 0;
}
@@ -786,7 +734,6 @@
{
struct ctdb_call call;
struct ctdb_locktest_req req;
- NTSTATUS status;
int ret;
call.call_id = FUNC_BRL_LOCKTEST;
@@ -810,10 +757,7 @@
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- status = *(NTSTATUS *)call.reply_data.dptr;
- talloc_free(call.reply_data.dptr);
-
- return status;
+ return NT_STATUS(call.status);
}
@@ -874,18 +818,8 @@
memcpy(call->new_data->dptr, locks, count*sizeof(struct lock_struct));
}
- call->reply_data = talloc(call, TDB_DATA);
- if (call->reply_data == NULL) {
- return CTDB_ERR_NOMEM;
- }
+ call->status = NT_STATUS_V(status);
- call->reply_data->dptr = talloc_size(call, sizeof(NTSTATUS));
- call->reply_data->dsize = sizeof(NTSTATUS);
- if (call->reply_data->dptr == NULL) {
- return CTDB_ERR_NOMEM;
- }
- *(NTSTATUS *)call->reply_data->dptr = status;
-
return 0;
}
@@ -897,7 +831,6 @@
{
struct ctdb_call call;
struct ctdb_close_req req;
- NTSTATUS status;
int ret;
call.call_id = FUNC_BRL_CLOSE;
@@ -917,10 +850,7 @@
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- status = *(NTSTATUS *)call.reply_data.dptr;
- talloc_free(call.reply_data.dptr);
-
- return status;
+ return NT_STATUS(call.status);
}
Modified: branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c 2007-01-29 11:15:15 UTC (rev 21044)
+++ branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c 2007-01-29 11:31:24 UTC (rev 21045)
@@ -61,6 +61,7 @@
CTDB_NO_MEMORY(ctdb, c->record_data.dptr);
c->new_data = NULL;
c->reply_data = NULL;
+ c->status = 0;
for (fn=ctdb->calls;fn;fn=fn->next) {
if (fn->id == call->call_id) break;
@@ -101,6 +102,7 @@
call->reply_data.dptr = NULL;
call->reply_data.dsize = 0;
}
+ call->status = c->status;
talloc_free(c);
@@ -333,12 +335,15 @@
r->hdr.destnode = hdr->srcnode;
r->hdr.srcnode = hdr->destnode;
r->hdr.reqid = hdr->reqid;
+ r->status = call.status;
r->datalen = call.reply_data.dsize;
- memcpy(&r->data[0], call.reply_data.dptr, call.reply_data.dsize);
+ if (call.reply_data.dsize) {
+ memcpy(&r->data[0], call.reply_data.dptr, call.reply_data.dsize);
+ talloc_free(call.reply_data.dptr);
+ }
ctdb_queue_packet(ctdb, &r->hdr);
- talloc_free(call.reply_data.dptr);
talloc_free(r);
}
@@ -368,16 +373,14 @@
{
struct ctdb_reply_call *c = (struct ctdb_reply_call *)hdr;
struct ctdb_call_state *state;
- TDB_DATA reply_data;
state = idr_find(ctdb->idr, hdr->reqid);
if (state == NULL) return;
- reply_data.dptr = c->data;
- reply_data.dsize = c->datalen;
+ state->call.reply_data.dptr = c->data;
+ state->call.reply_data.dsize = c->datalen;
+ state->call.status = c->status;
- state->call.reply_data = reply_data;
-
talloc_steal(state, c);
state->state = CTDB_CALL_DONE;
@@ -594,10 +597,16 @@
talloc_free(state);
return -1;
}
- call->reply_data.dptr = talloc_memdup(state->node->ctdb,
- state->call.reply_data.dptr,
- state->call.reply_data.dsize);
- call->reply_data.dsize = state->call.reply_data.dsize;
+ if (state->call.reply_data.dsize) {
+ call->reply_data.dptr = talloc_memdup(state->node->ctdb,
+ state->call.reply_data.dptr,
+ state->call.reply_data.dsize);
+ call->reply_data.dsize = state->call.reply_data.dsize;
+ } else {
+ call->reply_data.dptr = NULL;
+ call->reply_data.dsize = 0;
+ }
+ call->status = state->call.status;
talloc_free(state);
return 0;
}
Modified: branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb.h
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb.h 2007-01-29 11:15:15 UTC (rev 21044)
+++ branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb.h 2007-01-29 11:31:24 UTC (rev 21045)
@@ -26,6 +26,7 @@
TDB_DATA key;
TDB_DATA call_data;
TDB_DATA reply_data;
+ uint32_t status;
};
/*
@@ -37,6 +38,7 @@
TDB_DATA *new_data; /* optionally updated record data */
TDB_DATA *call_data; /* optionally passed from caller */
TDB_DATA *reply_data; /* optionally returned by function */
+ uint32_t status; /* optional reply status - defaults to zero */
};
#define CTDB_ERR_INVALID 1
Modified: branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h 2007-01-29 11:15:15 UTC (rev 21044)
+++ branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h 2007-01-29 11:31:24 UTC (rev 21045)
@@ -162,6 +162,7 @@
struct ctdb_reply_call {
struct ctdb_req_header hdr;
+ uint32_t status;
uint32_t datalen;
uint8_t data[1];
};
More information about the samba-cvs
mailing list