Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(server): implement TOUCH command #444

Merged
merged 1 commit into from
Oct 31, 2022
Merged

Conversation

lsvmello
Copy link
Contributor

@lsvmello lsvmello commented Oct 28, 2022

Signed-off-by: Leonardo Mello [email protected]

Related issue #409.

The difference between TOUCH and EXISTS on Redis is that TOUCH updates the last access time, I couldn't find such property on Dragonfly implementation, did I missed something?

Besides that the command are pretty much the same, so I didn't know if I should reuse or duplicate the functions, in the end since there are some logging there (and maybe for a future implementation) I chose to duplicate the function.

For the tests I saw that the OBJECT IDLETIME command is not implemented yet, so I didn't know what else I could do to test the scenario.

I must confess that I couldn't run the tests on my machine, I'm not a linux user so it might take some time for me to figure it out. Maybe you guys has faced this before? I'm using Ubuntu on WSL and this error comes up when I try to run the test:

leonardo@ubuntu:~/dragonfly/build-opt$ ./generic_family_test  
[==========] Running 17 tests from 1 test suite.  
[----------] Global test environment set-up.  
[----------] 17 tests from GenericFamilyTest 
[ RUN      ] GenericFamilyTest.Expire
F20221028 17:51:19.925204  1266 proactor.cc:391] Error initializing io_uring: (38) Function not implemented
*** Check failure stack trace: ***
F20221028 17:51:19.925315  1267 proactor.cc:391] Error initializing io_uring: (38) Function not implementedF20221028 17:51:19.925371  1268 proactor.cc:391] Error initializing io_uring: (38) Function not implemented
*** Check failure stack trace: ***
F20221028 17:51:19.925315  1267 proactor.cc:391] Error initializing io_uring: (38) Function not implementedF20221028 17:51:19.925371  1268 proactor.cc:391] Error initializing io_uring: (38) Function not implemented
*** Check failure stack trace: ***
    @     0x56552421a9d0  google::LogMessage::Fail()
    @     0x56552421a9d0  google::LogMessage::Fail()
    @     0x56552421a9d0  google::LogMessage::Fail()
    @     0x565524221bc3  google::LogMessage::SendToLog()
    @     0x565524221bc3  google::LogMessage::SendToLog()
    @     0x565524221bc3  google::LogMessage::SendToLog()
    @     0x56552421a387  google::LogMessage::Flush()
    @     0x56552421a387  google::LogMessage::Flush()
    @     0x56552421a387  google::LogMessage::Flush()
    @     0x56552421bd0f  google::LogMessageFatal::~LogMessageFatal()
    @     0x56552421bd0f  google::LogMessageFatal::~LogMessageFatal()
    @     0x56552421bd0f  google::LogMessageFatal::~LogMessageFatal()
    @     0x565524193228  util::uring::Proactor::Init()
    @     0x565524193228  util::uring::Proactor::Init()
    @     0x565524193228  util::uring::Proactor::Init()
    @     0x56552420bc3c  _ZNSt17_Function_handlerIFvvEZN4util12ProactorPool14SetupProactorsEvEUlvE_E9_M_invokeERKSt9_Any_data
    @     0x56552420bc3c  _ZNSt17_Function_handlerIFvvEZN4util12ProactorPool14SetupProactorsEvEUlvE_E9_M_invokeERKSt9_Any_data
    @     0x56552420bc3c  _ZNSt17_Function_handlerIFvvEZN4util12ProactorPool14SetupProactorsEvEUlvE_E9_M_invokeERKSt9_Any_data
    @     0x56552421762a  base::start_cpp_function()
    @     0x56552421762a  base::start_cpp_function()
    @     0x56552421762a  base::start_cpp_function()
    @     0x7f2106c50609  start_thread
    @     0x7f2106c50609  start_thread
    @     0x7f2106c50609  start_thread
    @     0x7f2106794133  clone
    @     0x7f2106794133  clone
    @     0x7f2106794133  clone
[failure_signal_handler.cc : 329] RAW: Signal 6 raised at PC=0x7f21066b800b while already in AbslFailureSignalHandler()
[failure_signal_handler.cc : 329] RAW: Signal 6 raised at PC=0x7f21066b800b while already in AbslFailureSignalHandler()
*** SIGABRT received at time=1666990279 on cpu 0 ***
PC: @     0x7f21066b800b  (unknown)  raise
Aborted

@dranikpg
Copy link
Contributor

It seems like your linux kernel on wsl has an old io_uring version that is not supported by dragonfly.

The test in the pipeline fails because you didn't add your new function to GenericFamily::Register.

Dragonfly doesn't support OBJECT IDELTIME currently and probably won't in the nearest future. Instead it reduces a keys likelihood of being evicted in the cache mode, which happends automatically on every lookup (and on exists). EXIST and TOUCH are the same now and most likely will be in the future... So in theory you could re-use all of exists functionality.

@lsvmello
Copy link
Contributor Author

Thanks @dranikpg, I'll try to update the kernel.

I've changed the commit to re-use the Exists logic.

@dranikpg
Copy link
Contributor

@romange lgtm

@romange
Copy link
Collaborator

romange commented Oct 31, 2022

Thanks, Leonardo!

@romange romange merged commit efd307d into dragonflydb:main Oct 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants