Browse Source

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

and42 3 years ago
parent
commit
4fc9a1a64d

+ 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