summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov <[email protected]>2022-10-18 16:56:45 +0300
committerivanmorozov <[email protected]>2022-10-18 16:56:45 +0300
commitdafdfd006bf375ec29372727503fd7d707c7d9dd (patch)
tree273f9393d7fc5cbde017f704a6faff0f9ccc0c43
parent55db30fd8a67561f343be996098d7c29de84f3cd (diff)
actors object model
-rw-r--r--library/cpp/actors/core/CMakeLists.txt3
-rw-r--r--library/cpp/actors/core/actor.cpp13
-rw-r--r--library/cpp/actors/core/actor.h161
-rw-r--r--library/cpp/actors/core/actor_bootstrapped.cpp4
-rw-r--r--library/cpp/actors/core/actor_bootstrapped.h7
-rw-r--r--library/cpp/actors/core/actor_coroutine.h4
-rw-r--r--library/cpp/actors/core/actor_virtual.cpp6
-rw-r--r--library/cpp/actors/core/actor_virtual.h62
-rw-r--r--library/cpp/actors/core/actorsystem.h5
-rw-r--r--library/cpp/actors/core/av_bootstrapped.cpp17
-rw-r--r--library/cpp/actors/core/av_bootstrapped.h18
-rw-r--r--library/cpp/actors/core/executor_pool_basic_ut.cpp4
-rw-r--r--library/cpp/actors/core/executor_pool_united_ut.cpp4
-rw-r--r--library/cpp/actors/helpers/flow_controlled_queue.cpp8
-rw-r--r--library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp4
-rw-r--r--ydb/core/actorlib_impl/actor_tracker.h4
-rw-r--r--ydb/core/tablet_flat/flat_bio_actor.cpp2
-rw-r--r--ydb/core/tablet_flat/flat_bio_actor.h2
-rw-r--r--ydb/core/tablet_flat/flat_ops_compact.h4
-rw-r--r--ydb/core/tablet_flat/test/libs/exec/dummy.h4
-rw-r--r--ydb/core/tablet_flat/test/libs/exec/leader.h4
-rw-r--r--ydb/core/tablet_flat/test/libs/exec/logger.h4
-rw-r--r--ydb/core/tablet_flat/test/libs/exec/nanny.h4
-rw-r--r--ydb/core/tablet_flat/test/libs/exec/owner.h4
-rw-r--r--ydb/core/tablet_flat/test/libs/exec/storage.h4
-rw-r--r--ydb/core/tablet_flat/test/libs/exec/warden.h4
-rw-r--r--ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp4
-rw-r--r--ydb/core/tx/datashard/export_scan.cpp4
28 files changed, 279 insertions, 89 deletions
diff --git a/library/cpp/actors/core/CMakeLists.txt b/library/cpp/actors/core/CMakeLists.txt
index 385c419b3a5..ee3cc959912 100644
--- a/library/cpp/actors/core/CMakeLists.txt
+++ b/library/cpp/actors/core/CMakeLists.txt
@@ -25,11 +25,14 @@ target_link_libraries(cpp-actors-core PUBLIC
cpp-threading-future
)
target_sources(cpp-actors-core PRIVATE
+ ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/actor_bootstrapped.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/actor_coroutine.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/actor.cpp
+ ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/actor_virtual.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/actorid.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/actorsystem.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/ask.cpp
+ ${CMAKE_SOURCE_DIR}/library/cpp/actors/core/av_bootstrapped.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/balancer.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/buffer.cpp
${CMAKE_SOURCE_DIR}/library/cpp/actors/core/callstack.cpp
diff --git a/library/cpp/actors/core/actor.cpp b/library/cpp/actors/core/actor.cpp
index 42b47f38215..865eea89515 100644
--- a/library/cpp/actors/core/actor.cpp
+++ b/library/cpp/actors/core/actor.cpp
@@ -1,4 +1,5 @@
#include "actor.h"
+#include "actor_virtual.h"
#include "executor_thread.h"
#include <library/cpp/actors/util/datetime.h>
@@ -180,4 +181,16 @@ namespace NActors {
double IActor::GetElapsedTicksAsSeconds() const {
return NHPTimer::GetSeconds(ElapsedTicks);
}
+
+ void TActorCallbackBehaviour::Receive(IActor* actor, TAutoPtr<IEventHandle>& ev, const TActorContext& ctx) {
+ (actor->*StateFunc)(ev, ctx);
+ }
+
+ void TActorVirtualBehaviour::Receive(IActor* actor, TAutoPtr<IEventHandle>& ev, const TActorContext& ctx) {
+ Y_VERIFY(!!ev);
+ Y_ASSERT(dynamic_cast<IEventBehavioral*>(ev->GetBase()));
+ IEventBehavioral* eActor = static_cast<IEventBehavioral*>(ev->GetBase());
+ eActor->Execute(actor, ev, ctx);
+ }
+
}
diff --git a/library/cpp/actors/core/actor.h b/library/cpp/actors/core/actor.h
index 267107da846..66451712a54 100644
--- a/library/cpp/actors/core/actor.h
+++ b/library/cpp/actors/core/actor.h
@@ -220,20 +220,58 @@ namespace NActors {
class TDecorator;
- class IActor : protected IActorOps {
+ class TActorVirtualBehaviour {
public:
- typedef void (IActor::*TReceiveFunc)(TAutoPtr<IEventHandle>& ev, const TActorContext& ctx);
+ static void Receive(IActor* actor, TAutoPtr<IEventHandle>& ev, const TActorContext& ctx);
+ public:
+ };
+
+ class TActorCallbackBehaviour {
+ private:
+ using TBase = IActor;
+ friend class TDecorator;
+ public:
+ typedef void (IActor::* TReceiveFunc)(TAutoPtr<IEventHandle>& ev, const TActorContext& ctx);
private:
TReceiveFunc StateFunc;
+ public:
+ TActorCallbackBehaviour() = default;
+ TActorCallbackBehaviour(TReceiveFunc stateFunc)
+ : StateFunc(stateFunc) {
+ }
+ // NOTE: exceptions must not escape state function but if an exception hasn't be caught
+ // by the actor then we want to crash an see the stack
+ void Receive(IActor* actor, TAutoPtr<IEventHandle>& ev, const TActorContext& ctx);
+
+ template <typename T>
+ void Become(T stateFunc) {
+ StateFunc = static_cast<TReceiveFunc>(stateFunc);
+ }
+
+ template <typename T, typename... TArgs>
+ void Become(T stateFunc, const TActorContext& ctx, TArgs&&... args) {
+ StateFunc = static_cast<TReceiveFunc>(stateFunc);
+ ctx.Schedule(std::forward<TArgs>(args)...);
+ }
+
+ TReceiveFunc CurrentStateFunc() const {
+ return StateFunc;
+ }
+
+ };
+
+ class IActor: protected IActorOps {
+ private:
TActorIdentity SelfActorId;
i64 ElapsedTicks;
- ui64 HandledEvents;
-
friend void DoActorInit(TActorSystem*, IActor*, const TActorId&, const TActorId&);
friend class TDecorator;
-
+ const bool VirtualUsage = false;
+ protected:
+ TActorCallbackBehaviour CImpl;
public:
+ using TReceiveFunc = TActorCallbackBehaviour::TReceiveFunc;
/// @sa services.proto NKikimrServices::TActivity::EType
enum EActorActivity {
OTHER = 0,
@@ -264,13 +302,22 @@ namespace NActors {
ui32 ActivityType;
protected:
- IActor(TReceiveFunc stateFunc, ui32 activityType = OTHER)
- : StateFunc(stateFunc)
- , SelfActorId(TActorId())
+ ui64 HandledEvents;
+
+ IActor(TActorCallbackBehaviour&& cImpl, ui32 activityType = OTHER)
+ : SelfActorId(TActorId())
, ElapsedTicks(0)
- , HandledEvents(0)
+ , CImpl(std::move(cImpl))
, ActivityType(activityType)
- {
+ , HandledEvents(0) {
+ }
+
+ IActor(ui32 activityType = OTHER)
+ : SelfActorId(TActorId())
+ , ElapsedTicks(0)
+ , VirtualUsage(true)
+ , ActivityType(activityType)
+ , HandledEvents(0) {
}
public:
@@ -281,51 +328,21 @@ namespace NActors {
virtual void Die(const TActorContext& ctx); // would unregister actor so call exactly once and only from inside of message processing
virtual void PassAway();
- public:
- template <typename T>
- void Become(T stateFunc) {
- StateFunc = static_cast<TReceiveFunc>(stateFunc);
- }
-
- template <typename T, typename... TArgs>
- void Become(T stateFunc, const TActorContext& ctx, TArgs&&... args) {
- StateFunc = static_cast<TReceiveFunc>(stateFunc);
- ctx.Schedule(std::forward<TArgs>(args)...);
- }
-
- template <typename T, typename... TArgs>
- void Become(T stateFunc, TArgs&&... args) {
- StateFunc = static_cast<TReceiveFunc>(stateFunc);
- Schedule(std::forward<TArgs>(args)...);
- }
-
protected:
void SetActivityType(ui32 activityType) {
ActivityType = activityType;
}
public:
- TReceiveFunc CurrentStateFunc() const {
- return StateFunc;
- }
-
- // NOTE: exceptions must not escape state function but if an exception hasn't be caught
- // by the actor then we want to crash an see the stack
- void Receive(TAutoPtr<IEventHandle>& ev, const TActorContext& ctx) {
- (this->*StateFunc)(ev, ctx);
- HandledEvents++;
- }
-
// must be called to wrap any call trasitions from one actor to another
template<typename TActor, typename TMethod, typename... TArgs>
static decltype((std::declval<TActor>().*std::declval<TMethod>())(std::declval<TArgs>()...))
- InvokeOtherActor(TActor& actor, TMethod&& method, TArgs&&... args) {
- struct TRecurseContext : TActorContext {
- TActivationContext *Prev;
+ InvokeOtherActor(TActor& actor, TMethod&& method, TArgs&&... args) {
+ struct TRecurseContext: TActorContext {
+ TActivationContext* Prev;
TRecurseContext(const TActorId& actorId)
: TActorContext(TActivationContext::ActorContextFor(actorId))
- , Prev(TlsActivationContext)
- {
+ , Prev(TlsActivationContext) {
TlsActivationContext = this;
}
~TRecurseContext() {
@@ -350,7 +367,7 @@ namespace NActors {
void AddElapsedTicks(i64 ticks) {
ElapsedTicks += ticks;
}
- auto GetActivityType() const {
+ ui32 GetActivityType() const {
return ActivityType;
}
ui64 GetHandledEvents() const {
@@ -359,6 +376,14 @@ namespace NActors {
TActorIdentity SelfId() const {
return SelfActorId;
}
+ void Receive(TAutoPtr<IEventHandle>& ev, const TActorContext& ctx) {
+ ++HandledEvents;
+ if (Y_UNLIKELY(VirtualUsage)) {
+ TActorVirtualBehaviour::Receive(this, ev, ctx);
+ } else {
+ CImpl.Receive(this, ev, ctx);
+ }
+ }
protected:
void Describe(IOutputStream&) const noexcept override;
@@ -383,7 +408,7 @@ namespace NActors {
// Register new actor in ActorSystem on same _mailbox_ as current actor.
// There is one thread per mailbox to execute actor, which mean
// no _cpu core scalability_ for such actors.
- // This method of registration can be usefull if multiple actors share
+ // This method of registration can be useful if multiple actors share
// some memory.
TActorId RegisterWithSameMailbox(IActor* actor) const noexcept final;
@@ -405,8 +430,44 @@ namespace NActors {
return TLocalProcessKeyState<TActorActivityTag>::GetInstance().GetNameByIndex(index);
}
+ class IActorCallback: public IActor {
+ public:
+ IActorCallback(TReceiveFunc stateFunc, ui32 activityType = OTHER)
+ : IActor(TActorCallbackBehaviour(stateFunc), activityType) {
+
+ }
+
+ template <typename T>
+ void Become(T stateFunc) {
+ CImpl.Become(stateFunc);
+ }
+
+ template <typename T, typename... TArgs>
+ void Become(T stateFunc, const TActorContext& ctx, TArgs&&... args) {
+ CImpl.Become(stateFunc, ctx, std::forward<TArgs>(args)...);
+ }
+
+ template <typename T, typename... TArgs>
+ void Become(T stateFunc, TArgs&&... args) {
+ CImpl.Become(stateFunc);
+ Schedule(std::forward<TArgs>(args)...);
+ }
+
+ TReceiveFunc CurrentStateFunc() const {
+ return CImpl.CurrentStateFunc();
+ }
+ };
+
+ class IActorVirtual: public IActor {
+ public:
+ IActorVirtual(ui32 activityType = OTHER)
+ : IActor(activityType) {
+
+ }
+ };
+
template <typename TDerived>
- class TActor: public IActor {
+ class TActor: public IActorCallback {
private:
template <typename T, typename = const char*>
struct HasActorName: std::false_type { };
@@ -438,7 +499,7 @@ namespace NActors {
// static constexpr char ActorName[] = "UNNAMED";
TActor(void (TDerived::*func)(TAutoPtr<IEventHandle>& ev, const TActorContext& ctx), ui32 activityType = GetActivityTypeIndex())
- : IActor(static_cast<TReceiveFunc>(func), activityType)
+ : IActorCallback(static_cast<TReceiveFunc>(func), activityType)
{ }
public:
@@ -486,13 +547,13 @@ namespace NActors {
return TActorContext(tls.Mailbox, tls.ExecutorThread, tls.EventStart, id);
}
- class TDecorator : public IActor {
+ class TDecorator : public IActorCallback {
protected:
THolder<IActor> Actor;
public:
TDecorator(THolder<IActor>&& actor)
- : IActor(static_cast<TReceiveFunc>(&TDecorator::State), actor->GetActivityType())
+ : IActorCallback(static_cast<TReceiveFunc>(&TDecorator::State), actor->GetActivityType())
, Actor(std::move(actor))
{
}
diff --git a/library/cpp/actors/core/actor_bootstrapped.cpp b/library/cpp/actors/core/actor_bootstrapped.cpp
new file mode 100644
index 00000000000..8c1effcd5d5
--- /dev/null
+++ b/library/cpp/actors/core/actor_bootstrapped.cpp
@@ -0,0 +1,4 @@
+#include "actor_bootstrapped.h"
+
+namespace NActors {
+}
diff --git a/library/cpp/actors/core/actor_bootstrapped.h b/library/cpp/actors/core/actor_bootstrapped.h
index a37887c9398..46266fea78e 100644
--- a/library/cpp/actors/core/actor_bootstrapped.h
+++ b/library/cpp/actors/core/actor_bootstrapped.h
@@ -2,12 +2,13 @@
#include "actor.h"
#include "events.h"
+#include <util/generic/noncopyable.h>
namespace NActors {
template<typename T> struct dependent_false : std::false_type {};
template<typename TDerived>
- class TActorBootstrapped : public TActor<TDerived> {
+ class TActorBootstrapped: public TActor<TDerived> {
protected:
TAutoPtr<IEventHandle> AfterRegister(const TActorId& self, const TActorId& parentId) override {
return new IEventHandle(TEvents::TSystem::Bootstrap, 0, self, parentId, {}, 0);
@@ -31,7 +32,7 @@ namespace NActors {
}
TActorBootstrapped()
- : TActor<TDerived>(&TDerived::StateBootstrap)
- {}
+ : TActor<TDerived>(&TDerived::StateBootstrap) {
+ }
};
}
diff --git a/library/cpp/actors/core/actor_coroutine.h b/library/cpp/actors/core/actor_coroutine.h
index a2e2863c910..9aac2433030 100644
--- a/library/cpp/actors/core/actor_coroutine.h
+++ b/library/cpp/actors/core/actor_coroutine.h
@@ -150,12 +150,12 @@ namespace NActors {
void DoRun() override final;
};
- class TActorCoro : public IActor {
+ class TActorCoro : public IActorCallback {
THolder<TActorCoroImpl> Impl;
public:
TActorCoro(THolder<TActorCoroImpl> impl, ui32 activityType = IActor::ACTOR_COROUTINE)
- : IActor(static_cast<TReceiveFunc>(&TActorCoro::StateFunc), activityType)
+ : IActorCallback(static_cast<TReceiveFunc>(&TActorCoro::StateFunc), activityType)
, Impl(std::move(impl))
{}
diff --git a/library/cpp/actors/core/actor_virtual.cpp b/library/cpp/actors/core/actor_virtual.cpp
new file mode 100644
index 00000000000..709cd7be15e
--- /dev/null
+++ b/library/cpp/actors/core/actor_virtual.cpp
@@ -0,0 +1,6 @@
+#include "actor_virtual.h"
+
+namespace NActors {
+
+
+}
diff --git a/library/cpp/actors/core/actor_virtual.h b/library/cpp/actors/core/actor_virtual.h
new file mode 100644
index 00000000000..c8c2aebd7eb
--- /dev/null
+++ b/library/cpp/actors/core/actor_virtual.h
@@ -0,0 +1,62 @@
+#pragma once
+#include "event.h"
+#include "actor.h"
+
+namespace NActors {
+
+class IEventBehavioral: public IEventBase {
+protected:
+ virtual bool DoExecute(IActor* actor, TAutoPtr<IEventHandle>& eventPtr, const NActors::TActorContext& ctx) = 0;
+public:
+ bool Execute(IActor* actor, TAutoPtr<IEventHandle>& eventPtr, const NActors::TActorContext& ctx) {
+ return DoExecute(actor, eventPtr, ctx);
+ }
+};
+
+template <class TEvent, class TExpectedActor>
+class IEventForActor: public IEventBehavioral {
+protected:
+ virtual bool DoExecute(IActor* actor, TAutoPtr<IEventHandle>& eventPtr, const NActors::TActorContext& ctx) override {
+ Y_ASSERT(dynamic_cast<TExpectedActor*>(actor));
+ Y_ASSERT(dynamic_cast<TEvent*>(eventPtr->GetBase()));
+ auto* actorCorrect = static_cast<TExpectedActor*>(actor);
+ TEvent* evPtrLocal(static_cast<TEvent*>(eventPtr->GetBase()));
+ actorCorrect->ProcessEvent(evPtrLocal, eventPtr, ctx);
+ return true;
+ }
+public:
+};
+
+template <class TEvent, class TActor>
+class TEventLocalForActor: public IEventForActor<TEvent, TActor> {
+private:
+ using TBase = IEventForActor<TEvent, TActor>;
+ static TString GetClassTitle() {
+ return TStringBuilder() << typeid(TEvent).name() << "->" << typeid(TActor).name();
+ }
+ static i64 LocalClassId;
+public:
+ virtual ui32 Type() const override {
+ return LocalClassId;
+ }
+ virtual TString ToStringHeader() const override {
+ return GetClassTitle();
+ }
+
+ virtual bool SerializeToArcadiaStream(TChunkSerializer* /*serializer*/) const override {
+ Y_FAIL("Serialization of local event %s->%s", typeid(TEvent).name(), typeid(TActor).name());
+ }
+
+ virtual bool IsSerializable() const override {
+ return false;
+ }
+
+ static IEventBase* Load(TEventSerializedData*) {
+ Y_FAIL("Loading of local event %s->%s", typeid(TEvent).name(), typeid(TActor).name());
+ }
+};
+
+template <class TEvent, class TActor>
+i64 TEventLocalForActor<TEvent, TActor>::LocalClassId = Singleton<TAtomicCounter>()->Inc();
+
+}
diff --git a/library/cpp/actors/core/actorsystem.h b/library/cpp/actors/core/actorsystem.h
index dc0bdc370fa..b24e923e085 100644
--- a/library/cpp/actors/core/actorsystem.h
+++ b/library/cpp/actors/core/actorsystem.h
@@ -270,6 +270,11 @@ namespace NActors {
bool SendWithContinuousExecution(TAutoPtr<IEventHandle> ev) const;
bool Send(const TActorId& recipient, IEventBase* ev, ui32 flags = 0) const;
+ template <class TEvent, class... Types>
+ bool SendToActorId(const TActorId& recipient, Types... args) const {
+ return Send(recipient, new TEvent(args...), 0);
+ }
+
/**
* Schedule one-shot event that will be send at given time point in the future.
*
diff --git a/library/cpp/actors/core/av_bootstrapped.cpp b/library/cpp/actors/core/av_bootstrapped.cpp
new file mode 100644
index 00000000000..ec37611d987
--- /dev/null
+++ b/library/cpp/actors/core/av_bootstrapped.cpp
@@ -0,0 +1,17 @@
+#include "av_bootstrapped.h"
+
+namespace NActors {
+
+class TEventForStart: public TEventLocalForActor<TEventForStart, TActorAutoStart> {
+public:
+};
+
+TAutoPtr<NActors::IEventHandle> TActorAutoStart::AfterRegister(const TActorId& self, const TActorId& parentId) {
+ return new IEventHandle(self, parentId, new TEventForStart, 0);
+}
+
+void TActorAutoStart::ProcessEvent(TEventForStart* /*ev*/, TAutoPtr<IEventHandle>& handle, const NActors::TActorContext& ctx) {
+ DoOnStart(handle->Sender, ctx);
+}
+
+}
diff --git a/library/cpp/actors/core/av_bootstrapped.h b/library/cpp/actors/core/av_bootstrapped.h
new file mode 100644
index 00000000000..16c110d4bea
--- /dev/null
+++ b/library/cpp/actors/core/av_bootstrapped.h
@@ -0,0 +1,18 @@
+#pragma once
+#include "actor_virtual.h"
+
+namespace NActors {
+
+class TEventForStart;
+
+class TActorAutoStart: public IActorVirtual {
+protected:
+ virtual void DoOnStart(const TActorId& senderActorId, const ::NActors::TActorContext& ctx) = 0;
+ TAutoPtr<IEventHandle> AfterRegister(const TActorId& self, const TActorId& parentId) override;
+public:
+ void ProcessEvent(TEventForStart* ev, TAutoPtr<IEventHandle>& handle, const NActors::TActorContext& ctx);
+
+ TActorAutoStart() {
+ }
+};
+}
diff --git a/library/cpp/actors/core/executor_pool_basic_ut.cpp b/library/cpp/actors/core/executor_pool_basic_ut.cpp
index 76dff693af5..3ef5808d725 100644
--- a/library/cpp/actors/core/executor_pool_basic_ut.cpp
+++ b/library/cpp/actors/core/executor_pool_basic_ut.cpp
@@ -18,7 +18,7 @@ struct TEvMsg : public NActors::TEventBase<TEvMsg, 10347> {
////////////////////////////////////////////////////////////////////////////////
-class TTestSenderActor : public IActor {
+class TTestSenderActor : public IActorCallback {
private:
using EActivityType = IActor::EActivityType ;
using EActorActivity = IActor::EActorActivity;
@@ -32,7 +32,7 @@ private:
public:
TTestSenderActor(std::function<void(void)> action = [](){},
EActivityType activityType = EActorActivity::OTHER)
- : IActor(static_cast<TReceiveFunc>(&TTestSenderActor::Execute), activityType)
+ : IActorCallback(static_cast<TReceiveFunc>(&TTestSenderActor::Execute), activityType)
, Action(action)
{}
diff --git a/library/cpp/actors/core/executor_pool_united_ut.cpp b/library/cpp/actors/core/executor_pool_united_ut.cpp
index a1595d85883..8a59bef9743 100644
--- a/library/cpp/actors/core/executor_pool_united_ut.cpp
+++ b/library/cpp/actors/core/executor_pool_united_ut.cpp
@@ -30,7 +30,7 @@ inline ui64 DoTimedWork(ui64 workUs) {
return nowUs - startUs;
}
-class TTestSenderActor : public IActor {
+class TTestSenderActor : public IActorCallback {
private:
using EActivityType = IActor::EActivityType ;
using EActorActivity = IActor::EActorActivity;
@@ -44,7 +44,7 @@ private:
public:
TTestSenderActor(std::function<void(void)> action = [](){},
EActivityType activityType = EActorActivity::OTHER)
- : IActor(static_cast<TReceiveFunc>(&TTestSenderActor::Execute), activityType)
+ : IActorCallback(static_cast<TReceiveFunc>(&TTestSenderActor::Execute), activityType)
, Action(action)
{}
diff --git a/library/cpp/actors/helpers/flow_controlled_queue.cpp b/library/cpp/actors/helpers/flow_controlled_queue.cpp
index d75cc540236..41e0944c628 100644
--- a/library/cpp/actors/helpers/flow_controlled_queue.cpp
+++ b/library/cpp/actors/helpers/flow_controlled_queue.cpp
@@ -12,7 +12,7 @@ namespace NActors {
class TFlowControlledRequestQueue;
-class TFlowControlledRequestActor : public IActor {
+class TFlowControlledRequestActor : public IActorCallback {
TFlowControlledRequestQueue * const QueueActor;
void HandleReply(TAutoPtr<IEventHandle> &ev);
@@ -24,7 +24,7 @@ public:
const ui64 StartCounter;
TFlowControlledRequestActor(ui32 activity, TFlowControlledRequestQueue *queue, TActorId source, ui64 cookie, ui32 flags)
- : IActor(static_cast<TReceiveFunc>(&TFlowControlledRequestActor::StateWait), activity)
+ : IActorCallback(static_cast<TReceiveFunc>(&TFlowControlledRequestActor::StateWait), activity)
, QueueActor(queue)
, Source(source)
, Cookie(cookie)
@@ -48,7 +48,7 @@ public:
using IActor::PassAway;
};
-class TFlowControlledRequestQueue : public IActor {
+class TFlowControlledRequestQueue : public IActorCallback {
const TActorId Target;
const TFlowControlledQueueConfig Config;
@@ -154,7 +154,7 @@ class TFlowControlledRequestQueue : public IActor {
}
public:
TFlowControlledRequestQueue(TActorId target, ui32 activity, const TFlowControlledQueueConfig &config)
- : IActor(static_cast<TReceiveFunc>(&TFlowControlledRequestQueue::StateWork), activity)
+ : IActorCallback(static_cast<TReceiveFunc>(&TFlowControlledRequestQueue::StateWork), activity)
, Target(target)
, Config(config)
, MinimalSeenLatency(TDuration::Seconds(1))
diff --git a/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp b/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp
index 1c44b4c59b4..a450d168719 100644
--- a/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp
+++ b/library/cpp/actors/interconnect/interconnect_proxy_wrapper.cpp
@@ -4,7 +4,7 @@
namespace NActors {
- class TInterconnectProxyWrapper : public IActor {
+ class TInterconnectProxyWrapper : public IActorCallback {
TIntrusivePtr<TInterconnectProxyCommon> Common;
const ui32 NodeId;
TInterconnectMock *Mock;
@@ -12,7 +12,7 @@ namespace NActors {
public:
TInterconnectProxyWrapper(TIntrusivePtr<TInterconnectProxyCommon> common, ui32 nodeId, TInterconnectMock *mock)
- : IActor(static_cast<TReceiveFunc>(&TInterconnectProxyWrapper::StateFunc), INTERCONNECT_PROXY_WRAPPER)
+ : IActorCallback(static_cast<TReceiveFunc>(&TInterconnectProxyWrapper::StateFunc), INTERCONNECT_PROXY_WRAPPER)
, Common(std::move(common))
, NodeId(nodeId)
, Mock(mock)
diff --git a/ydb/core/actorlib_impl/actor_tracker.h b/ydb/core/actorlib_impl/actor_tracker.h
index 66e953740d4..84ca8bc9487 100644
--- a/ydb/core/actorlib_impl/actor_tracker.h
+++ b/ydb/core/actorlib_impl/actor_tracker.h
@@ -79,14 +79,14 @@ namespace NActors {
void SendUntrack(const TActorContext& ctx);
};
- class TTrackedActorBase : public IActor {
+ class TTrackedActorBase : public IActorCallback {
// plain pointer to tracker; tracker always lives longer than the tracked actors, so it is safe to reference
// it in this way; the reference is filled in when RegisterSubactor is called
TActorTracker *Tracker = nullptr;
protected:
TTrackedActorBase()
- : IActor(static_cast<TReceiveFunc>(&TTrackedActorBase::InitialReceiveFunc))
+ : IActorCallback(static_cast<TReceiveFunc>(&TTrackedActorBase::InitialReceiveFunc))
{}
// subactor registration helpers
diff --git a/ydb/core/tablet_flat/flat_bio_actor.cpp b/ydb/core/tablet_flat/flat_bio_actor.cpp
index 6a866fb3956..311545d0fd6 100644
--- a/ydb/core/tablet_flat/flat_bio_actor.cpp
+++ b/ydb/core/tablet_flat/flat_bio_actor.cpp
@@ -14,7 +14,7 @@ using TEvGet = TEvBlobStorage::TEvGet;
struct TBlockIO::TLoaded : public TEvBlobStorage::TEvGetResult::TResponse{ };
TBlockIO::TBlockIO(TActorId service, ui64 cookie)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TBlockIO::Inbox), NKikimrServices::TActivity::SAUSAGE_BIO_A)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TBlockIO::Inbox), NKikimrServices::TActivity::SAUSAGE_BIO_A)
, Service(service)
, Cookie(cookie)
{
diff --git a/ydb/core/tablet_flat/flat_bio_actor.h b/ydb/core/tablet_flat/flat_bio_actor.h
index 6de0926223a..34866316bec 100644
--- a/ydb/core/tablet_flat/flat_bio_actor.h
+++ b/ydb/core/tablet_flat/flat_bio_actor.h
@@ -9,7 +9,7 @@ namespace NKikimr {
namespace NTabletFlatExecutor {
namespace NBlockIO {
- class TBlockIO : public ::NActors::IActor {
+ class TBlockIO : public ::NActors::IActorCallback {
using TEventHandlePtr = TAutoPtr<::NActors::IEventHandle>;
using ELnLev = NUtil::ELnLev;
using EStatus = NKikimrProto::EReplyStatus;
diff --git a/ydb/core/tablet_flat/flat_ops_compact.h b/ydb/core/tablet_flat/flat_ops_compact.h
index 3e00fbc393d..07d2af93da4 100644
--- a/ydb/core/tablet_flat/flat_ops_compact.h
+++ b/ydb/core/tablet_flat/flat_ops_compact.h
@@ -51,7 +51,7 @@ namespace NTabletFlatExecutor {
TVector<ui32> YellowStopChannels;
};
- class TOpsCompact: private ::NActors::IActor, public NTable::IVersionScan {
+ class TOpsCompact: private ::NActors::IActorCallback, public NTable::IVersionScan {
using TEvPut = TEvBlobStorage::TEvPut;
using TEvPutResult = TEvBlobStorage::TEvPutResult;
using TScheme = NTable::TRowScheme;
@@ -65,7 +65,7 @@ namespace NTabletFlatExecutor {
constexpr static ui64 MaxFlight = 20ll * (1ll << 20);
TOpsCompact(TActorId owner, TLogoBlobID mask, TAutoPtr<TCompactCfg> conf)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TOpsCompact::Inbox), NKikimrServices::TActivity::OPS_COMPACT_A)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TOpsCompact::Inbox), NKikimrServices::TActivity::OPS_COMPACT_A)
, Mask(mask)
, Owner(owner)
, Conf(std::move(conf))
diff --git a/ydb/core/tablet_flat/test/libs/exec/dummy.h b/ydb/core/tablet_flat/test/libs/exec/dummy.h
index 5c6e2f5b4f1..3cea54ac9fb 100644
--- a/ydb/core/tablet_flat/test/libs/exec/dummy.h
+++ b/ydb/core/tablet_flat/test/libs/exec/dummy.h
@@ -15,7 +15,7 @@ namespace NFake {
virtual NFake::TEvExecute* OnFinished() = 0;
};
- class TDummy : public ::NActors::IActor, public TExecuted {
+ class TDummy : public ::NActors::IActorCallback, public TExecuted {
enum EState {
Boot = 1,
Work = 2,
@@ -34,7 +34,7 @@ namespace NFake {
TDummy(const TActorId &tablet, TInfo *info, const TActorId& owner,
ui32 flags = 0 /* ORed EFlg enum */)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TDummy::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TDummy::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
, TTabletExecutedFlat(info, tablet, nullptr)
, Owner(owner)
, Flags(flags)
diff --git a/ydb/core/tablet_flat/test/libs/exec/leader.h b/ydb/core/tablet_flat/test/libs/exec/leader.h
index f964c4b33c3..61f03869af8 100644
--- a/ydb/core/tablet_flat/test/libs/exec/leader.h
+++ b/ydb/core/tablet_flat/test/libs/exec/leader.h
@@ -11,7 +11,7 @@
namespace NKikimr {
namespace NFake {
- class TLeader: public ::NActors::IActor {
+ class TLeader: public ::NActors::IActorCallback {
enum class EState {
Lock = 0, /* Do not start shutdown process */
Free = 1, /* Start to shut as Head will gone */
@@ -23,7 +23,7 @@ namespace NFake {
using ELnLev = NUtil::ELnLev;
TLeader(ui32 head, TAtomic &stopped)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TLeader::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TLeader::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
, Time(TAppData::TimeProvider.Get())
, Edge(head) /* Live until this runlevel exists */
, Stopped(stopped)
diff --git a/ydb/core/tablet_flat/test/libs/exec/logger.h b/ydb/core/tablet_flat/test/libs/exec/logger.h
index 471f00b8441..b8ca46b3dd7 100644
--- a/ydb/core/tablet_flat/test/libs/exec/logger.h
+++ b/ydb/core/tablet_flat/test/libs/exec/logger.h
@@ -112,13 +112,13 @@ namespace NFake {
};
- class TLogFwd : public ::NActors::IActor {
+ class TLogFwd : public ::NActors::IActorCallback {
public:
using TEventHandlePtr = TAutoPtr<::NActors::IEventHandle>;
using ELnLev = NUtil::ELnLev;
TLogFwd(TIntrusivePtr<TSink> sink)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TLogFwd::Inbox), IActor::LOG_ACTOR)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TLogFwd::Inbox), IActor::LOG_ACTOR)
, Sink(std::move(sink))
{
}
diff --git a/ydb/core/tablet_flat/test/libs/exec/nanny.h b/ydb/core/tablet_flat/test/libs/exec/nanny.h
index 9b00928c8e4..b888da4ce6f 100644
--- a/ydb/core/tablet_flat/test/libs/exec/nanny.h
+++ b/ydb/core/tablet_flat/test/libs/exec/nanny.h
@@ -66,7 +66,7 @@ namespace NFake {
};
- class TNanny : public ::NActors::IActor {
+ class TNanny : public ::NActors::IActorCallback {
using TEventHandlePtr = TAutoPtr<::NActors::IEventHandle>;
public:
@@ -79,7 +79,7 @@ namespace NFake {
};
TNanny()
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TNanny::Inbox))
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TNanny::Inbox))
, Fake(NTable::CreateFakeDb())
{
Fake->Init(NTable::TScheme());
diff --git a/ydb/core/tablet_flat/test/libs/exec/owner.h b/ydb/core/tablet_flat/test/libs/exec/owner.h
index 492d2541c52..015e42cc448 100644
--- a/ydb/core/tablet_flat/test/libs/exec/owner.h
+++ b/ydb/core/tablet_flat/test/libs/exec/owner.h
@@ -16,7 +16,7 @@
namespace NKikimr {
namespace NFake {
- class TOwner final : public ::NActors::IActor {
+ class TOwner final : public ::NActors::IActorCallback {
public:
using TEventHandlePtr = TAutoPtr<::NActors::IEventHandle>;
using ELnLev = NUtil::ELnLev;
@@ -24,7 +24,7 @@ namespace NFake {
using TSetup = TTabletSetupInfo;
TOwner(TActorId user, ui32 limit, TIntrusivePtr<TInfo> info, TIntrusivePtr<TSetup> setup, ui32 followerId)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TOwner::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TOwner::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
, Info(std::move(info))
, Setup(std::move(setup))
, User(user)
diff --git a/ydb/core/tablet_flat/test/libs/exec/storage.h b/ydb/core/tablet_flat/test/libs/exec/storage.h
index 76a937c4f8b..71a29ba92a7 100644
--- a/ydb/core/tablet_flat/test/libs/exec/storage.h
+++ b/ydb/core/tablet_flat/test/libs/exec/storage.h
@@ -7,14 +7,14 @@
namespace NKikimr {
namespace NFake {
- class TStorage : public ::NActors::IActor {
+ class TStorage : public ::NActors::IActorCallback {
public:
using TEventHandlePtr = TAutoPtr<::NActors::IEventHandle>;
using ELnLev = NUtil::ELnLev;
using NStore = TEvBlobStorage;
TStorage(ui32 group)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TStorage::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TStorage::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
, Group(group)
, Model(new NFake::TProxyDS)
{
diff --git a/ydb/core/tablet_flat/test/libs/exec/warden.h b/ydb/core/tablet_flat/test/libs/exec/warden.h
index cc2afbde883..63b4a2526a1 100644
--- a/ydb/core/tablet_flat/test/libs/exec/warden.h
+++ b/ydb/core/tablet_flat/test/libs/exec/warden.h
@@ -13,7 +13,7 @@
namespace NKikimr {
namespace NFake {
- class TWarden : public ::NActors::IActor {
+ class TWarden : public ::NActors::IActorCallback {
enum class EState : ui8 {
Forbid = 0,
@@ -28,7 +28,7 @@ namespace NFake {
using ELnLev = NUtil::ELnLev;
TWarden(ui32 groups)
- : ::NActors::IActor(static_cast<TReceiveFunc>(&TWarden::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
+ : ::NActors::IActorCallback(static_cast<TReceiveFunc>(&TWarden::Inbox), NKikimrServices::TActivity::FAKE_ENV_A)
{
Y_VERIFY(groups < State.size(), "Too many groups requested");
diff --git a/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp b/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
index 7f10ef955e3..8860e32f54a 100644
--- a/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
+++ b/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
@@ -32,7 +32,7 @@ protected:
virtual void CloseEraser() = 0;
};
-class TCondEraseScan: public IActor, public IScan, public IEraserOps {
+class TCondEraseScan: public IActorCallback, public IScan, public IEraserOps {
struct TDataShardId {
TActorId ActorId;
ui64 TabletId;
@@ -215,7 +215,7 @@ class TCondEraseScan: public IActor, public IScan, public IEraserOps {
public:
explicit TCondEraseScan(TDataShard* ds, const TActorId& replyTo, const TTableId& tableId, ui64 txId, THolder<IEraseRowsCondition> condition, const TLimits& limits)
- : IActor(static_cast<TReceiveFunc>(&TCondEraseScan::StateWork), NKikimrServices::TActivity::CONDITIONAL_ERASE_ROWS_SCAN_ACTOR)
+ : IActorCallback(static_cast<TReceiveFunc>(&TCondEraseScan::StateWork), NKikimrServices::TActivity::CONDITIONAL_ERASE_ROWS_SCAN_ACTOR)
, TableId(tableId)
, DataShard{ds->SelfId(), ds->TabletID()}
, ReplyTo(replyTo)
diff --git a/ydb/core/tx/datashard/export_scan.cpp b/ydb/core/tx/datashard/export_scan.cpp
index c0a5901aefa..0538e88b856 100644
--- a/ydb/core/tx/datashard/export_scan.cpp
+++ b/ydb/core/tx/datashard/export_scan.cpp
@@ -17,7 +17,7 @@ using namespace NActors;
using namespace NExportScan;
using namespace NTable;
-class TExportScan: private NActors::IActor, public NTable::IScan {
+class TExportScan: private NActors::IActorCallback, public NTable::IScan {
enum EStateBits {
ES_REGISTERED = 0, // Actor is registered
ES_INITIALIZED, // Seek(...) was called
@@ -154,7 +154,7 @@ public:
}
explicit TExportScan(std::function<IActor*()>&& createUploaderFn, IBuffer::TPtr buffer)
- : IActor(static_cast<TReceiveFunc>(&TExportScan::StateWork), NKikimrServices::TActivity::EXPORT_SCAN_ACTOR)
+ : IActorCallback(static_cast<TReceiveFunc>(&TExportScan::StateWork), NKikimrServices::TActivity::EXPORT_SCAN_ACTOR)
, CreateUploaderFn(std::move(createUploaderFn))
, Buffer(std::move(buffer))
, Stats(new TStats)