Freshen streams when we write to them

This commit is contained in:
flamingcow
2019-05-12 08:56:57 -07:00
parent d29157c1ac
commit b079f48367
3 changed files with 15 additions and 3 deletions

View File

@@ -5,7 +5,7 @@ namespace firesse {
void Index::Add(Stream* stream) { void Index::Add(Stream* stream) {
std::lock_guard l(mu_); std::lock_guard l(mu_);
// Implicitly freshest stream->last_message_time_ = std::chrono::steady_clock::now();
stream->fresher_ = nullptr; stream->fresher_ = nullptr;
stream->staler_ = freshest_; stream->staler_ = freshest_;
if (stream->staler_) { if (stream->staler_) {
@@ -36,4 +36,15 @@ void Index::Remove(Stream* stream) {
} }
} }
void Index::Freshen(Stream* stream) {
std::lock_guard l(mu_);
if (freshest_ == stream) {
// Shortcut
stream->last_message_time_ = std::chrono::steady_clock::now();
return;
}
Remove(stream);
Add(stream);
}
} // namespace firesse } // namespace firesse

View File

@@ -9,9 +9,10 @@ class Index {
public: public:
void Add(Stream* stream); void Add(Stream* stream);
void Remove(Stream* stream); void Remove(Stream* stream);
void Freshen(Stream* stream);
private: private:
std::mutex mu_; std::recursive_mutex mu_;
Stream* freshest_ = nullptr; Stream* freshest_ = nullptr;
Stream* stalest_ = nullptr; Stream* stalest_ = nullptr;
}; };

View File

@@ -22,7 +22,7 @@ void Stream::OnClose(const std::function<void()>& callback) {
bool Stream::WriteEvent(const std::string& data, uint64_t id, const std::string& type) { bool Stream::WriteEvent(const std::string& data, uint64_t id, const std::string& type) {
{ {
std::lock_guard l(mu_); std::lock_guard l(mu_);
last_message_time_ = std::chrono::steady_clock::now(); index_->Freshen(this);
} }
return request_->InTransaction<bool>([=]() { return request_->InTransaction<bool>([=]() {