This is an automated email from the ASF dual-hosted git repository.
twice pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new a64cabf4 Add support for LASTSAVE command (#1702)
a64cabf4 is described below
commit a64cabf4b091fe48b85fa7bdc74d74cf775f6011
Author: xq2010 <[email protected]>
AuthorDate: Mon Aug 28 21:06:02 2023 +0800
Add support for LASTSAVE command (#1702)
Co-authored-by: xuqing <[email protected]>
Co-authored-by: Twice <[email protected]>
Co-authored-by: Binbin <[email protected]>
---
src/commands/cmd_server.cc | 14 ++++++++++++++
src/server/server.cc | 7 ++++++-
src/server/server.h | 1 +
tests/gocase/unit/info/info_test.go | 1 -
4 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/commands/cmd_server.cc b/src/commands/cmd_server.cc
index 760adaed..d9b972de 100644
--- a/src/commands/cmd_server.cc
+++ b/src/commands/cmd_server.cc
@@ -980,6 +980,19 @@ static uint64_t GenerateConfigFlag(const
std::vector<std::string> &args) {
return 0;
}
+class CommandLastSave : public Commander {
+ public:
+ Status Execute(Server *svr, Connection *conn, std::string *output) override {
+ if (!conn->IsAdmin()) {
+ return {Status::RedisExecErr, errAdminPermissionRequired};
+ }
+
+ int64_t unix_sec = svr->GetLastBgsaveTime();
+ *output = redis::Integer(unix_sec);
+ return Status::OK();
+ }
+};
+
class CommandRestore : public Commander {
public:
Status Parse(const std::vector<std::string> &args) override {
@@ -1080,6 +1093,7 @@ REDIS_REGISTER_COMMANDS(MakeCmdAttr<CommandAuth>("auth",
2, "read-only ok-loadin
MakeCmdAttr<CommandCompact>("compact", 1, "read-only
no-script", 0, 0, 0),
MakeCmdAttr<CommandBGSave>("bgsave", 1, "read-only
no-script", 0, 0, 0),
+ MakeCmdAttr<CommandLastSave>("lastsave", 1, "read-only
no-script", 0, 0, 0),
MakeCmdAttr<CommandFlushBackup>("flushbackup", 1,
"read-only no-script", 0, 0, 0),
MakeCmdAttr<CommandSlaveOf>("slaveof", 3, "read-only
exclusive no-script", 0, 0, 0),
MakeCmdAttr<CommandStats>("stats", 1, "read-only", 0,
0, 0), )
diff --git a/src/server/server.cc b/src/server/server.cc
index b00decf6..3b583cbe 100644
--- a/src/server/server.cc
+++ b/src/server/server.cc
@@ -986,6 +986,11 @@ int64_t Server::GetCachedUnixTime() {
return unix_time.load();
}
+int64_t Server::GetLastBgsaveTime() {
+ std::lock_guard<std::mutex> lg(db_job_mu_);
+ return last_bgsave_time_ == -1 ? start_time_ : last_bgsave_time_;
+}
+
void Server::GetStatsInfo(std::string *info) {
std::ostringstream string_stream;
string_stream << "# Stats\r\n";
@@ -1074,7 +1079,7 @@ void Server::GetInfo(const std::string &ns, const
std::string §ion, std::str
std::lock_guard<std::mutex> lg(db_job_mu_);
string_stream << "bgsave_in_progress:" << (is_bgsave_in_progress_ ? 1 : 0)
<< "\r\n";
- string_stream << "last_bgsave_time:" << last_bgsave_time_ << "\r\n";
+ string_stream << "last_bgsave_time:" << (last_bgsave_time_ == -1 ?
start_time_ : last_bgsave_time_) << "\r\n";
string_stream << "last_bgsave_status:" << last_bgsave_status_ << "\r\n";
string_stream << "last_bgsave_time_sec:" << last_bgsave_time_sec_ <<
"\r\n";
}
diff --git a/src/server/server.h b/src/server/server.h
index b598e520..953cbbbc 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -211,6 +211,7 @@ class Server {
void SetLastRandomKeyCursor(const std::string &cursor);
static int64_t GetCachedUnixTime();
+ int64_t GetLastBgsaveTime();
void GetStatsInfo(std::string *info);
void GetServerInfo(std::string *info);
void GetMemoryInfo(std::string *info);
diff --git a/tests/gocase/unit/info/info_test.go
b/tests/gocase/unit/info/info_test.go
index b0078a59..136be197 100644
--- a/tests/gocase/unit/info/info_test.go
+++ b/tests/gocase/unit/info/info_test.go
@@ -72,7 +72,6 @@ func TestInfo(t *testing.T) {
t.Run("get bgsave information by INFO", func(t *testing.T) {
require.Equal(t, "0", util.FindInfoEntry(rdb,
"bgsave_in_progress", "persistence"))
- require.Equal(t, "-1", util.FindInfoEntry(rdb,
"last_bgsave_time", "persistence"))
require.Equal(t, "ok", util.FindInfoEntry(rdb,
"last_bgsave_status", "persistence"))
require.Equal(t, "-1", util.FindInfoEntry(rdb,
"last_bgsave_time_sec", "persistence"))