1. 14 7月, 2017 4 次提交
  2. 06 7月, 2017 14 次提交
    • S
      minor fix in listJoin(). · 1cefb1c5
      sunweinan 提交于
      1cefb1c5
    • A
      Free IO context if any in RDB loading code. · db791a1e
      antirez 提交于
      Thanks to @oranagra for spotting this bug.
      db791a1e
    • A
      Modules: DEBUG DIGEST interface. · 419dacfe
      antirez 提交于
      419dacfe
    • S
      update Makefile for test-sds · 5d03b831
      spinlock 提交于
      5d03b831
    • S
      Optimize addReplyBulkSds for better performance · ed437b82
      spinlock 提交于
      ed437b82
    • A
      Avoid closing invalid FDs to make Valgrind happier. · 4ebfe265
      antirez 提交于
      4ebfe265
    • A
      Modules: no MULTI/EXEC for commands replicated from async contexts. · b6cab88c
      antirez 提交于
      They are technically like commands executed from external clients one
      after the other, and do not constitute a single atomic entity.
      b6cab88c
    • A
      Add symmetrical assertion to track c->reply_buffer infinite growth. · 5c5e8a50
      antirez 提交于
      Redis clients need to have an instantaneous idea of the amount of memory
      they are consuming (if the number is not exact should at least be
      proportional to the actual memory usage). We do that adding and
      subtracting the SDS length when pushing / popping from the client->reply
      list. However it is quite simple to add bugs in such a setup, by not
      taking the objects in the list and the count in sync. For such reason,
      Redis has an assertion to track counts near 2^64: those are always the
      result of the counter wrapping around because we subtract more than we
      add. This commit adds the symmetrical assertion: when the list is empty
      since we sent everything, the reply_bytes count should be zero. Thanks
      to the new assertion it should be simple to also detect the other
      problem, where the count slowly increases because of over-counting.
      The assertion adds a conditional in the code that sends the buffer to
      the socket but should not create any measurable performance slowdown,
      listLength() just accesses a structure field, and this code path is
      totally dominated by write(2).
      
      Related to #4100.
      5c5e8a50
    • D
      fixed #4100 · c63a97f8
      Dvir Volk 提交于
      c63a97f8
    • A
      Fix GEORADIUS edge case with huge radius. · eeb90571
      antirez 提交于
      This commit closes issue #3698, at least for now, since the root cause
      was not fixed: the bounding box function, for huge radiuses, does not
      return a correct bounding box, there are points still within the radius
      that are left outside.
      
      So when using GEORADIUS queries with radiuses in the order of 5000 km or
      more, it was possible to see, at the edge of the area, certain points
      not correctly reported.
      
      Because the bounding box for now was used just as an optimization, and
      such huge radiuses are not common, for now the optimization is just
      switched off when the radius is near such magnitude.
      
      Three test cases found by the Continuous Integration test were added, so
      that we can easily trigger the bug again, both for regression testing
      and in order to properly fix it as some point in the future.
      eeb90571
    • A
      redis-cli --latency: ability to run non interactively. · 670456a7
      antirez 提交于
      This feature was proposed by @rosmo in PR #2643 and later redesigned
      in order to fit better with the other options for non-interactive modes
      of redis-cli. The idea is basically to allow to collect latency
      information in scripts, cron jobs or whateever, just running for a
      limited time and then producing a single output.
      670456a7
    • A
      HMSET and MSET implementations unified. HSET now variadic. · 64db8044
      antirez 提交于
      This is the first step towards getting rid of HMSET which is a command
      that does not make much sense once HSET is variadic, and has a saner
      return value.
      64db8044
    • A
      Aesthetic changes to #4068 PR to conform to Redis coding standard. · e43c890e
      antirez 提交于
      1. Inline if ... statement if short.
      2. No lines over 80 columns.
      e43c890e
    • I
      Sets up fake client to select current db in RM_Call() · 3f3dc3b8
      itamar 提交于
      3f3dc3b8
  3. 30 6月, 2017 3 次提交
    • A
      Fix abort typo in Lua debugger help screen. · ba773724
      antirez 提交于
      ba773724
    • A
      Added GEORADIUS(BYMEMBER)_RO variants for read-only operations. · bdd6de96
      antirez 提交于
      Issue #4084 shows how for a design error, GEORADIUS is a write command
      because of the STORE option. Because of this it does not work
      on readonly slaves, gets redirected to masters in Redis Cluster even
      when the connection is in READONLY mode and so forth.
      
      To break backward compatibility at this stage, with Redis 4.0 to be in
      advanced RC state, is problematic for the user base. The API can be
      fixed into the unstable branch soon if we'll decide to do so in order to
      be more consistent, and reease Redis 5.0 with this incompatibility in
      the future. This is still unclear.
      
      However, the ability to scale GEO queries in slaves easily is too
      important so this commit adds two read-only variants to the GEORADIUS
      and GEORADIUSBYMEMBER command: GEORADIUS_RO and GEORADIUSBYMEMBER_RO.
      The commands are exactly as the original commands, but they do not
      accept the STORE and STOREDIST options.
      bdd6de96
    • S
      de391ff1
  4. 27 6月, 2017 5 次提交
    • A
      RDB modules values serialization format version 2. · 5af0fc0c
      antirez 提交于
      The original RDB serialization format was not parsable without the
      module loaded, becuase the structure was managed only by the module
      itself. Moreover RDB is a streaming protocol in the sense that it is
      both produce di an append-only fashion, and is also sometimes directly
      sent to the socket (in the case of diskless replication).
      
      The fact that modules values cannot be parsed without the relevant
      module loaded is a problem in many ways: RDB checking tools must have
      loaded modules even for doing things not involving the value at all,
      like splitting an RDB into N RDBs by key or alike, or just checking the
      RDB for sanity.
      
      In theory module values could be just a blob of data with a prefixed
      length in order for us to be able to skip it. However prefixing the values
      with a length would mean one of the following:
      
      1. To be able to write some data at a previous offset. This breaks
      stremaing.
      2. To bufferize values before outputting them. This breaks performances.
      3. To have some chunked RDB output format. This breaks simplicity.
      
      Moreover, the above solution, still makes module values a totally opaque
      matter, with the fowllowing problems:
      
      1. The RDB check tool can just skip the value without being able to at
      least check the general structure. For datasets composed mostly of
      modules values this means to just check the outer level of the RDB not
      actually doing any checko on most of the data itself.
      2. It is not possible to do any recovering or processing of data for which a
      module no longer exists in the future, or is unknown.
      
      So this commit implements a different solution. The modules RDB
      serialization API is composed if well defined calls to store integers,
      floats, doubles or strings. After this commit, the parts generated by
      the module API have a one-byte prefix for each of the above emitted
      parts, and there is a final EOF byte as well. So even if we don't know
      exactly how to interpret a module value, we can always parse it at an
      high level, check the overall structure, understand the types used to
      store the information, and easily skip the whole value.
      
      The change is backward compatible: older RDB files can be still loaded
      since the new encoding has a new RDB type: MODULE_2 (of value 7).
      The commit also implements the ability to check RDB files for sanity
      taking advantage of the new feature.
      5af0fc0c
    • A
      ARM: Fix stack trace generation on crash. · 6516958e
      antirez 提交于
      6516958e
    • A
      Issue #4027: unify comment and modify return value in freeMemoryIfNeeded(). · 3669f96e
      antirez 提交于
      It looks safer to return C_OK from freeMemoryIfNeeded() when clients are
      paused because returning C_ERR may prevent success of writes. It is
      possible that there is no difference in practice since clients cannot
      execute writes while clients are paused, but it looks more correct this
      way, at least conceptually.
      
      Related to PR #4028.
      3669f96e
    • S
      Fix following issues in blocking commands: · 896c4690
      Suraj Narkhede 提交于
      1. brpop last key index, thus checking all keys for slots.
      2. Memory leak in clusterRedirectBlockedClientIfNeeded.
      3. Remove while loop in clusterRedirectBlockedClientIfNeeded.
      896c4690
    • Z
  5. 24 6月, 2017 1 次提交
  6. 22 6月, 2017 3 次提交
  7. 20 6月, 2017 4 次提交
  8. 15 6月, 2017 4 次提交
  9. 13 6月, 2017 1 次提交
  10. 19 5月, 2017 1 次提交