]> Entropealabs - cluster_kv.git/commitdiff
use prefix, not key, for looking for a prefix
authorChristopher <chris@entropealabs.com>
Sat, 7 Mar 2020 19:25:48 +0000 (13:25 -0600)
committerChristopher <chris@entropealabs.com>
Sat, 7 Mar 2020 19:25:48 +0000 (13:25 -0600)
lib/cluster_kv/ring.ex

index e98f6918a83a6e0df98e25b8d7580950f8452f1f..0e6105082e4af23051ad757fe3eee5897c6a84ad 100644 (file)
@@ -45,17 +45,14 @@ defmodule ClusterKV.Ring do
   @handle_anti_entropy "HandleAntiEntropy"
 
   def put(name, key, value) do
-    Logger.debug("PUT - #{key}: #{inspect(value)}")
     :gen_statem.cast(ClusterKV.ring_name(name), {:put, key, value})
   end
 
   def get(name, key, timeout \\ 5000) do
-    Logger.debug("GET - #{key}")
     :gen_statem.call(ClusterKV.ring_name(name), {:get, key}, timeout)
   end
 
   def prefix(name, key, split_on, min) do
-    Logger.debug("PREFIX - #{key} / #{inspect(split_on)} : #{min}")
     :gen_statem.call(ClusterKV.ring_name(name), {:prefix, key, split_on, min})
   end
 
@@ -134,11 +131,11 @@ defmodule ClusterKV.Ring do
     parts = String.split(key, split_on)
     head = Enum.slice(parts, 0..(min - 1))
     itr = Enum.slice(parts, min..-2)
-    get_prefix(head, key, r, me, repls, n, ref)
+    get_prefix(head, r, me, repls, n, ref)
 
     Enum.reduce(itr, head, fn ns, acc ->
       next = acc ++ [ns]
-      get_prefix(next, key, r, me, repls, n, ref)
+      get_prefix(next, r, me, repls, n, ref)
       next
     end)
 
@@ -202,19 +199,19 @@ defmodule ClusterKV.Ring do
     {:ok, %SL{sl | data: %Ring{data | ring: ring}}, [{:next_event, :internal, :node_down}]}
   end
 
-  defp get_prefix(next, key, r, me, repls, n, ref) do
+  defp get_prefix(next, r, me, repls, n, ref) do
     prefix = Enum.join(next, ".")
-    node = get_node(key, r, me, repls)
+    node = get_node(prefix, r, me, repls)
     send({n, node}, {:get_key, prefix, ref, me})
   end
 
-  defp get_node(key, r, _node, repls) do
+  defp get_node(key, r, node, repls) do
     nodes = HashRing.key_to_nodes(r, key, repls)
-    Enum.random(nodes)
-    case node in nodes do
-    #  true -> node
-    #  false -> Enum.random(nodes)
-    end
+
+    case node in nodes do
+      true -> node
+      false -> Enum.random(nodes)
+    end
   end
 
   defp do_stream(db) do
@@ -295,7 +292,6 @@ defmodule ClusterKV.Ring do
 
   defp send_sync(name, nodes, key, value) do
     Enum.each(nodes, fn n ->
-      Logger.info("Sending #{key} to #{name} on #{n}")
       send({name, n}, {:sync, [{key, value}]})
     end)
   end