How to disconnect from MongoDB in a Perl script?

I am trying to write a Perl5 script that checks the status of the MongoDB server every minute and notifies me if it does not work. Any suggestions are welcome for this task. I am currently using the "MongoDB" and "MongoDB :: MongoClient" modules to establish a connection to find out if the server is accessible. Here is the basic idea:

while(1) { my $conn = connectMongoDB(); if($conn){ sleep 60; } else{ sendMail(); last; } } sub connectMongoDB { my $client; eval{ $client = MongoDB::MongoClient->new( host => "mongodb://:\@$server");}; return ($client)?1:0; } 

The main problem is that there is no way to disconnect from the server. Here is what he says on the cpan page:

"It is not possible to explicitly disconnect from the database. However, the connection will be automatically closed and cleared if there are no references to the MongoDB :: MongoClient object that occurs when $ client leaves the scope (or earlier if you did not define it using undef).

I tried 'undef' and routines. None of them terminate the connection. Due to the cycle, the number of connections continues to grow. Is there any other method that I can try to control the number of connections?

Any other suggestion to solve this problem is welcome if it is not related to crontab.

Thanks.

EDIT:

This is the conclusion when the sleep time is set to 2 seconds, where the version is db v2.4.4 and the version of the MongoDB module is 0.701.4. The problem persists after upgrading the MongoDB module to 0.702.1.

 Fri Aug 16 20:33:06.986 [initandlisten] connection accepted from 127.0.0.1:51031 #3 (1 connection now open) Fri Aug 16 20:33:08.989 [initandlisten] connection accepted from 127.0.0.1:51033 #4 (2 connections now open) Fri Aug 16 20:33:10.991 [initandlisten] connection accepted from 127.0.0.1:51034 #5 (3 connections now open) Fri Aug 16 20:33:12.994 [initandlisten] connection accepted from 127.0.0.1:51035 #6 (4 connections now open) Fri Aug 16 20:33:14.996 [initandlisten] connection accepted from 127.0.0.1:51036 #7 (5 connections now open) Fri Aug 16 20:33:16.999 [initandlisten] connection accepted from 127.0.0.1:51038 #8 (6 connections now open) Fri Aug 16 20:33:19.003 [initandlisten] connection accepted from 127.0.0.1:51039 #9 (7 connections now open) Fri Aug 16 20:33:21.006 [initandlisten] connection accepted from 127.0.0.1:51040 #10 (8 connections now open) Fri Aug 16 20:33:23.009 [initandlisten] connection accepted from 127.0.0.1:51042 #11 (9 connections now open) Fri Aug 16 20:33:25.013 [initandlisten] connection accepted from 127.0.0.1:51043 #12 (10 connections now open) Fri Aug 16 20:33:27.016 [initandlisten] connection accepted from 127.0.0.1:51044 #13 (11 connections now open) Fri Aug 16 20:33:29.019 [initandlisten] connection accepted from 127.0.0.1:51045 #14 (12 connections now open) Fri Aug 16 20:33:31.022 [initandlisten] connection accepted from 127.0.0.1:51047 #15 (13 connections now open) 

EDIT 2: SOLVED !!

I believe the problem is with the auto_connect option. Once it is disabled, the code works fine. Below is something that works now.

 sub connectMongoDB { my $client; eval{ $client = MongoDB::MongoClient->new( host => "mongodb://:\@$server", auto_connect => 0); $client->connect; }; return ( !$@ )?1:0; } 

The best

+4
source share
2 answers

Change the routine as follows:

 sub connectMongoDB { my $client; eval{ $client = MongoDB::MongoClient->new( host => "mongodb://:\@$server", auto_connect => 0); $client->connect; }; return ( !$@ )?1:0; } 

The problem was the "auto_reconnect" option.

0
source

I cannot reproduce this problem using MongoDB 2.4.1 and version 0.702.1 of the MongoDB driver from CPAN.

I ran your code with a wait timeout changed to 10 seconds by connecting to localhost. After starting for a couple of minutes, running db.serverStatus() in the mongo shell continued to show only one connection. (This is a connection for a shell session.)

Here, the output from mongod shows that the connections open and close every ten seconds. (You can see that I started the shell after the first two connections cycled.)

 Fri Aug 16 21:36:43.589 [conn1] end connection 127.0.0.1:57722 (0 connections now open) Fri Aug 16 21:36:53.526 [initandlisten] connection accepted from 127.0.0.1:57723 #2 (1 connection now open) Fri Aug 16 21:36:53.527 [conn2] end connection 127.0.0.1:57723 (0 connections now open) Fri Aug 16 21:36:58.421 [initandlisten] connection accepted from 127.0.0.1:57724 #3 (1 connection now open) Fri Aug 16 21:37:03.529 [initandlisten] connection accepted from 127.0.0.1:57725 #4 (2 connections now open) Fri Aug 16 21:37:03.529 [conn4] end connection 127.0.0.1:57725 (1 connection now open) Fri Aug 16 21:37:13.531 [initandlisten] connection accepted from 127.0.0.1:57726 #5 (2 connections now open) Fri Aug 16 21:37:13.532 [conn5] end connection 127.0.0.1:57726 (1 connection now open) Fri Aug 16 21:37:23.534 [initandlisten] connection accepted from 127.0.0.1:57727 #6 (2 connections now open) Fri Aug 16 21:37:23.535 [conn6] end connection 127.0.0.1:57727 (1 connection now open) Fri Aug 16 21:37:33.537 [initandlisten] connection accepted from 127.0.0.1:57728 #7 (2 connections now open) Fri Aug 16 21:37:33.538 [conn7] end connection 127.0.0.1:57728 (1 connection now open) Fri Aug 16 21:37:43.540 [initandlisten] connection accepted from 127.0.0.1:57729 #8 (2 connections now open) Fri Aug 16 21:37:43.540 [conn8] end connection 127.0.0.1:57729 (1 connection now open) Fri Aug 16 21:37:53.542 [initandlisten] connection accepted from 127.0.0.1:57730 #9 (2 connections now open) Fri Aug 16 21:37:53.543 [conn9] end connection 127.0.0.1:57730 (1 connection now open) Fri Aug 16 21:38:03.545 [initandlisten] connection accepted from 127.0.0.1:57731 #10 (2 connections now open) Fri Aug 16 21:38:03.545 [conn10] end connection 127.0.0.1:57731 (1 connection now open) Fri Aug 16 21:38:13.547 [initandlisten] connection accepted from 127.0.0.1:57732 #11 (2 connections now open) Fri Aug 16 21:38:13.548 [conn11] end connection 127.0.0.1:57732 (1 connection now open) Fri Aug 16 21:38:23.550 [initandlisten] connection accepted from 127.0.0.1:57734 #12 (2 connections now open) Fri Aug 16 21:38:23.550 [conn12] end connection 127.0.0.1:57734 (1 connection now open) Fri Aug 16 21:38:33.552 [initandlisten] connection accepted from 127.0.0.1:57735 #13 (2 connections now open) Fri Aug 16 21:38:33.553 [conn13] end connection 127.0.0.1:57735 (1 connection now open) Fri Aug 16 21:38:43.555 [initandlisten] connection accepted from 127.0.0.1:57736 #14 (2 connections now open) Fri Aug 16 21:38:43.555 [conn14] end connection 127.0.0.1:57736 (1 connection now open) Fri Aug 16 21:38:53.557 [initandlisten] connection accepted from 127.0.0.1:57737 #15 (2 connections now open) Fri Aug 16 21:38:53.559 [conn15] end connection 127.0.0.1:57737 (1 connection now open) Fri Aug 16 21:39:03.560 [initandlisten] connection accepted from 127.0.0.1:57738 #16 (2 connections now open) Fri Aug 16 21:39:03.561 [conn16] end connection 127.0.0.1:57738 (1 connection now open) Fri Aug 16 21:39:13.563 [initandlisten] connection accepted from 127.0.0.1:57740 #17 (2 connections now open) Fri Aug 16 21:39:13.564 [conn17] end connection 127.0.0.1:57740 (1 connection now open) Fri Aug 16 21:39:23.566 [initandlisten] connection accepted from 127.0.0.1:57741 #18 (2 connections now open) Fri Aug 16 21:39:23.567 [conn18] end connection 127.0.0.1:57741 (1 connection now open) Fri Aug 16 21:39:33.569 [initandlisten] connection accepted from 127.0.0.1:57747 #19 (2 connections now open) Fri Aug 16 21:39:33.570 [conn19] end connection 127.0.0.1:57747 (1 connection now open) Fri Aug 16 21:39:43.572 [initandlisten] connection accepted from 127.0.0.1:57748 #20 (2 connections now open) Fri Aug 16 21:39:43.573 [conn20] end connection 127.0.0.1:57748 (1 connection now open) Fri Aug 16 21:39:53.575 [initandlisten] connection accepted from 127.0.0.1:57750 #21 (2 connections now open) Fri Aug 16 21:39:53.576 [conn21] end connection 127.0.0.1:57750 (1 connection now open) Fri Aug 16 21:40:03.579 [initandlisten] connection accepted from 127.0.0.1:57751 #22 (2 connections now open) Fri Aug 16 21:40:03.579 [conn22] end connection 127.0.0.1:57751 (1 connection now open) Fri Aug 16 21:40:13.580 [initandlisten] connection accepted from 127.0.0.1:57753 #23 (2 connections now open) Fri Aug 16 21:40:13.581 [conn23] end connection 127.0.0.1:57753 (1 connection now open) Fri Aug 16 21:40:23.584 [initandlisten] connection accepted from 127.0.0.1:57754 #24 (2 connections now open) Fri Aug 16 21:40:23.584 [conn24] end connection 127.0.0.1:57754 (1 connection now open) Fri Aug 16 21:40:33.586 [initandlisten] connection accepted from 127.0.0.1:57755 #25 (2 connections now open) Fri Aug 16 21:40:33.586 [conn25] end connection 127.0.0.1:57755 (1 connection now open) Fri Aug 16 21:40:43.588 [initandlisten] connection accepted from 127.0.0.1:57758 #26 (2 connections now open) Fri Aug 16 21:40:43.588 [conn26] end connection 127.0.0.1:57758 (1 connection now open) Fri Aug 16 21:40:53.590 [initandlisten] connection accepted from 127.0.0.1:57760 #27 (2 connections now open) Fri Aug 16 21:40:53.591 [conn27] end connection 127.0.0.1:57760 (1 connection now open) Fri Aug 16 21:41:03.592 [initandlisten] connection accepted from 127.0.0.1:57761 #28 (2 connections now open) Fri Aug 16 21:41:03.593 [conn28] end connection 127.0.0.1:57761 (1 connection now open) 

Can you tell me which version of MongoDB (server) and MongoDB (driver) you are using?

+4
source

Source: https://habr.com/ru/post/1497522/


All Articles