return database_adapter->get_by_oid(database_adapter, oid, result);
}
+bool database_is_oid_valid(faultd_oid_t *oid)
+{
+ if (!database_adapter)
+ return false;
+
+ return database_adapter->is_oid_valid(oid);
+}
+
const char *database_get_id_key(void)
{
if (!database_adapter)
uint32_t *nr);
int (*new_oid)(faultd_oid_t *oid);
+
+ bool (*is_oid_valid)(faultd_oid_t *oid);
};
#define to_database_adapter(MOD) \
int database_get_by_oid(faultd_oid_t *oid, struct faultd_object *result);
int database_load(struct faultd_object *query, struct faultd_object *result, uint32_t *nr);
int database_new_oid(faultd_oid_t *oid);
+bool database_is_oid_valid(faultd_oid_t *oid);
const char *database_get_id_key(void);
#endif /* _DATABASE_H_ */
#include "database.h"
+#define NOP_DEFAULT_OID "NOP"
+
struct nop_adapter {
struct faultd_database_adapter database_adapter;
};
static int nop_new_oid(faultd_oid_t *oid)
{
- memset(oid, 0, sizeof(*oid));
+ strncpy(oid->nop, NOP_DEFAULT_OID, OID_NOP_SIZE);
return 0;
}
+static bool nop_is_oid_valid(faultd_oid_t *oid)
+{
+ return strncmp(oid->nop, NOP_DEFAULT_OID, OID_NOP_SIZE) == 0;
+}
+
static struct nop_adapter nop_adapter = {
.database_adapter = {
.module = {
.get_by_oid = nop_get_by_oid,
.load = nop_load,
.new_oid = nop_new_oid,
+ .is_oid_valid = nop_is_oid_valid,
}
};
return 0;
}
+static bool ejdb_is_oid_valid(faultd_oid_t *oid)
+{
+ return oid->bson.ints[0] != 0 ||
+ oid->bson.ints[1] != 0 ||
+ oid->bson.ints[2] != 0;
+}
static struct ejdb_adapter ejdb_adapter = {
.database_adapter = {
.get_by_oid = ejdb_get_by_oid,
.load = ejdb_load,
.new_oid = ejdb_new_oid,
+ .is_oid_valid = ejdb_is_oid_valid,
}
};
#include <malloc.h>
#include "common.h"
+#include "database.h"
#include "action_executed_event.h"
static int allocate_ae_event(struct faultd_event_type *type,
struct action_executed_event *ae_ev =
to_action_executed_event(ev);
+ assert(database_is_oid_valid(&ae_ev->reason->oid));
+
faultd_event_serialize_internal(ev, out);
faultd_object_append_oid(out, AE_EV_REASON, &ae_ev->reason->oid);
faultd_object_append_string(out, AE_EV_ACTION, ae_ev->action);
#include <malloc.h>
#include "common.h"
+#include "database.h"
#include "decision_made_event.h"
static int allocate_dm_event(struct faultd_event_type *type,
struct decision_made_event *dm_ev =
to_decision_made_event(ev);
+ assert(database_is_oid_valid(&dm_ev->reason->oid));
+
faultd_event_serialize_internal(ev, out);
faultd_object_append_oid(out, DM_EV_REASON, &dm_ev->reason->oid);
faultd_object_append_string(out, DM_EV_WHO, dm_ev->who_made);
TYPE_OBJECT,
};
+#define OID_NOP_SIZE 4
typedef union {
bson_oid_t bson;
+ char nop[OID_NOP_SIZE];
sd_id128_t uuid;
} faultd_oid_t;
return 0;
}
+static bool testdb_is_oid_valid(faultd_oid_t *oid)
+{
+ return true;
+}
+
static struct testdb_adapter testdb_adapter = {
.database_adapter = {
.module = {
.get_by_oid = testdb_get_by_oid,
.load = testdb_load,
.new_oid = testdb_new_oid,
+ .is_oid_valid = testdb_is_oid_valid,
}
};