分報チャンネルが社内で話題なので流量を可視化することで仕事の集中度となんかリンクしてるのかなーと思って雑に作りました。 22~0時とかに山がありますがその辺は仕事してるのではなくて帰宅後雑談タイムだなーとかが分かります。
ruby力がなさすぎてrubocopに怒られまくった(;´Д`)
分報チャンネルが社内で話題なので流量を可視化することで仕事の集中度となんかリンクしてるのかなーと思って雑に作りました。 22~0時とかに山がありますがその辺は仕事してるのではなくて帰宅後雑談タイムだなーとかが分かります。
ruby力がなさすぎてrubocopに怒られまくった(;´Д`)
Apache Kafka Meetup Japan #1 at Yahoo! JAPAN - connpass
www.slideshare.net
ザクザクとした発表になりましたが、これからKafkaを導入しようとか今導入してますという人たちにとって役立つ情報になると良いなと思っています。
RAIDについては、カーネルパニックにしちゃえば良いのではという意見も頂き色々進捗しそうです。 Brokerのヘルスチェックと組み合わせてやりたい・・メトリクスの可視化もしたい・・。
Scala研修テキストも公開されているので、 今回のも含めて、お仕事でやっていることが大体外部に公開できていることになりました。
こういう感じでオープンに仕事できるというのは良いことですね₍₍ (ง´・_・`)ว ⁾⁾
ansible.cfgにask_vault_pass = Trueを設定したいけどそうすると必要なとき以外もvaultパスを聞かれてつらいのをなんとか回避する
ansible-vaultで暗号化したファイルをansible-playbookコマンドなどで使いたい場合は
ansible-playbook --ask-vault-pass -i ... site.yml
のように--ask-vault-pass
を指定する必要がありますが、人類なので容易に指定を忘れ、
ERROR: A vault password must be specified to decrypt
のように追い返されたりします。
このようなミスを防ぐためにAnsible Vault を賢く使うで紹介されているようなテクニックが利用できます。
具体的には、ansible.cfg に
[defaults] ask_vault_pass = True
と書くことで、--ask-vault-pass
を指定しなくてもvault passwordが聞かれるようになります。
(vault_password_file=/path/to/password/file
を書くとpassword入力自体もショートカットできますが、
機密情報ファイル管理という別の問題が発生するので今のところ使っていません。)
ところが上記のansible.cfgを設定すると
ansible -i ... all -a "echo hello"
のような暗号化ファイルの復号化が必要ないコマンドに対しても毎回vault-passが聞かれるようになります。 (聞かれるが、decrypt自体は行わないので、"a"とか空白とか入れてもコマンドが実行されるという仕様・・・。)
これが少し面倒なのでansible.cfgに上記設定をいれるか迷っていましたが、
ANSIBLE_ASK_VAULT_PASS= ansible -i ... all -a "echo hello"
のようにansbile.cfgの設定を上書きしてask_vault_pass指定を一時的になかったコトにできるらしいので、暗号化が必要ないコマンドではこれを実行することにしました(若干面倒だけど・・・。)
akka 2.3.13です。
preRestartの中のどの位置でsuper.preRestart(..)
を呼ぶかによって微妙に処理の順番が変わって辛かったのでメモします。
コメントのとおりですが、
最初にsuper.preRestart
を呼ぶとpreStart -> postStop -> preRestart
最後にsuper.preRestart
を呼ぶとpreStart -> preRestart -> postStop
の順番で処理されるようです。
これはclass ActorのpreRestartの実装の中でpostStopメソッドを呼んでいることが原因です。 つまり下記コメントの一でpostStopが呼ばれています。
override def preRestart(reason: Throwable, message: Option[Any]): Unit = { super.preRestart(reason, message) // <-- ここでpostStopが呼ばれている println("preRestart")
当然super.preRestart(..)
の位置をずらしてしまったら先にpreRestartの処理が走ってしまいます(◞‸◟)
さらに選択肢としてはsuper.preRestart
を呼ばないことにより「postStopを処理しない」みたいなことも可能です。
postStopを呼ばない動機はよく分かりませんが、前回の記事で
super.postRestartを呼ばないことによりpreStartを処理しないみたいなパターンが出てきたので、それと同じような応用法があるかもしれません。
言われてみれば当たり前ですがちょっと柔軟すぎる気がするんですがなれたらいい感じなんですかね(´;ω;`)
akka 2.3.13です
KillされたことをテストしたくなったのでググったらEventFilterなるものが出てきました。
Testing Actor Systems — Akka Documentation
なんとログを見て特定の例外ログが出ているかどうかを見るもののようです。ゴリ押してますね。 使い方は公式のとおりなので書くまでもないですが、下のように書けます。
import akka.testkit.EventFilter import com.typesafe.config.ConfigFactory implicit val system = ActorSystem("testsystem", ConfigFactory.parseString(""" akka.loggers = ["akka.testkit.TestEventListener"] """)) try { val actor = system.actorOf(Props.empty) EventFilter[ActorKilledException](occurrences = 1) intercept { actor ! Kill } } finally { shutdown(system) }
ログの設定を設定ファイルでやりたい時はtest/resources/application.conf
などでやればOKです。
Killされたことがテストできたら最高だったのですが、よく考えたら止まっていることがわかればまあいい感じだと気づいたので
Testing Actor Systems — Akka Documentationにあるように
TestProbe
経由でTerminatedを観測してやれば良さそうでした。
val p = TestProbe()
probe watch target
target ! Kill
probe.expectTerminated(target)