Browse Source

Restoring authorship annotation for <and42@yandex-team.ru>. Commit 2 of 2.

and42 3 years ago
parent
commit
984590e9d9

+ 1 - 1
contrib/libs/ya.make

@@ -257,7 +257,7 @@ RECURSE(
     openmp
     openssl
     opentracing-cpp
-    opus 
+    opus
     ortools
     ortools/proto
     osrm

+ 52 - 52
library/cpp/coroutine/engine/sockpool.cpp

@@ -1,58 +1,58 @@
-#include "sockpool.h" 
- 
-void SetCommonSockOpts(SOCKET sock, const struct sockaddr* sa) { 
-    SetSockOpt(sock, SOL_SOCKET, SO_REUSEADDR, 1); 
- 
-    if (!sa || sa->sa_family == AF_INET) { 
-        sockaddr_in s_in; 
-        s_in.sin_family = AF_INET; 
-        s_in.sin_addr.s_addr = INADDR_ANY; 
-        s_in.sin_port = 0; 
- 
-        if (bind(sock, (struct sockaddr*)&s_in, sizeof(s_in)) == -1) { 
-            warn("bind"); 
-        } 
-    } else if (sa->sa_family == AF_INET6) { 
+#include "sockpool.h"
+
+void SetCommonSockOpts(SOCKET sock, const struct sockaddr* sa) {
+    SetSockOpt(sock, SOL_SOCKET, SO_REUSEADDR, 1);
+
+    if (!sa || sa->sa_family == AF_INET) {
+        sockaddr_in s_in;
+        s_in.sin_family = AF_INET;
+        s_in.sin_addr.s_addr = INADDR_ANY;
+        s_in.sin_port = 0;
+
+        if (bind(sock, (struct sockaddr*)&s_in, sizeof(s_in)) == -1) {
+            warn("bind");
+        }
+    } else if (sa->sa_family == AF_INET6) {
         sockaddr_in6 s_in6(*(const sockaddr_in6*)sa);
-        Zero(s_in6.sin6_addr); 
-        s_in6.sin6_port = 0; 
- 
-        if (bind(sock, (const struct sockaddr*)&s_in6, sizeof s_in6) == -1) { 
-            warn("bind6"); 
-        } 
-    } else { 
+        Zero(s_in6.sin6_addr);
+        s_in6.sin6_port = 0;
+
+        if (bind(sock, (const struct sockaddr*)&s_in6, sizeof s_in6) == -1) {
+            warn("bind6");
+        }
+    } else {
         Y_ASSERT(0);
-    } 
- 
-    SetNoDelay(sock, true); 
-} 
- 
-TPooledSocket TSocketPool::AllocateMore(TConnectData* conn) { 
-    TCont* cont = conn->Cont; 
- 
-    while (true) { 
+    }
+
+    SetNoDelay(sock, true);
+}
+
+TPooledSocket TSocketPool::AllocateMore(TConnectData* conn) {
+    TCont* cont = conn->Cont;
+
+    while (true) {
         TSocketHolder s(NCoro::Socket(Addr_->Addr()->sa_family, SOCK_STREAM, 0));
- 
-        if (s == INVALID_SOCKET) { 
+
+        if (s == INVALID_SOCKET) {
             ythrow TSystemError(errno) << TStringBuf("can not create socket");
-        } 
- 
-        SetCommonSockOpts(s, Addr_->Addr()); 
-        SetZeroLinger(s); 
- 
+        }
+
+        SetCommonSockOpts(s, Addr_->Addr());
+        SetZeroLinger(s);
+
         const int ret = NCoro::ConnectD(cont, s, Addr_->Addr(), Addr_->Len(), conn->DeadLine);
- 
-        if (ret == EINTR) { 
-            continue; 
-        } else if (ret) { 
+
+        if (ret == EINTR) {
+            continue;
+        } else if (ret) {
             ythrow TSystemError(ret) << TStringBuf("can not connect(") << cont->Name() << ')';
-        } 
- 
-        THolder<TPooledSocket::TImpl> res(new TPooledSocket::TImpl(s, this)); 
-        s.Release(); 
- 
-        if (res->IsOpen()) { 
-            return res.Release(); 
-        } 
-    } 
-} 
+        }
+
+        THolder<TPooledSocket::TImpl> res(new TPooledSocket::TImpl(s, this));
+        s.Release();
+
+        if (res->IsOpen()) {
+            return res.Release();
+        }
+    }
+}

+ 6 - 6
library/cpp/coroutine/engine/sockpool.h

@@ -1,11 +1,11 @@
 #pragma once
 
-#include "impl.h" 
+#include "impl.h"
 #include "network.h"
 
-#include <util/network/address.h> 
-#include <util/network/socket.h> 
-#include <util/system/mutex.h> 
+#include <util/network/address.h>
+#include <util/network/socket.h>
+#include <util/system/mutex.h>
 
 extern void SetCommonSockOpts(SOCKET sock, const struct sockaddr* sa = nullptr);
 
@@ -143,7 +143,7 @@ class TSocketPool {
 
 public:
     typedef TAtomicSharedPtr<NAddr::IRemoteAddr> TAddrRef;
- 
+
     TSocketPool(int ip, int port)
         : Addr_(new NAddr::TIPv4Addr(TIpAddress((ui32)ip, (ui16)port)))
     {
@@ -153,7 +153,7 @@ public:
         : Addr_(addr)
     {
     }
- 
+
     void EraseStale(const TInstant& maxAge) noexcept {
         TSockets toDelete;
 

+ 1 - 1
library/cpp/coroutine/engine/ya.make

@@ -20,7 +20,7 @@ SRCS(
     iostatus.cpp
     network.cpp
     poller.cpp
-    sockpool.cpp 
+    sockpool.cpp
     stack/stack.cpp
     stack/stack_allocator.cpp
     stack/stack_guards.cpp

+ 9 - 9
library/cpp/dns/README.md

@@ -1,9 +1,9 @@
-Overview 
-=== 
-Библиотека кеширующего resolving-а - изначально писалась для имплементации neh http протокола, использующей корутины. 
-Для предотвращения пробоя короткого стека корутин есть метод, предусматривающий вынос в отдельный тред собственно вызов функции резолвинга. 
-Для предотвращения обращения к DNS серверам (использования вместо этого заранее заданных ip-адресов), 
-предусмотрена ручка добавления alias-ов hosname -> ip-address (требование от метапоискового движка). 
- 
-Из-за того, что библиотка разрабатывалась под задачу максимально быстрого резолвинга добавлены слои кеширования результатов 
-resoving-а, - возможности сбросить кеш для того, чтобы получить более свежие адреса для указанного host-а _нет_. 
+Overview
+===
+Библиотека кеширующего resolving-а - изначально писалась для имплементации neh http протокола, использующей корутины.
+Для предотвращения пробоя короткого стека корутин есть метод, предусматривающий вынос в отдельный тред собственно вызов функции резолвинга.
+Для предотвращения обращения к DNS серверам (использования вместо этого заранее заданных ip-адресов),
+предусмотрена ручка добавления alias-ов hosname -> ip-address (требование от метапоискового движка).
+
+Из-за того, что библиотка разрабатывалась под задачу максимально быстрого резолвинга добавлены слои кеширования результатов
+resoving-а, - возможности сбросить кеш для того, чтобы получить более свежие адреса для указанного host-а _нет_.

+ 98 - 98
library/cpp/dns/cache.cpp

@@ -1,103 +1,103 @@
-#include "cache.h" 
+#include "cache.h"
 
-#include "thread.h" 
- 
-#include <util/system/tls.h> 
-#include <util/system/info.h> 
-#include <util/system/rwlock.h> 
+#include "thread.h"
+
+#include <util/system/tls.h>
+#include <util/system/info.h>
+#include <util/system/rwlock.h>
 #include <util/thread/singleton.h>
-#include <util/generic/singleton.h> 
+#include <util/generic/singleton.h>
 #include <util/generic/hash.h>
 
-using namespace NDns; 
+using namespace NDns;
 
 namespace {
-    struct TResolveTask { 
-        enum EMethod { 
+    struct TResolveTask {
+        enum EMethod {
             Normal,
             Threaded
-        }; 
+        };
 
-        inline TResolveTask(const TResolveInfo& info, EMethod method) 
-            : Info(info) 
-            , Method(method) 
-        { 
-        } 
+        inline TResolveTask(const TResolveInfo& info, EMethod method)
+            : Info(info)
+            , Method(method)
+        {
+        }
 
-        const TResolveInfo& Info; 
-        const EMethod Method; 
-    }; 
+        const TResolveInfo& Info;
+        const EMethod Method;
+    };
 
-    class IDns { 
-    public: 
+    class IDns {
+    public:
         virtual ~IDns() = default;
-        virtual const TResolvedHost* Resolve(const TResolveTask&) = 0; 
-    }; 
- 
+        virtual const TResolvedHost* Resolve(const TResolveTask&) = 0;
+    };
+
     typedef TAtomicSharedPtr<TResolvedHost> TResolvedHostPtr;
 
-    struct THashResolveInfo { 
-        inline size_t operator()(const TResolveInfo& ri) const { 
+    struct THashResolveInfo {
+        inline size_t operator()(const TResolveInfo& ri) const {
             return ComputeHash(ri.Host) ^ ri.Port;
-        } 
-    }; 
+        }
+    };
 
-    struct TCompareResolveInfo { 
-        inline bool operator()(const NDns::TResolveInfo& x, const NDns::TResolveInfo& y) const { 
-            return x.Host == y.Host && x.Port == y.Port; 
-        } 
-    }; 
+    struct TCompareResolveInfo {
+        inline bool operator()(const NDns::TResolveInfo& x, const NDns::TResolveInfo& y) const {
+            return x.Host == y.Host && x.Port == y.Port;
+        }
+    };
 
-    class TGlobalCachedDns: public IDns, public TNonCopyable { 
-    public: 
+    class TGlobalCachedDns: public IDns, public TNonCopyable {
+    public:
         const TResolvedHost* Resolve(const TResolveTask& rt) override {
-            //2. search host in cache 
-            { 
-                TReadGuard guard(L_); 
+            //2. search host in cache
+            {
+                TReadGuard guard(L_);
 
-                TCache::const_iterator it = C_.find(rt.Info); 
+                TCache::const_iterator it = C_.find(rt.Info);
 
-                if (it != C_.end()) { 
-                    return it->second.Get(); 
+                if (it != C_.end()) {
+                    return it->second.Get();
                 }
             }
 
-            TResolvedHostPtr res = ResolveA(rt); 
+            TResolvedHostPtr res = ResolveA(rt);
 
-            //update cache 
-            { 
-                TWriteGuard guard(L_); 
+            //update cache
+            {
+                TWriteGuard guard(L_);
 
                 std::pair<TCache::iterator, bool> updateResult = C_.insert(std::make_pair(TResolveInfo(res->Host, rt.Info.Port), res));
                 TResolvedHost* rh = updateResult.first->second.Get();
 
-                if (updateResult.second) { 
-                    //fresh resolved host, set cache record id for it 
-                    rh->Id = C_.size() - 1; 
-                } 
+                if (updateResult.second) {
+                    //fresh resolved host, set cache record id for it
+                    rh->Id = C_.size() - 1;
+                }
 
-                return rh; 
+                return rh;
             }
-        } 
+        }
 
         void AddAlias(const TString& host, const TString& alias) noexcept {
-            TWriteGuard guard(LA_); 
+            TWriteGuard guard(LA_);
 
-            A_[host] = alias; 
+            A_[host] = alias;
         }
 
-        static inline TGlobalCachedDns* Instance() { 
-            return SingletonWithPriority<TGlobalCachedDns, 65530>(); 
+        static inline TGlobalCachedDns* Instance() {
+            return SingletonWithPriority<TGlobalCachedDns, 65530>();
         }
 
     private:
-        inline TResolvedHostPtr ResolveA(const TResolveTask& rt) { 
+        inline TResolvedHostPtr ResolveA(const TResolveTask& rt) {
             TString originalHost(rt.Info.Host);
             TString host(originalHost);
 
-            //3. replace host to alias, if exist 
-            if (A_.size()) { 
-                TReadGuard guard(LA_); 
+            //3. replace host to alias, if exist
+            if (A_.size()) {
+                TReadGuard guard(LA_);
                 TStringBuf names[] = {"*", host};
 
                 for (const auto& name : names) {
@@ -109,32 +109,32 @@ namespace {
                 }
             }
 
-            if (host.length() > 2 && host[0] == '[') { 
+            if (host.length() > 2 && host[0] == '[') {
                 TString unbracedIpV6(host.data() + 1, host.size() - 2);
-                host.swap(unbracedIpV6); 
-            } 
- 
-            TAutoPtr<TNetworkAddress> na; 
-
-            //4. getaddrinfo (direct or in separate thread) 
-            if (rt.Method == TResolveTask::Normal) { 
-                na.Reset(new TNetworkAddress(host, rt.Info.Port)); 
-            } else if (rt.Method == TResolveTask::Threaded) { 
-                na = ThreadedResolve(host, rt.Info.Port); 
-            } else { 
+                host.swap(unbracedIpV6);
+            }
+
+            TAutoPtr<TNetworkAddress> na;
+
+            //4. getaddrinfo (direct or in separate thread)
+            if (rt.Method == TResolveTask::Normal) {
+                na.Reset(new TNetworkAddress(host, rt.Info.Port));
+            } else if (rt.Method == TResolveTask::Threaded) {
+                na = ThreadedResolve(host, rt.Info.Port);
+            } else {
                 Y_ASSERT(0);
                 throw yexception() << TStringBuf("invalid resolve method");
-            } 
+            }
 
-            return new TResolvedHost(originalHost, *na); 
+            return new TResolvedHost(originalHost, *na);
         }
 
         typedef THashMap<TResolveInfo, TResolvedHostPtr, THashResolveInfo, TCompareResolveInfo> TCache;
-        TCache C_; 
-        TRWMutex L_; 
+        TCache C_;
+        TRWMutex L_;
         typedef THashMap<TString, TString> TAliases;
-        TAliases A_; 
-        TRWMutex LA_; 
+        TAliases A_;
+        TRWMutex LA_;
     };
 
     class TCachedDns: public IDns {
@@ -145,18 +145,18 @@ namespace {
         }
 
         const TResolvedHost* Resolve(const TResolveTask& rt) override {
-            //1. search in local thread cache 
+            //1. search in local thread cache
             {
-                TCache::const_iterator it = C_.find(rt.Info); 
+                TCache::const_iterator it = C_.find(rt.Info);
 
                 if (it != C_.end()) {
                     return it->second;
                 }
             }
 
-            const TResolvedHost* res = S_->Resolve(rt); 
+            const TResolvedHost* res = S_->Resolve(rt);
 
-            C_[TResolveInfo(res->Host, rt.Info.Port)] = res; 
+            C_[TResolveInfo(res->Host, rt.Info.Port)] = res;
 
             return res;
         }
@@ -167,9 +167,9 @@ namespace {
         IDns* S_;
     };
 
-    struct TThreadedDns: public TCachedDns { 
+    struct TThreadedDns: public TCachedDns {
         inline TThreadedDns()
-            : TCachedDns(TGlobalCachedDns::Instance()) 
+            : TCachedDns(TGlobalCachedDns::Instance())
         {
         }
     };
@@ -179,20 +179,20 @@ namespace {
     }
 }
 
-namespace NDns { 
-    const TResolvedHost* CachedResolve(const TResolveInfo& ri) { 
-        TResolveTask rt(ri, TResolveTask::Normal); 
- 
-        return ThrDns()->Resolve(rt); 
-    } 
- 
-    const TResolvedHost* CachedThrResolve(const TResolveInfo& ri) { 
-        TResolveTask rt(ri, TResolveTask::Threaded); 
- 
-        return ThrDns()->Resolve(rt); 
-    } 
- 
+namespace NDns {
+    const TResolvedHost* CachedResolve(const TResolveInfo& ri) {
+        TResolveTask rt(ri, TResolveTask::Normal);
+
+        return ThrDns()->Resolve(rt);
+    }
+
+    const TResolvedHost* CachedThrResolve(const TResolveInfo& ri) {
+        TResolveTask rt(ri, TResolveTask::Threaded);
+
+        return ThrDns()->Resolve(rt);
+    }
+
     void AddHostAlias(const TString& host, const TString& alias) {
-        TGlobalCachedDns::Instance()->AddAlias(host, alias); 
-    } 
+        TGlobalCachedDns::Instance()->AddAlias(host, alias);
+    }
 }

+ 17 - 17
library/cpp/dns/cache.h

@@ -4,7 +4,7 @@
 #include <util/generic/strbuf.h>
 #include <util/generic/string.h>
 
-namespace NDns { 
+namespace NDns {
     struct TResolveInfo {
         inline TResolveInfo(const TStringBuf& host, ui16 port)
             : Host(host)
@@ -18,28 +18,28 @@ namespace NDns {
 
     struct TResolvedHost {
         inline TResolvedHost(const TString& host, const TNetworkAddress& addr) noexcept
-            : Host(host) 
-            , Addr(addr) 
-            , Id(0) 
+            : Host(host)
+            , Addr(addr)
+            , Id(0)
         {
         }
 
         TString Host; //resolved hostname (from TResolveInfo, - before aliasing)
         TNetworkAddress Addr;
-        size_t Id; //cache record id 
+        size_t Id; //cache record id
     };
 
-    // Resolving order: 
-    //   1. check local thread cache, return if found 
-    //   2. check global cache, return if found 
-    //   3. search alias for hostname, if found, continue resolving alias 
-    //   4. normal resolver 
-    const TResolvedHost* CachedResolve(const TResolveInfo& ri); 
- 
-    //like previous, but at stage 4 use separate thread for resolving (created on first usage) 
-    //useful in green-threads with tiny stack 
-    const TResolvedHost* CachedThrResolve(const TResolveInfo& ri); 
- 
-    //create alias for host, which can be used for static resolving (when alias is ip address) 
+    // Resolving order:
+    //   1. check local thread cache, return if found
+    //   2. check global cache, return if found
+    //   3. search alias for hostname, if found, continue resolving alias
+    //   4. normal resolver
+    const TResolvedHost* CachedResolve(const TResolveInfo& ri);
+
+    //like previous, but at stage 4 use separate thread for resolving (created on first usage)
+    //useful in green-threads with tiny stack
+    const TResolvedHost* CachedThrResolve(const TResolveInfo& ri);
+
+    //create alias for host, which can be used for static resolving (when alias is ip address)
     void AddHostAlias(const TString& host, const TString& alias);
 }

+ 2 - 2
library/cpp/dns/magic.cpp

@@ -2,7 +2,7 @@
 
 #include <util/generic/yexception.h>
 
-using namespace NDns; 
+using namespace NDns;
 
 namespace {
     namespace NX {
@@ -21,7 +21,7 @@ namespace {
     }
 }
 
-IErrorRef NDns::SaveError() { 
+IErrorRef NDns::SaveError() {
     using namespace NX;
 
     return new NX::TError();

+ 1 - 1
library/cpp/dns/magic.h

@@ -3,7 +3,7 @@
 #include <util/generic/yexception.h>
 #include <util/generic/ptr.h>
 
-namespace NDns { 
+namespace NDns {
     class IError {
     public:
         virtual ~IError() = default;

+ 21 - 21
library/cpp/dns/thread.cpp

@@ -1,27 +1,27 @@
-#include "thread.h" 
- 
+#include "thread.h"
+
 #include "magic.h"
 
-#include <util/network/socket.h> 
+#include <util/network/socket.h>
 #include <util/thread/factory.h>
-#include <util/thread/lfqueue.h> 
-#include <util/system/event.h> 
+#include <util/thread/lfqueue.h>
+#include <util/system/event.h>
 #include <util/generic/vector.h>
-#include <util/generic/singleton.h> 
+#include <util/generic/singleton.h>
 
-using namespace NDns; 
+using namespace NDns;
 
 namespace {
     class TThreadedResolver: public IThreadFactory::IThreadAble, public TNonCopyable {
         struct TResolveRequest {
             inline TResolveRequest(const TString& host, ui16 port)
-                : Host(host) 
-                , Port(port) 
+                : Host(host)
+                , Port(port)
             {
             }
 
-            inline TNetworkAddressPtr Wait() { 
-                E.Wait(); 
+            inline TNetworkAddressPtr Wait() {
+                E.Wait();
 
                 if (!Error) {
                     if (!Result) {
@@ -38,7 +38,7 @@ namespace {
 
             inline void Resolve() noexcept {
                 try {
-                    Result = new TNetworkAddress(Host, Port); 
+                    Result = new TNetworkAddress(Host, Port);
                 } catch (...) {
                     Error = SaveError();
                 }
@@ -47,20 +47,20 @@ namespace {
             }
 
             inline void Wake() noexcept {
-                E.Signal(); 
+                E.Signal();
             }
 
             TString Host;
-            ui16 Port; 
+            ui16 Port;
             TManualEvent E;
-            TNetworkAddressPtr Result; 
+            TNetworkAddressPtr Result;
             IErrorRef Error;
         };
 
     public:
-        inline TThreadedResolver() 
+        inline TThreadedResolver()
             : E_(TSystemEvent::rAuto)
-        { 
+        {
             T_.push_back(SystemThreadFactory()->Run(this));
         }
 
@@ -87,7 +87,7 @@ namespace {
         }
 
         inline TNetworkAddressPtr Resolve(const TString& host, ui16 port) {
-            TResolveRequest rr(host, port); 
+            TResolveRequest rr(host, port);
 
             Schedule(&rr);
 
@@ -124,10 +124,10 @@ namespace {
         typedef TAutoPtr<IThreadFactory::IThread> IThreadRef;
         TVector<IThreadRef> T_;
     };
-} 
+}
 
-namespace NDns { 
+namespace NDns {
     TNetworkAddressPtr ThreadedResolve(const TString& host, ui16 port) {
-        return TThreadedResolver::Instance()->Resolve(host, port); 
+        return TThreadedResolver::Instance()->Resolve(host, port);
     }
 }

Some files were not shown because too many files changed in this diff