diff --git a/src/action_class_hash_array.cc b/src/action_class_hash_array.cc index 5ee938395..45223de76 100644 --- a/src/action_class_hash_array.cc +++ b/src/action_class_hash_array.cc @@ -25,6 +25,7 @@ MEMBERS = char* masterDir MEMBERS = char* localDir MEMBERS = char* ecmfDir + MEMBERS = char* full_path MEMBERS = int nofail END_CLASS_DEF @@ -56,6 +57,7 @@ typedef struct grib_action_hash_array { char* masterDir; char* localDir; char* ecmfDir; + char* full_path; int nofail; } grib_action_hash_array; @@ -159,6 +161,8 @@ grib_action* grib_action_create_hash_array(grib_context* context, else a->ecmfDir = NULL; + a->full_path = NULL; + if (defaultkey) act->defaultkey = grib_context_strdup_persistent(context, defaultkey); @@ -296,6 +300,7 @@ static grib_hash_array_value* get_hash_array_impl(grib_handle* h, grib_action* a self->basename, master, ecmf, local, context->grib_definition_files_path); return NULL; } + self->full_path = full; grib_context_log(h->context, GRIB_LOG_DEBUG, "Loading hash_array %s from %s", ((grib_action*)self)->name, full); @@ -324,3 +329,9 @@ grib_hash_array_value* get_hash_array(grib_handle* h, grib_action* a) GRIB_MUTEX_UNLOCK(&mutex); return result; } + +const char* get_hash_array_full_path(grib_action* a) +{ + grib_action_hash_array* self = (grib_action_hash_array*)a; + return self->full_path; +} diff --git a/src/eccodes_prototypes.h b/src/eccodes_prototypes.h index 3c32efe98..c6e6e9e17 100644 --- a/src/eccodes_prototypes.h +++ b/src/eccodes_prototypes.h @@ -74,6 +74,7 @@ int get_concept_condition_string(grib_handle* h, const char* key, const char* va /* action_class_hash_array.cc*/ grib_action* grib_action_create_hash_array(grib_context* context, const char* name, grib_hash_array_value* hash_array, const char* basename, const char* name_space, const char* defaultkey, const char* masterDir, const char* localDir, const char* ecmfDir, int flags, int nofail); grib_hash_array_value* get_hash_array(grib_handle* h, grib_action* a); +const char* get_hash_array_full_path(grib_action* a); /* action_class_set.cc*/ grib_action* grib_action_create_set(grib_context* context, const char* name, grib_expression* expression, int nofail); diff --git a/src/grib_accessor_class_hash_array.cc b/src/grib_accessor_class_hash_array.cc index 987e68481..d191a5232 100644 --- a/src/grib_accessor_class_hash_array.cc +++ b/src/grib_accessor_class_hash_array.cc @@ -203,6 +203,11 @@ static grib_hash_array_value* find_hash_value(grib_accessor* a, int* err) grib_context_log(a->context, GRIB_LOG_ERROR, "hash_array: no match for %s=%s", a->creator->name, self->key); + const char* full_path = get_hash_array_full_path(a->creator); + if (full_path) { + grib_context_log(a->context, GRIB_LOG_ERROR, "hash_array: file path = %s", full_path); + } + grib_context_log(a->context, GRIB_LOG_ERROR, "Hint: Check the key 'masterTablesVersionNumber'"); return NULL; } return ha_ret;