1. 31 Mar, 2014 2 commits
  2. 30 Mar, 2014 2 commits
    • antirez's avatar
      HyperLogLog approximated cardinality caching. · 307a1899
      antirez authored
      The more we add elements to an HyperLogLog counter, the smaller is
      the probability that we actually update some register.
      
      From this observation it is easy to see how it is possible to use
      caching of a previously computed cardinality and reuse it to serve
      HLLCOUNT queries as long as no register was updated in the data
      structure.
      
      This commit does exactly this by using just additional 8 bytes for the
      data structure to store a 64 bit unsigned integer value cached
      cardinality. When the most significant bit of the 64 bit integer is set,
      it means that the value computed is no longer usable since at least a
      single register was modified and we need to recompute it at the next
      call of HLLCOUNT.
      
      The value is always stored in little endian format regardless of the
      actual CPU endianess.
      307a1899
    • antirez's avatar
      String value unsharing refactored into proper function. · 543ede03
      antirez authored
      All the Redis functions that need to modify the string value of a key in
      a destructive way (APPEND, SETBIT, SETRANGE, ...) require to make the
      object unshared (if refcount > 1) and encoded in raw format (if encoding
      is not already REDIS_ENCODING_RAW).
      
      This was cut & pasted many times in multiple places of the code. This
      commit puts the small logic needed into a function called
      dbUnshareStringValue().
      543ede03
  3. 29 Mar, 2014 5 commits
  4. 28 Mar, 2014 13 commits
  5. 27 Mar, 2014 2 commits
  6. 26 Mar, 2014 3 commits
  7. 25 Mar, 2014 8 commits
    • antirez's avatar
      Cluster: CLUSTER SETSLOT implementation comment updated. · eb746ec4
      antirez authored
      Update the comment since the implementation details changed.
      eb746ec4
    • antirez's avatar
      Cluster: redis-trib cluster allocation more even across nodes. · 0064b1a5
      antirez authored
      redis-trib used to allocate slots not considering fractions of nodes
      when computing the slots_per_node amount. So the fractional part was
      carried over till the end of the allocation, where the last node
      received a few more slots than any other (or a lot more if the cluster
      was composed of many nodes).
      
      The computation was changed to allocate slots more evenly when they are
      not exactly divisible for the number of masters we have.
      0064b1a5
    • antirez's avatar
      Cluster: configEpoch collisions resolution. · 6c527a89
      antirez authored
      The slave election in Redis Cluster guarantees that slaves promoted to
      masters always end with unique config epochs, however failures during
      manual reshardings, software bugs and operational errors may in theory
      cause two nodes to have the same configEpoch.
      
      This commit introduces a mechanism to eventually always end with different
      configEpochs if a collision ever happens.
      
      As a (wanted) side effect, this also ensures that after a new cluster
      is created, all nodes will end with a different configEpoch automatically.
      6c527a89
    • antirez's avatar
      Cluster: stay within 80 cols. · c1041c57
      antirez authored
      c1041c57
    • antirez's avatar
      Fix off by one bug in freeMemoryIfNeeded() eviction pool. · 6540e9ee
      antirez authored
      Bug found by the continuous integration test running the Redis
      with valgrind:
      
      ==6245== Invalid read of size 8
      ==6245==    at 0x4C2DEEF: memcpy@GLIBC_2.2.5 (mc_replace_strmem.c:876)
      ==6245==    by 0x41F9E6: freeMemoryIfNeeded (redis.c:3010)
      ==6245==    by 0x41D2CC: processCommand (redis.c:2069)
      
      memmove() size argument was accounting for an extra element, going
      outside the bounds of the array.
      6540e9ee
    • antirez's avatar
    • antirez's avatar
      adjustOpenFilesLimit() refactoring. · 6e33c908
      antirez authored
      In this commit:
      * Decrement steps are semantically differentiated from the reserved FDs.
        Previously both values were 32 but the meaning was different.
      * Make it clear that we save setrlimit errno.
      * Don't explicitly handle wrapping of 'f', but prevent it from
        happening.
      * Add comments to make the function flow more readable.
      
      This integrates PR #1630
      6e33c908
    • Salvatore Sanfilippo's avatar
      Merge pull request #1630 from mattsta/fix-infinite-loop-ulimit · 72c5ebcb
      Salvatore Sanfilippo authored
      Fix infinite loop ulimit
      72c5ebcb
  8. 24 Mar, 2014 5 commits