From 605973497f0dddab9f3f741e5e175e663dbcc079 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Mon, 10 Mar 2025 05:51:59 -0700 Subject: [PATCH] Remove file-local expire_running variable --- src/storage/backend/redis/Redis.cc | 16 +++++++--------- src/storage/backend/redis/Redis.h | 6 +++++- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/storage/backend/redis/Redis.cc b/src/storage/backend/redis/Redis.cc index 4990502e63..57fe3c5727 100644 --- a/src/storage/backend/redis/Redis.cc +++ b/src/storage/backend/redis/Redis.cc @@ -17,8 +17,6 @@ // Anonymous callback handler methods for the hiredis async API. namespace { -bool during_expire = false; - class Tracer { public: Tracer(const std::string& where) : where(where) {} // DBG_LOG(zeek::DBG_STORAGE, "%s", where.c_str()); } @@ -91,7 +89,7 @@ void redisAddRead(void* privdata) { auto rpe = static_cast(privdata); auto backend = static_cast(rpe->context->data); - if ( rpe->reading == 0 && ! during_expire ) + if ( rpe->reading == 0 && ! backend->ExpireRunning() ) zeek::iosource_mgr->RegisterFd(rpe->fd, backend, zeek::iosource::IOSource::READ); rpe->reading = 1; } @@ -101,7 +99,7 @@ void redisDelRead(void* privdata) { auto rpe = static_cast(privdata); auto backend = static_cast(rpe->context->data); - if ( rpe->reading == 1 && ! during_expire ) + if ( rpe->reading == 1 && ! backend->ExpireRunning() ) zeek::iosource_mgr->UnregisterFd(rpe->fd, backend, zeek::iosource::IOSource::READ); rpe->reading = 0; } @@ -111,7 +109,7 @@ void redisAddWrite(void* privdata) { auto rpe = static_cast(privdata); auto backend = static_cast(rpe->context->data); - if ( rpe->writing == 0 && ! during_expire ) + if ( rpe->writing == 0 && ! backend->ExpireRunning() ) zeek::iosource_mgr->RegisterFd(rpe->fd, backend, zeek::iosource::IOSource::WRITE); rpe->writing = 1; } @@ -121,7 +119,7 @@ void redisDelWrite(void* privdata) { auto t = Tracer("delwrite"); auto backend = static_cast(rpe->context->data); - if ( rpe->writing == 1 && ! during_expire ) + if ( rpe->writing == 1 && ! backend->ExpireRunning() ) zeek::iosource_mgr->UnregisterFd(rpe->fd, backend, zeek::iosource::IOSource::WRITE); rpe->writing = 0; } @@ -358,7 +356,7 @@ void Redis::DoExpire(double current_network_time) { auto locked_scope = conditionally_lock(zeek::run_state::reading_traces, expire_mutex); - during_expire = true; + expire_running = true; int status = redisAsyncCommand(async_ctx, redisGeneric, NULL, "ZRANGEBYSCORE %s_expire -inf %f", key_prefix.data(), current_network_time); @@ -366,7 +364,7 @@ void Redis::DoExpire(double current_network_time) { if ( status == REDIS_ERR ) { // TODO: do something with the error? printf("ZRANGEBYSCORE command failed: %s\n", async_ctx->errstr); - during_expire = false; + expire_running = false; return; } @@ -380,7 +378,7 @@ void Redis::DoExpire(double current_network_time) { if ( reply->elements == 0 ) { freeReplyObject(reply); - during_expire = false; + expire_running = false; return; } diff --git a/src/storage/backend/redis/Redis.h b/src/storage/backend/redis/Redis.h index 1be442b82d..f77a334d95 100644 --- a/src/storage/backend/redis/Redis.h +++ b/src/storage/backend/redis/Redis.h @@ -47,6 +47,8 @@ public: */ bool IsOpen() override { return connected; } + bool ExpireRunning() const { return expire_running.load(); } + private: OperationResult DoOpen(RecordValPtr options, OpenResultCallback* cb = nullptr) override; OperationResult DoClose(OperationResultCallback* cb = nullptr) override; @@ -71,8 +73,10 @@ private: std::string server_addr; std::string key_prefix; + std::atomic connected = false; - int active_ops = 0; + std::atomic expire_running = false; + std::atomic active_ops = 0; }; } // namespace zeek::storage::backend::redis