]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
main/sorcery: Provide log messages when a wizard does not support an operation 49/849/3
authorMatt Jordan <mjordan@digium.com>
Wed, 8 Jul 2015 21:32:25 +0000 (16:32 -0500)
committerMatt Jordan <mjordan@digium.com>
Wed, 15 Jul 2015 00:15:13 +0000 (19:15 -0500)
If a sorcery wizard does not support one of the 'optional' CRUD
operations (namely the CUD), log a WARNING message so we are aware of
why the operation failed. This also removes an assert in this case, as
the CUD operation may have been triggered by an external system, in
which case it is not a programming error but a configuration error.

Change-Id: Ifecd9df946d9deaa86235257b49c6e5e24423b53

main/sorcery.c

index 7a4a7f324ad5bf224f770d1119d50d13c3eef1ea..2f451961b955135da800fd9b511891f590619e7d 100644 (file)
@@ -1944,9 +1944,7 @@ static int sorcery_wizard_create(void *obj, void *arg, int flags)
        const struct sorcery_details *details = arg;
 
        if (!object_wizard->wizard->callbacks.create) {
-               ast_assert(0);
-               ast_log(LOG_ERROR, "Sorcery wizard '%s' doesn't contain a 'create' virtual function.\n",
-                       object_wizard->wizard->callbacks.name);
+               ast_debug(5, "Sorcery wizard '%s' does not support creation\n", object_wizard->wizard->callbacks.name);
                return 0;
        }
        return (!object_wizard->caching && !object_wizard->wizard->callbacks.create(details->sorcery, object_wizard->data, details->obj)) ? CMP_MATCH | CMP_STOP : 0;
@@ -2039,7 +2037,12 @@ static int sorcery_wizard_update(void *obj, void *arg, int flags)
        const struct ast_sorcery_object_wizard *object_wizard = obj;
        const struct sorcery_details *details = arg;
 
-       return (object_wizard->wizard->callbacks.update && !object_wizard->wizard->callbacks.update(details->sorcery, object_wizard->data, details->obj) &&
+       if (!object_wizard->wizard->callbacks.update) {
+               ast_debug(5, "Sorcery wizard '%s' does not support updating\n", object_wizard->wizard->callbacks.name);
+               return 0;
+       }
+
+       return (!object_wizard->wizard->callbacks.update(details->sorcery, object_wizard->data, details->obj) &&
                !object_wizard->caching) ? CMP_MATCH | CMP_STOP : 0;
 }
 
@@ -2107,7 +2110,12 @@ static int sorcery_wizard_delete(void *obj, void *arg, int flags)
        const struct ast_sorcery_object_wizard *object_wizard = obj;
        const struct sorcery_details *details = arg;
 
-       return (object_wizard->wizard->callbacks.delete && !object_wizard->wizard->callbacks.delete(details->sorcery, object_wizard->data, details->obj) &&
+       if (!object_wizard->wizard->callbacks.delete) {
+               ast_debug(5, "Sorcery wizard '%s' does not support deletion\n", object_wizard->wizard->callbacks.name);
+               return 0;
+       }
+
+       return (!object_wizard->wizard->callbacks.delete(details->sorcery, object_wizard->data, details->obj) &&
                !object_wizard->caching) ? CMP_MATCH | CMP_STOP : 0;
 }