Add database API for well-known OIDs 72/145772/5
authorPaweł Szewczyk <p.szewczyk@samsung.com>
Wed, 23 Aug 2017 13:50:38 +0000 (15:50 +0200)
committerPaweł Szewczyk <p.szewczyk@samsung.com>
Fri, 25 Aug 2017 08:02:14 +0000 (10:02 +0200)
Some well-known objects are stored in database and there should be
universal set of OIDs for them. OIDs however depend on database, so each
database adapter should be able to provide them in its own format.

Change-Id: Ic568dda8e891ba9240f201ecc32a4370a4c51642
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
src/core/database.c
src/core/database.h
src/database/database_nop.c
src/database/ejdb.c
src/listeners/startup.c

index 99b2398f77b9d86f46fa91c20ce2fdb771ca782f..c01222daa2d89baa8ccb11f4968c28e6b7f01ba1 100644 (file)
@@ -57,6 +57,14 @@ int database_new_oid(faultd_oid_t *oid)
        return database_adapter->new_oid(oid);
 }
 
+int database_get_well_known_oid(const char *name, faultd_oid_t *oid)
+{
+       if (!database_adapter)
+               return -ENOSYS;
+
+       return database_adapter->get_well_known_oid(name, oid);
+}
+
 int database_get_by_oid(faultd_oid_t *oid, struct faultd_object *result)
 {
        if (!database_adapter)
index f204fe9c9723ebc9d9ec8a8701aaeff60e87b276..5082d5b80889af8d89273b3dd8f43d8456cbef1b 100644 (file)
@@ -22,6 +22,8 @@
 #include "common.h"
 #include "module.h"
 
+#define FAULTD_LAST_BOOT_OID "org.tizen.faultd.last_boot_oid"
+
 struct faultd_database_adapter {
        struct faultd_module module;
        char *name;
@@ -39,6 +41,8 @@ struct faultd_database_adapter {
 
        int (*new_oid)(faultd_oid_t *oid);
 
+       int (*get_well_known_oid)(const char *name, faultd_oid_t *oid);
+
        bool (*is_oid_valid)(faultd_oid_t *oid);
 };
 
@@ -50,6 +54,7 @@ int database_store(struct faultd_object *obj, faultd_oid_t *oid);
 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);
+int database_get_well_known_oid(const char *name, faultd_oid_t *oid);
 bool database_is_oid_valid(faultd_oid_t *oid);
 const char *database_get_id_key(void);
 
index 969b3530b288b1b176dc553fb3281db354769be8..aba5526f64e8f849ed5ccf258e963d623fbc62e6 100644 (file)
@@ -66,6 +66,11 @@ static int nop_new_oid(faultd_oid_t *oid)
        return 0;
 }
 
+static int nop_get_well_known_oid(const char *name, faultd_oid_t *oid)
+{
+       return nop_new_oid(oid);
+}
+
 static bool nop_is_oid_valid(faultd_oid_t *oid)
 {
        return strncmp(oid->nop, NOP_DEFAULT_OID, OID_NOP_SIZE) == 0;
@@ -85,6 +90,7 @@ static struct nop_adapter nop_adapter = {
                .get_by_oid = nop_get_by_oid,
                .load = nop_load,
                .new_oid = nop_new_oid,
+               .get_well_known_oid = nop_get_well_known_oid,
                .is_oid_valid = nop_is_oid_valid,
        }
 };
index 3b889e8c7a390ce2aa7f52182a33b9a04c9c1887..ab29c71dcf977bc07cb5037644496f733b87c42b 100644 (file)
@@ -379,6 +379,28 @@ static int ejdb_new_oid(faultd_oid_t *oid)
        return 0;
 }
 
+static int ejdb_get_well_known_oid(const char *name, faultd_oid_t *oid)
+{
+       int i;
+       static const struct {
+               const char *name;
+               const char *oid;
+       } oid_strings[] = {
+               {FAULTD_LAST_BOOT_OID, "32a4ca4f96ddfcd8a1f50269014ff320"},
+               {NULL, NULL}
+       };
+
+       for (i = 0; oid_strings[i].name; ++i) {
+               if (strcmp(oid_strings[i].name, name))
+                       continue;
+
+               bson_oid_from_string(&oid->bson, oid_strings[i].oid);
+               return 0;
+       }
+
+       return -ENOENT;
+}
+
 static bool ejdb_is_oid_valid(faultd_oid_t *oid)
 {
        return oid->bson.ints[0] != 0 ||
@@ -400,6 +422,7 @@ static struct ejdb_adapter ejdb_adapter = {
                .get_by_oid = ejdb_get_by_oid,
                .load = ejdb_load,
                .new_oid = ejdb_new_oid,
+               .get_well_known_oid = ejdb_get_well_known_oid,
                .is_oid_valid = ejdb_is_oid_valid,
        }
 };
index 2920b72ea714c6c71b276c05a587c123283470da..8239445e3dd6c221f1153929fcb3267e4415c1c4 100644 (file)
@@ -24,8 +24,6 @@
 #include "system_booted_event.h"
 #include "database.h"
 
-static const char LAST_BOOT_ID_OID[33] = "32a4ca4f96ddfcd8a1f50269014ff320";
-
 struct startup_listener {
        struct faultd_module module;
 };
@@ -36,9 +34,9 @@ static int retrieve_last_boot_id(sd_id128_t *boot_id)
        int ret;
        struct faultd_object *root;
 
-       ret = faultd_oid_from_string(&oid, LAST_BOOT_ID_OID);
+       ret = database_get_well_known_oid(FAULTD_LAST_BOOT_OID, &oid);
        if (ret < 0) {
-               log_error("Could not build oid from string %s", LAST_BOOT_ID_OID);
+               log_error("Could not get last boot id oid");
                return ret;
        }
 
@@ -68,7 +66,11 @@ static void store_boot_id(sd_id128_t *boot_id)
        struct faultd_object *obj;
        int ret;
 
-       faultd_oid_from_string(&oid, LAST_BOOT_ID_OID);
+       ret = database_get_well_known_oid(FAULTD_LAST_BOOT_OID, &oid);
+       if (ret < 0) {
+               log_error_errno(ret, "Could not get oid of %s: %m", FAULTD_LAST_BOOT_OID);
+               return;
+       }
 
        faultd_object_new(&obj);
        faultd_object_append_oid(obj, JDBIDKEYNAME, &oid);