[OpenSER-Devel] database module issues (rant)

Daniel-Constantin Mierla daniel at voice-system.ro
Thu Feb 7 12:06:45 UTC 2008


Hello Henning,

good points. Would you please add the notes to dokuwiki, in development 
section, maybe under something like "Developing a new DB module" -- 
would be easy to refer to it and add improvements to the rules in the 
future.

db_text needs a deep review for quite some time now, but as I am not 
using it that often, got all the time very low priority in my list and 
nobody else wanted to jump in :) . I will try to find some time though.

Thanks for DB rework and thorough analysis, the layer got lot of more 
consistency in structure and naming format.

Cheers,
Daniel


On 02/07/08 13:49, Henning Westerholt wrote:
> Hi all,
>
> some thoughts about issues that i've encountered during my journey through the 
> database modules. Sorry about this rant, but it's a little bit tiring to 
> going through this issues again and again. So if you think about writing a 
> new database module, here is a list with some points to check against.. ;-)
>
>
> 1. Error checking
>
> I think its absolut necessary to check for the validity of your input 
> parameter. Otherwise you'll crash on the first null pointer that you get. 
> The job of the database modules is to provide a API for other modules, thus 
> offer a service. The client code will be invetable try to do stupid things 
> because we're not living in a perfect world.
>
> So please don't hide your input checks behind some #ifdefs 
> like "XXX_EXTRA_DEBUG" or something similar. In general there should be no 
> new #ifdefs introduced for (in my opinion stupid) things like this. Nobody 
> will configure them, instead the default will be used. Every #ifdef increase 
> the complexity, the number of code paths that needs to be tested, in the end 
> the number of bugs. So again, instead of shifting the responsibility to the 
> user or packager, try to find a solution that works generally.
>
>
> 2. Error logging
>
> Its really essential to output meaningful error messages with the correct log 
> level for problems that causes operations to fail. Its not feasible to run a 
> production server with activated debug only to get information about the 
> reason why this certain query failed. Error logs provides important 
> information that is needed from API users, so please use LM_ERR and don't 
> hide them under thousands of other meaningless debug messages. So again, if 
> you return a failure to the client of the API, log also an error with a 
> meaningful message that is understandable by the admin or user that don't 
> wade through the code regularly. 
>
>
> 3. Code structure
>
> Maintaining all this bunch of modules is much more easier if everybody tries 
> to conform to a common coding style and structure. So please use the same 
> conventions in your code that are used in other database modules, even if you 
> don't like them. This applies to function definitions, parameter names, error 
> logging, debug messages, even to the practise of memory management.
>
> To be fair, this is only possible to a certain degree, but e.g. all SQL based 
> driver library interfaces are somewhat similar, there was no reason in the 
> first place why the SQL modules should differ that much. An additional 
> benefit in having the same error and debug messages in different modules is 
> that this really makes debugging and the bug fixing process easier. I know 
> that you only care about "your" driver during development, but you should 
> also care about the whole project. 
>
>
> 4. Documentation
>
> Yes, nobody likes to write documentation. But the absolute minimum to 
> understand any non-trivial foreign code is to have a comment block at the 
> function definition describing in a few sentence the purpose of the code, the 
> input parameter and return value. Its also important to describe why you do 
> certain things in your code, e.g. because of some driver requirements, some 
> bugs etc.. No comments in the code slows down the maintainance, more bugs 
> will be introduced on changes and so on.
>
>
> If we (as project) want to grow further in the future, we should seriously 
> think about the conception of some coding standards and best practises in 
> development, as most of this points also applies to other modules. Otherwise 
> the code base will at some point in the future collapse under their own 
> wight.
>
>
> Best regards,
>
> Henning
>
>
> P.S: Code examples for the respective issues can be found at:
>
> 1. db_text and db_berkeley
> 2. db_text: dbt_base.c
> 3. db_mysql, db_unixodbc vs. db_postgres, now fixed
> 4. db_text and db_berkeley
>
> _______________________________________________
> Devel mailing list
> Devel at lists.openser.org
> http://lists.openser.org/cgi-bin/mailman/listinfo/devel
>
>   



More information about the Devel mailing list