From 90c73589a8f2ba5afb442cac0256bd7635d50317 Mon Sep 17 00:00:00 2001
From: Florian Schmaus <flow@cs.fau.de>
Date: Thu, 24 Feb 2022 11:30:43 +0100
Subject: [PATCH] [AbstractWorkStealingScheduler] Emit warning if queue is full

In case pushing to the local work-stealing queue fails because the
queue is full, and that failure is not fatal as it is in Fibril, emit
a warning once.
---
 emper/strategies/AbstractWorkStealingScheduler.cpp | 3 +++
 emper/strategies/AbstractWorkStealingScheduler.hpp | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/emper/strategies/AbstractWorkStealingScheduler.cpp b/emper/strategies/AbstractWorkStealingScheduler.cpp
index 0dbfb91c..310131de 100644
--- a/emper/strategies/AbstractWorkStealingScheduler.cpp
+++ b/emper/strategies/AbstractWorkStealingScheduler.cpp
@@ -294,6 +294,9 @@ auto AbstractWorkStealingScheduler::pushBottom(AbstractFiber& fiber) -> bool {
 			uint64_t queueLength = pushed.size;
 			awss::stats.recordScheduledToLocalAndQueueLength(queueLength);
 		}
+	} else if (!queueFullWarningEmitted) {
+		queueFullWarningEmitted = true;
+		LOGW("Pushing to queue failed: Queue full");
 	}
 	return pushed;
 }
diff --git a/emper/strategies/AbstractWorkStealingScheduler.hpp b/emper/strategies/AbstractWorkStealingScheduler.hpp
index 35f80893..9afead16 100644
--- a/emper/strategies/AbstractWorkStealingScheduler.hpp
+++ b/emper/strategies/AbstractWorkStealingScheduler.hpp
@@ -28,6 +28,8 @@ class AbstractWorkStealingScheduler : public Scheduler {
 	auto nextFiberViaAnywhereQueue() -> std::optional<NextFiberResult>;
 	auto tryStealFiberFrom(workerid_t victim) -> std::optional<NextFiberResult>;
 
+	bool queueFullWarningEmitted = false;
+
  protected:
 	WsQueue<QUEUE_SIZE>** queues;
 	static thread_local WsQueue<QUEUE_SIZE> queue;
-- 
GitLab