increment counter every time we overrid a message in async mode.
This commit is contained in:
		@@ -31,6 +31,7 @@ public:
 | 
				
			|||||||
        if (tail_ == head_) // overrun last item if full
 | 
					        if (tail_ == head_) // overrun last item if full
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            head_ = (head_ + 1) % max_items_;
 | 
					            head_ = (head_ + 1) % max_items_;
 | 
				
			||||||
 | 
					            ++overrun_counter_;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -53,12 +54,19 @@ public:
 | 
				
			|||||||
        return ((tail_ + 1) % max_items_) == head_;
 | 
					        return ((tail_ + 1) % max_items_) == head_;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int overrun_counter() const
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return overrun_counter_;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    size_t max_items_;
 | 
					    size_t max_items_;
 | 
				
			||||||
    typename std::vector<T>::size_type head_ = 0;
 | 
					    typename std::vector<T>::size_type head_ = 0;
 | 
				
			||||||
    typename std::vector<T>::size_type tail_ = 0;
 | 
					    typename std::vector<T>::size_type tail_ = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::vector<T> v_;
 | 
					    std::vector<T> v_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int overrun_counter_ = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
} // namespace details
 | 
					} // namespace details
 | 
				
			||||||
} // namespace spdlog
 | 
					} // namespace spdlog
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,11 @@ public:
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int overrun_counter() const
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return q_.overrun_counter();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __MINGW32__
 | 
					#ifndef __MINGW32__
 | 
				
			||||||
    // try to enqueue and block if no room left
 | 
					    // try to enqueue and block if no room left
 | 
				
			||||||
    void enqueue(T &&item)
 | 
					    void enqueue(T &&item)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -157,6 +157,11 @@ public:
 | 
				
			|||||||
        post_async_msg_(async_msg(std::move(worker_ptr), async_msg_type::flush), overflow_policy);
 | 
					        post_async_msg_(async_msg(std::move(worker_ptr), async_msg_type::flush), overflow_policy);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int overrun_counter() const
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      return q_.overrun_counter();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    q_type q_;
 | 
					    q_type q_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ TEST_CASE("basic async test ", "[async]")
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    using namespace spdlog;
 | 
					    using namespace spdlog;
 | 
				
			||||||
    auto test_sink = std::make_shared<sinks::test_sink_mt>();
 | 
					    auto test_sink = std::make_shared<sinks::test_sink_mt>();
 | 
				
			||||||
 | 
					    int overrun_counter = 0;
 | 
				
			||||||
    size_t queue_size = 128;
 | 
					    size_t queue_size = 128;
 | 
				
			||||||
    size_t messages = 256;
 | 
					    size_t messages = 256;
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -17,9 +18,11 @@ TEST_CASE("basic async test ", "[async]")
 | 
				
			|||||||
            logger->info("Hello message #{}", i);
 | 
					            logger->info("Hello message #{}", i);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        logger->flush();
 | 
					        logger->flush();
 | 
				
			||||||
 | 
					        overrun_counter = tp->overrun_counter();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    REQUIRE(test_sink->msg_counter() == messages);
 | 
					    REQUIRE(test_sink->msg_counter() == messages);
 | 
				
			||||||
    REQUIRE(test_sink->flush_counter() == 1);
 | 
					    REQUIRE(test_sink->flush_counter() == 1);
 | 
				
			||||||
 | 
					    REQUIRE(overrun_counter == 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE("discard policy ", "[async]")
 | 
					TEST_CASE("discard policy ", "[async]")
 | 
				
			||||||
@@ -37,6 +40,7 @@ TEST_CASE("discard policy ", "[async]")
 | 
				
			|||||||
        logger->info("Hello message");
 | 
					        logger->info("Hello message");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    REQUIRE(test_sink->msg_counter() < messages);
 | 
					    REQUIRE(test_sink->msg_counter() < messages);
 | 
				
			||||||
 | 
					    REQUIRE(tp->overrun_counter() > 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE("discard policy using factory ", "[async]")
 | 
					TEST_CASE("discard policy using factory ", "[async]")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user