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

xbcloud issues found when testing across various platforms

    XMLWordPrintable

    Details

    • 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:
      None

      Description

      • 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
        added.
      • 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
        mcode_or_die.
      • 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).

        Smart Checklist

          Attachments

            Activity

              People

              Assignee:
              sergei.glushchenko Sergei Glushchenko (Inactive)
              Reporter:
              sergei.glushchenko Sergei Glushchenko (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Time Tracking

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