mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-11 18:35:46 +02:00
chore: Fix memcached flags not updated (#2787)
Signed-off-by: Vladislav Oleshko <vlad@dragonflydb.io>
This commit is contained in:
parent
05084354c7
commit
c8724adddf
4 changed files with 20 additions and 15 deletions
|
@ -830,14 +830,10 @@ bool DbSlice::UpdateExpire(DbIndex db_ind, PrimeIterator it, uint64_t at) {
|
|||
void DbSlice::SetMCFlag(DbIndex db_ind, PrimeKey key, uint32_t flag) {
|
||||
auto& db = *db_arr_[db_ind];
|
||||
if (flag == 0) {
|
||||
if (db.mcflag.Erase(key) == 0) {
|
||||
LOG(ERROR) << "Internal error, inconsistent state, mcflag should be present but not found "
|
||||
<< key.ToString();
|
||||
}
|
||||
db.mcflag.Erase(key);
|
||||
} else {
|
||||
auto [it, inserted] = db.mcflag.Insert(std::move(key), flag);
|
||||
if (!inserted)
|
||||
it->second = flag;
|
||||
auto [it, _] = db.mcflag.Insert(std::move(key), flag);
|
||||
it->second = flag;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -655,12 +655,9 @@ OpStatus SetCmd::SetExisting(const SetParams& params, PrimeIterator it, ExpireIt
|
|||
it->first.SetSticky(true);
|
||||
}
|
||||
|
||||
// Check whether we need to update flags table.
|
||||
bool req_flag_update = (params.memcache_flags != 0) != prime_value.HasFlag();
|
||||
if (req_flag_update) {
|
||||
prime_value.SetFlag(params.memcache_flags != 0);
|
||||
db_slice.SetMCFlag(op_args_.db_cntx.db_index, it->first.AsRef(), params.memcache_flags);
|
||||
}
|
||||
// Update flags
|
||||
prime_value.SetFlag(params.memcache_flags != 0);
|
||||
db_slice.SetMCFlag(op_args_.db_cntx.db_index, it->first.AsRef(), params.memcache_flags);
|
||||
|
||||
db_slice.RemoveFromTiered(it, op_args_.db_cntx.db_index);
|
||||
// overwrite existing entry.
|
||||
|
|
|
@ -254,7 +254,7 @@ def port_picker():
|
|||
|
||||
@pytest.fixture(scope="function")
|
||||
def memcached_client(df_server: DflyInstance):
|
||||
client = pymemcache.Client(f"localhost:{df_server.mc_port}", default_noreply=False)
|
||||
client = pymemcache.Client(f"127.0.0.1:{df_server.mc_port}", default_noreply=False)
|
||||
|
||||
yield client
|
||||
|
||||
|
|
|
@ -2,8 +2,9 @@ from pymemcache.client.base import Client as MCClient
|
|||
from . import dfly_args
|
||||
from .instance import DflyInstance
|
||||
import socket
|
||||
import random
|
||||
|
||||
DEFAULT_ARGS = {"memcached_port": 12111, "proactor_threads": 4}
|
||||
DEFAULT_ARGS = {"memcached_port": 11211, "proactor_threads": 4}
|
||||
|
||||
# Generic basic tests
|
||||
|
||||
|
@ -122,3 +123,14 @@ def test_version(memcached_client: MCClient):
|
|||
stats = memcached_client.stats()
|
||||
version = stats[b"version"].decode("utf-8")
|
||||
assert version.startswith("v") or version == "dev"
|
||||
|
||||
|
||||
@dfly_args(DEFAULT_ARGS)
|
||||
def test_flags(memcached_client: MCClient):
|
||||
for i in range(1, 20):
|
||||
flags = random.randrange(50, 1000)
|
||||
memcached_client.set("a", "real-value", flags=flags, noreply=True)
|
||||
|
||||
res = memcached_client.raw_command("get a", "END\r\n").split()
|
||||
if len(res) > 0:
|
||||
assert res[2].decode() == str(flags)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue