summaryrefslogtreecommitdiff
path: root/source4/libnet
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2009-09-03 18:31:45 +1000
committerAndrew Tridgell <tridge@samba.org>2009-09-03 18:36:09 +1000
commit7dbe0797b1c98fc63af20af03c2b36cc04a7386e (patch)
tree30edf9c9d54b347c07778e5863439ad0cf92da01 /source4/libnet
parentbfccc4590dc94b37258b7225d153c4c01d1a28d6 (diff)
downloadsamba-7dbe0797b1c98fc63af20af03c2b36cc04a7386e.tar.gz
samba-7dbe0797b1c98fc63af20af03c2b36cc04a7386e.tar.bz2
samba-7dbe0797b1c98fc63af20af03c2b36cc04a7386e.zip
show more reasonable object counts during a vampire
We now show the total number of objects we have processed, which gives the user a better idea of how much has been done. A vampire on a large domain can take an hour or more (which needs to be fixed btw, it is a problem with the lack of scalability of the ltdb index code). Watching the same msg for an hour makes you wonder if any progress is being made!
Diffstat (limited to 'source4/libnet')
-rw-r--r--source4/libnet/libnet_vampire.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/source4/libnet/libnet_vampire.c b/source4/libnet/libnet_vampire.c
index d8b890e5b4..ec1545e6a4 100644
--- a/source4/libnet/libnet_vampire.c
+++ b/source4/libnet/libnet_vampire.c
@@ -71,6 +71,8 @@ struct vampire_state {
struct loadparm_context *lp_ctx;
struct tevent_context *event_ctx;
+ unsigned total_objects;
+ char *last_partition;
};
static NTSTATUS vampire_prepare_db(void *private_data,
@@ -190,8 +192,8 @@ static NTSTATUS vampire_apply_schema(struct vampire_state *s,
mapping_ctr = &c->ctr6->mapping_ctr;
object_count = s->schema_part.object_count;
first_object = s->schema_part.first_object;
- linked_attributes_count = 0; /* TODO: ! */
- linked_attributes = NULL; /* TODO: ! */;
+ linked_attributes_count = c->ctr6->linked_attributes_count;
+ linked_attributes = c->ctr6->linked_attributes;
s_dsa->highwatermark = c->ctr6->new_highwatermark;
s_dsa->source_dsa_obj_guid = c->ctr6->source_dsa_guid;
s_dsa->source_dsa_invocation_id = c->ctr6->source_dsa_invocation_id;
@@ -376,6 +378,7 @@ static NTSTATUS vampire_schema_chunk(void *private_data,
struct drsuapi_DsReplicaObjectListItemEx *cur;
uint32_t nc_linked_attributes_count;
uint32_t linked_attributes_count;
+ struct drsuapi_DsReplicaLinkedAttribute *linked_attributes;
switch (c->ctr_level) {
case 1:
@@ -385,6 +388,7 @@ static NTSTATUS vampire_schema_chunk(void *private_data,
first_object = c->ctr1->first_object;
nc_linked_attributes_count = 0;
linked_attributes_count = 0;
+ linked_attributes = NULL;
break;
case 6:
mapping_ctr = &c->ctr6->mapping_ctr;
@@ -393,6 +397,7 @@ static NTSTATUS vampire_schema_chunk(void *private_data,
first_object = c->ctr6->first_object;
nc_linked_attributes_count = c->ctr6->nc_linked_attributes_count;
linked_attributes_count = c->ctr6->linked_attributes_count;
+ linked_attributes = c->ctr6->linked_attributes;
break;
default:
return NT_STATUS_INVALID_PARAMETER;
@@ -508,15 +513,24 @@ static NTSTATUS vampire_store_chunk(void *private_data,
NT_STATUS_HAVE_NO_MEMORY(tmp_dns_name);
s_dsa->other_info->dns_name = tmp_dns_name;
+ /* we want to show a count per partition */
+ if (!s->last_partition || strcmp(s->last_partition, c->partition->nc.dn) != 0) {
+ s->total_objects = 0;
+ talloc_free(s->last_partition);
+ s->last_partition = talloc_strdup(s, c->partition->nc.dn);
+ }
+ s->total_objects += object_count;
+
if (nc_object_count) {
DEBUG(0,("Partition[%s] objects[%u/%u] linked_values[%u/%u]\n",
- c->partition->nc.dn, object_count, nc_object_count,
+ c->partition->nc.dn, s->total_objects, nc_object_count,
linked_attributes_count, nc_linked_attributes_count));
} else {
DEBUG(0,("Partition[%s] objects[%u] linked_values[%u\n",
- c->partition->nc.dn, object_count, linked_attributes_count));
+ c->partition->nc.dn, s->total_objects, linked_attributes_count));
}
+
status = dsdb_extended_replicated_objects_commit(s->ldb,
c->partition->nc.dn,
mapping_ctr,