Browse Source

Turn ephemeral node factories into leaky singletons
commit_hash:5a7da4213bce22f0a67605c7a6929076f64631ef

babenko 5 months ago
parent
commit
0ea5d67308
1 changed files with 8 additions and 3 deletions
  1. 8 3
      yt/yt/core/ytree/ephemeral_node_factory.cpp

+ 8 - 3
yt/yt/core/ytree/ephemeral_node_factory.cpp

@@ -507,9 +507,14 @@ std::unique_ptr<ITransactionalNodeFactory> CreateEphemeralNodeFactory(bool shoul
 
 INodeFactory* GetEphemeralNodeFactory(bool shouldHideAttributes)
 {
-    static auto hidingFactory = CreateEphemeralNodeFactory(true);
-    static auto nonhidingFactory = CreateEphemeralNodeFactory(false);
-    return shouldHideAttributes ? hidingFactory.get() : nonhidingFactory.get();
+    struct TStorage
+    {
+        const std::unique_ptr<ITransactionalNodeFactory> HidingFactory = CreateEphemeralNodeFactory(true);
+        const std::unique_ptr<ITransactionalNodeFactory> NonhidingFactory = CreateEphemeralNodeFactory(false);
+    };
+
+    const auto* storage = LeakySingleton<TStorage>();
+    return shouldHideAttributes ? storage->HidingFactory.get() : storage->NonhidingFactory.get();
 }
 
 ////////////////////////////////////////////////////////////////////////////////