Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Client: support 'OR" operator between 'pingInactive' and 'pingWaitRes' #182

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

leemgs
Copy link

@leemgs leemgs commented Apr 21, 2017

This commit is to fix issue #181.

According to https://github.com/mscdex/node-mariasql/blob/master/lib/Client.js#L633 ,
The protocol-level pings can be enabled by setting both 'pingInactive' and
'pingWaitRes' variablei as following:

a. 'pingInactive' to how many milliseconds to wait before sending a ping
when no queries are pending,
b. AND 'pingWaitRes' to how many milliseconds to wait for a ping response
before assuming a lost/dead connection.

For example, If you want to check a connection state per 60 seconds, we have
to define both 'pingInactive' and pingWaitRes. It means that the "MySQL server
has gone away" issue will be always generated in case that we declare the
timeout with one between 'pingInactive' and 'pingWaitRes'.

Let's support an optional conditional operator instead of "AND" operation conditions.
If user does not declared a default timeout, it will be 60 seconds by default.

  • Example source code:
    [foo.js]
    pingInactive: 60000,

  • Before applying this patch:
    events.js:160
    throw er; // Unhandled 'error' event
    ^
    Error: MySQL server has gone away
    at Error (native)

  • How to monitor a sleep time of database on MariaDB server:
    $ sudo apt-get install mytop [enter]
    $ mytop -u root -p**** ourjs [enter]
    MySQL on localhost (10.0.29) load 0.32 0.30 0.26 2/580 9391 up 0+14:33:20 [07:47:10]
    Queries: 1.7k qps: 0 Slow: 0.0 Se/In/Up/De(%): 02/00/00/00
    Sorts: 0 qps now: 1 Slow qps: 0.0 Threads: 3 ( 1/ 2) 00/00/00/00
    Key Efficiency: 100.0% Bps in/out: 0.9/127.1 Now in/out: 21.3/ 2.9k

     Id      User         Host/IP         DB       Time    Cmd    State Query
     --      ----         -------         --       ----    ---    ----- ----------
    754       ourjs localhost:34766        test         38  Sleep
    

$ cat /proc/754/stat
$ cat /proc/754/status

  • How to change a default timeout of Mariadb server:
    $ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
    [mysqld]
    wait_timeout = 120 (default value is 28800secs)
    interactive_timeout = 120 (default value is 28800secs)

Signed-off-by: Geunsik Lim [email protected]

\CC: @myungjoo

@leemgs
Copy link
Author

leemgs commented Oct 30, 2017

@gabesmed , @mscdex PTAL

lib/Client.js Outdated
&& this._config.pingInactive > 0
&& this._config.pingWaitRes > 0) {
&& this._config.pingWaitRes > 0)) {
if (this._config.pingInactive === undefined){
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing space before { here and below.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed. Thanks.

This commit is to fix issue mscdex#181.

According to https://github.com/mscdex/node-mariasql/blob/master/lib/Client.js#L633 ,
The protocol-level pings can be enabled by setting both 'pingInactive' and
'pingWaitRes' variablei as following:

a. 'pingInactive' to how many milliseconds to wait before sending a ping
   when no queries are pending,
b. AND 'pingWaitRes' to how many milliseconds to wait for a ping response
   before assuming a lost/dead connection.

For example, If you want to check a connection state per 60 seconds, we have
to define both 'pingInactive' and pingWaitRes. It means that the "MySQL server
has gone away" issue will be always generated in case that we declare the
timeout with one between 'pingInactive' and 'pingWaitRes'.

Let's support an optional conditional operator instead of "AND" operation conditions.
If user does not declared a default timeout, it will be 60 seconds by default.

* Example source code:
[foo.js]
pingInactive: 60000,
pingWaitRes: 60000,

* Before applying this patch:
events.js:160
      throw er; // Unhandled 'error' event
      ^
Error: MySQL server has gone away
    at Error (native)

* How to monitor a sleep time of database on MariaDB server:
$ sudo apt-get install mytop [enter]
$ mytop -u root -p**** ourjs [enter]
MySQL on localhost (10.0.29)   load 0.32 0.30 0.26 2/580 9391 up 0+14:33:20 [07:47:10]
 Queries: 1.7k     qps:    0 Slow:     0.0         Se/In/Up/De(%):    02/00/00/00
 Sorts:      0 qps now:    1 Slow qps: 0.0  Threads:    3 (   1/   2) 00/00/00/00
 Key Efficiency: 100.0%  Bps in/out:   0.9/127.1   Now in/out:  21.3/ 2.9k

       Id      User         Host/IP         DB       Time    Cmd    State Query
       --      ----         -------         --       ----    ---    ----- ----------
      754       ourjs localhost:34766        test         38  Sleep
$ cat /proc/754/stat
$ cat /proc/754/status

* How to change a default timeout of Mariadb server:
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
wait_timeout = 120 (default value is 28800)
interactive_timeout = 120 (default value is 28800)

Signed-off-by: Geunsik Lim <[email protected]>
@leemgs leemgs force-pushed the upstream-wait-timeout branch from b48dbb7 to 5f5fdc0 Compare November 2, 2017 15:07
@leemgs
Copy link
Author

leemgs commented Nov 2, 2017

@mscdex I have re-submitted the PR with squash after fixing.

@leemgs
Copy link
Author

leemgs commented Jan 4, 2018

@mscdex, PTAL, Could you review this PR?

@leemgs
Copy link
Author

leemgs commented Feb 11, 2018

@mscdex, RESEND, Could you review and merge this PR?

@leemgs
Copy link
Author

leemgs commented Jun 2, 2018

@mscdex, Knock Knock. I re-submitted updated PR after applying your comment. Could your give me comment or merge this PR?

@leemgs
Copy link
Author

leemgs commented Oct 16, 2018

RESEND

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants