Skip to content

Commit

Permalink
(feat) use server-ref for manager apis
Browse files Browse the repository at this point in the history
Signed-off-by: Ning Sun <sunng@about.me>
  • Loading branch information
sunng87 committed Aug 13, 2017
1 parent ef8931c commit 405ee12
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 35 deletions.
12 changes: 0 additions & 12 deletions src/slacker/manager.clj

This file was deleted.

64 changes: 41 additions & 23 deletions src/slacker/server/cluster.clj
Expand Up @@ -140,29 +140,6 @@
(defn- extract-ns [fn-coll]
(mapcat #(if (map? %) (keys %) [(ns-name %)]) fn-coll))

(defn start-slacker-server
"Start a slacker server to expose all public functions under
a namespace. This function is enhanced for cluster support. You can
supply a zookeeper instance and a cluster name to the :cluster option
to register this server as a node of the cluster."
[fn-coll port & options]
(let [svr (apply slacker.server/start-slacker-server
fn-coll port options)
{:keys [cluster server-data]
:as options} options
fn-coll (if (vector? fn-coll) fn-coll [fn-coll])
funcs (apply merge (map slacker.server/parse-funcs fn-coll))
zk-conn (zk/connect (:zk cluster) options)
zk-data (when-not (nil? cluster)
(with-zk zk-conn
(publish-cluster cluster port (extract-ns fn-coll)
funcs server-data)))]
(zk/register-error-handler zk-conn
(fn [msg e]
(logging/warn e "Unhandled Error" msg)))

(SlackerClusterServer. svr zk-conn zk-data)))

(defn unpublish-ns!
"Unpublish a namespace from zookeeper, which means the service under the
namespace on this server will be offline from client, while we still have
Expand Down Expand Up @@ -214,6 +191,47 @@
(doseq [n leader-selectors]
(try-acquire-leader n))))

(declare stop-slacker-server)
(defn- slacker-manager-api [server-ref]
{"slacker.cluster.manager"
{"offline" (fn [] (unpublish-all! @server-ref))
"offline-ns" (fn [nsname] (unpublish-ns! @server-ref nsname))
"online-ns" (fn [nsname] (publish-ns! @server-ref nsname))
"online" (fn [] (publish-all! @server-ref))
"set-server-data!" (fn [data] (set-server-data! @server-ref data))
"server-data" (fn [] (get-server-data @server-ref))
"shutdown" (fn [] (stop-slacker-server @server-ref))}})

(defn start-slacker-server
"Start a slacker server to expose all public functions under
a namespace. This function is enhanced for cluster support. You can
supply a zookeeper instance and a cluster name to the :cluster option
to register this server as a node of the cluster."
[fn-coll port & options]
(let [svr (apply slacker.server/start-slacker-server
fn-coll port options)
{:keys [cluster server-data manager]
:as options} options
fn-coll (if (vector? fn-coll) fn-coll [fn-coll])
server-ref (when manager (atom nil))
fn-coll (if manager
(conj fn-coll (slacker-manager-api server-ref))
fn-coll)
funcs (apply merge (map slacker.server/parse-funcs fn-coll))
zk-conn (zk/connect (:zk cluster) options)
zk-data (when-not (nil? cluster)
(with-zk zk-conn
(publish-cluster cluster port (extract-ns fn-coll)
funcs server-data)))]
(zk/register-error-handler zk-conn
(fn [msg e]
(logging/warn e "Unhandled Error" msg)))

(let [server (SlackerClusterServer. svr zk-conn zk-data)]
(when server-ref
(reset! server-ref server))
server)))

(defn stop-slacker-server
"Shutdown slacker server, gracefully."
[server]
Expand Down

0 comments on commit 405ee12

Please sign in to comment.