Cache count of keys in database

Former-commit-id: 7cd266030ad82b5fddd4668d666adc95e1bed475
This commit is contained in:
John Sully 2020-03-17 17:11:41 -04:00
parent 0249ff44a5
commit 9ae07e994d
2 changed files with 88 additions and 0 deletions

View File

@ -1646,6 +1646,62 @@ int clientsCronResizeQueryBuffer(client *c) {
return 0;
}
SymVer parseVersion(const char *version)
{
SymVer ver = {-1,-1,-1};
long versions[3] = {-1,-1,-1};
const char *start = version;
const char *end = nullptr;
for (int iver = 0; iver < 3; ++iver)
{
end = start;
while (*end != '\0' && *end != '.')
++end;
if (start >= end)
return ver;
if (!string2l(start, end - start, versions + iver))
return ver;
if (*end != '\0')
start = end+1;
else
break;
}
ver.major = versions[0];
ver.minor = versions[1];
ver.build = versions[2];
return ver;
}
VersionCompareResult compareVersion(SymVer *pver)
{
SymVer symVerThis = parseVersion(KEYDB_REAL_VERSION);
for (int iver = 0; iver < 3; ++iver)
{
long verThis, verOther;
switch (iver)
{
case 0:
verThis = symVerThis.major; verOther = pver->major;
break;
case 1:
verThis = symVerThis.minor; verOther = pver->minor;
break;
case 2:
verThis = symVerThis.build; verOther = pver->build;
}
if (verThis < verOther)
return VersionCompareResult::NewerVersion;
if (verThis > verOther)
return VersionCompareResult::OlderVersion;
}
return VersionCompareResult::EqualVerison;
}
/* This function is used in order to track clients using the biggest amount
* of memory in the latest few seconds. This way we can provide such information
* in the INFO output (clients section), without having to do an O(N) scan for
@ -5397,6 +5453,13 @@ int main(int argc, char **argv) {
std::set_terminate(OnTerminate);
{
SymVer version;
version = parseVersion(KEYDB_REAL_VERSION);
serverAssert(version.major >= 0 && version.minor >= 0 && version.build >= 0);
serverAssert(compareVersion(&version) == VersionCompareResult::EqualVerison);
}
#ifdef USE_MEMKIND
storage_init(NULL, 0);
#endif

View File

@ -1,3 +1,28 @@
#define KEYDB_REAL_VERSION "0.0.0"
extern const char *KEYDB_SET_VERSION; // Unlike real version, this can be overriden by the config
enum VersionCompareResult
{
EqualVerison,
OlderVersion,
NewerVersion,
};
struct SymVer
{
long major;
long minor;
long build;
};
#ifdef __cplusplus
extern "C"
{
#endif
struct SymVer parseVersion(const char *version);
enum VersionCompareResult compareVersion(struct SymVer *pver);
#ifdef __cplusplus
}
#endif