aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/actors
diff options
context:
space:
mode:
authoralexvru <alexvru@ydb.tech>2022-10-28 13:20:12 +0300
committeralexvru <alexvru@ydb.tech>2022-10-28 13:20:12 +0300
commit5f4f0d7775ea9bc0abd2e10f21823900202bf880 (patch)
tree0eab2135b4195fca9b71b8989f10c48a6d22b1f3 /library/cpp/actors
parent15d014b82db58bc2964edbc39a38649dbc5b2d26 (diff)
downloadydb-5f4f0d7775ea9bc0abd2e10f21823900202bf880.tar.gz
Add extra Y_VERIFY in PassAway
Diffstat (limited to 'library/cpp/actors')
-rw-r--r--library/cpp/actors/core/actor.cpp2
-rw-r--r--library/cpp/actors/core/actorsystem.h1
-rw-r--r--library/cpp/actors/core/executor_pool_base.cpp4
-rw-r--r--library/cpp/actors/core/executor_pool_base.h1
-rw-r--r--library/cpp/actors/core/executor_pool_united.cpp1
-rw-r--r--library/cpp/actors/core/executor_thread.cpp5
-rw-r--r--library/cpp/actors/core/executor_thread.h2
-rw-r--r--library/cpp/actors/testlib/test_runtime.cpp4
8 files changed, 16 insertions, 4 deletions
diff --git a/library/cpp/actors/core/actor.cpp b/library/cpp/actors/core/actor.cpp
index 3be4043168..8863205860 100644
--- a/library/cpp/actors/core/actor.cpp
+++ b/library/cpp/actors/core/actor.cpp
@@ -175,7 +175,7 @@ namespace NActors {
void IActor::PassAway() {
auto& cx = *TlsActivationContext;
- cx.ExecutorThread.UnregisterActor(&cx.Mailbox, SelfActorId.LocalId());
+ cx.ExecutorThread.UnregisterActor(&cx.Mailbox, SelfActorId);
}
double IActor::GetElapsedTicksAsSeconds() const {
diff --git a/library/cpp/actors/core/actorsystem.h b/library/cpp/actors/core/actorsystem.h
index dc0bdc370f..3a47cc1603 100644
--- a/library/cpp/actors/core/actorsystem.h
+++ b/library/cpp/actors/core/actorsystem.h
@@ -65,6 +65,7 @@ namespace NActors {
// for workers
virtual ui32 GetReadyActivation(TWorkerContext& wctx, ui64 revolvingCounter) = 0;
virtual void ReclaimMailbox(TMailboxType::EType mailboxType, ui32 hint, TWorkerId workerId, ui64 revolvingCounter) = 0;
+ virtual TMailboxHeader *ResolveMailbox(ui32 hint) = 0;
/**
* Schedule one-shot event that will be send at given time point in the future.
diff --git a/library/cpp/actors/core/executor_pool_base.cpp b/library/cpp/actors/core/executor_pool_base.cpp
index 6d48b3d32f..fe46d56fdc 100644
--- a/library/cpp/actors/core/executor_pool_base.cpp
+++ b/library/cpp/actors/core/executor_pool_base.cpp
@@ -41,6 +41,10 @@ namespace NActors {
MailboxTable->ReclaimMailbox(mailboxType, hint, revolvingWriteCounter);
}
+ TMailboxHeader *TExecutorPoolBaseMailboxed::ResolveMailbox(ui32 hint) {
+ return MailboxTable->Get(hint);
+ }
+
ui64 TExecutorPoolBaseMailboxed::AllocateID() {
return ActorSystem->AllocateIDSpace(1);
}
diff --git a/library/cpp/actors/core/executor_pool_base.h b/library/cpp/actors/core/executor_pool_base.h
index 70c85e90c0..6514978238 100644
--- a/library/cpp/actors/core/executor_pool_base.h
+++ b/library/cpp/actors/core/executor_pool_base.h
@@ -23,6 +23,7 @@ namespace NActors {
TExecutorPoolBaseMailboxed(ui32 poolId, ui32 maxActivityType);
~TExecutorPoolBaseMailboxed();
void ReclaimMailbox(TMailboxType::EType mailboxType, ui32 hint, TWorkerId workerId, ui64 revolvingWriteCounter) override;
+ TMailboxHeader *ResolveMailbox(ui32 hint) override;
bool Send(TAutoPtr<IEventHandle>& ev) override;
bool SendWithContinuousExecution(TAutoPtr<IEventHandle>& ev) override;
TActorId Register(IActor* actor, TMailboxType::EType mailboxType, ui64 revolvingWriteCounter, const TActorId& parentId) override;
diff --git a/library/cpp/actors/core/executor_pool_united.cpp b/library/cpp/actors/core/executor_pool_united.cpp
index 8e8cff089b..def7a2f335 100644
--- a/library/cpp/actors/core/executor_pool_united.cpp
+++ b/library/cpp/actors/core/executor_pool_united.cpp
@@ -863,6 +863,7 @@ namespace NActors {
// Should never be called
void ReclaimMailbox(TMailboxType::EType, ui32, TWorkerId, ui64) override { Y_FAIL(); }
+ TMailboxHeader *ResolveMailbox(ui32) override { Y_FAIL(); }
void Schedule(TInstant, TAutoPtr<IEventHandle>, ISchedulerCookie*, TWorkerId) override { Y_FAIL(); }
void Schedule(TMonotonic, TAutoPtr<IEventHandle>, ISchedulerCookie*, TWorkerId) override { Y_FAIL(); }
void Schedule(TDuration, TAutoPtr<IEventHandle>, ISchedulerCookie*, TWorkerId) override { Y_FAIL(); }
diff --git a/library/cpp/actors/core/executor_thread.cpp b/library/cpp/actors/core/executor_thread.cpp
index 8321210d96..ffe2382b38 100644
--- a/library/cpp/actors/core/executor_thread.cpp
+++ b/library/cpp/actors/core/executor_thread.cpp
@@ -61,8 +61,9 @@ namespace NActors {
return Ctx.Executor->Register(actor, mailbox, hint, parentId ? parentId : CurrentRecipient);
}
- void TExecutorThread::UnregisterActor(TMailboxHeader* mailbox, ui64 localActorId) {
- IActor* actor = mailbox->DetachActor(localActorId);
+ void TExecutorThread::UnregisterActor(TMailboxHeader* mailbox, TActorId actorId) {
+ Y_VERIFY_DEBUG(actorId.PoolID() == ExecutorPool->PoolId && ExecutorPool->ResolveMailbox(actorId.Hint()) == mailbox);
+ IActor* actor = mailbox->DetachActor(actorId.LocalId());
Ctx.DecrementActorsAliveByActivity(actor->GetActivityType());
DyingActors.push_back(THolder(actor));
}
diff --git a/library/cpp/actors/core/executor_thread.h b/library/cpp/actors/core/executor_thread.h
index 6cb6208abd..8597336bd1 100644
--- a/library/cpp/actors/core/executor_thread.h
+++ b/library/cpp/actors/core/executor_thread.h
@@ -42,7 +42,7 @@ namespace NActors {
TActorId RegisterActor(IActor* actor, TMailboxType::EType mailboxType = TMailboxType::HTSwap, ui32 poolId = Max<ui32>(),
const TActorId& parentId = TActorId());
TActorId RegisterActor(IActor* actor, TMailboxHeader* mailbox, ui32 hint, const TActorId& parentId = TActorId());
- void UnregisterActor(TMailboxHeader* mailbox, ui64 localActorId);
+ void UnregisterActor(TMailboxHeader* mailbox, TActorId actorId);
void DropUnregistered();
const std::vector<THolder<IActor>>& GetUnregistered() const { return DyingActors; }
diff --git a/library/cpp/actors/testlib/test_runtime.cpp b/library/cpp/actors/testlib/test_runtime.cpp
index 578dff353e..b14892f67d 100644
--- a/library/cpp/actors/testlib/test_runtime.cpp
+++ b/library/cpp/actors/testlib/test_runtime.cpp
@@ -307,6 +307,10 @@ namespace NActors {
Node->MailboxTable->ReclaimMailbox(mailboxType, hint, revolvingCounter);
}
+ TMailboxHeader *ResolveMailbox(ui32 hint) override {
+ return Node->MailboxTable->Get(hint);
+ }
+
void Schedule(TInstant deadline, TAutoPtr<IEventHandle> ev, ISchedulerCookie *cookie, TWorkerId workerId) override {
DoSchedule(deadline, ev, cookie, workerId);
}