• unknown's avatar
    BUG#21154 The management server consumes too much CPU · dcf21e94
    unknown authored
    BUG#13987 Cluster: Loss of data nodes can cause high CPU usage from ndb_mgmd
    
    fix the actual problem (getting incomplete line of data), introduced with previous
    improvement.
    
    also add list sessions, get session and get session id to mgmapi to allow
    the implementation of a test case for this exact problem.
    
    
    ndb/include/mgmapi/mgmapi.h:
      Add internal ndb_mgm_get_fd for use in test case
    ndb/include/mgmapi/mgmapi_debug.h:
      Add internal get_session_id and get_session
    ndb/include/util/InputStream.hpp:
      - fix warning when building with gcc 4
      - add mutex to be UNLOCKED when blocking (e.g. select(2))
        - this means we can list sessions in a threadsafe way
      - add this weird startover member to SocketInputStream
      	- this helps work out if we've read a newline yet and should start inserting
      	  into buffer from the start
    ndb/include/util/Parser.hpp:
      add mutex to context to pass down to SocketInputStream
    ndb/include/util/socket_io.h:
      readln_socket accepts mutex to UNLOCK around select(2)
    ndb/src/common/util/InputStream.cpp:
      remove evil, add more.
      
      As
    ndb/src/common/util/Parser.cpp:
      set mutex for passing down to InputStream to unlock on select(2).
      
      change way detecting of NoLine
    ndb/src/common/util/socket_io.cpp:
      unlock a mutex around select so that we can nicely do thread safe
      listing of sessions.
      
      Always retrieve data from the OS so that we instantly get EOF on disconnect
      and don't end up spinning looking for a newline.
    ndb/src/mgmapi/mgmapi.cpp:
      add internal ndb_mgm_get_fd() for internal testing
      
      internal/debug:
      ndb_mgm_get_session_id
      
      ndb_mgm_get_session
    ndb/src/mgmsrv/Services.cpp:
      Add list sessions, get session id and get session.
      
      introduce a session mutex
    ndb/src/mgmsrv/Services.hpp:
      Add list and get session.
      
      Add session_id to MgmApiSession.
    ndb/test/ndbapi/testMgm.cpp:
      Add test for MgmApiSession disconnection (mgmd at 100%)
    dcf21e94
InputStream.cpp 1.58 KB