Uploaded image for project: 'Percona XtraBackup'
  1. Percona XtraBackup
  2. PXB-1837

xbcloud issues found when testing across various platforms



    • Type: Bug
    • Status: Done
    • Priority: High
    • Resolution: Fixed
    • Affects Version/s: 2.4.14, 8.0.6
    • Fix Version/s: 2.4.14, 8.0.6
    • Component/s: None
    • Labels:


      • Memory allocated on stack by xblcoud_<put/delete/download> may
        have been accessed by the callbacks after the function has
        exited. Fixed by making xblcoud_<put/delete/download> to wait
        for completion of all asynchronous requests.
      • xbcloud/xbstream on centos 7 did not preserve alphabetical
        order. Fixed by passing ls output through the sort command.
      • Older libcurl used on Centos 6 freed internal structures of an
        easy_handle when curl_multi_remove_handle was called. These
        structures were than accessed in Http_connection::finalize. Fix
        swaps two calls.
      • Older libcurl version used in Centos 6 could fail to return
        valid value for CURLINFO_EFFECTIVE_URL. Error code check was
      • Older libcurl version used in Centos 6 does not understand
        Content-Length header passed manually and ended up sending two
        Content-Length headers. Which broke S3 authentication.
      • Older libcurl version used in Centos 6 can return
        CURLM_CALL_MULTI_PERFORM in response to
        curl_multi_socket_action. This error code was not handled by
      • Class Object_store did not have virtual destructor which caused
        memory leaks of small amount of resources.
      • Because of the bad timings, event loop could have started after we
        pushed some work into the queue which caused missed async events and
        timeouts. Fixed by adding a kickoff timer who's only goal is to
        indicate that event loop has started.
      • Even though libcurl claims to be thread-safe, this is not always true
        when it comes to using it with OpenSSL. xbcloud makes all HTTP
        requests using curl_multi in single thread. There is another thread
        which can call curl_easy_escape. curl_easy handle was created for each
        of such calls. Crash was observed on Debian 9 and the stack trace
        included curl_easy_cleanup followed by OpenSSL cleanup code. It is
        known that in order to use older versions of OpenSSL in multi-threaded
        environment, one needed to provide locking callbacks. Debian 9,
        however, comes with OpenSSL 1.1.0j, which has built-in support for
        multi-threading which should just work. Fix (more a workaround) is to
        use single curl_easy for all curl_easy_escape calls, guard the calls
        with mutex (which is not really needed at the moment, because all url
        escape calls come from one thread).




            sergei.glushchenko Sergei Glushchenko (Inactive)
            sergei.glushchenko Sergei Glushchenko (Inactive)
            0 Vote for this issue
            1 Start watching this issue



                Time Tracking

                Original Estimate - Not Specified
                Not Specified
                Remaining Estimate - Not Specified
                Not Specified
                Time Spent - 1 day, 7 hours, 11 minutes
                1d 7h 11m

                  Smart Checklist