summaryrefslogtreecommitdiffstats
path: root/library/cpp/actors/testlib/test_runtime.cpp
diff options
context:
space:
mode:
authorxenoxeno <[email protected]>2023-03-09 12:10:01 +0300
committerxenoxeno <[email protected]>2023-03-09 12:10:01 +0300
commitad607bb887619f321dec03b02df8220e01b7f5aa (patch)
tree7d5c87352cbe835b56bb2bdac93b37cbdf8ead21 /library/cpp/actors/testlib/test_runtime.cpp
parent6324d075a5e80b6943b5de6b465b775050fe83df (diff)
light events for actor system
Diffstat (limited to 'library/cpp/actors/testlib/test_runtime.cpp')
-rw-r--r--library/cpp/actors/testlib/test_runtime.cpp59
1 files changed, 35 insertions, 24 deletions
diff --git a/library/cpp/actors/testlib/test_runtime.cpp b/library/cpp/actors/testlib/test_runtime.cpp
index ad124bf258b..889edc4969b 100644
--- a/library/cpp/actors/testlib/test_runtime.cpp
+++ b/library/cpp/actors/testlib/test_runtime.cpp
@@ -47,11 +47,11 @@ namespace NActors {
Cerr << " \"" << name << "\"";
Cerr << ", ";
if (ev->HasEvent())
- Cerr << " : " << (PRINT_EVENT_BODY ? ev->GetBase()->ToString() : ev->GetBase()->ToStringHeader());
- else if (ev->HasBuffer())
- Cerr << " : BUFFER";
- else
- Cerr << " : EMPTY";
+ Cerr << " : " << (PRINT_EVENT_BODY ? ev->ToString() : ev->GetTypeName());
+ // else if (ev->HasBuffer())
+ // Cerr << " : BUFFER";
+ // else
+ // Cerr << " : EMPTY";
Cerr << "\n";
}
@@ -397,7 +397,7 @@ namespace NActors {
TActorContext ctx(*mailbox, *node->ExecutorThread, GetCycleCountFast(), ev->GetRecipientRewrite());
TActivationContext *prevTlsActivationContext = TlsActivationContext;
TlsActivationContext = &ctx;
- recipientActor->Receive(ev, ctx);
+ recipientActor->Receive(ev);
TlsActivationContext = prevTlsActivationContext;
// we expect the logger to never die in tests
}
@@ -669,7 +669,7 @@ namespace NActors {
while (!scheduledEvents.empty() && scheduledEvents.begin()->Deadline == time) {
// static THashMap<std::pair<TActorId, TString>, ui64> eventTypes;
auto& item = *scheduledEvents.begin();
- TString name = item.Event->GetBase() ? TypeName(*item.Event->GetBase()) : Sprintf("%08" PRIx32, item.Event->Type);
+ TString name = item.Event->GetTypeName();
// eventTypes[std::make_pair(item.Event->Recipient, name)]++;
runtime.ScheduledCount++;
if (runtime.ScheduledCount > runtime.ScheduledLimit) {
@@ -1420,18 +1420,23 @@ namespace NActors {
}
}
- void TTestActorRuntimeBase::Send(IEventHandle* ev, ui32 senderNodeIndex, bool viaActorSystem) {
+ void TTestActorRuntimeBase::Send(const TActorId& recipient, const TActorId& sender, TAutoPtr<IEventHandleLight> ev, ui32 senderNodeIndex, bool viaActorSystem) {
+ ev->PrepareSend(recipient, sender);
+ Send(ev.Release(), senderNodeIndex, viaActorSystem);
+ }
+
+ void TTestActorRuntimeBase::Send(TAutoPtr<IEventHandle> ev, ui32 senderNodeIndex, bool viaActorSystem) {
TGuard<TMutex> guard(Mutex);
Y_VERIFY(senderNodeIndex < NodeCount, "senderNodeIndex# %" PRIu32 " < NodeCount# %" PRIu32,
senderNodeIndex, NodeCount);
SendInternal(ev, senderNodeIndex, viaActorSystem);
}
- void TTestActorRuntimeBase::SendAsync(IEventHandle* ev, ui32 senderNodeIndex) {
+ void TTestActorRuntimeBase::SendAsync(TAutoPtr<IEventHandle> ev, ui32 senderNodeIndex) {
Send(ev, senderNodeIndex, true);
}
- void TTestActorRuntimeBase::Schedule(IEventHandle* ev, const TDuration& duration, ui32 nodeIndex) {
+ void TTestActorRuntimeBase::Schedule(TAutoPtr<IEventHandle> ev, const TDuration& duration, ui32 nodeIndex) {
TGuard<TMutex> guard(Mutex);
Y_VERIFY(nodeIndex < NodeCount);
ui32 nodeId = FirstNodeId + nodeIndex;
@@ -1568,7 +1573,7 @@ namespace NActors {
NeedMonitoring = true;
}
- void TTestActorRuntimeBase::SendInternal(IEventHandle* ev, ui32 nodeIndex, bool viaActorSystem) {
+ void TTestActorRuntimeBase::SendInternal(TAutoPtr<IEventHandle> ev, ui32 nodeIndex, bool viaActorSystem) {
Y_VERIFY(nodeIndex < NodeCount);
ui32 nodeId = FirstNodeId + nodeIndex;
TNodeDataBase* node = Nodes[nodeId].Get();
@@ -1587,23 +1592,22 @@ namespace NActors {
}
Y_VERIFY(!ev->GetRecipientRewrite().IsService() && (targetNodeIndex == nodeIndex));
- TAutoPtr<IEventHandle> evHolder(ev);
- if (!AllowSendFrom(node, evHolder)) {
+ if (!AllowSendFrom(node, ev)) {
return;
}
ui32 mailboxHint = ev->GetRecipientRewrite().Hint();
TEventMailBox& mbox = GetMailbox(nodeId, mailboxHint);
if (!mbox.IsActive(TInstant::MicroSeconds(CurrentTimestamp))) {
- mbox.PushFront(evHolder);
+ mbox.PushFront(ev);
return;
}
ui64 recipientLocalId = ev->GetRecipientRewrite().LocalId();
if ((BlockedOutput.find(ev->Sender) == BlockedOutput.end()) && VERBOSE) {
Cerr << "Send event, ";
- PrintEvent(evHolder, this);
+ PrintEvent(ev, this);
}
EvCounters[ev->GetTypeRewrite()]++;
@@ -1624,7 +1628,7 @@ namespace NActors {
TCallstack::GetTlsCallstack() = ev->Callstack;
TCallstack::GetTlsCallstack().SetLinesToSkip();
#endif
- recipientActor->Receive(evHolder, ctx);
+ recipientActor->Receive(ev);
node->ExecutorThread->DropUnregistered();
}
CurrentRecipient = TActorId();
@@ -1634,10 +1638,8 @@ namespace NActors {
Cerr << "Failed to find actor with local id: " << recipientLocalId << "\n";
}
- auto forwardedEv = ev->ForwardOnNondelivery(TEvents::TEvUndelivered::ReasonActorUnknown);
- if (!!forwardedEv) {
- node->ActorSystem->Send(forwardedEv);
- }
+ auto fw = IEventHandle::ForwardOnNondelivery(ev, TEvents::TEvUndelivered::ReasonActorUnknown);
+ node->ActorSystem->Send(fw);
}
}
@@ -1864,7 +1866,8 @@ namespace NActors {
if (HasReply) {
delete Context->Queue->Pop();
}
- ctx.ExecutorThread.Send(ev->Forward(originalSender));
+ IEventHandle::Forward(ev, originalSender);
+ ctx.ExecutorThread.Send(ev);
if (!IsSync && Context->Queue->Head()) {
SendHead(ctx);
}
@@ -1896,9 +1899,17 @@ namespace NActors {
TAutoPtr<IEventHandle> GetForwardedEvent() {
IEventHandle* ev = Context->Queue->Head();
ReplyChecker->OnRequest(ev);
- TAutoPtr<IEventHandle> forwardedEv = ev->HasEvent()
- ? new IEventHandle(Delegatee, ReplyId, ev->ReleaseBase().Release(), ev->Flags, ev->Cookie)
- : new IEventHandle(ev->GetTypeRewrite(), ev->Flags, Delegatee, ReplyId, ev->ReleaseChainBuffer(), ev->Cookie);
+ TAutoPtr<IEventHandle> forwardedEv;
+ if (ev->IsEventLight()) {
+ IEventHandleLight* evl = IEventHandleLight::GetLight(ev);
+ evl->PrepareSend(Delegatee, ReplyId);
+ forwardedEv = ev;
+ } else {
+ IEventHandleFat* evf = IEventHandleFat::GetFat(ev);
+ forwardedEv = ev->HasEvent()
+ ? new IEventHandleFat(Delegatee, ReplyId, evf->ReleaseBase().Release(), evf->Flags, evf->Cookie)
+ : new IEventHandleFat(evf->GetTypeRewrite(), evf->Flags, Delegatee, ReplyId, evf->ReleaseChainBuffer(), evf->Cookie);
+ }
return forwardedEv;
}