interconnect_common.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #pragma once
  2. #include <library/cpp/actors/core/actorid.h>
  3. #include <library/cpp/actors/core/actorsystem.h>
  4. #include <library/cpp/actors/util/datetime.h>
  5. #include <library/cpp/monlib/dynamic_counters/counters.h>
  6. #include <library/cpp/monlib/metrics/metric_registry.h>
  7. #include <util/generic/map.h>
  8. #include <util/generic/set.h>
  9. #include <util/system/datetime.h>
  10. #include "poller_tcp.h"
  11. #include "logging.h"
  12. #include "event_filter.h"
  13. #include <atomic>
  14. namespace NActors {
  15. enum class EEncryptionMode {
  16. DISABLED, // no encryption is required at all
  17. OPTIONAL, // encryption is enabled when supported by both peers
  18. REQUIRED, // encryption is mandatory
  19. };
  20. struct TInterconnectSettings {
  21. TDuration Handshake;
  22. TDuration DeadPeer;
  23. TDuration CloseOnIdle;
  24. ui32 SendBufferDieLimitInMB = 0;
  25. ui64 OutputBuffersTotalSizeLimitInMB = 0;
  26. ui32 TotalInflightAmountOfData = 0;
  27. bool MergePerPeerCounters = false;
  28. bool MergePerDataCenterCounters = false;
  29. ui32 TCPSocketBufferSize = 0;
  30. TDuration PingPeriod = TDuration::Seconds(3);
  31. TDuration ForceConfirmPeriod = TDuration::Seconds(1);
  32. TDuration LostConnection;
  33. TDuration BatchPeriod;
  34. bool BindOnAllAddresses = true;
  35. EEncryptionMode EncryptionMode = EEncryptionMode::DISABLED;
  36. bool TlsAuthOnly = false;
  37. TString Certificate; // certificate data in PEM format
  38. TString PrivateKey; // private key for the certificate in PEM format
  39. TString CaFilePath; // path to certificate authority file
  40. TString CipherList; // encryption algorithms
  41. TDuration MessagePendingTimeout = TDuration::Seconds(1); // timeout for which messages are queued while in PendingConnection state
  42. ui64 MessagePendingSize = Max<ui64>(); // size of the queue
  43. ui32 MaxSerializedEventSize = NActors::EventMaxByteSize;
  44. ui32 GetSendBufferSize() const {
  45. ui32 res = 512 * 1024; // 512 kb is the default value for send buffer
  46. if (TCPSocketBufferSize) {
  47. res = TCPSocketBufferSize;
  48. }
  49. return res;
  50. }
  51. };
  52. struct TChannelSettings {
  53. ui16 Weight;
  54. };
  55. typedef TMap<ui16, TChannelSettings> TChannelsConfig;
  56. using TRegisterMonPageCallback = std::function<void(const TString& path, const TString& title,
  57. TActorSystem* actorSystem, const TActorId& actorId)>;
  58. using TInitWhiteboardCallback = std::function<void(ui16 icPort, TActorSystem* actorSystem)>;
  59. using TUpdateWhiteboardCallback = std::function<void(const TString& peer, bool connected, bool green, bool yellow,
  60. bool orange, bool red, TActorSystem* actorSystem)>;
  61. struct TInterconnectProxyCommon : TAtomicRefCount<TInterconnectProxyCommon> {
  62. TActorId NameserviceId;
  63. NMonitoring::TDynamicCounterPtr MonCounters;
  64. std::shared_ptr<NMonitoring::IMetricRegistry> Metrics;
  65. TChannelsConfig ChannelsConfig;
  66. TInterconnectSettings Settings;
  67. TRegisterMonPageCallback RegisterMonPage;
  68. TActorId DestructorId;
  69. std::shared_ptr<std::atomic<TAtomicBase>> DestructorQueueSize;
  70. TAtomicBase MaxDestructorQueueSize = 1024 * 1024 * 1024;
  71. TString ClusterUUID;
  72. TVector<TString> AcceptUUID;
  73. ui64 StartTime = GetCycleCountFast();
  74. TString TechnicalSelfHostName;
  75. TInitWhiteboardCallback InitWhiteboard;
  76. TUpdateWhiteboardCallback UpdateWhiteboard;
  77. ui32 HandshakeBallastSize = 0;
  78. TAtomic StartedSessionKiller = 0;
  79. TScopeId LocalScopeId;
  80. std::shared_ptr<TEventFilter> EventFilter;
  81. TString Cookie; // unique random identifier of a node instance (generated randomly at every start)
  82. std::unordered_map<ui16, TString> ChannelName;
  83. struct TVersionInfo {
  84. TString Tag; // version tag for this node
  85. TSet<TString> AcceptedTags; // we accept all enlisted version tags of peer nodes, but no others; empty = accept all
  86. };
  87. TMaybe<TVersionInfo> VersionInfo;
  88. using TPtr = TIntrusivePtr<TInterconnectProxyCommon>;
  89. };
  90. }