Hello,
On 28.12.18 16:38, Henning Westerholt wrote:
Am Freitag, 28. Dezember 2018, 16:21:59 CET schrieb
Daniel-Constantin Mierla:
I noticed many commits replacing the log messages
in case of allocation
failure with some macros. That is good, bringing consistency, but I
think that we should offer couple of them. The current one is rather dry
(meaning that it offers very few context details), which matches most of
the existing log messages used in such cases.
Hi Daniel,
yes - I noticed that these error message were really inconsistent, sometimes
even hard to understand for normal users (like "running out of pkg").
This was my motivation to do the conversion. Additionally it is this way much
easier to analyze the log files for this particular errors.
But there are also other log messages for such
cases which give more
details, like for what the allocation fails, some also giving the
requested size of allocation.
In the core this was done inconsistently (like some
error msg were more
detailed than others, sometimes in the same function). Sometimes the error
message was wrong because of some changes to the code. Therefore I removed it
in some cases.
For modules that allocate bigger memory blocks (htable, lcr etc..) I can see
why it make sense to output more information.
As the core is using really small memory blocks, I don't think information
about the size is really useful here. The usual response to this problem would
be to just increase the PKG memory pool.
The location were the allocation error happens can be usually also spot from
the logging message (the function name).
So besides the current two macros (one for shm
and one for pkg), we
should add few more. Like:
#define PKG_MEM_ERROR_MSG(m) LM_ERR("could not allocate private memory
from pkg pool - %s\n", m);
So one can do:
PKG_MEM_ERROR_MSG("needed for htable struct");
And one to include also the size:
#define PKG_MEM_ERROR_SZ(s, m) LM_ERR("could not allocate private memory
from pkg pool - size: %u - %s\n", (unsigned int)s, m);
I will add macros for
this two additional cases, probably this evening.
No need to revert what was done, but I think for
the future we would
preserve better information for troubleshooting in some cases, instead
of replacing those messages that now have more details with the bare
error log message.
See my comment above, in which conditions do you think we
should preserve the
size and additional error message during the conversation?
this is probably to be decided case by case. There are some log messages
giving even more context, like when building a list, it also prints the
value of the iterator, so it shows the failure happened when allocating
the Nth item in the list.
Thinking of that, maybe it would be better to add only one extra macro
instead of the two, that will allow to pass the formatting string to be
concatenated with the common log prefix and the arguments, so overall
will be two, one with a static message and the other allowing to add to
it, like:
#define PKG_MEM_ERROR LM_ERR("could not allocate ...\n")
#define PKG_MEM_ERROR_FMT(fmt, args...) LM_ERR("could not allocate ..."
fmt , ## args)
So one can do:
PKG_MEM_ERROR_FMT(" for the record index %d (size: %u)\n", i,
sizeof(struct));
So there is a common prefix for all such errors, followed by whatever
the developer wants to add.
I think the PKG_MEM_ERROR_FMT has to be defined based on compiler, like
it is done for the LM_XYZ() inside core/dprint.h, because compilers use
different token for the extra arguments.
Cheers,
Daniel
--
Daniel-Constantin Mierla --
www.asipto.com
www.twitter.com/miconda --
www.linkedin.com/in/miconda
Kamailio World Conference - May 6-8, 2019 --
www.kamailioworld.com
Kamailio Advanced Training - Mar 4-6, 2019 in Berlin; Mar 25-27, 2019, in Washington, DC,
USA --
www.asipto.com