1. 31 3月, 2014 7 次提交
    • A
      HLLADD: propagate write when only variable name is given. · 8aeb0c19
      antirez 提交于
      The following form is given:
      
          HLLADD myhll
      
      No element is provided in the above case so if 'myhll' var does not
      exist the result is to just create an empty HLL structure, and no update
      will be performed on the registers.
      
      In this case, the DB should still be set dirty and the command
      propagated.
      8aeb0c19
    • A
      hll-gnuplot-graph.rb: Use |error| when filter is :max · 69a93194
      antirez 提交于
      69a93194
    • A
      Ignore txt files inside utils/hyperloglog. · a8fb1a32
      antirez 提交于
      Those are generated to trace graphs using gnuplot.
      a8fb1a32
    • A
      HyperLogLog: use LINEARCOUNTING up to 3m. · 60e60f4e
      antirez 提交于
      The HyperLogLog original paper suggests using LINEARCOUNTING for
      cardinalities < 2.5m, however for P=14 the median / max error
      curves show that a value of '3' is the best pick for m = 16384.
      60e60f4e
    • A
      7f9d289e
    • A
      HyperLogLog approximated cardinality caching. · 307a1899
      antirez 提交于
      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
    • A
      String value unsharing refactored into proper function. · 543ede03
      antirez 提交于
      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
  2. 30 3月, 2014 1 次提交
    • A
      Use endian neutral hash function for HyperLogLog. · aaf6db45
      antirez 提交于
      We need to be sure that you can save a dataset in a Redis instance,
      reload it in a different architecture, and continue to count in the same
      HyperLogLog structure.
      
      So 32 and 64 bit, little or bit endian, must all guarantee to output the
      same hash for the same element.
      aaf6db45
  3. 29 3月, 2014 9 次提交
  4. 28 3月, 2014 8 次提交
  5. 27 3月, 2014 2 次提交
  6. 26 3月, 2014 6 次提交
    • A
      Cluster: handshake "already known" error logged to VERBOSE. · 6dd2dbbd
      antirez 提交于
      This is not really an error but something that always happens for
      example when creating a new cluster, or if the sysadmin rejoins manually
      a node that is already known.
      
      Since useless logs don't help, moved to VERBOSE level.
      6dd2dbbd
    • A
      Cluster: clusterHandleConfigEpochCollision() fixed. · 3cf6f1f5
      antirez 提交于
      New config epochs must always be obtained incrementing the currentEpoch,
      that is itself guaranteed to be >= the max configEpoch currently known
      to the node.
      3cf6f1f5
    • A
      80d4c52c
    • A
      Cluster: CLUSTER SETSLOT implementation comment updated. · eb746ec4
      antirez 提交于
      Update the comment since the implementation details changed.
      eb746ec4
    • A
      Cluster: redis-trib cluster allocation more even across nodes. · 0064b1a5
      antirez 提交于
      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
    • A
      Cluster: configEpoch collisions resolution. · 6c527a89
      antirez 提交于
      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
  7. 25 3月, 2014 7 次提交