Giter Club home page Giter Club logo

vernemq / vernemq Goto Github PK

View Code? Open in Web Editor NEW
3.1K 97.0 385.0 20.01 MB

A distributed MQTT message broker based on Erlang/OTP. Built for high quality & Industrial use cases. The VerneMQ mission is active & the project maintained. Thank you for your support!

Home Page: https://vernemq.com

License: Apache License 2.0

Makefile 0.05% Erlang 95.46% Shell 1.02% C 0.43% Lua 2.27% HTML 0.35% JavaScript 0.32% CSS 0.06% Python 0.04%
mqtt m2m scalable broker erlang distributed messaging pubsub vernemq iot-middleware iot vernemq-users vernemq-documentation industrial-iot industrial-communication industrial-automation industry-40 message-queue manufacturing

vernemq's Introduction

VerneMQ: A Distributed MQTT Broker

Build and Smoketest Status Documentation Maintenance GitHub Release Date GitHub last commit Twitter: VerneMQ VerneMQ on Fosstodon

Google group : VerneMQ Users

Old Docker Repo New Docker Repo
Docker Pulls from Old Repo Docker Pulls from New Repo

New: VerneMQ can now use Github Discussions! To join the discussion on features and roadmap, and be part of the VerneMQ Community Team on Github, send us your Github username for an invite! (on Twitter, Slack etc.)

Make sure to visit the new VerneMQ Forum hosted on Erlang Forums. We're happy to discuss any of your questions and ideas around VerneMQ on the Forum too!


VerneMQ is known to be deployed and used in: ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡จ๐Ÿ‡ฆ ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡ฒ๐Ÿ‡ฝ ๐Ÿ‡ฉ๐Ÿ‡ช ๐Ÿ‡ซ๐Ÿ‡ท ๐Ÿ‡จ๐Ÿ‡ญ ๐Ÿ‡ฉ๐Ÿ‡ฐ ๐Ÿ‡ณ๐Ÿ‡ฑ ๐Ÿ‡ง๐Ÿ‡ช ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ‡ท๐Ÿ‡ด ๐Ÿ‡ต๐Ÿ‡น ๐Ÿ‡ท๐Ÿ‡บ ๐Ÿ‡ฑ๐Ÿ‡น ๐Ÿ‡จ๐Ÿ‡ฟ ๐Ÿ‡ธ๐Ÿ‡ฐ ๐Ÿ‡ฆ๐Ÿ‡น ๐Ÿ‡ต๐Ÿ‡ฑ ๐Ÿ‡ณ๐Ÿ‡ด ๐Ÿ‡ธ๐Ÿ‡ช ๐Ÿ‡ฎ๐Ÿ‡ณ ๐Ÿ‡ฏ๐Ÿ‡ต ๐Ÿ‡ฎ๐Ÿ‡ฉ ๐Ÿ‡ป๐Ÿ‡ณ ๐Ÿ‡ฐ๐Ÿ‡ท ๐Ÿ‡ฟ๐Ÿ‡ฆ ๐Ÿ‡ฐ๐Ÿ‡ช ๐Ÿ‡ท๐Ÿ‡ธ ๐Ÿ‡ญ๐Ÿ‡ท ๐Ÿ‡ฌ๐Ÿ‡ท ๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ‡บ๐Ÿ‡ฆ ๐Ÿ‡ฆ๐Ÿ‡บ ๐Ÿ‡ณ๐Ÿ‡ฟ ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‡ช๐Ÿ‡ฌ ๐Ÿ‡ซ๐Ÿ‡ฎ ๐Ÿ‡ญ๐Ÿ‡บ ๐Ÿ‡ฎ๐Ÿ‡ฑ ๐Ÿ‡ธ๐Ÿ‡ฌ ๐Ÿ‡ฑ๐Ÿ‡ง ๐Ÿ‡ต๐Ÿ‡ญ ๐Ÿ‡ต๐Ÿ‡ฐ ๐Ÿ‡ฒ๐Ÿ‡พ ๐Ÿ‡น๐Ÿ‡ท ๐Ÿ‡น๐Ÿ‡ผ ๐Ÿ‡ฎ๐Ÿ‡ท โ˜๏ธ


VerneMQ Logo

VerneMQ is a high-performance, distributed MQTT message broker. It scales horizontally and vertically on commodity hardware to support a high number of concurrent publishers and consumers while maintaining low latency and fault tolerance. VerneMQ is the reliable message hub for your IoT platform or smart products.

VerneMQ is an Apache2 licensed distributed MQTT broker, developed in Erlang.

MQTT used to stand for MQ Telemetry Transport, but it no longer is an acronym. It is an extremely simple and lightweight publish/subscribe messaging protocol, that was invented at IBM and Arcom (now Eurotech) to connect restricted devices in low bandwidth, high-latency or unreliable networks.

VerneMQ implements the MQTT 3.1, 3.1.1 and 5.0 specifications. Currently the following features are implemented and delivered as part of VerneMQ:

  • QoS 0, QoS 1, QoS 2
  • Basic Authentication and Authorization
  • Bridge Support
  • $SYS Tree for monitoring and reporting
  • TLS (SSL) Encryption
  • Websockets Support
  • Cluster Support
  • Logging (Console, Files, Syslog)
  • Reporting to Graphite
  • Extensible Plugin architecture
  • Multiple Sessions per ClientId
  • Session Balancing
  • Shared subscriptions
  • Message load regulation
  • Message load shedding (for system protection)
  • Offline Message Storage (based on LevelDB)
  • Queue can handle messages FIFO or LIFO style.
  • MongoDB auth & integration
  • Redis auth & integration
  • MySQL auth & integration
  • PostgreSQL auth & integration
  • CockroachDB auth & integration
  • Memcached integration
  • HTTP Webhooks
  • PROXY Protocol v2
  • Administration HTTP API
  • Real-time MQTT session tracing
  • Full multitenancy
  • Cluster status web page

The following features are also applies to MQTT 5.0 clients:

  • Enhanced authentication schemes (AUTH)
  • Message expiration
  • Last Will and Testament delay
  • Shared subscriptions
  • Request/response flow
  • Topic aliases
  • Flow control
  • Subscription flags (Retain as Published, No Local, Retain Handling)
  • Subscriber identifiers
  • All property types are supported: user properties, reason strings, content types etc.

Commercial Support. Binary Packages. Documentation

Below you'll find a basic introduction to building and starting VerneMQ. For more information about the binary package installation, configuration, and administration of VerneMQ, please visit our documentation at VerneMQ Documentation or checkout the product page VerneMQ if you require more information on the available commercial support options.

Community Release Schedule

Next major release: not yet scheduled.

Minor releases: At the end of March, July and November (every 4th month).

Bugfix releases: Usually a bugfix release is released between minor releases or if there's an urgent bugfix pending.

Custom release cycles and releases are available for commercial users.

Quick Start

This section assumes that you have a copy of the VerneMQ source tree. To get started, you need to first build VerneMQ.

Building VerneMQ

Note: VerneMQ requires Erlang/OTP 24-25 and libsnappy-dev installed in your system. You'll also need a C compiler for Eleveldb. (on Debian, you install build-essential, as an example).

Assuming you have a working Erlang installation, building VerneMQ should be as simple as:

$ cd $VERNEMQ
$ make rel

Starting VerneMQ

Once you've successfully built VerneMQ, you can start the server with the following commands:

$ cd $VERNEMQ/_build/default/rel/vernemq
$ bin/vernemq start

If VerneMQ is running it is possible to check the status on http://localhost:8888/status and it should look something like:

Note that the $VERNEMQ/_build/default/rel/vernemq directory is a complete, self-contained instance of VerneMQ and Erlang. It is strongly suggested that you move this directory outside the source tree if you plan to run a production instance.

Important links

Thank you to all our contributors!

contributors

vernemq's People

Contributors

baranga avatar codeadict avatar dcy avatar dependabot[bot] avatar dergraf avatar drf avatar elduds avatar ephe-meral avatar gausby avatar gmalkas avatar ioolkos avatar joskwanten avatar khodzha avatar knopki avatar larshesel avatar manifest avatar marcvanoevelen avatar marianoguerra avatar meistermasi avatar mths1 avatar rbino avatar rubengees avatar sandergarretsen avatar seanwinterberger avatar steve999lee avatar szymonk avatar tsloughter avatar varnerac avatar waffle-iron avatar zmoog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vernemq's Issues

Live update

Hi @dergraf

can you update package repo? I want test, feature live update vernemq.
and on documents installation still version 0.10.1

Ubuntu 12.10 build vernemq from sources

I have server with ubuntu 12.10 installed.
First I built erlang latest (18) version, but I can't build vernemq with it.
Then I removed erlang and installed 17.5 version. Now I can build vernemq, but after build I can't start it. I get this error message:

ubuntu@ip-10-80-162-94:~/vernemq/_build/default/rel/vernemq$ bin/vernemq start
vm.args needs to have a -name parameter.
  -sname is not supported.

Also I can't find any vernemq.conf file.
I tried latest version of vernemq and also 0.10.1 version.
What I'm doing wrong?

Last Will published late

Hi,

When I abruptly disconnect my client, VerneMQ sends the Last Will message a little late, like more than a minute later.

The disconnect is immediate, I think the "last will" should be sent immediately. Is there a configuration for this?

Thanks.

syslog not working

The Erlang syslog driver doesn't get compiled by the build chain and is therefore not included in the release. :(

Connection refused to port 1883

Hi,
I installed vernemq recently.
I installed it on one machine (let's called it broker01), and then run it.
When I try to connect to port 1883 locally from that machine, everything seems normal.
But when I try to connect from another machine, I just got the error message :

Unable to connect to server (32103) - java.net.ConnectException: Connection refused
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:79)
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:590)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70)

I'm sure that I turn off the firewall.
FYI, after I experienced this, I installed mosquitto on broker01 and then try the same thing as I did before, and it works.

Is there anything that I can do to make it works?

Thank you

compile error: snappy_unittest-snappy-test.o

hi there:
i try to compile vernemq from source. gcc version 4.8.4 Ubuntu14.04 64bit.
i install Erlang/OPT from erlang-solutions.com as you suggest. and erl --version says:
Erlang/OTP 17 [erts-6.4] [source-2e19e2f] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

just as you said:
git clone git://github.com/erlio/vernemq.git
cd vernemq
make rel

and then i got the error output:
/home/vagrant/vernemq/rebar3 release --overlay_vars vars.config
===> Verifying dependencies...
===> Compiling eleveldb
make[1]: Entering directory /home/vagrant/vernemq/_build/default/lib/eleveldb/c_src/snappy-1.0.4' make all-am make[2]: Entering directory/home/vagrant/vernemq/_build/default/lib/eleveldb/c_src/snappy-1.0.4'
source='snappy-test.cc' object='snappy_unittest-snappy-test.o' libtool=no
DEPDIR=.deps depmode=none /bin/bash ./depcomp
g++ -DHAVE_CONFIG_H -I. -c -o snappy_unittest-snappy-test.o test -f 'snappy-test.cc' || echo './'snappy-test.cc
snappy-test.cc:82:15: error: aggregate โ€˜snappy::rusage snappy::benchmark_start_cpuโ€™ has incomplete type and cannot be defined
struct rusage benchmark_start_cpu;
^
snappy-test.cc: In function โ€˜void snappy::StartBenchmarkTiming()โ€™:
snappy-test.cc:93:17: error: โ€˜RUSAGE_SELFโ€™ was not declared in this scope
if (getrusage(RUSAGE_SELF, &benchmark_start_cpu) == -1) {
^
snappy-test.cc:93:50: error: โ€˜getrusageโ€™ was not declared in this scope
if (getrusage(RUSAGE_SELF, &benchmark_start_cpu) == -1) {
^
snappy-test.cc: In function โ€˜void snappy::StopBenchmarkTiming()โ€™:
snappy-test.cc:139:17: error: aggregate โ€˜snappy::rusage benchmark_stop_cpuโ€™ has incomplete type and cannot be defined
struct rusage benchmark_stop_cpu;
^
snappy-test.cc:140:17: error: โ€˜RUSAGE_SELFโ€™ was not declared in this scope
if (getrusage(RUSAGE_SELF, &benchmark_stop_cpu) == -1) {
^
snappy-test.cc:140:49: error: โ€˜getrusageโ€™ was not declared in this scope
if (getrusage(RUSAGE_SELF, &benchmark_stop_cpu) == -1) {
^
make[2]: *** [snappy_unittest-snappy-test.o] Error 1
make[2]: Leaving directory /home/vagrant/vernemq/_build/default/lib/eleveldb/c_src/snappy-1.0.4' make[1]: *** [all] Error 2 make[1]: Leaving directory/home/vagrant/vernemq/_build/default/lib/eleveldb/c_src/snappy-1.0.4'
===> Hook for compile failed!

make: *** [rel] Error 1

thanks.

Allow non-interactive foreground launch

I'm wanting to run VerneMQ in a docker container (or as a systemd service) and the launch options aren't entirely conducive to this.

Specifically, it would be nice to force all logging to go to the console and to keep the VerneMQ process in the foreground with a non-interactive console - since both these two systems take care of log collection via that mechanism.

vmq_systree dosen't publish any $SYS messages.

The setting of sys_interval in vernemq.conf is 10 by default.
Client subscribes '$SYS/clients/total' or other metric in vmq_systree, but got nothing.
Subscriptions of custom topics are working fine.

Broker's os is CentOS 6.7 64bit.

vernemq takes 100% CPU -- restart doesn't help

After doing some load tests, I managed to get my vernemq server into a state where it always takes 100% CPU (beam.smp process), even when virtually no clients are connected. Once in this state, restarting the server (sudo vernemq restart) doesn't help. I then stopped the server (sudo vernemq stop) and noticed that there is still a vernemq process running (/usr/lib/vernemq/erts-6.4/bin/epmd -daemon). So I killed that one manually and started the server (sudo vernemq start). Same situation with 100% CPU while no connected clients. While in this state, clients have difficulties in connecting to the server but can still send some messages. Note that my load is not that high and I send all message with qos = 0 so theoretically the server should be able to drop all of it.

I have lots of stuff in the logs (crash.log, error.log, etc). E-mail me if you want them (I'd rather not post them here as they contain parts of the messages I sent).

auth plugin for SQL databases?

Is there any auth plug for SQL databases, such as postgresql, mysql, couchbase, and even mongodb.

Because with username/password stored only in a file that is so insecure.

the table for user credentials may look like this:

username | password
someone | 342EWRfsdofuik.qewr#@%@$

The password is encrypted. In the auth plug should be a procedure of encryption when comparing two hashed passwords.

I haven't found any for vernemq yet.

Auto restart

Hi @dergraf ,
How detect VerneMQ is crash or down?
I have usecase for autorestart service if VerneMQ down or just error.

can't load acl file "./etc/vmq.acl" due to emfile ?

tow vernemq cluster, one print "can't load acl file "./etc/vmq.acl" due to emfile" and

11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[sockets,last_30sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[sockets,last_10sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[connects,received,last_sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[connects,received,last_min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[connects,received,last_5min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[connects,received,last_30sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[connects,received,last_10sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,sent,last_sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,sent,last_min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,sent,last_5min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,sent,last_30sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,sent,last_10sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,received,last_sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,received,last_min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,received,last_5min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,received,last_30sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,received,last_10sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,dropped,last_sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,dropped,last_min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,dropped,last_5min],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,dropped,last_30sec],value,false,[]})
11:13:45.437 [error] No such subscriber (Key={key,vmq_report_systree,[cluster,bytes,dropped,last_10sec],value,false,[]})
11:13:45.439 [error] No such subscriber (Key={key,vmq_report_systree,[sockets,last_sec],value,false,[]})
11:13:45.519 [error] No such subscriber (Key={key,vmq_report_systree,[sockets,last_min],value,false,[]})

11:13:45.519 [error] No such subscriber (Key={key,vmq_report_systree,[sockets,last_5min],value,false,[]})

11:13:35.436 [error] CRASH REPORT Process vmq_report_systree with 2 neighbours crashed with reason: no case clause matching false in vmq_reg:publish/1 line 282
11:13:35.436 [info] Systree Reporter initialized; Opts: []
11:13:35.438 [error] CRASH REPORT Process vmq_report_systree with 2 neighbours crashed with reason: no case clause matching false in vmq_reg:publish/1 line 282
11:13:35.438 [info] Systree Reporter initialized; Opts: []

11:13:35.439 [error] CRASH REPORT Process vmq_report_systree with 2 neighbours crashed with reason: no case clause matching false in vmq_reg:publish/1 line 282

how can i do?

Plans for ACL?

Hi there,

VerneMQ looks interesting and promising. Are there any plans to include ACL functionality, to allow access control to specific topics?

Preferably implemented with hooks to external scripts or executables so I could e.g run a Python script to check for access when someone publish or subscribe to a topic.

Suggestion:
The hooks would provide: user, topic and action (subscribe/publish or alternatively one hook per action)
The script would send back: True/False
For publish: Broker would ignore message on False
For subscribe: Broker would cut connection on False

I'd write a plugin myself but I don't know Erlang (yet). ;)

Thanks

graphite metrics not being emitted

Using the out of the box configuration, and this configuration file, I can't see graphite metrics being emitted on TCP or UDP port 9109 to localhost (the configured port).

## Allow anonymous users to connect, default is 'off'
## 
## Default: off
## 
## Acceptable values:
##   - on or off
allow_anonymous = on

## Allow operation even when a VerneMQ cluster is inconsistent,
## by removing consistency checks while registering new
## clients or subscribing/unsubscribing from topics
## 
## Default: off
## 
## Acceptable values:
##   - on or off
trade_consistency = off

## Allows a client to logon multiple times using the same client id
## (non-standard behaviour!).
## 
## Default: off
## 
## Acceptable values:
##   - on or off
allow_multiple_sessions = off

## Set the time in seconds VerneMQ waits before a retry, in case a (QoS=1 or QoS=2) message
## delivery gets no answer.
## 
## Default: 20
## 
## Acceptable values:
##   - an integer
## retry_interval = 20

## Set the maximum size for client IDs. MQTT v3.1 specifies a
## limit of 23 characters
## 
## Default: 23
## 
## Acceptable values:
##   - an integer
## max_client_id_size = 23

## This option allows persistent clients ( = clean session set to
## false) to be removed if they do not reconnect within 'persistent_client_expiration'.
## This is a non-standard option. As far as the MQTT specification is concerned,
## persistent clients persist forever.
## The expiration period should be an integer followed by one of 'd', 'w', 'm', 'y' for
## day, week, month, and year.
## 
## Default: never
## 
## Acceptable values:
##   - text
## persistent_client_expiration = 1w

## The maximum number of QoS 1 or 2 messages that can be in the process of being
## transmitted simultaneously. This includes messages currently going through handshakes
## and messages that are being retried. Defaults to 20. Set to 0 for no maximum. If set
## to 1, this will guarantee in-order delivery of messages.
## 
## Default: 20
## 
## Acceptable values:
##   - an integer
max_inflight_messages = 20

## The maximum number of messages to hold in the queue above
## those messages that are currently in flight. Defaults to 1000. Set to 0 for
## no maximum (not recommended). This option allows to control how a specific
## client session can deal with message bursts. As a general rule of thumb set
## this number a bit higher than the expected message rate a single consumer is
## required to process.
## 
## Default: 1000
## 
## Acceptable values:
##   - an integer
max_online_messages = 1000

## The maximum number of QoS 1 or 2 messages to hold in the offline queue.
## Defaults to 1000. Set to -1 for no maximum (not recommended). Set to 0
## if no messages should be stored offline.
## 
## Default: 1000
## 
## Acceptable values:
##   - an integer
max_offline_messages = 1000

## This option sets the maximum payload size that VerneMQ will allow for publishers.
## Messages that exceed this size will not be accepted by VerneMQ. The
## default value is 0, which means that all valid MQTT messages are accepted. MQTT
## imposes a maximum payload size of 268435455 bytes.
## 
## Default: 0
## 
## Acceptable values:
##   - an integer
message_size_limit = 0

## If a message is published with a QoS lower than the QoS of the subscription it is
## delivered to, VerneMQ can upgrade the outgoing QoS. This is a non-standard option.
## 
## Default: off
## 
## Acceptable values:
##   - on or off
upgrade_outgoing_qos = off

## listener.max_connections is an integer or 'infinity' defining
## the maximum number of concurrent connections. This option can be overridden
## on the protocol level by:
## - listener.tcp.max_connections
## - listener.ssl.max_connections
## - listener.ws.max_connections
## - listener.wss.max_connections
## or on the listener level by:
## - listener.tcp.my_tcp_listener.max_connections
## - listener.ssl.my_ssl_listener.max_connections
## - listener.ws.my_ws_listener.max_connections
## - listener.wss.my_wss_listener.max_connections
## 
## Default: 10000
## 
## Acceptable values:
##   - an integer
##   - the text "infinity"
listener.max_connections = 10000

## Set the nr of acceptors waiting to concurrently accept new connections.
## This can be specified either on the protocol level:
## - listener.tcp.nr_of_acceptors
## - listener.ssl.nr_of_acceptors
## - listener.ws.nr_of_acceptors
## - listener.wss.nr_of_acceptors
## or on the listener level:
## - listener.tcp.my_tcp_listener.nr_of_acceptors
## - listener.ssl.my_ssl_listener.nr_of_acceptors
## - listener.ws.my_ws_listener.nr_of_acceptors
## - listener.wss.my_wss_listener.nr_of_acceptors
## 
## Default: 10
## 
## Acceptable values:
##   - an integer
listener.nr_of_acceptors = 10

## listener.tcp.<name> is an IP address and TCP port that
## the broker will bind to. You can define multiple listeners e.g:
## - listener.tcp.default = 127.0.0.1:1883
## - listener.tcp.internal = 127.0.0.1:10883
## - listener.tcp.my_other_listener = 127.0.0.1:10884
## This also works for SSL listeners and WebSocket handlers:
## - listener.ssl.default = 127.0.0.1:8883
## - listener.ws.default = 127.0.0.1:800
## - listener.wss.default = 127.0.0.1:880
## 
## Default: 127.0.0.1:1883
## 
## Acceptable values:
##   - an IP/port pair, e.g. 127.0.0.1:10011
listener.tcp.default = 0.0.0.0:1883

## listener.vmq.clustering is the IP address and TCP port that
## the broker will bind to accept connections from other cluster
## nodes e.g:
## - listener.vmq.clustering = 0.0.0.0:18883
## This also works for SSL listeners:
## - listener.vmqs.clustering = 0.0.0.0:18884
## 
## Default: 0.0.0.0:44053
## 
## Acceptable values:
##   - an IP/port pair, e.g. 127.0.0.1:10011
listener.vmq.clustering = 0.0.0.0:44053

## Set the mountpoint on the protocol level or on the listener level
## - listener.tcp.mountpoint
## - listener.ssl.mountpoint
## - listener.ws.mountpoint
## - listener.wss.mountpoint
## listener level:
## - listener.tcp.my_tcp_listener.mountpoint
## - listener.ssl.my_ssl_listener.mountpoint
## - listener.ws.my_ws_listener.mountpoint
## - listener.wss.my_wss_listener.mountpoint
## 
## Default: off
## 
## Acceptable values:
##   - text
listener.mountpoint = off

## The cafile is used to define the path to a file containing
## the PEM encoded CA certificates that are trusted. Set the cafile
## on the protocol level or on the listener level:
## - listener.ssl.cafile
## - listener.wss.cafile
## or on the listener level:
## - listener.ssl.my_ssl_listener.cafile
## - listener.wss.my_wss_listener.cafile
## 
## Default: 
## 
## Acceptable values:
##   - the path to a file
## listener.ssl.cafile = ./etc/cacerts.pem

## Set the path to the PEM encoded server certificate
## on the protocol level or on the listener level:
## - listener.ssl.certfile
## - listener.wss.certfile
## or on the listener level:
## - listener.ssl.my_ssl_listener.certfile
## - listener.wss.my_wss_listener.certfile
## 
## Default: 
## 
## Acceptable values:
##   - the path to a file
## listener.ssl.certfile = ./etc/cert.pem

## Set the path to the PEM encoded key file on the protocol
## level or on the listener level:
## - listener.ssl.keyfile
## - listener.wss.keyfile
## or on the listener level:
## - listener.ssl.my_ssl_listener.keyfile
## - listener.wss.my_wss_listener.keyfile
## 
## Default: 
## 
## Acceptable values:
##   - the path to a file
## listener.ssl.keyfile = ./etc/key.pem

## Set the list of allowed ciphers (each separated with a colon),
## on the protocol level or on the listener level. Reasonable defaults
## are used if nothing is specified:
## - listener.ssl.ciphers
## - listener.wss.ciphers
## or on the listener level:
## - listener.ssl.my_ssl_listener.ciphers
## - listener.wss.my_wss_listener.ciphers
## 
## Default: 
## 
## Acceptable values:
##   - text
## listener.ssl.ciphers = 

## If you have 'listener.ssl.require_certificate' set to true,
## you can create a certificate revocation list file to revoke access
## to particular client certificates. If you have done this, use crlfile
## to point to the PEM encoded revocation file. This can be done on the
## protocol level or on the listener level.
## - listener.ssl.crlfile
## - listener.wss.crlfile
## or on the listener level:
## - listener.ssl.my_ssl_listener.crlfile
## - listener.wss.my_wss_listener.crlfile
## 
## Default: 
## 
## Acceptable values:
##   - text
## listener.ssl.crlfile = 

## Enable this option if you want to use SSL client certificates
## to authenticate your clients. This can be done on the protocol level
## or on the listener level.
## - listener.ssl.require_certificate
## - listener.wss.require_certificate
## or on the listener level:
## - listener.ssl.my_ssl_listener.require_certificate
## - listener.wss.my_wss_listener.require_certificate
## 
## Default: off
## 
## Acceptable values:
##   - on or off
## listener.ssl.require_certificate = off

## Configure the TLS protocol version (tlsv1, tlsv1.1, or tlsv1.2) to be
## used for either all configured SSL listeners or for a specific listener:
## - listener.ssl.tls_version
## - listener.wss.tls_version
## or on the listener level:
## - listener.ssl.my_ssl_listener.tls_version
## - listener.wss.my_wss_listener.tls_version
## 
## Default: tlsv1.2
## 
## Acceptable values:
##   - text
## listener.ssl.tls_version = tlsv1.2

## If 'listener.ssl.require_certificate' is enabled, you may enable
## 'listener.ssl.use_identity_as_username' to use the CN value from the client
## certificate as a username. If enabled other authentication plugins are not
## considered. The option can be specified either for all SSL listeners or for
## a specific listener:
## - listener.ssl.use_identity_as_username
## - listener.wss.use_identity_as_username
## or on the listener level:
## - listener.ssl.my_ssl_listener.use_identity_as_username
## - listener.wss.my_wss_listener.use_identity_as_username
## 
## Default: off
## 
## Acceptable values:
##   - on or off
## listener.ssl.use_identity_as_username = off

## Set the path to an access control list file.
## 
## Default: ./etc/vmq.acl
## 
## Acceptable values:
##   - the path to a file
acl_file = ./etc/vmq.acl

## set the acl reload interval in seconds, the value 0 disables the
## automatic reloading of the acl file.
## 
## Default: 10
## 
## Acceptable values:
##   - an integer
acl_reload_interval = 10

## Set the path to a password file.
## 
## Default: ./etc/vmq.passwd
## 
## Acceptable values:
##   - the path to a file
password_file = ./etc/vmq.passwd

## set the password reload interval in seconds, the value 0 disables the
## automatic reloading of the password file.
## 
## Default: 10
## 
## Acceptable values:
##   - an integer
password_reload_interval = 10

## Specify the address and port of the bridge to connect to. Several
## bridges can configured by using different bridge names (e.g. br0). If the
## connection supports SSL encryption bridge.ssl.<name> can be used.
## 
## Default: 127.0.0.1:1889
## 
## Acceptable values:
##   - an IP/port pair, e.g. 127.0.0.1:10011
## bridge.tcp.br0 = 127.0.0.1:1889

## Set the clean session option for the bridge. By default this is disabled,
## which means that all subscriptions on the remote broker are kept in case of
## the network connection dropping. If enabled, all subscriptions and messages
## on the remote broker will be cleaned up if the connection drops.
## 
## Default: off
## 
## Acceptable values:
##   - on or off
## bridge.tcp.br0.cleansession = off

## Set the client id for this bridge connection. If not defined, this
## defaults to 'name.hostname', where name is the connection name and hostname
## is the hostname of this computer.
## 
## Default: auto
## 
## Acceptable values:
##   - text
## bridge.tcp.br0.client_id = auto

## Set the number of seconds after which the bridge should send a ping if
## no other traffic has occurred.
## 
## Default: 60
## 
## Acceptable values:
##   - an integer
## bridge.tcp.br0.keepalive_interval = 60

## Configure a username for the bridge. This is used for authentication
## purposes when connecting to a broker that support MQTT v3.1 and requires a
## username and/or password to connect. See also the password option.
## 
## Acceptable values:
##   - text
## bridge.tcp.br0.username = my_remote_user

## Configure a password for the bridge. This is used for authentication
## purposes when connecting to a broker that support MQTT v3.1 and requires a
## username and/or password to connect. This option is only valid if a username
## is also supplied.
## 
## Acceptable values:
##   - text
## bridge.tcp.br0.password = my_remote_password

## Set the amount of time a bridge using the automatic start type will wait
## until attempting to reconnect. Defaults to 30 seconds.
## 
## Default: 10
## 
## Acceptable values:
##   - an integer
## bridge.tcp.br0.restart_timeout = 10

## If try_private is enabled, the bridge will attempt to indicate to the
## remote broker that it is a bridge not an ordinary client.
## Note that loop detection for bridges is not yet implemented.
## 
## Default: on
## 
## Acceptable values:
##   - on or off
## bridge.tcp.br0.try_private = on

## The cafile is used to define the path to a file containing
## the PEM encoded CA certificates that are trusted.
## 
## Default: 
## 
## Acceptable values:
##   - the path to a file
## bridge.ssl.sbr0.cafile = ./etc/cacerts.pem

## Define the path to a folder containing
## the PEM encoded CA certificates that are trusted.
## 
## Default: 
## 
## Acceptable values:
##   - the path to a file
## bridge.ssl.sbr0.capath = ./etc/cacerts

## Set the path to the PEM encoded server certificate.
## 
## Default: 
## 
## Acceptable values:
##   - the path to a file
## bridge.ssl.sbr0.certfile = ./etc/cert.pem

## Set the path to the PEM encoded key file.
## 
## Default: 
## 
## Acceptable values:
##   - the path to a file
## bridge.ssl.sbr0.keyfile = ./etc/key.pem

## When using certificate based TLS, the bridge will attempt to verify the
## hostname provided in the remote certificate matches the host/address being
## connected to. This may cause problems in testing scenarios, so this option
## may be enabled to disable the hostname verification.
## Setting this option to true means that a malicious third party could
## potentially inpersonate your server, so it should always be disabled in
## production environments.
## 
## Default: off
## 
## Acceptable values:
##   - on or off
## bridge.ssl.sbr0.insecure = off

## Configure the TLS protocol version (tlsv1, tlsv1.1, or tlsv1.2) to be
## used for this bridge.
## 
## Default: tlsv1.2
## 
## Acceptable values:
##   - text
## bridge.ssl.sbr0.tls_version = tlsv1.2

## Pre-shared-key encryption provides an alternative to certificate based
## encryption. This option specifies the identity used.
## 
## Default: 
## 
## Acceptable values:
##   - text
## bridge.ssl.sbr0.identity = 

## Pre-shared-key encryption provides an alternative to certificate based
## encryption. This option specifies the shared secret used in hexadecimal
## format without leading '0x'.
## 
## Default: 
## 
## Acceptable values:
##   - text
## bridge.ssl.sbr0.psk = 

## The integer number of seconds between updates of the $SYS subscription hierarchy,
## which provides status information about the broker. If unset, defaults to 10 seconds.
## Set to 0 to disable publishing the $SYS hierarchy completely.
## 
## Default: 10
## 
## Acceptable values:
##   - an integer
sys_interval = 10

## the interval we push metrics to the graphite server in ms
## 
## Default: 15000
## 
## Acceptable values:
##   - an integer
graphite.interval = 10000

## set the prefix that is applied to all metrics reported to graphite
## 
## Default: vernemq
## 
## Acceptable values:
##   - text
graphite.prefix = vernemq

## the tcp port of the graphite server
## 
## Default: 2003
## 
## Acceptable values:
##   - an integer
graphite.port = 9109

## the graphite server host name
## 
## Default: carbon.hostedgraphite.com
## 
## Acceptable values:
##   - text
graphite.host = localhost

## the graphite server api key
## 
## Default: UNDEFINED
## 
## Acceptable values:
##   - text
graphite.api_key = UNDEFINED

## Where to emit the default log messages (typically at 'info'
## severity):
## off: disabled
## file: the file specified by log.console.file
## console: to standard output (seen when using `vmq attach-direct`)
## both: log.console.file and standard out.
## 
## Default: file
## 
## Acceptable values:
##   - one of: off, file, console, both
log.console = file

## The severity level of the console log, default is 'info'.
## 
## Default: info
## 
## Acceptable values:
##   - one of: debug, info, warning, error
log.console.level = info

## When 'log.console' is set to 'file' or 'both', the file where
## console messages will be logged.
## 
## Default: ./log/console.log
## 
## Acceptable values:
##   - the path to a file
log.console.file = ./log/console.log

## The file where error messages will be logged.
## 
## Default: ./log/error.log
## 
## Acceptable values:
##   - the path to a file
log.error.file = ./log/error.log

## When set to 'on', enables log output to syslog.
## 
## Default: off
## 
## Acceptable values:
##   - on or off
log.syslog = off

## Whether to enable the crash log.
## 
## Default: on
## 
## Acceptable values:
##   - on or off
log.crash = on

## If the crash log is enabled, the file where its messages will
## be written.
## 
## Default: ./log/crash.log
## 
## Acceptable values:
##   - the path to a file
log.crash.file = ./log/crash.log

## Maximum size in bytes of individual messages in the crash log
## 
## Default: 64KB
## 
## Acceptable values:
##   - a byte size with units, e.g. 10GB
log.crash.maximum_message_size = 64KB

## Maximum size of the crash log in bytes, before it is rotated
## 
## Default: 10MB
## 
## Acceptable values:
##   - a byte size with units, e.g. 10GB
log.crash.size = 10MB

## The schedule on which to rotate the crash log. For more
## information see:
## https://github.com/basho/lager/blob/master/README.md#internal-log-rotation
## 
## Default: $D0
## 
## Acceptable values:
##   - text
log.crash.rotation = $D0

## The number of rotated crash logs to keep. When set to
## 'current', only the current open log file is kept.
## 
## Default: 5
## 
## Acceptable values:
##   - an integer
##   - the text "current"
log.crash.rotation.keep = current

## Name of the Erlang node
## 
## Default: [email protected]
## 
## Acceptable values:
##   - text
nodename = [email protected]

## Cookie for distributed node communication. All nodes in the
## same cluster should use the same cookie or they will not be able to
## communicate.
## 
## Default: vmq
## 
## Acceptable values:
##   - text
distributed_cookie = vmq

## Sets the number of threads in async thread pool, valid range
## is 0-1024. If thread support is available, the default is 64.
## More information at: http://erlang.org/doc/man/erl.html
## 
## Default: 64
## 
## Acceptable values:
##   - an integer
erlang.async_threads = 64

## The number of concurrent ports/sockets
## Valid range is 1024-134217727
## 
## Default: 65536
## 
## Acceptable values:
##   - an integer
erlang.max_ports = 65536

## Set scheduler forced wakeup interval. All run queues will be
## scanned each Interval milliseconds. While there are sleeping
## schedulers in the system, one scheduler will be woken for each
## non-empty run queue found. An Interval of zero disables this
## feature, which also is the default.
## This feature is a workaround for lengthy executing native code, and
## native code that do not bump reductions properly.
## More information: http://www.erlang.org/doc/man/erl.html#+sfwi
## 
## Acceptable values:
##   - an integer
## erlang.schedulers.force_wakeup_interval = 500

## Enable or disable scheduler compaction of load. By default
## scheduler compaction of load is enabled. When enabled, load
## balancing will strive for a load distribution which causes as many
## scheduler threads as possible to be fully loaded (i.e., not run out
## of work). This is accomplished by migrating load (e.g. runnable
## processes) into a smaller set of schedulers when schedulers
## frequently run out of work. When disabled, the frequency with which
## schedulers run out of work will not be taken into account by the
## load balancing logic.
## More information: http://www.erlang.org/doc/man/erl.html#+scl
## 
## Acceptable values:
##   - one of: true, false
## erlang.schedulers.compaction_of_load = false

## Enable or disable scheduler utilization balancing of load. By
## default scheduler utilization balancing is disabled and instead
## scheduler compaction of load is enabled which will strive for a
## load distribution which causes as many scheduler threads as
## possible to be fully loaded (i.e., not run out of work). When
## scheduler utilization balancing is enabled the system will instead
## try to balance scheduler utilization between schedulers. That is,
## strive for equal scheduler utilization on all schedulers.
## More information: http://www.erlang.org/doc/man/erl.html#+sub
## 
## Acceptable values:
##   - one of: true, false
## erlang.schedulers.utilization_balancing = true

Compiling vernemq fails on Raspberry PI Archlinux

Hi,

I have a problem compiling vernemq on Raspberry, the problem seems related to leveldb;

make[1]: Entering directory '/tmp/vernemq/_build/default/lib/eleveldb/c_src'
g++ -O3 -finline-functions -Wall -fPIC -I /usr/lib/erlang/erts-7.0/include/ -I /usr/lib/erlang/lib/erl_interface-3.8/include -I leveldb/include  -c -o /tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.o /tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc
/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc: In function 'ERL_NIF_TERM parse_init_option(ErlNifEnv*, ERL_NIF_TERM, EleveldbOptions&)':
/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc:244:58: error: invalid conversion from 'size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive]
             if (enif_get_ulong(env, option[1], &memory_sz))
                                                          ^
In file included from /tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.h:27:0,
                 from /tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc:35:
/usr/lib/erlang/erts-7.0/include/erl_nif_api_funcs.h:44:27: note:   initializing argument 3 of 'int enif_get_ulong(ErlNifEnv*, ERL_NIF_TERM, long unsigned int*)'
 ERL_NIF_API_FUNC_DECL(int,enif_get_ulong,(ErlNifEnv*, ERL_NIF_TERM term, unsigned long* ip));
                           ^
/usr/lib/erlang/erts-7.0/include/erl_nif.h:246:71: note: in definition of macro 'ERL_NIF_API_FUNC_DECL'
 #  define ERL_NIF_API_FUNC_DECL(RET_TYPE, NAME, ARGS) extern RET_TYPE NAME ARGS
                                                                       ^
/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc: In function 'ERL_NIF_TERM parse_open_option(ErlNifEnv*, ERL_NIF_TERM, leveldb::Options&)':
/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc:332:58: error: invalid conversion from 'size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive]
             if (enif_get_ulong(env, option[1], &memory_sz))
                                                          ^
In file included from /tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.h:27:0,
                 from /tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc:35:
/usr/lib/erlang/erts-7.0/include/erl_nif_api_funcs.h:44:27: note:   initializing argument 3 of 'int enif_get_ulong(ErlNifEnv*, ERL_NIF_TERM, long unsigned int*)'
 ERL_NIF_API_FUNC_DECL(int,enif_get_ulong,(ErlNifEnv*, ERL_NIF_TERM term, unsigned long* ip));
                           ^
/usr/lib/erlang/erts-7.0/include/erl_nif.h:246:71: note: in definition of macro 'ERL_NIF_API_FUNC_DECL'
 #  define ERL_NIF_API_FUNC_DECL(RET_TYPE, NAME, ARGS) extern RET_TYPE NAME ARGS
                                                                       ^
/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc: In function 'ERL_NIF_TERM eleveldb::async_open(ErlNifEnv*, int, const ERL_NIF_TERM*)':
/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc:584:24: warning: integer overflow in expression [-Woverflow]
         if (8*1024*1024*1024L < gCurrentTotalMemory)
                        ^
Makefile:65: recipe for target '/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.o' failed
make[1]: *** [/tmp/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.o] Error 1
make[1]: Leaving directory '/tmp/vernemq/_build/default/lib/eleveldb/c_src'
===> Hook for compile failed!

Makefile:56: recipe for target 'rel' failed
make: *** [rel] Error 1

Versions:

[root@alarmpi vernemq]# erl --versionErlang/OTP 18 [erts-7.0] [source] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]Eshell V7.0  (abort with ^G)

Is this code related or am I missing libraries etc?

Cluster is not ready

I start two nodes, but i cannot publish message to broker due to this.
<0.2665.0>@vmq_session:check_user:747 can't register client {[],"mosq_pub_15760_ubuntu"} due to reason not_ready

Why cluster node is not ready for service?

If i change nodename to default setting: [email protected] , the node can service "publish" command.
But it can not do cluster function.

Mac.Lee

Cannot compile 0.10.1

Trying to compile the 0.10.1 tag fails with the following message:

===> Compiling edown
===> Compiling /home/user/tmp/vernemq/_build/default/lib/edown/src/edown_doclet.erl failed
/home/user/tmp/vernemq/_build/default/lib/edown/src/edown_doclet.erl:116: field packages undefined in record doclet_gen
/home/user/tmp/vernemq/_build/default/lib/edown/src/edown_doclet.erl:118: field filemap undefined in record doclet_gen

make: *** [rel] Error 1

In case it helps, compilation was being made in an Ubuntu 14.04 box with

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]

Missing beam file - make rel on OSX

MacBookAir:vernemq ckrey$ make dist
mkdir distdir && git clone . distdir/vernemq-clone && cd distdir/vernemq-clone && git checkout 0.9.4-55-ga8d09d6 && /Applications/Xcode.app/Contents/Developer/usr/bin/make install_deps && echo "- Dependencies and their tags at build time of vernemq at 0.9.4-55-ga8d09d6" > dependency_manifest.git && cd _build/default && for dep in lib/*; do cd ${dep} && printf "${dep} version `git describe --long --tags 2>/dev/null || git rev-parse HEAD`\n" >> ../../../../dependency_manifest.git && cd ../..; done && cd ../.. && LC_ALL=POSIX && export LC_ALL && sort dependency_manifest.git > dependency_manifest.git.tmp && mv dependency_manifest.git.tmp dependency_manifest.git;
Cloning into 'distdir/vernemq-clone'...
done.
Note: checking out '0.9.4-55-ga8d09d6'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at a8d09d6... upgraded node_package
/Users/ckrey/vernemq/rebar3 install_deps
===> Fetching rebar3_cuttlefish ({git,
                                         "git://github.com/tsloughter/rebar3_cuttlefish.git",
                                         {branch,"master"}})
===> Fetching cuttlefish ({git,"git://github.com/tsloughter/cuttlefish",
                                      {branch,"develop"}})
===> Fetching getopt ({git,"git://github.com/jcomellas/getopt.git",
                                 {ref,
                                     "659a28f4145bc9843598972854299dc4ea77e4cb"}})
===> Fetching lager ({git,"git://github.com/basho/lager.git",
                                 {ref,"d33ccf3b69de09a628fe38b4d7981bb8671b8a4f"}})
===> Fetching neotoma ({git,"git://github.com/seancribbs/neotoma.git",
                                  {ref,
                                      "760928ec8870da02eb11bccb501e2700925d06c6"}})
===> Fetching goldrush ({git,"git://github.com/DeadZen/goldrush.git",
                                   {ref,
                                       "71e63212f12c25827e0c1b4198d37d5d018a7fec"}})
===> Compiling neotoma
===> Compiling goldrush
===> Compiling lager
===> Compiling getopt
===> Compiling cuttlefish
===> Building escript...
===> Compiling rebar3_cuttlefish
===> Verifying dependencies...
===> Fetching cuttlefish ({git,
                                  "git://github.com/tsloughter/cuttlefish.git",
                                  {ref,
                                   "f5f6fdc1b0dd8ebe909b81f0b38f5715d4e869e6"}})
===> Fetching eper ({git,"https://github.com/massemanet/eper.git",
                                {ref,"55e3f69df5e3bcb74b42d2ba056c076298ed6ea7"}})
===> Fetching lager_syslog ({git,
                                    "git://github.com/basho/lager_syslog.git",
                                    {ref,
                                     "fa2e7e3daee0d0a59dadb820fd3381eac4a65770"}})
===> Fetching node_package ({git,
                                    "git://github.com/dergraf/node_package.git",
                                    {ref,
                                     "ddf2281e687d0772eb65f0a56bbf94649ec9c216"}})
===> Fetching recon ({git,"git://github.com/ferd/recon.git",
                                 {ref,"3578fa86ad408d98e0512ded0b2f2c5b834a84ad"}})
===> Fetching vmq_acl ({git,"git://github.com/erlio/vmq_acl.git",
                                  {ref,
                                      "08fe942c85ab8c4154c1ba44f2ba907ef3ed1826"}})
===> Fetching vmq_bridge ({git,
                                  "git://github.com/erlio/vmq_bridge.git",
                                  {ref,
                                   "8a06b84b0b9c248e20934076bb8409c71fbc7a70"}})
===> Fetching vmq_commons ({git,
                                   "git://github.com/erlio/vmq_commons.git",
                                   {ref,
                                    "bb437da5a7c841983cf005dded63d29f8f635cd0"}})
===> Fetching vmq_graphite ({git,
                                    "git://github.com/erlio/vmq_graphite.git",
                                    {ref,
                                     "620070a6799341a43b395bcb24f288656e122a65"}})
===> Fetching vmq_passwd ({git,
                                  "git://github.com/erlio/vmq_passwd.git",
                                  {ref,
                                   "ac403d69305f4ff916bbe0a5fa046378a4636c54"}})
===> Fetching vmq_server ({git,
                                  "git://github.com/erlio/vmq_server.git",
                                  {ref,
                                   "50356d59a236433b9fcd6a33ecfa0fedf5bc4e5e"}})
===> Fetching vmq_snmp ({git,"git://github.com/erlio/vmq_snmp.git",
                                   {ref,
                                       "fcecbb15d1095f89cb4eb7b223cdd4933aaa879b"}})
===> Fetching vmq_systree ({git,
                                   "git://github.com/erlio/vmq_systree.git",
                                   {ref,
                                    "73b7ffc495de0b6d949747eafb5653abc189d040"}})
===> Fetching clique ({git,"git://github.com/basho/clique.git",
                                  {tag,"0.2.5"}})
===> Fetching cowboy ({git,"git://github.com/ninenines/cowboy.git",
                                  {tag,"2.0.0-pre.1"}})
===> Fetching epmdpxy ({git,"git://github.com/dergraf/epmdpxy",
                                   {branch,"master"}})
===> Fetching exometer_core ({git,
                                     "git://github.com/Feuerlabs/exometer_core.git",
                                     {tag,"1.2"}})
===> Fetching getopt ({git,"git://github.com/jcomellas/getopt.git",
                                  {tag,"v0.4.3"}})
===> Fetching jobs ({git,"git://github.com/uwiger/jobs.git",
                                {tag,"0.3"}})
===> Fetching lager ({git,"git://github.com/basho/lager.git",
                                 {tag,"2.1.1"}})
===> Fetching neotoma ({git,"git://github.com/seancribbs/neotoma.git",
                                   {tag,"1.7.2"}})
===> Fetching plumtree ({git,"git://github.com/dergraf/plumtree.git",
                                    {branch,"leveldb_backend"}})
===> Fetching riak_sysmon ({git,
                                      "git://github.com/basho/riak_sysmon.git",
                                      {tag,"2.0.1"}})
===> Fetching syslog ({git,"git://github.com/Vagabond/erlang-syslog.git",
                                  {tag,"1.0.2"}})
===> Fetching vmq_plugin ({git,"git://github.com/erlio/vmq_plugin.git",
                                      {branch,"master"}})
===> Fetching cowlib ({git,"git://github.com/ninenines/cowlib.git",
                                  {tag,"1.0.0"}})
===> Fetching edown ({git,"git://github.com/esl/edown.git",{tag,"0.4"}})
===> Fetching eleveldb ({git,"git://github.com/helium/eleveldb.git",
                                    {branch,"adt-helium"}})
===> Fetching folsom ({git,"git://github.com/boundary/folsom",
                                  {tag,"0.8.2"}})
===> Fetching goldrush ({git,"git://github.com/DeadZen/goldrush.git",
                                    {tag,"0.1.6"}})
===> Fetching meck ({git,"git://github.com/eproxus/meck.git",
                                {tag,"0.8.2"}})
===> Fetching parse_trans ({git,
                                      "git://github.com/uwiger/parse_trans.git",
                                      {tag,"2.9"}})
===> Fetching ranch ({git,"git://github.com/ninenines/ranch.git",
                                 {tag,"1.0.0"}})
===> Fetching riak_dt ({git,"git://github.com/basho/riak_dt.git",
                                   {tag,"2.1.0"}})
===> Fetching setup ({git,"git://github.com/uwiger/setup.git",
                                 {tag,"1.4"}})
===> Fetching bear ({git,"git://github.com/boundary/bear.git",
                                {tag,"0.8.2"}})
cd distdir/vernemq-clone && git archive --format=tar --prefix=vernemq-0.9.4-51270235/ HEAD | (cd .. && tar xf -) && cp dependency_manifest.git ../vernemq-0.9.4-51270235/ && mkdir -p ../vernemq-0.9.4-51270235/_build/default/lib && cd _build/default && for dep in lib/*; do cp -R ${dep} ../../../vernemq-0.9.4-51270235/_build/default/lib && cd ${dep} && mkdir -p ../../../../../vernemq-0.9.4-51270235/_build/default/${dep}/priv && printf "`git describe --long --tags 2>/dev/null || git rev-parse HEAD`" > ../../../../../vernemq-0.9.4-51270235/_build/default/${dep}/priv/vsn.git && cd ../..; done && cd ../..
tar -C distdir -czf distdir/vernemq-0.9.4-51270235.tar.gz vernemq-0.9.4-51270235
cp distdir/vernemq-0.9.4-51270235.tar.gz .
MacBookAir:vernemq ckrey$ ls
Makefile            distdir             rebar.config            vernemq-0.9.4-51270235.tar.gz
Readme.rst          docs                rebar.lock
_build              files               rebar3
dialyzer.ignore-warnings    pkg.vars.config         vars.config
MacBookAir:vernemq ckrey$ cd distdir/
MacBookAir:distdir ckrey$ ls
vernemq-0.9.4-51270235      vernemq-0.9.4-51270235.tar.gz   vernemq-clone
MacBookAir:distdir ckrey$ cd vernemq-0.9.4-51270235
MacBookAir:vernemq-0.9.4-51270235 ckrey$ ls
Makefile            dependency_manifest.git     files               rebar.lock
Readme.rst          dialyzer.ignore-warnings    pkg.vars.config         rebar3
_build              docs                rebar.config            vars.config
MacBookAir:vernemq-0.9.4-51270235 ckrey$ cd
MacBookAir:~ ckrey$ ls
Applications            Library             Public              otap
DNSSECCheck.safariextension MQTT-Client-Framework       Wegeheld            vbb
Desktop             MQTTInspector           libuuid-1.0.3           vernemq
Documents           Movies              libwebsockets           vernemq.old
Downloads           Music               org.eclipse.mosquitto
Dropbox             OwnTracks           org.eclipse.paho.mqtt.c
Google Drive            Pictures            org.eclipse.paho.mqtt.objc
MacBookAir:~ ckrey$ cd vernemq
MacBookAir:vernemq ckrey$ ls
Makefile            distdir             rebar.config            vernemq-0.9.4-51270235.tar.gz
Readme.rst          docs                rebar.lock
_build              files               rebar3
dialyzer.ignore-warnings    pkg.vars.config         vars.config
MacBookAir:vernemq ckrey$ vi Readme.rst
MacBookAir:vernemq ckrey$ cd _build/
MacBookAir:_build ckrey$ ls
default
MacBookAir:_build ckrey$ cd default/
MacBookAir:default ckrey$ ls
bin lib plugins
MacBookAir:default ckrey$ cd bin
MacBookAir:bin ckrey$ ls
cuttlefish
MacBookAir:bin ckrey$ cd ..
MacBookAir:default ckrey$ cd ..
MacBookAir:_build ckrey$ ls
default
MacBookAir:_build ckrey$ cd ..
MacBookAir:vernemq ckrey$ make rel
/Users/ckrey/vernemq/rebar3 release --overlay_vars vars.config
===> Verifying dependencies...
===> Starting relx build process ...
===> Resolving OTP Applications from directories:
          /Users/ckrey/vernemq/_build/default/lib
          /usr/local/Cellar/erlang/17.5/lib/erlang/lib
===> Missing beam file app1_app <<"/Users/ckrey/vernemq/_build/default/lib/exometer_core/test/app1/ebin/app1_app.beam">>
===> Resolved vernemq-0.9.4
===> Including Erts from /usr/local/Cellar/erlang/17.5/lib/erlang
===> release successfully created!
===> Running cuttlefish schema generator
MacBookAir:vernemq ckrey$ pwd
/Users/ckrey/vernemq
MacBookAir:vernemq ckrey$ ls
Makefile            distdir             rebar.config            vernemq-0.9.4-51270235.tar.gz
Readme.rst          docs                rebar.lock
_build              files               rebar3
dialyzer.ignore-warnings    pkg.vars.config         vars.config
MacBookAir:vernemq ckrey$ make
/Users/ckrey/vernemq/rebar3 compile
===> Verifying dependencies...
MacBookAir:vernemq ckrey$ ls
Makefile            distdir             rebar.config            vernemq-0.9.4-51270235.tar.gz
Readme.rst          docs                rebar.lock
_build              files               rebar3
dialyzer.ignore-warnings    pkg.vars.config         vars.config
MacBookAir:vernemq ckrey$ make clena
make: *** No rule to make target `clena'.  Stop.
MacBookAir:vernemq ckrey$ make clean
MacBookAir:vernemq ckrey$ make
/Users/ckrey/vernemq/rebar3 compile
===> Verifying dependencies...
MacBookAir:vernemq ckrey$ make rel
/Users/ckrey/vernemq/rebar3 release --overlay_vars vars.config
===> Verifying dependencies...
===> Starting relx build process ...
===> Resolving OTP Applications from directories:
          /Users/ckrey/vernemq/_build/default/lib
          /usr/local/Cellar/erlang/17.5/lib/erlang/lib
          /Users/ckrey/vernemq/_build/default/rel
===> Missing beam file app1_app <<"/Users/ckrey/vernemq/_build/default/lib/exometer_core/test/app1/ebin/app1_app.beam">>
===> Resolved vernemq-0.9.4
===> Including Erts from /usr/local/Cellar/erlang/17.5/lib/erlang
===> release successfully created!
===> Running cuttlefish schema generator
MacBookAir:vernemq ckrey$ ls
Makefile            distdir             rebar.config            vernemq-0.9.4-51270235.tar.gz
Readme.rst          docs                rebar.lock
_build              files               rebar3
dialyzer.ignore-warnings    pkg.vars.config         vars.config
MacBookAir:vernemq ckrey$ cd ..
MacBookAir:~ ckrey$ ls
Applications            Library             Public              otap
DNSSECCheck.safariextension MQTT-Client-Framework       Wegeheld            vbb
Desktop             MQTTInspector           libuuid-1.0.3           vernemq
Documents           Movies              libwebsockets           vernemq.old
Downloads           Music               org.eclipse.mosquitto
Dropbox             OwnTracks           org.eclipse.paho.mqtt.c
Google Drive            Pictures            org.eclipse.paho.mqtt.objc
MacBookAir:~ ckrey$ rm -rf vernemq
MacBookAir:~ ckrey$ git clone https://github.com/erlio/vernemq.git
Cloning into 'vernemq'...
remote: Counting objects: 1014, done.
remote: Compressing objects: 100% (106/106), done.
remote: Total 1014 (delta 65), reused 0 (delta 0), pack-reused 907
Receiving objects: 100% (1014/1014), 2.10 MiB | 698.00 KiB/s, done.
Resolving deltas: 100% (580/580), done.
Checking connectivity... done.
MacBookAir:~ ckrey$ cd vernemq
MacBookAir:vernemq ckrey$ make rel
/Users/ckrey/vernemq/rebar3 release --overlay_vars vars.config
===> Fetching rebar3_cuttlefish ({git,
                                         "git://github.com/tsloughter/rebar3_cuttlefish.git",
                                         {branch,"master"}})
===> Fetching cuttlefish ({git,"git://github.com/tsloughter/cuttlefish",
                                      {branch,"develop"}})
===> Fetching getopt ({git,"git://github.com/jcomellas/getopt.git",
                                 {ref,
                                     "659a28f4145bc9843598972854299dc4ea77e4cb"}})
===> Fetching lager ({git,"git://github.com/basho/lager.git",
                                 {ref,"d33ccf3b69de09a628fe38b4d7981bb8671b8a4f"}})
===> Fetching neotoma ({git,"git://github.com/seancribbs/neotoma.git",
                                  {ref,
                                      "760928ec8870da02eb11bccb501e2700925d06c6"}})
===> Fetching goldrush ({git,"git://github.com/DeadZen/goldrush.git",
                                   {ref,
                                       "71e63212f12c25827e0c1b4198d37d5d018a7fec"}})
===> Compiling neotoma
===> Compiling goldrush
===> Compiling lager
===> Compiling getopt
===> Compiling cuttlefish
===> Building escript...
===> Compiling rebar3_cuttlefish
===> Verifying dependencies...
===> Fetching cuttlefish ({git,
                                  "git://github.com/tsloughter/cuttlefish.git",
                                  {ref,
                                   "f5f6fdc1b0dd8ebe909b81f0b38f5715d4e869e6"}})
===> Fetching eper ({git,"https://github.com/massemanet/eper.git",
                                {ref,"55e3f69df5e3bcb74b42d2ba056c076298ed6ea7"}})
===> Fetching lager_syslog ({git,
                                    "git://github.com/basho/lager_syslog.git",
                                    {ref,
                                     "fa2e7e3daee0d0a59dadb820fd3381eac4a65770"}})
===> Fetching node_package ({git,
                                    "git://github.com/dergraf/node_package.git",
                                    {ref,
                                     "ddf2281e687d0772eb65f0a56bbf94649ec9c216"}})
===> Fetching recon ({git,"git://github.com/ferd/recon.git",
                                 {ref,"3578fa86ad408d98e0512ded0b2f2c5b834a84ad"}})
===> Fetching vmq_acl ({git,"git://github.com/erlio/vmq_acl.git",
                                  {ref,
                                      "08fe942c85ab8c4154c1ba44f2ba907ef3ed1826"}})
===> Fetching vmq_bridge ({git,
                                  "git://github.com/erlio/vmq_bridge.git",
                                  {ref,
                                   "8a06b84b0b9c248e20934076bb8409c71fbc7a70"}})
===> Fetching vmq_commons ({git,
                                   "git://github.com/erlio/vmq_commons.git",
                                   {ref,
                                    "bb437da5a7c841983cf005dded63d29f8f635cd0"}})
===> Fetching vmq_graphite ({git,
                                    "git://github.com/erlio/vmq_graphite.git",
                                    {ref,
                                     "620070a6799341a43b395bcb24f288656e122a65"}})
===> Fetching vmq_passwd ({git,
                                  "git://github.com/erlio/vmq_passwd.git",
                                  {ref,
                                   "ac403d69305f4ff916bbe0a5fa046378a4636c54"}})
===> Fetching vmq_server ({git,
                                  "git://github.com/erlio/vmq_server.git",
                                  {ref,
                                   "50356d59a236433b9fcd6a33ecfa0fedf5bc4e5e"}})
===> Fetching vmq_snmp ({git,"git://github.com/erlio/vmq_snmp.git",
                                   {ref,
                                       "fcecbb15d1095f89cb4eb7b223cdd4933aaa879b"}})
===> Fetching vmq_systree ({git,
                                   "git://github.com/erlio/vmq_systree.git",
                                   {ref,
                                    "73b7ffc495de0b6d949747eafb5653abc189d040"}})
===> Fetching clique ({git,"git://github.com/basho/clique.git",
                                  {tag,"0.2.5"}})
===> Fetching cowboy ({git,"git://github.com/ninenines/cowboy.git",
                                  {tag,"2.0.0-pre.1"}})
===> Fetching epmdpxy ({git,"git://github.com/dergraf/epmdpxy",
                                   {branch,"master"}})
===> Fetching exometer_core ({git,
                                     "git://github.com/Feuerlabs/exometer_core.git",
                                     {tag,"1.2"}})
===> Fetching getopt ({git,"git://github.com/jcomellas/getopt.git",
                                  {tag,"v0.4.3"}})
===> Fetching jobs ({git,"git://github.com/uwiger/jobs.git",
                                {tag,"0.3"}})
===> Fetching lager ({git,"git://github.com/basho/lager.git",
                                 {tag,"2.1.1"}})
===> Fetching neotoma ({git,"git://github.com/seancribbs/neotoma.git",
                                   {tag,"1.7.2"}})
===> Fetching plumtree ({git,"git://github.com/dergraf/plumtree.git",
                                    {branch,"leveldb_backend"}})
===> Fetching riak_sysmon ({git,
                                      "git://github.com/basho/riak_sysmon.git",
                                      {tag,"2.0.1"}})
===> Fetching syslog ({git,"git://github.com/Vagabond/erlang-syslog.git",
                                  {tag,"1.0.2"}})
===> Fetching vmq_plugin ({git,"git://github.com/erlio/vmq_plugin.git",
                                      {branch,"master"}})
===> Fetching cowlib ({git,"git://github.com/ninenines/cowlib.git",
                                  {tag,"1.0.0"}})
===> Fetching edown ({git,"git://github.com/esl/edown.git",{tag,"0.4"}})
===> Fetching eleveldb ({git,"git://github.com/helium/eleveldb.git",
                                    {branch,"adt-helium"}})
===> Fetching folsom ({git,"git://github.com/boundary/folsom",
                                  {tag,"0.8.2"}})
===> Fetching goldrush ({git,"git://github.com/DeadZen/goldrush.git",
                                    {tag,"0.1.6"}})
===> Fetching meck ({git,"git://github.com/eproxus/meck.git",
                                {tag,"0.8.2"}})
===> Fetching parse_trans ({git,
                                      "git://github.com/uwiger/parse_trans.git",
                                      {tag,"2.9"}})
===> Fetching ranch ({git,"git://github.com/ninenines/ranch.git",
                                 {tag,"1.0.0"}})
===> Fetching riak_dt ({git,"git://github.com/basho/riak_dt.git",
                                   {tag,"2.1.0"}})
===> Fetching setup ({git,"git://github.com/uwiger/setup.git",
                                 {tag,"1.4"}})
===> Fetching bear ({git,"git://github.com/boundary/bear.git",
                                {tag,"0.8.2"}})
===> Compiling goldrush
===> Compiling lager
===> Compiling neotoma
===> Compiling getopt
===> Compiling cuttlefish
===> Building escript...
===> Compiling clique
===> Compiling vmq_plugin
===> Compiling vmq_commons
===> Compiling riak_sysmon
===> Compiling riak_dt
===> Compiling eleveldb
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking build system type... i386-apple-darwin14.3.0
checking host system type... i386-apple-darwin14.3.0
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld... no
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm
checking the name lister (/usr/bin/nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 196608
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking for /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld option to reload object files... -r
checking for objdump... no
checking how to recognize dependent libraries... pass_all
checking for ar... ar
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm output from gcc object... ok
checking for dsymutil... dsymutil
checking for nmedit... nmedit
checking for lipo... lipo
checking for otool... otool
checking for otool64... no
checking for -single_module linker flag... yes
checking for -exported_symbols_list linker flag... yes
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... yes
checking for gcc option to produce PIC... -fno-common -DPIC
checking if gcc PIC flag -fno-common -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin14.3.0 dyld
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking whether we are using the GNU C++ compiler... (cached) yes
checking whether g++ accepts -g... (cached) yes
checking dependency style of g++... (cached) gcc3
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld... no
checking whether the g++ linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking for g++ option to produce PIC... -fno-common -DPIC
checking if g++ PIC flag -fno-common -DPIC works... yes
checking if g++ static flag -static works... no
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin14.3.0 dyld
checking how to hardcode library paths into programs... immediate
checking whether byte ordering is bigendian... no
checking for stdint.h... (cached) yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking sys/resource.h usability... yes
checking sys/resource.h presence... yes
checking for sys/resource.h... yes
checking windows.h usability... no
checking windows.h presence... no
checking for windows.h... no
checking byteswap.h usability... no
checking byteswap.h presence... no
checking for byteswap.h... no
checking sys/byteswap.h usability... no
checking sys/byteswap.h presence... no
checking for sys/byteswap.h... no
checking sys/endian.h usability... no
checking sys/endian.h presence... no
checking for sys/endian.h... no
checking for mmap... yes
checking for 'gtest-config'... checking for gtest-config... no
no
checking for pkg-config... /usr/local/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for gflags... no
checking if the compiler supports __builtin_expect... yes
checking if the compiler supports __builtin_ctzll... yes
checking for zlibVersion in -lz... yes
checking for lzo1x_1_15_compress in -llzo2... no
checking for lzf_compress in -llzf... no
checking for fastlz_compress in -lfastlz... no
checking for qlz_compress in -lquicklz... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating snappy-stubs-public.h
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-am
/bin/sh ./libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.     -g -O2 -MT snappy.lo -MD -MP -MF .deps/snappy.Tpo -c -o snappy.lo snappy.cc
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy.lo -MD -MP -MF .deps/snappy.Tpo -c snappy.cc  -fno-common -DPIC -o .libs/snappy.o
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy.lo -MD -MP -MF .deps/snappy.Tpo -c snappy.cc  -fno-common -DPIC -o snappy.o >/dev/null 2>&1
mv -f .deps/snappy.Tpo .deps/snappy.Plo
/bin/sh ./libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.     -g -O2 -MT snappy-sinksource.lo -MD -MP -MF .deps/snappy-sinksource.Tpo -c -o snappy-sinksource.lo snappy-sinksource.cc
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy-sinksource.lo -MD -MP -MF .deps/snappy-sinksource.Tpo -c snappy-sinksource.cc  -fno-common -DPIC -o .libs/snappy-sinksource.o
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy-sinksource.lo -MD -MP -MF .deps/snappy-sinksource.Tpo -c snappy-sinksource.cc  -fno-common -DPIC -o snappy-sinksource.o >/dev/null 2>&1
mv -f .deps/snappy-sinksource.Tpo .deps/snappy-sinksource.Plo
/bin/sh ./libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.     -g -O2 -MT snappy-stubs-internal.lo -MD -MP -MF .deps/snappy-stubs-internal.Tpo -c -o snappy-stubs-internal.lo snappy-stubs-internal.cc
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy-stubs-internal.lo -MD -MP -MF .deps/snappy-stubs-internal.Tpo -c snappy-stubs-internal.cc  -fno-common -DPIC -o .libs/snappy-stubs-internal.o
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy-stubs-internal.lo -MD -MP -MF .deps/snappy-stubs-internal.Tpo -c snappy-stubs-internal.cc  -fno-common -DPIC -o snappy-stubs-internal.o >/dev/null 2>&1
mv -f .deps/snappy-stubs-internal.Tpo .deps/snappy-stubs-internal.Plo
/bin/sh ./libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.     -g -O2 -MT snappy-c.lo -MD -MP -MF .deps/snappy-c.Tpo -c -o snappy-c.lo snappy-c.cc
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy-c.lo -MD -MP -MF .deps/snappy-c.Tpo -c snappy-c.cc  -fno-common -DPIC -o .libs/snappy-c.o
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -g -O2 -MT snappy-c.lo -MD -MP -MF .deps/snappy-c.Tpo -c snappy-c.cc  -fno-common -DPIC -o snappy-c.o >/dev/null 2>&1
mv -f .deps/snappy-c.Tpo .deps/snappy-c.Plo
/bin/sh ./libtool --tag=CXX   --mode=link g++  -g -O2 -version-info 2:2:1  -o libsnappy.la -rpath /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib snappy.lo snappy-sinksource.lo snappy-stubs-internal.lo snappy-c.lo
libtool: link: g++ -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libsnappy.1.dylib  .libs/snappy.o .libs/snappy-sinksource.o .libs/snappy-stubs-internal.o .libs/snappy-c.o      -install_name  /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib/libsnappy.1.dylib -compatibility_version 3 -current_version 3.2 -Wl,-single_module
libtool: link: dsymutil .libs/libsnappy.1.dylib || :
libtool: link: (cd ".libs" && rm -f "libsnappy.dylib" && ln -s "libsnappy.1.dylib" "libsnappy.dylib")
libtool: link: ar cru .libs/libsnappy.a  snappy.o snappy-sinksource.o snappy-stubs-internal.o snappy-c.o
libtool: link: ranlib .libs/libsnappy.a
libtool: link: ( cd ".libs" && rm -f "libsnappy.la" && ln -s "../libsnappy.la" "libsnappy.la" )
g++ -DHAVE_CONFIG_H -I.      -g -O2 -MT snappy_unittest-snappy_unittest.o -MD -MP -MF .deps/snappy_unittest-snappy_unittest.Tpo -c -o snappy_unittest-snappy_unittest.o `test -f 'snappy_unittest.cc' || echo './'`snappy_unittest.cc
snappy_unittest.cc:165:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
1 warning generated.
mv -f .deps/snappy_unittest-snappy_unittest.Tpo .deps/snappy_unittest-snappy_unittest.Po
g++ -DHAVE_CONFIG_H -I.      -g -O2 -MT snappy_unittest-snappy-test.o -MD -MP -MF .deps/snappy_unittest-snappy-test.Tpo -c -o snappy_unittest-snappy-test.o `test -f 'snappy-test.cc' || echo './'`snappy-test.cc
mv -f .deps/snappy_unittest-snappy-test.Tpo .deps/snappy_unittest-snappy-test.Po
/bin/sh ./libtool --tag=CXX   --mode=link g++  -g -O2   -o snappy_unittest snappy_unittest-snappy_unittest.o snappy_unittest-snappy-test.o libsnappy.la -lz
libtool: link: g++ -g -O2 -o .libs/snappy_unittest snappy_unittest-snappy_unittest.o snappy_unittest-snappy-test.o -Wl,-bind_at_load  ./.libs/libsnappy.dylib -lz
test -z "/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib" || ./install-sh -c -d "/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib"
 /bin/sh ./libtool   --mode=install /usr/bin/install -c   libsnappy.la '/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib'
libtool: install: /usr/bin/install -c .libs/libsnappy.1.dylib /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib/libsnappy.1.dylib
libtool: install: (cd /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib && { ln -s -f libsnappy.1.dylib libsnappy.dylib || { rm -f libsnappy.dylib && ln -s libsnappy.1.dylib libsnappy.dylib; }; })
libtool: install: /usr/bin/install -c .libs/libsnappy.lai /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib/libsnappy.la
libtool: install: /usr/bin/install -c .libs/libsnappy.a /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib/libsnappy.a
libtool: install: chmod 644 /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib/libsnappy.a
libtool: install: ranlib /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib/libsnappy.a
----------------------------------------------------------------------
Libraries have been installed in:
   /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
     during execution

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
test -z "/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/share/doc/snappy" || ./install-sh -c -d "/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/share/doc/snappy"
 /usr/bin/install -c -m 644 ChangeLog COPYING INSTALL NEWS README format_description.txt '/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/share/doc/snappy'
test -z "/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include" || ./install-sh -c -d "/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include"
 /usr/bin/install -c -m 644 snappy.h snappy-sinksource.h snappy-stubs-public.h snappy-c.h '/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include'
Cloning into 'leveldb'...
Switched to a new branch '2.0'
Branch 2.0 set up to track remote branch 2.0 from origin.
g++  -L/Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/lib -mmacosx-version-min=10.8 -lsnappy -dynamiclib -install_name libleveldb.dylib.1  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC db/builder.cc db/c.cc db/db_impl.cc db/db_iter.cc db/dbformat.cc db/filename.cc db/log_reader.cc db/log_writer.cc db/memtable.cc db/repair.cc db/table_cache.cc db/version_edit.cc db/version_set.cc db/write_batch.cc table/block.cc table/block_builder.cc table/filter_block.cc table/format.cc table/iterator.cc table/merger.cc table/table.cc table/table_builder.cc table/two_level_iterator.cc util/arena.cc util/bloom.cc util/bloom2.cc util/cache.cc util/cache2.cc util/coding.cc util/comparator.cc util/crc32c.cc util/db_list.cc util/env.cc util/env_posix.cc util/filter_policy.cc util/flexcache.cc util/hash.cc util/histogram.cc util/hot_threads.cc util/logging.cc util/murmurhash.cc util/options.cc util/perf_count.cc util/status.cc util/throttle.cc  port/port_posix.cc -o libleveldb.dylib.1.9
util/env_posix.cc:857:8: warning: function 'leveldb::(anonymous namespace)::PosixEnv::BGThread' has internal linkage but is not defined [-Wundefined-internal]
  void BGThread();
       ^
util/env_posix.cc:859:39: note: used here
    reinterpret_cast<PosixEnv*>(arg)->BGThread();
                                      ^
1 warning generated.
util/hot_threads.cc:155:13: warning: 'sem_init' is deprecated [-Wdeprecated-declarations]
    ret_val=sem_init(&m_Semaphore, 0, 0);
            ^
/usr/include/sys/semaphore.h:55:5: note: 'sem_init' has been explicitly marked deprecated here
int sem_init(sem_t *, int, unsigned int) __deprecated;
    ^
util/hot_threads.cc:199:17: warning: 'sem_destroy' is deprecated [-Wdeprecated-declarations]
                sem_destroy(&m_Semaphore);
                ^
/usr/include/sys/semaphore.h:53:5: note: 'sem_destroy' has been explicitly marked deprecated here
int sem_destroy(sem_t *) __deprecated;
    ^
util/hot_threads.cc:234:13: warning: 'sem_destroy' is deprecated [-Wdeprecated-declarations]
            sem_destroy(&m_Semaphore);
            ^
/usr/include/sys/semaphore.h:53:5: note: 'sem_destroy' has been explicitly marked deprecated here
int sem_destroy(sem_t *) __deprecated;
    ^
3 warnings generated.
ln -fs libleveldb.dylib.1.9 libleveldb.dylib
ln -fs libleveldb.dylib.1.9 libleveldb.dylib.1
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/builder.cc -o db/builder.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/c.cc -o db/c.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/db_impl.cc -o db/db_impl.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/db_iter.cc -o db/db_iter.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/dbformat.cc -o db/dbformat.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/filename.cc -o db/filename.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/log_reader.cc -o db/log_reader.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/log_writer.cc -o db/log_writer.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/memtable.cc -o db/memtable.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/repair.cc -o db/repair.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/table_cache.cc -o db/table_cache.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/version_edit.cc -o db/version_edit.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/version_set.cc -o db/version_set.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c db/write_batch.cc -o db/write_batch.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/block.cc -o table/block.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/block_builder.cc -o table/block_builder.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/filter_block.cc -o table/filter_block.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/format.cc -o table/format.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/iterator.cc -o table/iterator.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/merger.cc -o table/merger.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/table.cc -o table/table.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/table_builder.cc -o table/table_builder.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c table/two_level_iterator.cc -o table/two_level_iterator.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/arena.cc -o util/arena.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/bloom.cc -o util/bloom.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/bloom2.cc -o util/bloom2.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/cache.cc -o util/cache.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/cache2.cc -o util/cache2.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/coding.cc -o util/coding.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/comparator.cc -o util/comparator.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/crc32c.cc -o util/crc32c.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/db_list.cc -o util/db_list.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/env.cc -o util/env.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/env_posix.cc -o util/env_posix.o
util/env_posix.cc:857:8: warning: function 'leveldb::(anonymous namespace)::PosixEnv::BGThread' has internal linkage but is not defined [-Wundefined-internal]
  void BGThread();
       ^
util/env_posix.cc:859:39: note: used here
    reinterpret_cast<PosixEnv*>(arg)->BGThread();
                                      ^
1 warning generated.
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/filter_policy.cc -o util/filter_policy.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/flexcache.cc -o util/flexcache.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/hash.cc -o util/hash.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/histogram.cc -o util/histogram.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/hot_threads.cc -o util/hot_threads.o
util/hot_threads.cc:155:13: warning: 'sem_init' is deprecated [-Wdeprecated-declarations]
    ret_val=sem_init(&m_Semaphore, 0, 0);
            ^
/usr/include/sys/semaphore.h:55:5: note: 'sem_init' has been explicitly marked deprecated here
int sem_init(sem_t *, int, unsigned int) __deprecated;
    ^
util/hot_threads.cc:199:17: warning: 'sem_destroy' is deprecated [-Wdeprecated-declarations]
                sem_destroy(&m_Semaphore);
                ^
/usr/include/sys/semaphore.h:53:5: note: 'sem_destroy' has been explicitly marked deprecated here
int sem_destroy(sem_t *) __deprecated;
    ^
util/hot_threads.cc:234:13: warning: 'sem_destroy' is deprecated [-Wdeprecated-declarations]
            sem_destroy(&m_Semaphore);
            ^
/usr/include/sys/semaphore.h:53:5: note: 'sem_destroy' has been explicitly marked deprecated here
int sem_destroy(sem_t *) __deprecated;
    ^
3 warnings generated.
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/logging.cc -o util/logging.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/murmurhash.cc -o util/murmurhash.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/options.cc -o util/options.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/perf_count.cc -o util/perf_count.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/status.cc -o util/status.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c util/throttle.cc -o util/throttle.o
g++  -I /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/system/include -I. -I./include -mmacosx-version-min=10.8 -DOS_MACOSX -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -g -DNDEBUG     -fPIC -c port/port_posix.cc -o port/port_posix.o
rm -f libleveldb.a
ar -rs libleveldb.a db/builder.o db/c.o db/db_impl.o db/db_iter.o db/dbformat.o db/filename.o db/log_reader.o db/log_writer.o db/memtable.o db/repair.o db/table_cache.o db/version_edit.o db/version_set.o db/write_batch.o table/block.o table/block_builder.o table/filter_block.o table/format.o table/iterator.o table/merger.o table/table.o table/table_builder.o table/two_level_iterator.o util/arena.o util/bloom.o util/bloom2.o util/cache.o util/cache2.o util/coding.o util/comparator.o util/crc32c.o util/db_list.o util/env.o util/env_posix.o util/filter_policy.o util/flexcache.o util/hash.o util/histogram.o util/hot_threads.o util/logging.o util/murmurhash.o util/options.o util/perf_count.o util/status.o util/throttle.o port/port_posix.o
ar: creating archive libleveldb.a
c++ -O3 -arch x86_64 -finline-functions -Wall -stdlib=libstdc++ -fPIC -I /usr/local/Cellar/erlang/17.5/lib/erlang/erts-6.4/include/ -I /usr/local/Cellar/erlang/17.5/lib/erlang/lib/erl_interface-3.7.20/include -I leveldb/include  -c -o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc
clang: warning: optimization flag '-finline-functions' is not supported
clang: warning: argument unused during compilation: '-finline-functions'
In file included from /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.cc:39:
leveldb/include/leveldb/env.h:27:1: warning: class 'Options' was previously declared as a struct [-Wmismatched-tags]
class Options;
^
leveldb/include/leveldb/options.h:38:8: note: previous use is here
struct Options {
       ^
leveldb/include/leveldb/env.h:27:1: note: did you mean struct here?
class Options;
^~~~~
struct
1 warning generated.
c++ -O3 -arch x86_64 -finline-functions -Wall -stdlib=libstdc++ -fPIC -I /usr/local/Cellar/erlang/17.5/lib/erlang/erts-6.4/include/ -I /usr/local/Cellar/erlang/17.5/lib/erlang/lib/erl_interface-3.7.20/include -I leveldb/include  -c -o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/refobjects.o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/refobjects.cc
clang: warning: optimization flag '-finline-functions' is not supported
clang: warning: argument unused during compilation: '-finline-functions'
c++ -O3 -arch x86_64 -finline-functions -Wall -stdlib=libstdc++ -fPIC -I /usr/local/Cellar/erlang/17.5/lib/erlang/erts-6.4/include/ -I /usr/local/Cellar/erlang/17.5/lib/erlang/lib/erl_interface-3.7.20/include -I leveldb/include  -c -o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/threading.o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/threading.cc
clang: warning: optimization flag '-finline-functions' is not supported
clang: warning: argument unused during compilation: '-finline-functions'
c++ -O3 -arch x86_64 -finline-functions -Wall -stdlib=libstdc++ -fPIC -I /usr/local/Cellar/erlang/17.5/lib/erlang/erts-6.4/include/ -I /usr/local/Cellar/erlang/17.5/lib/erlang/lib/erl_interface-3.7.20/include -I leveldb/include  -c -o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/workitems.o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/workitems.cc
clang: warning: optimization flag '-finline-functions' is not supported
clang: warning: argument unused during compilation: '-finline-functions'
cc /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/eleveldb.o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/refobjects.o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/threading.o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/workitems.o -arch x86_64 -flat_namespace -undefined suppress  -stdlib=libstdc++ -shared leveldb/libleveldb.a system/lib/libsnappy.a -lstdc++ -L /usr/local/Cellar/erlang/17.5/lib/erlang/lib/erl_interface-3.7.20/lib -lerl_interface -lei -o /Users/ckrey/vernemq/_build/default/lib/eleveldb/c_src/../priv/eleveldb.so
===> Compiling plumtree
===> Compiling edown
===> Compiling parse_trans
===> Compiling meck
===> Compiling jobs
===> Compiling setup
===> Compiling bear
===> Compiling folsom
===> Compiling exometer_core
===> Compiling epmdpxy
===> Compiling ranch
===> Compiling cowlib
===> Compiling cowboy
===> Compiling vmq_server
===> Compiling node_package
===> Compiling syslog
===> Compiling lager_syslog
===> Compiling vmq_acl
===> Compiling eper
===> Compiling vmq_passwd
gcc vmq_passwd.c -lcrypto -o vmq_passwd
vmq_passwd.c:62:8: warning: 'BIO_new' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        b64 = BIO_new(BIO_f_base64());
              ^
/usr/include/openssl/bio.h:591:7: note: 'BIO_new' has been explicitly marked deprecated here
BIO *   BIO_new(BIO_METHOD *type) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:62:16: warning: 'BIO_f_base64' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        b64 = BIO_new(BIO_f_base64());
                      ^
/usr/include/openssl/evp.h:647:13: note: 'BIO_f_base64' has been explicitly marked deprecated here
BIO_METHOD *BIO_f_base64(void) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
            ^
vmq_passwd.c:63:2: warning: 'BIO_set_flags' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
        ^
/usr/include/openssl/bio.h:208:6: note: 'BIO_set_flags' has been explicitly marked deprecated here
void BIO_set_flags(BIO *b, int flags) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
     ^
vmq_passwd.c:64:9: warning: 'BIO_new' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        bmem = BIO_new(BIO_s_mem());
               ^
/usr/include/openssl/bio.h:591:7: note: 'BIO_new' has been explicitly marked deprecated here
BIO *   BIO_new(BIO_METHOD *type) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:64:17: warning: 'BIO_s_mem' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        bmem = BIO_new(BIO_s_mem());
                       ^
/usr/include/openssl/bio.h:626:13: note: 'BIO_s_mem' has been explicitly marked deprecated here
BIO_METHOD *BIO_s_mem(void) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
            ^
vmq_passwd.c:65:8: warning: 'BIO_push' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        b64 = BIO_push(b64, bmem);
              ^
/usr/include/openssl/bio.h:604:7: note: 'BIO_push' has been explicitly marked deprecated here
BIO *   BIO_push(BIO *b,BIO *append) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:66:2: warning: 'BIO_write' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        BIO_write(b64, in, in_len);
        ^
/usr/include/openssl/bio.h:597:5: note: 'BIO_write' has been explicitly marked deprecated here
int     BIO_write(BIO *b, const void *data, int len) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:67:5: warning: 'BIO_ctrl' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        if(BIO_flush(b64) != 1){
           ^
/usr/include/openssl/bio.h:529:28: note: expanded from macro 'BIO_flush'
#define BIO_flush(b)            (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)
                                     ^
/usr/include/openssl/bio.h:600:6: note: 'BIO_ctrl' has been explicitly marked deprecated here
long    BIO_ctrl(BIO *bp,int cmd,long larg,void *parg) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:68:3: warning: 'BIO_free_all' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
                BIO_free_all(b64);
                ^
/usr/include/openssl/bio.h:606:6: note: 'BIO_free_all' has been explicitly marked deprecated here
void    BIO_free_all(BIO *a) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:71:2: warning: 'BIO_ctrl' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        BIO_get_mem_ptr(b64, &bptr);
        ^
/usr/include/openssl/bio.h:506:31: note: expanded from macro 'BIO_get_mem_ptr'
#define BIO_get_mem_ptr(b,pp)   BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp)
                                ^
/usr/include/openssl/bio.h:600:6: note: 'BIO_ctrl' has been explicitly marked deprecated here
long    BIO_ctrl(BIO *bp,int cmd,long larg,void *parg) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:74:3: warning: 'BIO_free_all' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
                BIO_free_all(b64);
                ^
/usr/include/openssl/bio.h:606:6: note: 'BIO_free_all' has been explicitly marked deprecated here
void    BIO_free_all(BIO *a) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:79:2: warning: 'BIO_free_all' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        BIO_free_all(b64);
        ^
/usr/include/openssl/bio.h:606:6: note: 'BIO_free_all' has been explicitly marked deprecated here
void    BIO_free_all(BIO *a) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:105:7: warning: 'RAND_bytes' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        rc = RAND_bytes(salt, SALT_LEN);
             ^
/usr/include/openssl/rand.h:104:6: note: 'RAND_bytes' has been explicitly marked deprecated here
int  RAND_bytes(unsigned char *buf,int num) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
     ^
vmq_passwd.c:119:11: warning: 'EVP_get_digestbyname' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        digest = EVP_get_digestbyname("sha512");
                 ^
/usr/include/openssl/evp.h:842:15: note: 'EVP_get_digestbyname' has been explicitly marked deprecated here
const EVP_MD *EVP_get_digestbyname(const char *name) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
              ^
vmq_passwd.c:125:2: warning: 'EVP_MD_CTX_init' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        EVP_MD_CTX_init(&context);
        ^
/usr/include/openssl/evp.h:547:6: note: 'EVP_MD_CTX_init' has been explicitly marked deprecated here
void    EVP_MD_CTX_init(EVP_MD_CTX *ctx) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:126:2: warning: 'EVP_DigestInit_ex' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        EVP_DigestInit_ex(&context, digest, NULL);
        ^
/usr/include/openssl/evp.h:555:5: note: 'EVP_DigestInit_ex' has been explicitly marked deprecated here
int     EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:127:2: warning: 'EVP_DigestUpdate' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        EVP_DigestUpdate(&context, password, strlen(password));
        ^
/usr/include/openssl/evp.h:556:5: note: 'EVP_DigestUpdate' has been explicitly marked deprecated here
int     EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
        ^
vmq_passwd.c:128:2: warning: 'EVP_DigestUpdate' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        EVP_DigestUpdate(&context, salt, SALT_LEN);
        ^
/usr/include/openssl/evp.h:556:5: note: 'EVP_DigestUpdate' has been explicitly marked deprecated here
int     EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
        ^
vmq_passwd.c:129:2: warning: 'EVP_DigestFinal_ex' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        EVP_DigestFinal_ex(&context, hash, &hash_len);
        ^
/usr/include/openssl/evp.h:558:5: note: 'EVP_DigestFinal_ex' has been explicitly marked deprecated here
int     EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:130:2: warning: 'EVP_MD_CTX_cleanup' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        EVP_MD_CTX_cleanup(&context);
        ^
/usr/include/openssl/evp.h:548:5: note: 'EVP_MD_CTX_cleanup' has been explicitly marked deprecated here
int     EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
        ^
vmq_passwd.c:371:2: warning: 'OpenSSL_add_all_digests' is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations]
        OpenSSL_add_all_digests();
        ^
/usr/include/openssl/evp.h:833:6: note: 'OpenSSL_add_all_digests' has been explicitly marked deprecated here
void OpenSSL_add_all_digests(void) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
     ^
21 warnings generated.
===> Compiling vmq_graphite
===> Compiling vmq_systree
===> Compiling vmq_bridge
===> Compiling recon
===> Compiling vmq_snmp
===> Starting relx build process ...
===> Resolving OTP Applications from directories:
          /Users/ckrey/vernemq/_build/default/lib
          /usr/local/Cellar/erlang/17.5/lib/erlang/lib
===> Missing beam file app1_app <<"/Users/ckrey/vernemq/_build/default/lib/exometer_core/test/app1/ebin/app1_app.beam">>
===> Resolved vernemq-0.9.4
===> Including Erts from /usr/local/Cellar/erlang/17.5/lib/erlang
===> release successfully created!
===> Running cuttlefish schema generator

connection broken when websocket client pub Qos2 message

hi, there:
i work on ubuntu 14.04 64bit, Erlang/OPT 17 vernemq 0.10.1, hostip is 192.168.33.10
relevant configurations are:
allow_anonymous = on
listener.tcp.default = 0.0.0.0:1883
listener.ws.default = 0.0.0.0:11883

i use hiveMQ websocket client to publish a qos2 message to vernemq, then the connection broken.

vernemq gives these error info in error.log:
2015-07-25 06:16:39.943 [error] emulator Error in process <0.935.0> on node '[email protected]' with exit value: {{try_clause,{stop,{http_req,#Port<0.6286>,ranch_tcp,keepalive,<0.935.0>,<<3 bytes>>,'HTTP/1.1',{{192,168,33,1},38123},<<13 bytes>>,undefined,11883,<<5 bytes>>,undefined,<<0 bytes>>,[],[{<<4 bytes>>,<<19 bytes>>},{<<10 bytes>>,<<7 bytes>>},{<<6 bytes>>,<<8 bytes>>},{<<13 bytes>>,<<8 bytes>>},{<<7 bytes>>,<<9 bytes>>},{<<6 bytes>>,<<21 bytes>>},{<<21 bytes>>,<<2 bytes>>},{<<10 bytes>>,<<104 bytes>>},{<<15 bytes>>,<<19 bytes>>},{<<15 bytes>>,<<47 bytes>>},{<<17 bytes>>,<<24 bytes>>},{<<24 bytes>>,<<42 bytes>>},{<<22 bytes>>,<<8 bytes>>}],[{websocket_version,13},{websocket_compress,false}],waiting,<<0 bytes>>,undefined,false...

2015-07-25 06:16:39.951 [error] <0.276.0> Ranch listener {{0,0,0,0},11883} had connection process started with cowboy_protocol:start_link/4 at <0.935.0> exit with reason: {{try_clause,{stop,{http_req,#Port<0.6286>,ranch_tcp,keepalive,<0.935.0>,<<"GET">>,'HTTP/1.1',{{192,168,33,1},38123},<<"192.168.33.10">>,undefined,11883,<<"/mqtt">>,undefined,<<>>,[],[{<<"host">>,<<"192.168.33.10:11883">>},{<<"connection">>,<<"Upgrade">>},{<<"pragma">>,<<"no-cache">>},{<<"cache-control">>,<<"no-cache">>},{<<"upgrade">>,<<"websocket">>},{<<"origin">>,<<"http://www.hivemq.com">>},{<<"sec-websocket-version">>,<<"13">>},{<<"user-agent">>,<<"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36">>},{<<"accept-encoding">>,<<"gzip, deflate, sdch">>},{<<"accept-language">>,<<"en-US,en;q=0.8,zh-TW;q=0.6,zh;q=0.4,zh-CN;q=0.2">>},{<<"sec-websocket-key">>,<<"FUnp9t0sRgVHsOMXQxYG0w==">>},{<<"sec-websocket-extensions">>,<<"permessage-deflate; client_max_window_bits">>},{<<"sec-websocket-protocol">>,<<"mqttv3.1">>}],[{websocket_version,13},{websocket_compress,false}],waiting,<<>>,undefined,false,done,[],<<>>,undefined},{st,<<>>,<<>>,<0.936.0>,{{1437,804999,933268},0},{{1437,804999,933321},0}}}},[{cowboy_websocket,handler_call,7,[{file,"/home/vagrant/vernemq/_build/default/lib/cowboy/src/cowboy_websocket.erl"},{line,573}]},{cowboy_protocol,execute,4,[{file,"/home/vagrant/vernemq/_build/default/lib/cowboy/src/cowboy_protocol.erl"},{line,428}]}]}

and i also do the same thing with mosquitto, it's ok.

thanks

OTP 18 compile error

vernemq/_build/default/lib/plumtree/src/hashtree.erl:497: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.

No progress when publishing many QoS 2 messages.

This is another issue encountered after #37 was resolved.

My test case publishes 500 QoS 2 messages via the libmosquitto client API and waits for the publish handshakes to complete before continuing. This works fine when using a mosquitto server with max_inflight_messages=20 on both the server and client side. When I substitute the mosqitto server for a VerneMQ server (with max_inflight_messages=20), only the first 20 handshakes complete, and the rest don't make further progress.

CRASH REPORT after connecting from the other side of the globe

Hi guys,

Not sure if this is the right forum, but I'll go for it anyway.

I'm using VerneMQ here as an mqtt server for a prototype application and that works fine (connection/publish/subscribe). However, when my colleagues from Japan try to do the same, they fail to connect to my server. If I then look in the logs I see the following CRASH REPORTs (they tried to connect twice).

2015-08-28 12:18:33.434 [error] <0.2751.9> CRASH REPORT Process <0.2751.9> with 0 neighbours crashed with reason: no match of right hand value {error,enotconn} in vmq_ranch:init/4 line 66
2015-08-28 12:18:33.435 [error] <0.270.0> Ranch listener {{192,168,116,112},1883} had connection process started with vmq_ranch:start_link/4 at <0.2751.9> exit with reason: {badmatch,{error,enotconn}}

2015-08-28 12:18:55.087 [error] <0.2791.9> CRASH REPORT Process <0.2791.9> with 0 neighbours crashed with reason: no match of right hand value {error,enotconn} in vmq_ranch:init/4 line 66
2015-08-28 12:18:55.087 [error] <0.270.0> Ranch listener {{192,168,116,112},1883} had connection process started with vmq_ranch:start_link/4 at <0.2791.9> exit with reason: {badmatch,{error,enotconn}}

Am I doing something wrong or is this a server issue?

Here are some more details:

I'm running Vernemq 0.10.1-ef5a45b3 on Ubuntu (64 bit).
Client is an android phone using the Eclipse PAHO mqtt client.
Network setup is client => internet => reverse proxy on AWS => ssh tunnel => vernemq server. From my location (Europe) this works fine, but I can imagine different delays when calling from Japan.

cheers,

Bert

can't register client due to reason not_ready

I have tow vernemqs be clustered, use nginx tcp proxy ,if one vernemq is down, other vernemq is not work , console print " can't register client {[] xxxx} due to reason not_ready "
why?

how to add new cluster ?

Hi there,

I was test run VerneMQ with 3 cluster,when run " vmq-admin cluster join discovery-node="
The node new cluster, why must restart service?

And, when client not send any message in period 5 minutes, service is stalled. why I says is stalled, because client cannot send any message again. please help me for step by step for join the cluster?

Thanks

Can't forward messages to other node in the same cluster.

Hi there,
I have a problem when I try to use vernemq's clustering feature.

In this experiment, I have 2 node, named 'broker02' and 'broker03'.
I executed this command on broker 03 :
sudo vmq-admin cluster join [email protected]
and it worked. as a proof, when I run :
sudo vmq-admin cluster status
it shows :
+-------------------------------+-------+
| Node |Running|
+-------------------------------+-------+
|[email protected]| true |
|[email protected]| true |
+-------------------------------+-------+

and, the next things I did was to have 2 clients. 'Client A' connected to broker02, and 'Client B' connected to broker03. and I expected that if I publish a message from 'Client A', 'Client B' should receive a message published from 'Client A'. Is that correct?

then I published a message from 'Client A', and wait to see if 'Client B' will receive it or not.
but, in fact, 'Client B' still not get any message even until now.

what's wrong? am I configured it in a wrong way? is there something I can do?

FYI, I also check error log and console log
on broker02, I found this on console log.
2015-10-05 06:01:33.633 [warning] <0.256.0>@vmq_cluster_node:handle_message:155 got unknown message reconnect for node '[email protected]' (reachable true)
2015-10-05 06:01:33.633 [warning] <0.256.0>@vmq_cluster_node:handle_message:155 got unknown message reconnect for node '[email protected]' (reachable true)
2015-10-05 06:01:33.633 [warning] <0.256.0>@vmq_cluster_node:handle_message:155 got unknown message reconnect for node '[email protected]' (reachable true)
2015-10-05 06:01:33.635 [warning] <0.31346.3>@vmq_cluster_com: loop :70 terminate due to remote_node_not_available

and nothing on error.log

and on broker03, I also found this on console.log:
2015-10-05 05:59:56.725 [warning] <0.4516.3>@vmq_cluster_com: loop :70 terminate due to remote_node_not_available
2015-10-05 05:59:57.728 [warning] <0.4549.3>@vmq_cluster_com: loop :70 terminate due to remote_node_not_available
2015-10-05 05:59:58.730 [warning] <0.4582.3>@vmq_cluster_com: loop :70 terminate due to remote_node_not_available

and also nothing on error.log

Please help...

Thank you ๐Ÿ˜„

Error when subscribing to many topics quickly.

I'm testing VerneMQ with the tests for an existing application that uses libmosquitto as a client. The application and tests work well with mosquitto as the MQTT broker.

The first issue I've run into is with a test that subcribes to 500 topics, publishes a single message on each one, then checks that they were all received by the subscriber.

During the call that makes 500 concurrent subscribe requests from the client to the broker, the VerneMQ broker disconnects the client and I see the following message in the log window:

2015-08-17 14:30:54.147 [warning] <0.486.0>@vmq_ranch:teardown:120 [<0.487.0>] session stopped
                       abnormally due to parse_error

I'm using git rev 1a9ff2a, built with make rel.

Automatic discovery of cluster nodes

Is it possible to automatically discover cluster nodes?

Think about a setup using Amazon Auto Scale, which can automatically instantiate new instances. It would be nice to somehow auto-discover the cluster and join it.

Cluster does not survive a vernemq restart of one server.

From IRC discussion:

[18:01] Steps to provoke:
[18:02] 1. clean out /var/lib/vernemq completely on both systems with vernemq stopped
[18:02] 2. Start vernemq on both systems
[18:02] 3. One mosquitto_sub subscribed to a topic on first server
[18:02] 4. One mosquitto_sub susscribed to same topic on second server
[18:03] 5. Do the cluster join and verify both nodes report ok
[18:03] 6. Do a mosquitto_pub to one server - both subscribed servers receive
[18:03] 7. Do a mosquitto_pub to second server - both subscribed servers receive
[18:04] 8. Restart second server (vernemq restart)
[18:04] 9 Repeat 6-7
[18:04] Now it only works from server 2 to server 1
[18:04] Both servers still report ok on the cluster
[18:05] And it has not recovered in the time it took to write the above :)

vernemq stop hangs on Ubuntu LTS 14.04.3

Installed from ppa as per docs (https://vernemq.com/docs/install.html).

$ vernemq start

works as expected, however

$ vernemq stop

will hang. ok is printed, but the command never exits.

$ sudo vernemq version
0.11.1
$ sudo vernemq start
$ date
ti 6.10.2015 14.37.17 +0300
$ย sudo vernemq stop
ok
^C
Session terminated, terminating shell... ...terminated.
$ย date
ti 6.10.2015 14.39.17 +0300

Logs from /var/log/vernemq/console.log with debug level enabled: http://pastebin.com/1Ft4VLdU

Must not accept (un)subscription topics with illegal wildcard characters

[MQTT-4.7.1-2]
The multi-level wildcard character MUST be specified either on its own or following a topic level >separator. In either case it MUST be the last character specified in the Topic Filter.

[MQTT-4.7.1-3]
The single-level wildcard can be used at any level in the Topic Filter, including first and last levels. >Where it is used it MUST occupy an entire level of the filter.

mqtt features missing?

i do not see that the retain message, last will and testament and wildcard topic mqtt feature listed in the introduction page. so is just you forget to add it up or these features are currentlly not implemented?

Must not accept zero byte Client ID with clean session NO

[MQTT-3.1.3-8]
If the Client supplies a zero-byte ClientId with CleanSession set to 0, the Server MUST respond to the >CONNECT Packet with a CONNACK return code 0x02 (Identifier rejected) and then close the Network >Connection.
[MQTT-3.1.3-9]
If the Server rejects the ClientId it MUST respond to the CONNECT Packet with a CONNACK return >code 0x02 (Identifier rejected) and then close the Network Connection.

how is the cluster forward the message across the nodes?

hi, there:

i did not find docs which explain how the vernemq cluster works. so i wonder that is vernemq meets these two strategies:

  1. A message only gets forwarded to other cluster nodes if a cluster node is interested in itใ€‚this reduces the network traffic tremendously, because it prevents nodes from forwarding unnecessary messages
  2. As soon as a client on a node subscribes to a topic it becomes known within the cluster. If one of the clients somewhere in the cluster is publishing to this topic, the message will be delivered to its subscriber no matter to which cluster node it is connected.

thanks.

What is the recommended way to persist the messages?

We need to store every message that is arriving (say, sensor readings) - what is the best way to go about it?

Clearly, having a subscriber subscribe to all and make it write to backend DB is not a good solution (unnecessary I/O, scalability issues .. so on).

Any way this could be supported on the server ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.