This is needed to implement persistent record deletion in the case that
a record was stored as persistent, then fetched and is then stored
without persistency.
The additional tdb record header uses CTDB_REC_FLAG_PERSISTENT to denote if the
record was stored as persistent. When fetching a record we remember the
persistency property in record.flags.persistent.
When a subsequent store doesn't request persistency and record.flags.persistent
is set, we delete record from the persistent database.
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Martin Schwenke <martin@meltin.net>
DBWRAP_REQ_ERROR
};
+struct db_record_flags {
+ bool persistent : 1;
+};
+
/* The following definitions come from lib/dbwrap.c */
TDB_DATA dbwrap_record_get_key(const struct db_record *rec);
NTSTATUS (*storev)(struct db_record *rec, const TDB_DATA *dbufs,
int num_dbufs, int flag);
NTSTATUS (*delete_rec)(struct db_record *rec);
+ struct db_record_flags flags;
void *private_data;
};
rec_priv = (struct db_rbt_rec *)
((char *)result + DBWRAP_RBT_ALIGN(sizeof(struct db_record)));
+ result->flags = (struct db_record_flags) {};
result->storev = db_rbt_storev;
result->delete_rec = db_rbt_delete;
result->private_data = rec_priv;
}
state->result = result;
+ result->flags = (struct db_record_flags) {};
result->key.dsize = key.dsize;
result->key.dptr = ((uint8_t *)result) + sizeof(struct db_record);
memcpy(result->key.dptr, key.dptr, key.dsize);
return NULL;
}
+ result->flags = (struct db_record_flags) {};
result->db = ctx->db;
result->private_data = (void *)crec;
crec->ctdb_ctx = ctx;