BIND 10 #422: Implement memory Data Source Class

BIND 10 Development do-not-reply at isc.org
Mon Dec 13 08:20:36 UTC 2010


#422: Implement memory Data Source Class
------------------------------+---------------------------------------------
      Reporter:  zzchen_pku   |        Owner:  jinmei   
          Type:  task         |       Status:  reviewing
      Priority:  major        |    Milestone:           
     Component:  data source  |   Resolution:           
      Keywords:               |    Sensitive:  0        
Estimatedhours:  0.0          |        Hours:  0        
      Billable:  1            |   Totalhours:  0        
      Internal:  0            |  
------------------------------+---------------------------------------------
Changes (by zzchen_pku):

  * owner:  zzchen_pku => jinmei


Comment:

 Replying to [comment:3 jinmei]:
 > '''zonetable_unittest'''
 >  - I believe we can simply use ConstZonePtr() (default constructed)
 >    instead of NULL + cast.  The static_cast hack used in the old code
 >    is to work around a peculiar compiler behavior with a bear value of
 >    NULL.  ConstZonePtr is a normal class type in terms of the type
 >    system so we shouldn't need a cast.
 Done.
 > '''memory_datasrc.h'''
 >  - this header file must include zonetable.h (mainly for ZonePtr).
 Done.
 >  - the class description: MemoryDataSrc is not just "a set of
 >    authoritative zones"; it's a data source that uses in memory
 >    dedicated backend.  Likewise, at the level of data source
 >    abstraction, it's not appropriate to mention the internal data
 >    structures (or classes) like "(zone) table".  Users of this class
 >    doesn't have to (or shouldn't) care about whether it's a table or
 >    not; for the users a MemoryDataSrc just magically provides the
 >    requested answer (Note: this is for the general description of the
 >    class or method interfaces - it's okay or sometimes even necessary
 >    to talk about the internal details in developer's notes).  Please
 >    update the overall documentation at a higher abstraction level.
 Updated.
 >  - For the same reason, I believe we should use a more generic naming
 >    space for result codes than "ZoneTable::" (note that we'll
 >    eventually use these codes in other data sources, which may or may
 >    not contain a ZoneTable object).  My current suggestion is to
 >    define a new sub namespace datasrc::result and define enums in that
 >    space:
 > {{{
 > nanespace datasrc {
 > ...
 > nanespace result {
 > enum Result {
 >         SUCCESS,  ///< The operation is successful.
 > ...
 > };
 > }
 > }}}
 >    (again, we should be at one level higher in abstraction and avoid
 >    using specific data structures or classes like ZoneTable)
 >    Once this is done, both ZoneTable and MemoryDataSrc use these
 >    enums.  We may eventually need to do the same thing for zones, but
 >    for now let's minimize the changes.
 Done.
 >  - on reading the resulting code, I now think add()/remove()/find()
 >    should actually be named "addZone()/removeZone()/findZone()",
 >    respectively.
 Updated.
 >  - many doxygen comments are (essentially) a duplicate of those of
 >    zonetable.h.  This isn't good as any duplicated effort.  My
 >    suggestion is to revise zonetable.h so that the descriptions simply
 >    refer to the corresponding interfaces of memory_datasrc.h.  I'd
 >    also add a note that the ZoneTable class is primarily intended to
 >    be used as a backend for the MemoryDataSrc class, but is exposed as
 >    a separate class in case some application wants to use it directly
 >    (e.g. for a customized data source implementation).
 Done.
 >  - the description of the default constructor doesn't match the
 >    implementation:
 > {{{
 >     /// This constructor internally involves resource allocation, and if
 >     ...
 > }}}
 >    (This indicate we shouldn't naively copy the description of similar
 >    class).  Also, we don't even have to explicitly declare and define
 >    it (and also the destructor) if we use the compiler generated
 >    implementations (but note the comment about pimpl below, which
 >    would request a non default constructor and destructor, and make
 >    the description valid again)
 Done.
 >  - Some comment lines are too long.  I suggest lines be folded so that
 >    they won't be longer than 79 characters (as recommended in BIND 9's
 >    coding guidelines).
 Updated.
 >  - Please add blank lines between the code and (next) doxygen
 >    document for readability, e.g. from
 > {{{
 >     /// See the description of specific methods for more details.
 >     typedef ZoneTable::Result Result;
 >     /// \brief A helper structure to represent the search result of
 > }}}
 >    to:
 > {{{
 >     /// See the description of specific methods for more details.
 >     typedef ZoneTable::Result Result;
 >
 >     /// \brief A helper structure to represent the search result of
 > }}}
 Updated.
 >  - I'd use the pimpl approach for this class, because its overhead is
 >    marginal for this class (MemoryDataSrc shouldn't be instantiated so
 >    often) and it's quite possible that we'll have more member
 >    variables as we implement more features for the data source.
 Updated to use the pimpl approach.
 > '''memory_datasrc_unittest'''
 >  - Most of the tests are a duplicate of those for zonetable_unittest
 >    and meaningless.  As long as we use ZoneTable as the backend in the
 >    straightforward way like we do now, I'd simply test a couple of
 >    trivial cases to confirm the interface (leaving a comment about why
 >    the tests are so simple)
 Updated, add more unittest.

 New change has been committed to r3810, thanks.

-- 
Ticket URL: <https://bind10.isc.org/ticket/422#comment:4>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development


More information about the bind10-tickets mailing list