Ok here are my first set of comments. I have run shellcheck, cppcheck and cpplint on the new files. Could you check the result?

Output of shellcheck when run on src/osaf/consensus/plugins/etcd.plugin:

Line 15:
  value=`etcdctl get $key 2>&1`
        ^-- SC2006: Use $(..) instead of legacy `..`.
                     ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 16:
  if [ $? -eq 0 ]; then
       ^-- SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.

Line 36:
  etcdctl set $key $value 1>& /dev/null
                   ^-- SC2086: Double quote to prevent globbing and word splitting.               ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 37:
  if [ $? -eq 0 ]; then
       ^-- SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.

Line 54:
  etcdctl rm $key 1>& /dev/null
             ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 55:
  if [ $? -eq 0 ]; then
       ^-- SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.

Line 74:
  etcdctl mk $keyname $owner --ttl $timeout >& /dev/null
                                   ^-- SC2086: Double quote to prevent globbing and word splitting.                       ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 75:
  if [ $? -ne 0 ]; then
       ^-- SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.

Line 76:
    current_owner=`etcdctl get $keyname`
                  ^-- SC2006: Use $(..) instead of legacy `..`.

Line 111:
  local readonly hostname=$(hostname)
                 ^-- SC2155: Declare and assign separately to avoid masking return values.

Line 115:
    owner=`etcdctl get $keyname 2>&1`
          ^-- SC2006: Use $(..) instead of legacy `..`.

Line 122:
  if [ $? -eq 0 ]; then
       ^-- SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.

Line 137:
  local readonly key=$1
        ^-- SC2034: readonly appears unused. Verify it or export it.

Line 139:
  value=`etcdctl watch $key 2>&1`
        ^-- SC2006: Use $(..) instead of legacy `..`.
                       ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 140:
  if [ $? -eq 0 ]; then
       ^-- SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.

Line 157:
    get $2
        ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 165:
    set $2 $3
        ^-- SC2086: Double quote to prevent globbing and word splitting.
           ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 173:
    erase $2 ""
          ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 181:
    lock $2 $3
            ^-- SC2086: Double quote to prevent globbing and word splitting.
         ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 209:
    watch $2
          ^-- SC2086: Double quote to prevent globbing and word splitting.


Output of cppcheck when run on src/osaf/consensus:

[src/osaf/consensus/service.h:62]: (performance) Function parameter 'node' should be passed by reference. [src/osaf/consensus/service.cc:36]: (style) Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [src/osaf/consensus/service.cc:70]: (style) Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [src/osaf/consensus/service.cc:89]: (style) Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [src/osaf/consensus/service.cc:114]: (style) Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [src/osaf/consensus/service.cc:147]: (style) Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [src/osaf/consensus/service.cc:162]: (style) Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [src/osaf/consensus/service.cc:132]: (style) The function 'IsEnabled' is never used.

Output of cpplint when run on src/osaf/consensus:

src/osaf/consensus/service.h:17:  #ifndef header guard has wrong style, please use: OSAF_CONSENSUS_SERVICE_H_  [build/header_guard] [5] src/osaf/consensus/service.h:66:  #endif line should be "#endif // OSAF_CONSENSUS_SERVICE_H_"  [build/header_guard] [5] src/osaf/consensus/service.h:20:  Include the directory when naming .h files  [build/include] [4] src/osaf/consensus/service.h:22:  Found C++ system header after other header. Should be: service.h, c system, c++ system, other. [build/include_order] [4] src/osaf/consensus/service.h:25:  public: should be indented +1 space inside class Consensus  [whitespace/indent] [3] src/osaf/consensus/service.h:26:  Do not leave a blank line after "public:"  [whitespace/blank_line] [3] src/osaf/consensus/service.h:50:  Zero-parameter constructors should not be marked explicit.  [runtime/explicit] [5] src/osaf/consensus/service.h:56:  private: should be indented +1 space inside class Consensus  [whitespace/indent] [3] src/osaf/consensus/service.h:60:  At least two spaces is best between code and comments  [whitespace/comments] [2] src/osaf/consensus/keyvalue.h:17:  #ifndef header guard has wrong style, please use: OSAF_CONSENSUS_KEYVALUE_H_ [build/header_guard] [5] src/osaf/consensus/keyvalue.h:57:  #endif line should be "#endif // OSAF_CONSENSUS_KEYVALUE_H_"  [build/header_guard] [5] src/osaf/consensus/keyvalue.h:31:  Is this a non-const reference? If so, make const or use a pointer: std::string& value [runtime/references] [2] src/osaf/consensus/keyvalue.h:54:  Is this a non-const reference? If so, make const or use a pointer: std::string& output [runtime/references] [2] src/osaf/consensus/keyvalue.cc:17:  Include the directory when naming .h files  [build/include] [4] src/osaf/consensus/keyvalue.cc:48:  Lines should be <= 80 characters long  [whitespace/line_length] [2] src/osaf/consensus/keyvalue.cc:63:  Lines should be <= 80 characters long  [whitespace/line_length] [2] src/osaf/consensus/keyvalue.cc:78:  Lines should be <= 80 characters long  [whitespace/line_length] [2] src/osaf/consensus/keyvalue.cc:94:  Lines should be <= 80 characters long  [whitespace/line_length] [2] src/osaf/consensus/keyvalue.cc:110:  Lines should be <= 80 characters long  [whitespace/line_length] [2] src/osaf/consensus/keyvalue.cc:125:  Lines should be <= 80 characters long  [whitespace/line_length] [2] src/osaf/consensus/keyvalue.cc:145:  Lines should be <= 80 characters long  [whitespace/line_length] [2] src/osaf/consensus/keyvalue.cc:161:  { should almost always be at the end of the previous line  [whitespace/braces] [4] src/osaf/consensus/service.cc:17:  Include the directory when naming .h files  [build/include] [4] src/osaf/consensus/service.cc:22:  Found C system header after other header. Should be: service.h, c system, c++ system, other. [build/include_order] [4] src/osaf/consensus/service.cc:23:  Found C++ system header after other header. Should be: service.h, c system, c++ system, other. [build/include_order] [4] src/osaf/consensus/service.cc:79:  { should almost always be at the end of the previous line  [whitespace/braces] [4] src/osaf/consensus/service.cc:203:  { should almost always be at the end of the previous line  [whitespace/braces] [4] src/osaf/consensus/service.cc:207:  { should almost always be at the end of the previous line  [whitespace/braces] [4] src/osaf/consensus/service.cc:224:  { should almost always be at the end of the previous line  [whitespace/braces] [4]

/ Anders Widell

On 01/10/2018 06:29 AM, Gary Lee wrote:
Summary: Add support for split brain prevention with consensus key-value store 
[#64]
Review request for Ticket(s): 64
Peer Reviewer(s): Anders, Han, Quyen
Pull request to: *** LIST THE PERSON WITH PUSH ACCESS HERE ***
Affected branch(es): develop
Development branch: ticket-64
Base revision: 51e30cbf5f891f2479013bf9ce4289a27c47aa17
Personal repository: git://git.code.sf.net/u/userid-2226215/review

--------------------------------
Impacted area       Impact y/n
--------------------------------
  Docs                    n
  Build system            n
  RPM/packaging           n
  Configuration files     n
  Startup scripts         n
  SAF services            y
  OpenSAF services        y
  Core libraries          n
  Samples                 n
  Tests                   n
  Other                   n


Comments (indicate scope for each "y" above):
---------------------------------------------

revision 1721faf640efa92950214a516e7f2f33c827c50b
Author: Gary Lee <gary....@dektech.com.au>
Date:   Wed, 10 Jan 2018 16:22:19 +1100

doc: update README and makefiles [#64]



revision 7882b8fcd5ae5415c04345c2a32c3ff1922e70cc
Author: Gary Lee <gary....@dektech.com.au>
Date:   Wed, 10 Jan 2018 16:21:48 +1100

amfd: update consensus service when performing SI swap [#64]



revision 94a032a0583a512909e8619a0f68617fe5b90712
Author: Gary Lee <gary....@dektech.com.au>
Date:   Wed, 10 Jan 2018 16:21:21 +1100

fmd: update consensus service during controller failover [#64]



revision 3378f383490517614903f800e669a1b5a7240d49
Author: Gary Lee <gary....@dektech.com.au>
Date:   Wed, 10 Jan 2018 16:20:39 +1100

rded: add split brain prevention support [#64]

* consult with consensus service before promoting node to active
* add watch thread and self-fence if it detects active controller
   has been changed



revision 0e31d572da8d887ba4d53e828973e0a48e3aaa0a
Author: Gary Lee <gary....@dektech.com.au>
Date:   Wed, 10 Jan 2018 16:20:05 +1100

osaf: add consensus API [#64]



Added Files:
------------
  src/osaf/consensus/Makefile
  src/osaf/consensus/keyvalue.cc
  src/osaf/consensus/keyvalue.h
  src/osaf/consensus/plugins/etcd.plugin
  src/osaf/consensus/plugins/sample.plugin
  src/osaf/consensus/service.cc
  src/osaf/consensus/service.h


Complete diffstat:
------------------
  00-README.conf                           |  43 ++++++
  Makefile.am                              |   4 +-
  src/amf/amfd/osaf-amfd.in                |   4 +
  src/amf/amfd/role.cc                     |  35 ++++-
  src/fm/Makefile.am                       |   1 +
  src/fm/fmd/fm_main.cc                    |  12 ++
  src/fm/fmd/fm_rda.cc                     |  26 ++++
  src/fm/fmd/fmd.conf                      |   8 ++
  src/osaf/Makefile.am                     |   8 +-
  src/osaf/consensus/Makefile              |  18 +++
  src/osaf/consensus/keyvalue.cc           | 165 ++++++++++++++++++++++
  src/osaf/consensus/keyvalue.h            |  57 ++++++++
  src/osaf/consensus/plugins/etcd.plugin   | 217 +++++++++++++++++++++++++++++
  src/osaf/consensus/plugins/sample.plugin | 162 ++++++++++++++++++++++
  src/osaf/consensus/service.cc            | 231 +++++++++++++++++++++++++++++++
  src/osaf/consensus/service.h             |  66 +++++++++
  src/rde/Makefile.am                      |   3 +-
  src/rde/rded/osaf-rded.in                |   4 +
  src/rde/rded/rde_cb.h                    |   3 +-
  src/rde/rded/rde_main.cc                 |  32 ++++-
  src/rde/rded/role.cc                     |  45 +++++-
  src/rde/rded/role.h                      |   2 +
  22 files changed, 1130 insertions(+), 16 deletions(-)


Testing Commands:
-----------------
*** LIST THE COMMAND LINE TOOLS/STEPS TO TEST YOUR CHANGES ***


Testing, Expected Results:
--------------------------
*** PASTE COMMAND OUTPUTS / TEST RESULTS ***


Conditions of Submission:
-------------------------
*** HOW MANY DAYS BEFORE PUSHING, CONSENSUS ETC ***


Arch      Built     Started    Linux distro
-------------------------------------------
mips        n          n
mips64      n          n
x86         n          n
x86_64      y          y
powerpc     n          n
powerpc64   n          n


Reviewer Checklist:
-------------------
[Submitters: make sure that your review doesn't trigger any checkmarks!]


Your checkin has not passed review because (see checked entries):

___ Your RR template is generally incomplete; it has too many blank entries
     that need proper data filled in.

___ You have failed to nominate the proper persons for review and push.

___ Your patches do not have proper short+long header

___ You have grammar/spelling in your header that is unacceptable.

___ You have exceeded a sensible line length in your headers/comments/text.

___ You have failed to put in a proper Trac Ticket # into your commits.

___ You have incorrectly put/left internal data in your comments/files
     (i.e. internal bug tracking tool IDs, product names etc)

___ You have not given any evidence of testing beyond basic build tests.
     Demonstrate some level of runtime or other sanity testing.

___ You have ^M present in some of your files. These have to be removed.

___ You have needlessly changed whitespace or added whitespace crimes
     like trailing spaces, or spaces before tabs.

___ You have mixed real technical changes with whitespace and other
     cosmetic code cleanup changes. These have to be separate commits.

___ You need to refactor your submission into logical chunks; there is
     too much content into a single commit.

___ You have extraneous garbage in your review (merge commits etc)

___ You have giant attachments which should never have been sent;
     Instead you should place your content in a public tree to be pulled.

___ You have too many commits attached to an e-mail; resend as threaded
     commits, or place in a public tree for a pull.

___ You have resent this content multiple times without a clear indication
     of what has changed between each re-send.

___ You have failed to adequately and individually address all of the
     comments and change requests that were proposed in the initial review.

___ You have a misconfigured ~/.gitconfig file (i.e. user.name, user.email etc)

___ Your computer have a badly configured date and time; confusing the
     the threaded patch review.

___ Your changes affect IPC mechanism, and you don't present any results
     for in-service upgradability test.

___ Your changes affect user manual and documentation, your patch series
     do not contain the patch that updates the Doxygen manual.




------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to