BIND 10 #1959: Implement perfdhcp control logic

BIND 10 Development do-not-reply at isc.org
Mon Sep 10 14:54:03 UTC 2012


#1959: Implement perfdhcp control logic
-------------------------------------+-------------------------------------
                   Reporter:         |                 Owner:  tomek
  stephen                            |                Status:  reviewing
                       Type:         |             Milestone:  Sprint-
  enhancement                        |  DHCP-20120917
                   Priority:         |            Resolution:
  medium                             |             Sensitive:  0
                  Component:         |           Sub-Project:  DHCP
  perfdhcp                           |  Estimated Difficulty:  0
                   Keywords:         |           Total Hours:  0
            Defect Severity:  N/A    |
Feature Depending on Ticket:         |
        Add Hours to Ticket:  0      |
                  Internal?:  0      |
-------------------------------------+-------------------------------------

Comment (by tomek):

 Replying to [comment:11 marcin]:
 > > The comment just after protected: It should be moved above protected.
 The general approach is that the comment appears before the piece of code
 that is being commented. It is a good point about using friends. I tried
 to use that approach in one ticket, but I later removed it to follow
 whatever others do. It might be useful to write a question about it to
 bind10-dev asking if people are ok with using "friends" approach. As the
 discussion on bind10-dev may be lengthy, carry on with this ticket. If the
 discussion reaches a conclusion that fried is the way to go, we will have
 lots of places to change the code anyway.
 >
 > Comment moved. That's going to be hard job to change all classes to use
 "friend" approach. Maybe this could be applied to new classes only.
 That is a reasonable approach. Nevertheless, you should ask about the
 concept on bind10-dev.

 > The naming convention that I am following is use
 > - factoryABC6 for functions that are used to create DHCPv6 options only
 > - factoryDEF4 for functions that are used to create DHCPv4 options only
 > - factoryGHI for functions that can be used for either DHCPv4 or v6
 options.
 >
 > The function names correspond to this. Although it may seem a little
 redundant the option name indicates which factory function is for which IP
 mode (for somebody who does not recognize it from the option name). I
 insist that we leave it as it is.
 Sounds reasonable. Please add a comment about that naming scheme.

 > > Many factory methods throw exceptions if specified buffer is of
 invalid size. That should be reflected in the description with \throw.
 >
 > I belive it is. Can you point which one that throws exception is left
 without \throw?
 I thought that factory methods create specialized objects, e.g.
 factoryIana6 creates instances of Option6IA, not Option classes. Since
 they are using generic class, \throw are not needed.

 > > initTemplateFiles(): Where is the list of template files specified? It
 should briefly comment on it, as that info is not passed as parameter.
 >
 > I am not sure if I understand your point. The list of template files is
 given from command line. I updated comments to reflect this.
 Thanks. I see that the method is now called initPacketTemplates(). I like
 the new name better.

 > > There are many articles missing in the comments in test_control.h. As
 I've never learned to handle them correctly, I will not bother to guess
 when they're needed.
 >
 > I added one or two articles. I haven't found "many".
 Here's an example (a comment to the openSocket() method):
 {{{
     /// Method opens socket and binds it to local address. Function will
     /// use either interface name, local address or server address
     /// to create a socket, depending on what is available (specified
     /// from the command line). If socket can't be created for any
     /// reason, exception is thrown.
 }}}
 I think it should be:
 opens socket => opens a socket
 to local address => to the local address
 If socket can't => If the socket can't
 exception is thrown => an exception is thrown

 Anyway, I don't think it is productive to spend much time on it. It may
 sound a bit rough for native speakers, but they will understand it.

 > > receivePacket4(), receivePacket6(): It looks more natural when
 received packet is returned by the method, so unless there are specific
 reasons to do otherwise, I would prefer the prototype to be:
 > > {{{
 > > const dhcp::Pkt4Ptr receivePacket4(const TestControlSocket& socket);
 > > }}}
 >
 > The packet is NOT returned here at all. It is the input parameter. The
 actual packet reception from the wire is done elsewhere. The
 receivePacketX functions simply do processing on received packet (e.g.
 update statistics on StatsMgr, calculate RTT etc.).
 Uh oh. So receivePacket4 does not receive a packet? So rename it!
 processReceivedPacket4 sounds reasonable...

 > > byte2Hex(), vector2Hex(): These are very generic methods. Similar
 methods exist in src/lib/util/encode/hex.h (and other headers in that
 directory). If there isn't one already defined, please move them there.
 >
 > My methods in their shape do not fit to src/lib/util/encode/hex.h or any
 other file there. In the same time, methods provided there do not provide
 separators. Trying to move my code there might be tricky and I prefer
 postponing it for now.
 Ok. A simple @todo will do the trick for now.

 > > The check for reaching maximum drops percentage can be skipped, if
 total drop is 0. A simple if around the whole section should do the trick.
 >
 > Does it really improve any performance here? I don't want this function
 to grow any bigger than necessary so I dropped this suggestion.
 I'm not sure how many times per second it is called. It was only a
 suggestion to consider, so it is ok to drop it.

 > This sounds reasonably. Initially I did not think that there will be so
 many distinct invocations to StatsMgr<Pkt4> and StatsMgr<Pkt6>. In the
 future we may reconsider this but not as a part of this ticket. I will
 take a look at this as a part of #1960.
 1960 seems to be growing bigger and bigger. Will it be ultimately larger
 than #1959? Perhaps the first thing to do in 1960 would be to split it
 into smaller chunks?

 > > template_idx is always zero. Are there any cases when additional
 templates may be used? If not, please add an appropriate comment.
 >
 > The reason to define the constant is that everybody knows that 0 is
 template index. I do another constant when I get the template for request
 packet. I just avoid using unnamed '0's in the code. I added some comment
 there.
 This should be a const static member of the class then.


 > > There is no check if received ADVERTISE is sane or not. First, the
 code should check if there is STATUS_CODE option in the message with non-
 zero status. Then it should check for non-zero STATUS_CODE opion in the
 IA_NA option. Finally it should check if there's IAADDR option in IA_NA.
 If you don't want to implement this now, just adding appropriate @TODO
 will be sufficient for now.
 >
 > We will need some other ticket for this to guarantee robustness of this
 code but also in many other places.
 Yes. Please create one.

 > > updateSendDue(): Is the code really that fast that it usually send out
 packeted within microsecond of when it was supposed to be sent? I would
 add a little delta when comparing now and send_due_ to avoid cases when
 things are happening at the boundary between n-th and n-th microsecond.
 Some time later, this could be made a configurable parameter ("allowed
 send delay" or "send delay tolerance"), but it is ok to add @todo for now
 (if you think it is a good idea to implement such a parameter).
 >
 > In fact, I have checked that it is often that we exceed due time and
 latesend counter is increased. First I would like to implement milisecond
 timeout in ifaceMgr as it will change a lot the timings in main loop.
 After that I will take a look how it affects the section you're poiting
 at.
 Ok. That seems like a worthy candidate for a separate ticket. Please
 create one with a pointer to this discussion.

 I have removed many comments that you agreed with or just marked as one.
 It will make reading this at least a bit easier.

-- 
Ticket URL: <http://bind10.isc.org/ticket/1959#comment:17>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development


More information about the bind10-tickets mailing list