BewareMyPower opened a new issue, #202:
URL: https://github.com/apache/pulsar-client-cpp/issues/202

   ### Search before asking
   
   - [X] I searched in the 
[issues](https://github.com/apache/pulsar-client-cpp/issues) and found nothing 
similar.
   
   
   ### Version
   
   - OS: Ubuntu 20.04
   - Pulsar: 2.11.0
   - C++ Client: main branch (05807bdaf3a4341b22efd7c71f7b00c47cc31413)
   
   ### Minimal reproduce step
   
   ```c++
   #include <errno.h>
   #include <pulsar/Client.h>
   #include <string.h>
   #include <sys/resource.h>
   using namespace pulsar;
   
   int main() {
       struct rlimit oldLimit;
       if (getrlimit(RLIMIT_NOFILE, &oldLimit) < 0) {
           std::cerr << "Failed to get rlimit: " << strerror(errno) << 
std::endl;
           return 1;
       }
       std::cout << "original limit: " << oldLimit.rlim_cur << " " << 
oldLimit.rlim_max << std::endl;
   
       struct rlimit rlimit;
       rlimit.rlim_cur = 1;
       rlimit.rlim_max = oldLimit.rlim_max;
   
       if (setrlimit(RLIMIT_NOFILE, &rlimit) < 0) {
           std::cerr << "Failed to set rlimit: " << strerror(errno) << 
std::endl;
           return 1;
       }
   
       Client client("pulsar://localhost:6650");
       Producer producer;
       auto result = client.createProducer("my-topic", producer);
       if (result != ResultOk) {
           std::cerr << "Failed to create producer " << result << ", try to 
reset the RLIMIT_NOFILE"
                     << std::endl;
       }
   
       if (setrlimit(RLIMIT_NOFILE, &oldLimit) < 0) {
           std::cerr << "Failed to set rlimit: " << strerror(errno) << 
std::endl;
           return 1;
       }
   
       result = client.createProducer("my-topic", producer);
       if (result != ResultOk) {
           std::cerr << "Failed to create producer " << result << std::endl;
           return 2;
       }
   
       client.close();
   }
   ```
   
   ### What did you expect to see?
   
   1. The 1st `createProducer` call returns `ResultConnectError` because of the 
file descriptor limit.
   2. The 2nd `createProducer` call returns `ResultOk`.
   
   ### What did you see instead?
   
   ```
   2023-02-20 10:02:41.489 ERROR [140184068893696] ClientConnection:186 | 
Failed to initialize connection: eventfd_select_interrupter: Too many open 
files [system:24]
   2023-02-20 10:02:41.489 INFO  [140184068893696] ClientConnection:1650 | 
[<none> -> pulsar://localhost:6650] Connection disconnected
   2023-02-20 10:02:41.489 INFO  [140184068893696] ConnectionPool:97 | Created 
connection for pulsar://localhost:6650
   2023-02-20 10:02:41.489 INFO  [140184068893696] ClientConnection:270 | 
[<none> -> pulsar://localhost:6650] Destroyed connection
   terminate called after throwing an instance of 
'boost::wrapexcept<boost::system::system_error>'
     what():  eventfd_select_interrupter: Too many open files [system:24]
   Aborted
   ```
   
   ### Anything else?
   
   If we increased the limit from 1 to 5, i.e. changed 
   
   ```c++
       rlimit.rlim_cur = 1;
   ```
   
   to
   
   ```c++
       rlimit.rlim_cur = 5;
   ```
   
   then it would work as expected:
   
   ```
   original limit: 1024 1048576
   2023-02-20 10:04:54.863 INFO  [140200259120128] ClientConnection:191 | 
[<none> -> pulsar://localhost:6650] Create ClientConnection, timeout=10000
   2023-02-20 10:04:54.863 INFO  [140200259120128] ConnectionPool:97 | Created 
connection for pulsar://localhost:6650
   2023-02-20 10:04:54.864 ERROR [140200259073792] ClientConnection:564 | 
[<none> -> pulsar://localhost:6650] Resolve error: asio.netdb:1 : Host not 
found (authoritative)
   2023-02-20 10:04:54.865 ERROR [140200259073792] ClientConnection:1648 | 
[<none> -> pulsar://localhost:6650] Connection closed with ConnectError
   2023-02-20 10:04:54.865 ERROR [140200259073792] ClientImpl:201 | Error 
Checking/Getting Partition Metadata while creating producer on 
persistent://public/default/my-topic -- ConnectError
   Failed to create producer ConnectError, try to reset the RLIMIT_NOFILE
   2023-02-20 10:04:54.865 INFO  [140200259073792] ClientConnection:270 | 
[<none> -> pulsar://localhost:6650] Destroyed connection
   2023-02-20 10:04:54.865 INFO  [140200259120128] ConnectionPool:86 | Deleting 
stale connection from pool for pulsar://localhost:6650 use_count: -1 @ 0
   2023-02-20 10:04:54.865 INFO  [140200259120128] ClientConnection:191 | 
[<none> -> pulsar://localhost:6650] Create ClientConnection, timeout=10000
   2023-02-20 10:04:54.865 INFO  [140200259120128] ConnectionPool:97 | Created 
connection for pulsar://localhost:6650
   2023-02-20 10:04:54.867 WARN  [140200259073792] ClientConnection:457 | 
[<none> -> pulsar://localhost:6650] Failed to establish connection: Connection 
refused
   2023-02-20 10:04:54.868 INFO  [140200259073792] ClientConnection:389 | 
[127.0.0.1:34564 -> 127.0.0.1:6650] Connected to broker
   2023-02-20 10:04:54.873 INFO  [140200259073792] HandlerBase:72 | 
[persistent://public/default/my-topic-partition-0, ] Getting connection from 
pool
   2023-02-20 10:04:54.876 INFO  [140200259073792] ProducerImpl:205 | 
[persistent://public/default/my-topic-partition-0, ] Created producer on broker 
[127.0.0.1:34564 -> 127.0.0.1:6650]
   2023-02-20 10:04:54.876 INFO  [140200259120128] ClientImpl:529 | Closing 
Pulsar client with 1 producers and 0 consumers
   2023-02-20 10:04:54.877 INFO  [140200259120128] ProducerImpl:745 | 
[persistent://public/default/my-topic-partition-0, standalone-100-13] Closing 
producer for topic persistent://public/default/my-topic-partition-0
   2023-02-20 10:04:54.878 INFO  [140200259073792] ProducerImpl:709 | 
[persistent://public/default/my-topic-partition-0, standalone-100-13] Closed 
producer 0
   2023-02-20 10:04:54.879 ERROR [140200259073792] ClientConnection:835 | 
[127.0.0.1:34564 -> 127.0.0.1:6650] Connection already disconnected
   2023-02-20 10:04:54.879 INFO  [140200233862912] ClientConnection:1650 | 
[127.0.0.1:34564 -> 127.0.0.1:6650] Connection disconnected
   2023-02-20 10:04:55.379 INFO  [140200259120128] ProducerImpl:699 | Producer 
- [persistent://public/default/my-topic-partition-0, standalone-100-13] , 
[batchMessageContainer = { BatchMessageContainer [size = 0] [bytes = 0] 
[maxSize = 1000] [maxBytes = 131072] [topicName = 
persistent://public/default/my-topic-partition-0] [numberOfBatchesSent_ = 1] 
[averageBatchSize_ = 0] }]
   2023-02-20 10:04:55.379 INFO  [140200259120128] ClientConnection:270 | 
[127.0.0.1:34564 -> 127.0.0.1:6650] Destroyed connection
   ```
   
   ### Are you willing to submit a PR?
   
   - [X] I'm willing to submit a PR!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to