@@ -596,9 +596,10 @@ void ChannelWrap::EnsureServers() {
596
596
597
597
class QueryWrap : public AsyncWrap {
598
598
public:
599
- QueryWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
599
+ QueryWrap (ChannelWrap* channel, Local<Object> req_wrap_obj, const char * name )
600
600
: AsyncWrap(channel->env (), req_wrap_obj, AsyncWrap::PROVIDER_QUERYWRAP),
601
- channel_(channel) {
601
+ channel_(channel),
602
+ trace_name_(name) {
602
603
// Make sure the channel object stays alive during the query lifetime.
603
604
req_wrap_obj->Set (env ()->context (),
604
605
env ()->channel_string (),
@@ -625,6 +626,9 @@ class QueryWrap : public AsyncWrap {
625
626
int dnsclass,
626
627
int type) {
627
628
channel_->EnsureServers ();
629
+ TRACE_EVENT_NESTABLE_ASYNC_BEGIN1 (
630
+ TRACING_CATEGORY_NODE2 (dns, native), trace_name_, this ,
631
+ " name" , TRACE_STR_COPY (name));
628
632
ares_query (channel_->cares_channel (), name, dnsclass, type, Callback,
629
633
static_cast <void *>(this ));
630
634
}
@@ -721,6 +725,9 @@ class QueryWrap : public AsyncWrap {
721
725
extra
722
726
};
723
727
const int argc = arraysize (argv) - extra.IsEmpty ();
728
+ TRACE_EVENT_NESTABLE_ASYNC_END0 (
729
+ TRACING_CATEGORY_NODE2 (dns, native), trace_name_, this );
730
+
724
731
MakeCallback (env ()->oncomplete_string (), argc, argv);
725
732
}
726
733
@@ -730,6 +737,9 @@ class QueryWrap : public AsyncWrap {
730
737
Context::Scope context_scope (env ()->context ());
731
738
const char * code = ToErrorCodeString (status);
732
739
Local<Value> arg = OneByteString (env ()->isolate (), code);
740
+ TRACE_EVENT_NESTABLE_ASYNC_END1 (
741
+ TRACING_CATEGORY_NODE2 (dns, native), trace_name_, this ,
742
+ " error" , status);
733
743
MakeCallback (env ()->oncomplete_string (), 1 , &arg);
734
744
}
735
745
@@ -743,6 +753,9 @@ class QueryWrap : public AsyncWrap {
743
753
}
744
754
745
755
ChannelWrap* channel_;
756
+
757
+ private:
758
+ const char * trace_name_;
746
759
};
747
760
748
761
@@ -1173,7 +1186,7 @@ int ParseSoaReply(Environment* env,
1173
1186
class QueryAnyWrap : public QueryWrap {
1174
1187
public:
1175
1188
QueryAnyWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1176
- : QueryWrap(channel, req_wrap_obj) {
1189
+ : QueryWrap(channel, req_wrap_obj, " resolveAny " ) {
1177
1190
}
1178
1191
1179
1192
int Send (const char * name) override {
@@ -1354,7 +1367,7 @@ class QueryAnyWrap: public QueryWrap {
1354
1367
class QueryAWrap : public QueryWrap {
1355
1368
public:
1356
1369
QueryAWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1357
- : QueryWrap(channel, req_wrap_obj) {
1370
+ : QueryWrap(channel, req_wrap_obj, " resolve4 " ) {
1358
1371
}
1359
1372
1360
1373
int Send (const char * name) override {
@@ -1402,7 +1415,7 @@ class QueryAWrap: public QueryWrap {
1402
1415
class QueryAaaaWrap : public QueryWrap {
1403
1416
public:
1404
1417
QueryAaaaWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1405
- : QueryWrap(channel, req_wrap_obj) {
1418
+ : QueryWrap(channel, req_wrap_obj, " resolve6 " ) {
1406
1419
}
1407
1420
1408
1421
int Send (const char * name) override {
@@ -1450,7 +1463,7 @@ class QueryAaaaWrap: public QueryWrap {
1450
1463
class QueryCnameWrap : public QueryWrap {
1451
1464
public:
1452
1465
QueryCnameWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1453
- : QueryWrap(channel, req_wrap_obj) {
1466
+ : QueryWrap(channel, req_wrap_obj, " resolveCname " ) {
1454
1467
}
1455
1468
1456
1469
int Send (const char * name) override {
@@ -1485,7 +1498,7 @@ class QueryCnameWrap: public QueryWrap {
1485
1498
class QueryMxWrap : public QueryWrap {
1486
1499
public:
1487
1500
QueryMxWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1488
- : QueryWrap(channel, req_wrap_obj) {
1501
+ : QueryWrap(channel, req_wrap_obj, " resolveMx " ) {
1489
1502
}
1490
1503
1491
1504
int Send (const char * name) override {
@@ -1520,7 +1533,7 @@ class QueryMxWrap: public QueryWrap {
1520
1533
class QueryNsWrap : public QueryWrap {
1521
1534
public:
1522
1535
QueryNsWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1523
- : QueryWrap(channel, req_wrap_obj) {
1536
+ : QueryWrap(channel, req_wrap_obj, " resolveNs " ) {
1524
1537
}
1525
1538
1526
1539
int Send (const char * name) override {
@@ -1555,7 +1568,7 @@ class QueryNsWrap: public QueryWrap {
1555
1568
class QueryTxtWrap : public QueryWrap {
1556
1569
public:
1557
1570
QueryTxtWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1558
- : QueryWrap(channel, req_wrap_obj) {
1571
+ : QueryWrap(channel, req_wrap_obj, " resolveTxt " ) {
1559
1572
}
1560
1573
1561
1574
int Send (const char * name) override {
@@ -1589,7 +1602,7 @@ class QueryTxtWrap: public QueryWrap {
1589
1602
class QuerySrvWrap : public QueryWrap {
1590
1603
public:
1591
1604
explicit QuerySrvWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1592
- : QueryWrap(channel, req_wrap_obj) {
1605
+ : QueryWrap(channel, req_wrap_obj, " resolveSrv " ) {
1593
1606
}
1594
1607
1595
1608
int Send (const char * name) override {
@@ -1622,7 +1635,7 @@ class QuerySrvWrap: public QueryWrap {
1622
1635
class QueryPtrWrap : public QueryWrap {
1623
1636
public:
1624
1637
explicit QueryPtrWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1625
- : QueryWrap(channel, req_wrap_obj) {
1638
+ : QueryWrap(channel, req_wrap_obj, " resolvePtr " ) {
1626
1639
}
1627
1640
1628
1641
int Send (const char * name) override {
@@ -1657,7 +1670,7 @@ class QueryPtrWrap: public QueryWrap {
1657
1670
class QueryNaptrWrap : public QueryWrap {
1658
1671
public:
1659
1672
explicit QueryNaptrWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1660
- : QueryWrap(channel, req_wrap_obj) {
1673
+ : QueryWrap(channel, req_wrap_obj, " resolveNaptr " ) {
1661
1674
}
1662
1675
1663
1676
int Send (const char * name) override {
@@ -1691,7 +1704,7 @@ class QueryNaptrWrap: public QueryWrap {
1691
1704
class QuerySoaWrap : public QueryWrap {
1692
1705
public:
1693
1706
QuerySoaWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1694
- : QueryWrap(channel, req_wrap_obj) {
1707
+ : QueryWrap(channel, req_wrap_obj, " resolveSoa " ) {
1695
1708
}
1696
1709
1697
1710
int Send (const char * name) override {
@@ -1756,7 +1769,7 @@ class QuerySoaWrap: public QueryWrap {
1756
1769
class GetHostByAddrWrap : public QueryWrap {
1757
1770
public:
1758
1771
explicit GetHostByAddrWrap (ChannelWrap* channel, Local<Object> req_wrap_obj)
1759
- : QueryWrap(channel, req_wrap_obj) {
1772
+ : QueryWrap(channel, req_wrap_obj, " reverse " ) {
1760
1773
}
1761
1774
1762
1775
int Send (const char * name) override {
@@ -1773,6 +1786,11 @@ class GetHostByAddrWrap: public QueryWrap {
1773
1786
return UV_EINVAL; // So errnoException() reports a proper error.
1774
1787
}
1775
1788
1789
+ TRACE_EVENT_NESTABLE_ASYNC_BEGIN2 (
1790
+ TRACING_CATEGORY_NODE2 (dns, native), " reverse" , this ,
1791
+ " name" , TRACE_STR_COPY (name),
1792
+ " family" , family == AF_INET ? " ipv4" : " ipv6" );
1793
+
1776
1794
ares_gethostbyaddr (channel_->cares_channel (),
1777
1795
address_buffer,
1778
1796
length,
@@ -1835,8 +1853,10 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
1835
1853
Null (env->isolate ())
1836
1854
};
1837
1855
1856
+ uint64_t n = 0 ;
1857
+ const bool verbatim = req_wrap->verbatim ();
1858
+
1838
1859
if (status == 0 ) {
1839
- int n = 0 ;
1840
1860
Local<Array> results = Array::New (env->isolate ());
1841
1861
1842
1862
auto add = [&] (bool want_ipv4, bool want_ipv6) {
@@ -1864,7 +1884,6 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
1864
1884
}
1865
1885
};
1866
1886
1867
- const bool verbatim = req_wrap->verbatim ();
1868
1887
add (true , verbatim);
1869
1888
if (verbatim == false )
1870
1889
add (false , true );
@@ -1879,6 +1898,10 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
1879
1898
1880
1899
uv_freeaddrinfo (res);
1881
1900
1901
+ TRACE_EVENT_NESTABLE_ASYNC_END2 (
1902
+ TRACING_CATEGORY_NODE2 (dns, native), " lookup" , req_wrap,
1903
+ " count" , n, " verbatim" , verbatim);
1904
+
1882
1905
// Make the callback into JavaScript
1883
1906
req_wrap->MakeCallback (env->oncomplete_string (), arraysize (argv), argv);
1884
1907
@@ -1910,6 +1933,11 @@ void AfterGetNameInfo(uv_getnameinfo_t* req,
1910
1933
argv[2 ] = js_service;
1911
1934
}
1912
1935
1936
+ TRACE_EVENT_NESTABLE_ASYNC_END2 (
1937
+ TRACING_CATEGORY_NODE2 (dns, native), " lookupService" , req_wrap,
1938
+ " hostname" , TRACE_STR_COPY (hostname),
1939
+ " service" , TRACE_STR_COPY (service));
1940
+
1913
1941
// Make the callback into JavaScript
1914
1942
req_wrap->MakeCallback (env->oncomplete_string (), arraysize (argv), argv);
1915
1943
@@ -1986,6 +2014,12 @@ void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
1986
2014
hints.ai_socktype = SOCK_STREAM;
1987
2015
hints.ai_flags = flags;
1988
2016
2017
+ TRACE_EVENT_NESTABLE_ASYNC_BEGIN2 (
2018
+ TRACING_CATEGORY_NODE2 (dns, native), " lookup" , req_wrap,
2019
+ " hostname" , TRACE_STR_COPY (*hostname),
2020
+ " family" ,
2021
+ family == AF_INET ? " ipv4" : family == AF_INET6 ? " ipv6" : " unspec" );
2022
+
1989
2023
int err = req_wrap->Dispatch (uv_getaddrinfo,
1990
2024
AfterGetAddrInfo,
1991
2025
*hostname,
@@ -2014,6 +2048,10 @@ void GetNameInfo(const FunctionCallbackInfo<Value>& args) {
2014
2048
2015
2049
GetNameInfoReqWrap* req_wrap = new GetNameInfoReqWrap (env, req_wrap_obj);
2016
2050
2051
+ TRACE_EVENT_NESTABLE_ASYNC_BEGIN2 (
2052
+ TRACING_CATEGORY_NODE2 (dns, native), " lookupService" , req_wrap,
2053
+ " ip" , TRACE_STR_COPY (*ip), " port" , port);
2054
+
2017
2055
int err = req_wrap->Dispatch (uv_getnameinfo,
2018
2056
AfterGetNameInfo,
2019
2057
reinterpret_cast <struct sockaddr *>(&addr),
@@ -2145,6 +2183,9 @@ void Cancel(const FunctionCallbackInfo<Value>& args) {
2145
2183
ChannelWrap* channel;
2146
2184
ASSIGN_OR_RETURN_UNWRAP (&channel, args.Holder ());
2147
2185
2186
+ TRACE_EVENT_INSTANT0 (TRACING_CATEGORY_NODE2 (dns, native),
2187
+ " cancel" , TRACE_EVENT_SCOPE_THREAD);
2188
+
2148
2189
ares_cancel (channel->cares_channel ());
2149
2190
}
2150
2191
0 commit comments