You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by GitBox <gi...@apache.org> on 2020/01/11 07:27:29 UTC

[GitHub] [rocketmq-client-cpp] ustcr7 opened a new issue #224: Get Transport timeout because of c++ try_lock_for fail spuriously

ustcr7 opened a new issue #224: Get Transport timeout because of c++ try_lock_for fail spuriously
URL: https://github.com/apache/rocketmq-client-cpp/issues/224
 
 
   In our service, we found "get timed_mutex timeout" error log  some times. We add some debug log and find this question is caused by c++ try_lock_for [fail spuriously](https://en.cppreference.com/w/cpp/thread/timed_mutex/try_lock_for) .
   
   ```cpp
   std::shared_ptr<TcpTransport> TcpRemotingClient::CreateTransport(const string& addr, bool needResponse) {
     std::shared_ptr<TcpTransport> tts;
   
     {
       // try get m_tcpLock util m_tcpTransportTryLockTimeout to avoid blocking
       // long time, if could not get m_tcpLock, return NULL
       std::unique_lock<std::timed_mutex> lock(m_tcpTableLock, std::try_to_lock);
       if (!lock.owns_lock()) {
         if (!lock.try_lock_for(std::chrono::seconds(m_tcpTransportTryLockTimeout))) {
           LOG_ERROR("GetTransport of:%s get timed_mutex timeout", addr.c_str());
           std::shared_ptr<TcpTransport> pTcp;
           return pTcp;
         }
       }
   }
   ```
   
   may be we can slove this question by a thread local cache or global cache with mutex。  Or use some concurrenty map just like what java client do:
   
   ```java
       private Channel getAndCreateChannel(final String addr) throws RemotingConnectException, InterruptedException {
           if (null == addr) {
               return getAndCreateNameserverChannel();
           }
   
           ChannelWrapper cw = this.channelTables.get(addr); //just get from concurreny map without lock
           if (cw != null && cw.isOK()) {
               return cw.getChannel();
           }
   
           return this.createChannel(addr);
       }
   ```
   
   

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [rocketmq-client-cpp] ShannonDing closed issue #224: Get Transport timeout because of c++ try_lock_for fail spuriously

Posted by GitBox <gi...@apache.org>.
ShannonDing closed issue #224: Get Transport timeout because of c++ try_lock_for fail spuriously
URL: https://github.com/apache/rocketmq-client-cpp/issues/224
 
 
   

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [rocketmq-client-cpp] ShannonDing commented on issue #224: Get Transport timeout because of c++ try_lock_for fail spuriously

Posted by GitBox <gi...@apache.org>.
ShannonDing commented on issue #224: Get Transport timeout because of c++ try_lock_for fail spuriously
URL: https://github.com/apache/rocketmq-client-cpp/issues/224#issuecomment-573486010
 
 
   link #211 

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services