Tarantool development patches archive
 help / color / mirror / Atom feed
From: Serge Petrenko <sergepetrenko@tarantool.org>
To: Alexander Turenko <alexander.turenko@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] build: link bundled libcurl with c-ares
Date: Tue, 21 Jan 2020 15:17:49 +0300	[thread overview]
Message-ID: <F1DFFE1E-0AB3-4D8B-B56B-0D8DC337A3D9@tarantool.org> (raw)
In-Reply-To: <20191218023335.6olxxxqeyj7qhyhb@tkn_work_nb>




> 18 дек. 2019 г., в 5:33, Alexander Turenko <alexander.turenko@tarantool.org> написал(а):
> 
> I brief: I would compare build times of c-ares with `./configure && make
> -j` against `cmake . && make -j` and let's start with using ./configure
> if the difference is not significant, but otherwise use CMake from
> beginning.
> 
> See other thoughts below.
> 
> WBR, Alexander Turenko.
> 
> ——

Hi! Thank you for review!
I sent v2 and fixed what you’ve pointed out.

> 
> I guess that src/CMakeLists.txt will give a warning on static build: see
> around `${libstatic} STREQUAL bundled-libcurl` line.

Fixed.

> 
> I also guess that using CMake for luajit, curl and c-ares may solve
> several problems: build time, passing toolchain and Mac OS specific
> flags, handling -DCMAKE_BUILD_TYPE in subprojects, clean out-of-source
> build. Let's verify at least build time: if ./configure adds much time,
> then we'll make other developers angry. Maybe it worth to use CMake for
> c-ares from begnning.

I’ve done that, and you’re right.
Here are `time (cmake . && make -j)` outputs
when using configure for c-ares
real	3m16.989s
user	4m45.145s
sys	1m45.434s
and cmake, respectively
real	2m2.913s
user	3m55.688s
sys	1m17.485s

> 
> Don't sure whether it worth to copy CMakeLists.txt from c-ares to our
> cmake/ directory. Let's start w/o copy and consider to do it if we'll
> need to change something.
> 
> I don't sure which pros and cons have using of ExternalProject(), it
> seems we should look a bit into this.
> 

You see, we need c-ares installed, since curl depends on an existing c-ares
installation. So, curl requires that c-ares is installed on build step already.
We cannot use add_subdirectory. It will make cmake run build steps for all the
subdirs first, and only then install them.
ExternalProject_Add does exactly what we need. It runs both build and install
steps of the external project on parent’s build step.


> I also don't sure whether tarantool-specific flags will be passed for
> c-ares when we'll use CMake (with / without ExternalProject()). Some of
> them we should pass (such as -UNDEBUG that is set by
> -DCMAKE_BUILD_TYPE=Debug), some maybe not (need to verify
> add_compile_flags() macro calls at least).

All the cmake options need to be passed to external project explicitly.

> 
> Sergey V. will work on
> https://github.com/tarantool/tarantool/issues/4444 , maybe it worth to
> cooperate. (CCed him.)
> 
> Is c-ares depends on some libraries?

CMakeLists.txt extract:
# Tell C-Ares about libraries to depend on                                          
IF (HAVE_LIBRESOLV)                                                                 
	LIST (APPEND CARES_DEPENDENT_LIBS resolv)                                                                                      
ENDIF ()                                                                            
IF (HAVE_LIBNSL)                                                                    
	LIST (APPEND CARES_DEPENDENT_LIBS nsl)                                      
ENDIF ()                                                                            
IF (HAVE_LIBSOCKET)                                                                 
	LIST (APPEND CARES_DEPENDENT_LIBS socket)                                   
ENDIF ()                                                                            
IF (HAVE_LIBRT)                                                                     
	LIST (APPEND CARES_DEPENDENT_LIBS rt)                                       
ENDIF ()                                                 

> 
> WBR, Alexander Turenko.
> 
> On Mon, Nov 25, 2019 at 04:53:47PM +0300, Serge Petrenko wrote:
>> libcurl has a built-in threaded resolver used for asynchronous DNS
>> requests, however, when DNS server is slow to respond, the request still
>> hangs tarantool until it is finished. The reason is that curl calls
>> thread_join on the resolving thread internally upon timeout, making the
>> calling thread hang until resolution has ended.
>> Use c-ares as an asynchronous resolver instead to eliminate the problem.
>> 
>> Closes #4591
>> ---
>> https://github.com/tarantool/tarantool/issues/4591
>> https://github.com/tarantool/tarantool/tree/sp/gh-4591-link-curl-with-c-ares-full-ci


--
Serge Petrenko
sergepetrenko@tarantool.org

  reply	other threads:[~2020-01-21 12:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-25 13:53 Serge Petrenko
2019-12-18  2:33 ` Alexander Turenko
2020-01-21 12:17   ` Serge Petrenko [this message]
2020-02-08 19:28     ` Alexander Turenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=F1DFFE1E-0AB3-4D8B-B56B-0D8DC337A3D9@tarantool.org \
    --to=sergepetrenko@tarantool.org \
    --cc=alexander.turenko@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH] build: link bundled libcurl with c-ares' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox