1. 28 Jan, 2020 1 commit
  2. 27 Jan, 2020 1 commit
  3. 18 Dec, 2019 2 commits
  4. 17 Dec, 2019 3 commits
  5. 09 Dec, 2019 1 commit
  6. 28 Nov, 2019 1 commit
    • Oran Agra's avatar
      Converting more configs to use generic infra, and moving defaults to config.c · 18e72c5c
      Oran Agra authored
      Changes in behavior:
      - Change server.stream_node_max_entries from int64_t to long long, so that it can be used by the generic infra
      - standard error reply instead of "repl-backlog-size must be 1 or greater" and such
      - tls-port and a few TLS booleans were readable (config get) even when USE_OPENSSL was off (now they aren't)
      - syslog-enabled, syslog-ident, cluster-enabled, appendfilename, and supervised didn't have a get (now they do)
      - pidfile was initialized to NULL in InitServerConfig but had CONFIG_DEFAULT_PID_FILE in rewriteConfig (so the real default was "", but rewrite would cause it to be set), fixed the rewrite.
      - TLS config in server.h was uninitialized (if no tls config args were provided)
      
      Adding test for sanity and coverage
      18e72c5c
  7. 26 Nov, 2019 1 commit
    • Oran Agra's avatar
      Additional config.c refactory and bugfixes · e0cc3c99
      Oran Agra authored
      - add capability for each config to have a callback to check if value is valid and return error string
        will enable converting many of the remaining custom configs into generic ones (reducing the x4 repetition for set,get,config,rewrite)
      - add capability for each config to  to run some update code after config is changed (only for CONFIG SET)
        will also enable converting many of the remaining custom configs into generic ones
      - add capability to move default values from server.h and server.c to config.c
        will reduce many excess lines in server.h and server.c (plus, no need to rebuild the entire code base when a default change 8-))
      
      other behavior changes:
      - fix bug in bool config get (always returning 'yes')
      - fix a bug in modifying jemalloc-bg-thread at runtime (didn't call set_jemalloc_bg_thread, due to bad merge conflict resolution (my fault))
      - side effect when a failed attempt to enable activedefrag at runtime, we now respond with -ERR and not with -DISABLED
      e0cc3c99
  8. 22 Nov, 2019 2 commits
  9. 19 Nov, 2019 3 commits
    • Johannes Truschnigg's avatar
      Auto-detect and link libsystemd at compile-time · 129d14e1
      Johannes Truschnigg authored
      This adds Makefile/build-system support for USE_SYSTEMD=(yes|no|*). This
      variable's value determines whether or not libsystemd will be linked at
      build-time.
      
      If USE_SYSTEMD is set to "yes", make will use PKG_CONFIG to check for
      libsystemd's presence, and fail the build early if it isn't
      installed/detected properly.
      
      If USE_SYSTEM is set to "no", libsystemd will *not* be linked, even if
      support for it is available on the system redis is being built on.
      
      For any other value that USE_SYSTEM might assume (e.g. "auto"),
      PKG_CONFIG will try to determine libsystemd's presence, and set up the
      build process to link against it, if it was indicated as being
      installed/available.
      
      This approach has a number of repercussions of its own, most importantly
      the following: If you build redis on a system that actually has systemd
      support, but no libsystemd-dev package(s) installed, you'll end up
      *without* support for systemd notification/status reporting support in
      redis-server. This changes established runtime behaviour.
      
      I'm not sure if the build system and/or the server binary should
      indicate this. I'm also wondering if not actually having
      systemd-notify-support, but requesting it via the server's config,
      should result in a fatal error now.
      129d14e1
    • Johannes Truschnigg's avatar
      Use libsystemd's sd_notify for communicating redis status to systemd · 641c64ad
      Johannes Truschnigg authored
      Instead of replicating a subset of libsystemd's sd_notify(3) internally,
      use the dynamic library provided by systemd to communicate with the
      service manager.
      
      When systemd supervision was auto-detected or configured, communicate
      the actual server status (i.e. "Loading dataset", "Waiting for
      master<->replica sync") to systemd, instead of declaring readiness right
      after initializing the server process.
      641c64ad
    • antirez's avatar
      ce03d683
  10. 18 Nov, 2019 1 commit
  11. 14 Nov, 2019 1 commit
  12. 12 Nov, 2019 1 commit
    • Oran Agra's avatar
      Adjustments for active defrag defaults and tuning · 0bc3dab0
      Oran Agra authored
      Reduce default minimum effort, so that when fragmentation is just detected,
      the impact on the latency will be minor.
      
      Reduce the default maximum effort, mainly to prevent a case were a sudden
      massive deletions, won't trigger an aggressive defrag that will cause latency.
      
      When activedefrag is disabled mid-run, reset the 'running' info field, and
      clear the scan cursor, so that when it'll be re-enabled, a new fresh scan will
      start.
      
      Clearing the 'running' variable is important since lowering the defragger
      tunables mid-scan won't help, the defragger only considers new threshold when
      a new scan starts, and during a scan it can only become more aggressive,
      (when more severe fragmentation is detected), it'll never go less aggressive.
      So by temporarily disabling activedefrag, one can lower th the tunables.
      
      Removing the experimantal warning.
      0bc3dab0
  13. 11 Nov, 2019 1 commit
  14. 10 Nov, 2019 1 commit
    • Oran Agra's avatar
      rename RN_SetLRUOrLFU -> RM_SetLRU and RN_SetLFU · 28c20b4e
      Oran Agra authored
      - the API name was odd, separated to two apis one for LRU and one for LFU
      - the LRU idle time was in 1 second resolution, which might be ok for RDB
        and RESTORE, but i think modules may need higher resolution
      - adding tests for LFU and for handling maxmemory policy mismatch
      28c20b4e
  15. 06 Nov, 2019 1 commit
    • antirez's avatar
      Update PR #6537: use a fresh time outside call(). · 8b2c0f90
      antirez authored
      One problem with the solution proposed so far in #6537 is that key
      lookups outside a command execution via call(), still used a cached
      time. The cached time needed to be refreshed in multiple places,
      especially because of modules callbacks from timers, cluster bus, and
      thread safe contexts, that may use RM_Open().
      
      In order to avoid this problem, this commit introduces the ability to
      detect if we are inside call(): this way we can use the reference fixed
      time only when we are in the context of a command execution or Lua
      script, but for the asynchronous lookups, we can still use mstime() to
      get a fresh time reference.
      8b2c0f90
  16. 05 Nov, 2019 2 commits
    • antirez's avatar
      Update PR #6537 patch to for generality. · 824f5f0b
      antirez authored
      After the thread in #6537 and thanks to the suggestions received, this
      commit updates the original patch in order to:
      
      1. Solve the problem of updating the time in multiple places by updating
      it in call().
      2. Avoid introducing a new field but use our cached time.
      
      This required some minor refactoring to the function updating the time,
      and the introduction of a new cached time in microseconds in order to
      use less gettimeofday() calls.
      824f5f0b
    • zhaozhao.zz's avatar
      expires: refactoring judgment about whether a key is expired · e542132b
      zhaozhao.zz authored
      Calling lookupKey*() many times to search a key in one command
      may get different result.
      
      That's because lookupKey*() calls expireIfNeeded(), and delete
      the key when reach the expire time. So we can get an robj before
      the expire time, but a NULL after the expire time.
      
      The worst is that may lead to Redis crash, for example
      `RPOPLPUSH foo foo` the first time we get a list form `foo` and
      hold the pointer, but when we get `foo` again it's expired and
      deleted. Now we hold a freed memory, when execute rpoplpushHandlePush()
      redis crash.
      
      To fix it, we can refactor the judgment about whether a key is expired,
      using the same basetime `server.cmd_start_mstime` instead of calling
      mstime() everytime.
      e542132b
  17. 04 Nov, 2019 1 commit
  18. 03 Nov, 2019 1 commit
    • Oran Agra's avatar
      Add module api for looking into INFO fields · 4d580438
      Oran Agra authored
      - Add RM_GetServerInfo and friends
      - Add auto memory for new opaque struct
      - Add tests for new APIs
      
      other minor fixes:
      - add const in various char pointers
      - requested_section in modulesCollectInfo was actually not sds but char*
      - extract new string2d out of getDoubleFromObject for code reuse
      
      Add module API for
      4d580438
  19. 31 Oct, 2019 1 commit
    • antirez's avatar
      Modules: block on keys: use a better interface. · 91f4bdc9
      antirez authored
      Using the is_key_ready() callback plus the reply callback later, creates
      different issues AFAIK:
      
      1. More complex API.
      2. We need to call the reply callback() ASAP if the is_key_ready()
      interface returned success, however the internals do not work in that
      way, so when the reply callback is called the setup could be different.
      To fix that, there is to break the current design that handles the
      unblocked clients asyncrhonously, and run the list ASAP.
      91f4bdc9
  20. 30 Oct, 2019 1 commit
  21. 29 Oct, 2019 2 commits
    • Oran Agra's avatar
      Modules hooks: complete missing hooks for the initial set of hooks · 51c3ff8d
      Oran Agra authored
      * replication hooks: role change, master link status, replica online/offline
      * persistence hooks: saving, loading, loading progress
      * misc hooks: cron loop, shutdown, module loaded/unloaded
      * change the way hooks test work, and add tests for all of the above
      
      startLoading() now gets flag indicating what is loaded.
      stopLoading() now gets an indication of success or failure.
      adding startSaving() and stopSaving() with similar args and role.
      51c3ff8d
    • Oran Agra's avatar
      Module API for controlling LRU and LFU, and OpenKey without TOUCH · e978bdf9
      Oran Agra authored
      Some commands would want to open a key without touching it's LRU/LFU
      similarly to the OBJECT or DEBUG command do.
      
      Other commands may want to implement logic similar to what RESTORE
      does (and in the future MIGRATE) and get/set the LRU or LFU.
      e978bdf9
  22. 23 Oct, 2019 2 commits
  23. 17 Oct, 2019 1 commit
  24. 08 Oct, 2019 1 commit
    • Yossi Gottlieb's avatar
      TLS: Improve CA certifiate configuration options. · d7f2681a
      Yossi Gottlieb authored
      This adds support for explicit configuration of a CA certs directory (in
      addition to the previously supported bundle file).  For redis-cli, if no
      explicit CA configuration is supplied the system-wide default
      configuration will be adopted.
      d7f2681a
  25. 07 Oct, 2019 4 commits
    • Yossi Gottlieb's avatar
      TLS: Configuration options. · 61733ded
      Yossi Gottlieb authored
      Add configuration options for TLS protocol versions, ciphers/cipher
      suites selection, etc.
      61733ded
    • Oran Agra's avatar
      TLS: Implement support for write barrier. · 6b629480
      Oran Agra authored
      6b629480
    • Oran Agra's avatar
      diskless replication rdb transfer uses pipe, and writes to sockets form the parent process. · 5a477946
      Oran Agra authored
      misc:
      - handle SSL_has_pending by iterating though these in beforeSleep, and setting timeout of 0 to aeProcessEvents
      - fix issue with epoll signaling EPOLLHUP and EPOLLERR only to the write handlers. (needed to detect the rdb pipe was closed)
      - add key-load-delay config for testing
      - trim connShutdown which is no longer needed
      - rioFdsetWrite -> rioFdWrite - simplified since there's no longer need to write to multiple FDs
      - don't detect rdb child exited (don't call wait3) until we detect the pipe is closed
      - Cleanup bad optimization from rio.c, add another one
      5a477946
    • Yossi Gottlieb's avatar
      TLS: Connections refactoring and TLS support. · b087dd1d
      Yossi Gottlieb authored
      * Introduce a connection abstraction layer for all socket operations and
      integrate it across the code base.
      * Provide an optional TLS connections implementation based on OpenSSL.
      * Pull a newer version of hiredis with TLS support.
      * Tests, redis-cli updates for TLS support.
      b087dd1d
  26. 04 Oct, 2019 1 commit
  27. 03 Oct, 2019 1 commit
  28. 02 Oct, 2019 1 commit