Giter Site home page Giter Site logo

facebook / mcrouter Goto Github PK

View Code? Open in Web Editor NEW
3.2K 249.0 521.0 32.31 MB

Mcrouter is a memcached protocol router for scaling memcached deployments.

License: MIT License

C++ 91.62% C 1.09% Shell 0.48% Python 3.97% Makefile 0.40% M4 1.07% Ragel 0.42% Dockerfile 0.03% Thrift 0.92%

mcrouter's Introduction

Mcrouter Build Status

Support Ukraine License

Mcrouter (pronounced mc router) is a memcached protocol router for scaling memcached deployments. It's a core component of cache infrastructure at Facebook and Instagram where mcrouter handles almost 5 billion requests per second at peak.

Mcrouter is developed and maintained by Facebook.

See https://github.com/facebook/mcrouter/wiki to get started.

Quick start guide

New! Ubuntu package available

Currently, we support Ubuntu Bionic (18.04) amd64. Here is how to install it:

Add the repo key:

$ wget -O - https://facebook.github.io/mcrouter/debrepo/bionic/PUBLIC.KEY | sudo apt-key add

Add the following line to apt sources file /etc/apt/sources.list

deb https://facebook.github.io/mcrouter/debrepo/bionic bionic contrib

Update the local repo cache:

$ sudo apt-get update

Install mcrouter:

$ sudo apt-get install mcrouter

Installing From Source

See https://github.com/facebook/mcrouter/wiki/mcrouter-installation for more detailed installation instructions.

Mcrouter depends on folly, wangle, fizz, and fbthrift.

The installation is a standard autotools flow:

$ autoreconf --install
$ ./configure
$ make
$ sudo make install
$ mcrouter --help

Assuming you have a memcached instance on the local host running on port 5001, the simplest mcrouter setup is:

$ mcrouter \
    --config-str='{"pools":{"A":{"servers":["127.0.0.1:5001"]}},
                  "route":"PoolRoute|A"}' \
    -p 5000
$ echo -ne "get key\r\n" | nc 0 5000

(nc is the GNU Netcat, http://netcat.sourceforge.net/)

Features

  • Memcached ASCII protocol
  • Connection pooling
  • Multiple hashing schemes
  • Prefix routing
  • Replicated pools
  • Production traffic shadowing
  • Online reconfiguration
  • Flexible routing
  • Destination health monitoring/automatic failover
  • Cold cache warm up
  • Broadcast operations
  • Reliable delete stream
  • Multi-cluster support
  • Rich stats and debug commands
  • Quality of service
  • Large values
  • Multi-level caches
  • IPv6 support
  • SSL support

Links

Documentation: https://github.com/facebook/mcrouter/wiki Engineering discussions and support: https://www.facebook.com/groups/mcrouter

License

Copyright (c) Facebook, Inc. and its affiliates.

Licensed under the MIT license: https://github.com/facebook/mcrouter/blob/master/LICENSE

mcrouter's People

Contributors

alikhtarov avatar andreazevedo avatar andriigrynenko avatar anhuang avatar anidev avatar callenrain avatar denisyaroshevskiy avatar disylh avatar ftimyo avatar ghostonhuang avatar glamtechie avatar iahs avatar igorsugak avatar ilonapapava avatar int avatar jmswen avatar lenar-f avatar meyering avatar ngoyal avatar niaoniaozz avatar orvid avatar ot avatar prateek1404 avatar r-barnes avatar sarangbh avatar spalamarchuk avatar stuclar avatar vrishal avatar yfeldblum avatar zertosh 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  avatar  avatar  avatar

mcrouter's Issues

Install Script Returns Non-Zero Code

Great piece of work here, finally got this building as a docker image successfully. 👍

Unfortunately the script at https://github.com/facebook/mcrouter/blob/master/mcrouter/scripts/get_and_build_everything.sh returns a non-zero code which can make things difficult for those using this with an automated build. For me, it meant that an hour long compile process ended in failure with

2014/09/17 03:25:48 The command [/bin/sh -c cd /tmp/mcrouter/mcrouter/scripts  && ./install_ubuntu_14.04.sh /usr/local/lib] returned a non-zero code: 3

This script should return 0 on success.

SET /*/pool/key causes segfault

I am getting started with mcrouter and trying to find a config that will work for me. While testing I found that some combination of config and set would cause a segfault.

Here is my config: https://gist.github.com/ptrmcrthr/dd9965739ecaaf8cd67a
Here is the gdb output: https://gist.github.com/ptrmcrthr/05d4536af96b900c04fb

The last command below causes a segfault:

[vagrant@vagrant ~]$ echo -e 'set /dc1/default/mykey 0 60 5\r\nhello\r' | nc 192.168.59.103 5000 
STORED
[vagrant@vagrant ~]$ echo -e 'get /dc1/default/mykey' | nc 192.168.59.103 5000
VALUE /dc1/default/mykey 0 5
hello
END
[vagrant@vagrant ~]$ echo -e 'stats' | nc 192.168.59.103 5000 | grep version 
STAT version mcrouter 1.0
[vagrant@vagrant ~]$ echo -e 'set /*/default/mykey 0 60 5\r\nhello\r' | nc 192.168.59.103 5000 

I am trying to create a configuration with two datacenters. I would like to broadcast some write operations to both datacenters.

building mcrouter

I tried building mcrouter with official containter and it fails to build.
What is the "stable" commit that works ?

my mcrouter warmup can't work ,need help

my command line is : mcrouter --config-file=warm.json --reset-inactive-connection-interval=1000000 -i 60 -p 7001 -b -D 5

and warm.json config :
{
"pools": {
"cold": { "servers": [ "xx.xx.xx.xx:11211" ] },
"warm": { "servers": [ "xx.xx.xx.xx:11212" ] }
},
"route": {
"type": "WarmUpRoute",
"cold": "PoolRoute|cold",
"warm": "PoolRoute|warm"
}
}

it looks my warm memcached status change from unmarked TKO to marked TKO repeatly , i''m really mad .
the following is the debug info
I0421 09:56:48.683130 9112 AsyncSocket.cpp:729] AsyncSocket::close(): this=0x7fcd8800bdd0, fd_=24, state=2, shutdownFlags=0
I0421 09:56:48.683145 9112 AsyncSocket.cpp:784] AsyncSocket::closeNow(): this=0x7fcd8800bdd0, fd_=24, state=2, shutdownFlags=0
I0421 09:56:48.683217 9112 ProxyDestination.cpp:344] server xx.xx.xx.xx:11212:TCP:ascii-1000 down (1 of 2)
I0421 09:56:48.683243 9112 ProxyDestination.cpp:304] xx.xx.xx.xx:11212 (warm) marked hard TKO. Total hard TKOs: 1; soft TKOs: 0. Reply: mc_res_connect_error
I0421 09:56:48.683262 9112 AsyncSocket.cpp:245] AsyncSocket::destroy(this=0x7fcd8800bdd0, evb=0xd2d6e8, fd=-1, state=3
I0421 09:56:48.683277 9112 AsyncSocket.cpp:784] AsyncSocket::closeNow(): this=0x7fcd8800bdd0, fd_=-1, state=3, shutdownFlags=6
VALUE t1 0 1
a
END
I0421 09:56:48.683380 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:56:48.683403 9112 EventBase.cpp:292] EventBase(): Starting loop.
I0421 09:56:48.865684 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:56:48.865721 9112 EventBase.cpp:292] EventBase(): Starting loop.
get t3
I0421 09:56:52.061990 9112 AsyncSocket.cpp:1226] AsyncSocket::handleRead() this=0x7fcd88001720, fd=22, state=2
I0421 09:56:52.062062 9112 Fiber.cpp:112] Stack usage: 3380
I0421 09:56:52.062096 9112 Fiber.cpp:112] Stack usage: 5332
I0421 09:56:52.062114 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:56:52.062125 9112 EventBase.cpp:292] EventBase(): Starting loop.
I0421 09:56:52.062189 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:56:52.062209 9112 EventBase.cpp:292] EventBase(): Starting loop.
I0421 09:56:52.062337 9112 AsyncSocket.cpp:1226] AsyncSocket::handleRead() this=0x7fcd88009e70, fd=23, state=2
I0421 09:56:52.062400 9112 Fiber.cpp:112] Stack usage: 3380
I0421 09:56:52.062500 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:56:52.062522 9112 EventBase.cpp:292] EventBase(): Starting loop.
END
I0421 09:56:53.063652 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:56:53.063690 9112 EventBase.cpp:292] EventBase(): Starting loop.
quit
I0421 09:56:57.141985 9112 AsyncSocket.cpp:1226] AsyncSocket::handleRead() this=0x7fcd88001720, fd=22, state=2
I0421 09:56:57.142040 9112 AsyncSocket.cpp:1694] AsyncSocket::updateEventRegistration(this=0x7fcd88001720, fd=22, evb=0xd2d6e8, state=2, events=0
I0421 09:56:57.142063 9112 AsyncSocket.cpp:245] AsyncSocket::destroy(this=0x7fcd88001720, evb=0xd2d6e8, fd=22, state=2
I0421 09:56:57.142077 9112 AsyncSocket.cpp:784] AsyncSocket::closeNow(): this=0x7fcd88001720, fd_=22, state=2, shutdownFlags=0
I0421 09:56:57.142163 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:56:57.142185 9112 EventBase.cpp:292] EventBase(): Starting loop.
Connection closed by foreign host.
[root@kjwh163 lixq]# I0421 09:57:00.025192 9112 Fiber.cpp:112] Stack usage: 1780
I0421 09:57:00.025230 9112 AsyncSocket.cpp:188] new AsyncSocket(0x7fcd88003400, evb=0xd2d6e8)
I0421 09:57:00.025349 9112 AsyncSocket.cpp:374] AsyncSocket::connect(this=0x7fcd88003400, evb=0xd2d6e8, fd=22, host=221.235.53.163:11212
I0421 09:57:00.025487 9112 Fiber.cpp:112] Stack usage: 1892
I0421 09:57:00.025514 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:57:00.025528 9112 EventBase.cpp:292] EventBase(): Starting loop.
I0421 09:57:00.025550 9112 AsyncSocket.cpp:1332] AsyncSocket::handleWrite() this=0x7fcd88003400, fd=22, state=1
I0421 09:57:00.025566 9112 AsyncSocket.cpp:1507] AsyncSocket::handleConnect() this=0x7fcd88003400, fd=22, state=1
I0421 09:57:00.025583 9112 ProxyDestination.cpp:344] server xx.xx.xx.xx:11212:TCP:ascii-1000 up (2 of 2)
I0421 09:57:00.025604 9112 AsyncSocket.cpp:1694] AsyncSocket::updateEventRegistration(this=0x7fcd88003400, fd=22, evb=0xd2d6e8, state=2, events=2
I0421 09:57:00.025671 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:57:00.025691 9112 EventBase.cpp:292] EventBase(): Starting loop.
I0421 09:57:00.025804 9112 AsyncSocket.cpp:1226] AsyncSocket::handleRead() this=0x7fcd88003400, fd=22, state=2
I0421 09:57:00.025859 9112 ProxyDestination.cpp:304] xx.xx.xx.xx:11212 (warm) unmarked TKO. Total hard TKOs: 0; soft TKOs: 0. Reply: mc_res_ok
I0421 09:57:00.025883 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:57:00.025897 9112 EventBase.cpp:292] EventBase(): Starting loop.
I0421 09:57:01.027014 9112 EventBase.cpp:421] EventBase(): Done with loop.
I0421 09:57:01.027055 9112 EventBase.cpp:292] EventBase(): Starting loop.

HA Setup

When running multiple instances of mcrouter, what mechanism do you all use at facebook to:

  • ensure failover when one goes down
  • ensure sharding happens the same way on many servers (I am guessing the hash ring computes keys the same way)
  • ensuring shard computation stays consistent regardless of backends

On the last one, the scenario I have in mind is we have one pool with 5 backend memcached servers and we need to swap one of those backends out for another machine for some reason (faulty hardware on physical host maybe). How can I ensure that bringing in a new backend doesn't cause the key routing to change and, as a result, put a heavy load on the other backends?

HA Solution

there is my mcrouter config file.i want to implement the ha memcache,this is some questions troubled me.

1:in some case,if the mcrouter instance and the application is installed in on Physical server?
2:if the mcrouter is down ,how can ensure the application is runing?
3:if all the memached server is all in the same datacenter,if there is only one pools is enough?
4:how to config the ha config.blow is my test config.?

{
   "pools": {
     "cache1": { "servers": ["172.16.200.98:11211"] },
     "cache2": { "servers": ["172.16.200.99:11211"] }
   },
   "route": {
     "type": "OperationSelectorRoute",
     "delete": {
         "type": "AllSyncRoute",
         "children": [ "PoolRoute|cache1", "PoolRoute|cache2" ]
      },
      "set": {
         "type": "AllSyncRoute",
         "children": [ "PoolRoute|cache1", "PoolRoute|cache2" ]
      },
      "get": {
         "type": "AllFastestRoute",
         "children": [ "PoolRoute|cache1", "PoolRoute|cache2" ]
      },

   }
 }

In my config ,if one memcached is down,the mcrouter instance can used in get、set command, but can't been used into set commant,response error like this

set a 0 600 5
aaaaa
SERVER_ERROR unavailable

I want to config the ha like this,there is mutiple mcrouter server,the application connect the two mcrouter server,the application write the data to the one of the mcrouter servers ,mcrouter write the data to the two memcached server,if every memcached server is down ,the mcrouter can read/write the request to other.

Rhel5.x builds?

I suppose no one has been insane enough (like us) to try a build this on rhel5.x (centos5)

Statically build all libraries from dependencies

Have a need to use mcrouter with ubuntu 12.04, so, is there a way to build all the libraries statically? I'm really lost in all these includes and dependencies and scripts, would be great if somebody can prompt were to put -static option?

mcrouter container (plus a REST API)

Don't know where to share this, so I'll open an issue and share it here. :-)

I really love this project, it got released the very DAY I was dealing with memcached clustering issues with our hastily built cache warmer. Anyhow I have released a docker container with it installed and you can grab it here. It's pretty straightforward and conveniently already has a mounted volume for /etc/mrouter to pick up configurations.

The other docker image I pushed out exposes modifying the configuration via a REST API and requires being linked with the previous container. Still some heavy development going into this but I'd definately like some feedback: https://registry.hub.docker.com/u/jamescarr/mcrouter-rest-api/.

Again, thanks for sharing such a great tool! 👍

Release tagging

For downstream packaging, it would really help if this project adopted semantic versioning and used git annotated tags to generate release tarballs. Any possibility of getting this tagged with some version? I am packaging this up, and really want to avoid assigning my own version to this project :)

Thanks!

mcrouter crashes if pool member DNS does not resolve

Promoted a configuration to a host that included memcache servers I had not built yet. Mcrouter started cleanly, however commands sent to mcrouter pool with the invalid hosts causes mcrouter to crash.

I would expect mcrouter to perhaps TKO the host immediately and keep retrying it to see if it comes back at some point; or just permanently mark it dead, requiring a mcrouter restart to bring it back online. Perhaps logging at start so users can see they have a node not resolving immediately?

This is using the latest version with the latest changes from April 29th. I have not tried this scenario before today.

Let me know if I can provide any more information. Here's logs, which I've thinned down a bit to make it easier to read.

I0506 15:32:26.450889 15456 McrouterInstance.cpp:581] reconfigured 1 proxies with 16 clients (111c75b2a583c734860392c8262cdb8d)
I0506 15:32:26.451611 15456 server.cpp:150] Spawning AsyncMcServer
I0506 15:33:12.448019 15463 EventBase.cpp:292] EventBase(): Starting loop.
I0506 15:33:12.448074 15463 AsyncSocket.cpp:211] new AsyncSocket(0x7f3fbc001740, evb=0x273cc58, fd=24)
I0506 15:33:12.448118 15463 AsyncSocket.cpp:513] AsyncSocket::setReadCallback() this=0x7f3fbc001740, fd=24, callback=0x7f3fbc001940, state=2
I0506 15:33:12.448132 15463 AsyncSocket.cpp:1694] AsyncSocket::updateEventRegistration(this=0x7f3fbc001740, fd=24, evb=0x273cc58, state=2, events=2
I0506 15:33:12.448151 15463 EventBase.cpp:421] EventBase(): Done with loop.
I0506 15:33:12.448160 15463 EventBase.cpp:292] EventBase(): Starting loop.
I0506 15:33:12.448178 15463 AsyncSocket.cpp:1176] AsyncSocket::ioRead() this=0x7f3fbc001740, fd24, events=2, state=2
I0506 15:33:12.448187 15463 AsyncSocket.cpp:1226] AsyncSocket::handleRead() this=0x7f3fbc001740, fd=24, state=2
I0506 15:33:12.448351 15463 Fiber.cpp:112] Stack usage: 5956
I0506 15:33:12.448395 15463 AsyncSocket.cpp:188] new AsyncSocket(0x7f3fbc035250, evb=0x273cc58)
I0506 15:33:12.448460 15463 AsyncSocket.cpp:374] AsyncSocket::connect(this=0x7f3fbc035250, evb=0x273cc58, fd=25, host=10.99.99.1:11211
I0506 15:33:12.448557 15463 Fiber.cpp:112] Stack usage: 6084
I0506 15:33:12.448591 15463 Fiber.cpp:112] Stack usage: 2660
I0506 15:33:12.448604 15463 AsyncSocket.cpp:188] new AsyncSocket(0x7f3fbc035e70, evb=0x273cc58)
I0506 15:33:12.448627 15463 AsyncSocket.cpp:374] AsyncSocket::connect(this=0x7f3fbc035e70, evb=0x273cc58, fd=26, host=10.99.99.2:11211
I0506 15:33:12.448665 15463 Fiber.cpp:112] Stack usage: 2788
I0506 15:33:12.448706 15463 Fiber.cpp:112] Stack usage: 2660
I0506 15:33:12.448725 15463 AsyncSocket.cpp:188] new AsyncSocket(0x7f3fbc0366c0, evb=0x273cc58)
I0506 15:33:12.448748 15463 AsyncSocket.cpp:374] AsyncSocket::connect(this=0x7f3fbc0366c0, evb=0x273cc58, fd=27, host=10.99.99.3:11211
I0506 15:33:12.448786 15463 Fiber.cpp:112] Stack usage: 2788
I0506 15:33:12.448834 15463 Fiber.cpp:112] Stack usage: 2660
I0506 15:33:12.448854 15463 AsyncSocket.cpp:188] new AsyncSocket(0x7f3fbc036f10, evb=0x273cc58)
I0506 15:33:12.448889 15463 AsyncSocket.cpp:374] AsyncSocket::connect(this=0x7f3fbc036f10, evb=0x273cc58, fd=28, host=10.99.99.4:11211
I0506 15:33:12.448938 15463 Fiber.cpp:112] Stack usage: 2788
I0506 15:33:12.448969 15463 Fiber.cpp:112] Stack usage: 2660
I0506 15:33:12.448988 15463 AsyncSocket.cpp:188] new AsyncSocket(0x7f3fbc037760, evb=0x273cc58)
I0506 15:33:12.449019 15463 AsyncSocket.cpp:374] AsyncSocket::connect(this=0x7f3fbc037760, evb=0x273cc58, fd=29, host=10.99.99.5:11211
I0506 15:33:12.449059 15463 Fiber.cpp:112] Stack usage: 2788
I0506 15:33:12.449092 15463 Fiber.cpp:112] Stack usage: 2660
I0506 15:33:12.449108 15463 AsyncSocket.cpp:188] new AsyncSocket(0x7f3fbc037fb0, evb=0x273cc58)
I0506 15:33:12.449167 15463 AsyncSocket.cpp:374] AsyncSocket::connect(this=0x7f3fbc037fb0, evb=0x273cc58, fd=30, host=10.99.99.6:11211
I0506 15:33:12.449211 15463 Fiber.cpp:112] Stack usage: 2788
I0506 15:33:12.449245 15463 Fiber.cpp:112] Stack usage: 2660
I0506 15:33:12.449268 15463 AsyncSocket.cpp:188] new AsyncSocket(0x7f3fbc038800, evb=0x273cc58)
F0506 15:33:12.452230 15463 FiberManager-inl.h:449] Exception St12system_error with message 'Failed to resolve address for "mcrouter07.dev": Name or service not known (error=-2): Unknown error -2' was thrown in FiberManager with context 'running immediateFunc_'
*** Check failure stack trace: ***

    @     0x7f3fd11afdaa  (unknown)
    @     0x7f3fd11afce4  (unknown)
    @     0x7f3fd11af6e6  (unknown)
    @     0x7f3fd11af4fb  (unknown)
    @           0x46155f _ZZN5folly6fibers12FiberManagerC1IN8facebook8memcache8mcrouter11fiber_local6detail20McrouterFiberContextEEENS0_9LocalTypeIT_EESt10unique_ptrINS0_14LoopControllerESt14default_deleteISD_EENS1_7OptionsEENKUlNSt15__exception_ptr13exception_ptrESsE_clESJ_Ss
    @           0x461642  _ZNSt17_Function_handlerIFvNSt15__exception_ptr13exception_ptrESsEZN5folly6fibers12FiberManagerC1IN8facebook8memcache8mcrouter11fiber_local6detail20McrouterFiberContextEEENS4_9LocalTypeIT_EESt10unique_ptrINS4_14LoopControllerESt14default_deleteISH_EENS5_7OptionsEEUlS1_SsE_E9_M_invokeERKSt9_Any_dataS1_Ss
    @           0x460997  std::function<>::operator()()
    @           0x460dfd  folly::fibers::FiberManager::runReadyFiber()
    @           0x461026  folly::fibers::FiberManager::loopUntilNoReady()
    @     0x7f3fd2113094  folly::EventBase::runLoopCallbacks()
    @     0x7f3fd2113332  folly::EventBase::loopBody()
    @           0x43300a  _ZNSt17_Function_handlerIFvmRN5folly9EventBaseERN8facebook8memcache19AsyncMcServerWorkerEEZNS4_8mcrouter9runServerERKNS8_25McrouterStandaloneOptionsERNS8_16McrouterInstanceEEUlmS2_S6_E_E9_M_invokeERKSt9_Any_datamS2_S6_
    @           0x5f09ad  _ZNSt6thread5_ImplISt12_Bind_simpleIFZN8facebook8memcache14McServerThread5spawnESt8functionIFvmRN5folly9EventBaseERNS3_19AsyncMcServerWorkerEEEmEUlvE0_vEEE6_M_runEv
    @     0x7f3fd0712bf0  (unknown)
    @     0x7f3fd096d182  start_thread
    @     0x7f3fcfe7a38d  (unknown)
    @              (nil)  (unknown)

Reg:time taken for setting the keys

I have setup a mcrouter which is redirecting the request to 3 memcached servers.I am using telnet to connect to mcrouter and when i am setting the values in memcached through set command its taking lot of time but get is pretty fast.Can you please help out in this.

session_write_close(): Failed to write session data (memcache)

Hello again,
I've got strange problem with mcrouter, if my php5-fpm work via mcrouter, then errors in the
application (e.g. http code 500), I check syslog and see it:

"session_write_close(): Failed to write session data (memcache). Please verify that the current setting of session.save_path is correct (tcp://172.18.45.69:5000)"

172.18.45.69:5000 - server with mcrouter
172.18.45.138:11213 - server with memcached
it is session.ini of my php5-fpm http://pastebin.com/z1cdEe97
it is config mcrouter http://pastebin.com/52jVgNEU
I don't have any ideas what wrong with php5-fpm or mcrouter. Can you help me please?
Thanks a lot.

Multi-key GET Behavior

I noticed that mcrouter when given a multi-key get request (ex: get key1 key2 key3 \r\n) splits it into single-key get requests (get key1 \r\n & get key2 \r\n & get key3 \r\n), even if all of the keys have the same route and hash to the same server in a pool.

example config:

{"pools":{"A":{"servers":["172.17.0.3:11211", "172.17.0.4:11211"]}},"route":"PoolRoute|A"}

If the keys abc and def exist on 172.17.0.3:11211, a get abc def \r\n against mcrouter results in:

<28 get abc
>28 sending key abc
>28 END
<28 get def
>28 sending key def
>28 END

when arguably it could have been optimized:

<28 get abc def
>28 sending key abc
>28 sending key def
>28 END

In summary: For a multi-key get request, why not (1) parse the keys (2) run the appropriate hashing function against each key (3) combine keys that hash to the same server into a multi-key get request (4) send the computed multi-key get request(s) and single-key request(s) and finally (5) consolidate the response to return back to the caller.

Is there a philosophical reason why this was not done? Or would this be a reasonable enhancement request?

Thanks!

Install error

I have a problem installing mcrouter

error while loading shared libraries: libfolly.so.30: cannot open shared object file: No such file or directory

I already install facebook folly so i am not sure why it has problems loading. Please help.

Thanks

Folly failing to build with provided recipe

The Folly repo no longer contains the SConscript.double-conversion file. The folly.sh file is attempting to copy it in and do an 'scons -f' on it. double-conversion is not getting built.

So double-conversion is having to be built separately before the recipe can be run.

Compilation fails on Ubuntu 14.04 due to missing lib in linking

I've tried compiling mcrouter on Ubuntu 14.04 and the compilation fails due to libdouble-conversion missing from linking chain, error message below:

/bin/bash ./libtool --tag=CXX --mode=link g++ -DLIBMC_FBTRACE_DISABLE -Wno-missing-field-initializers -Wno-deprecated -O3 -g -W -Wall -Wextra -Wno-unused-parameter -fno-strict-aliasing -std=gnu++0x -g -O2 -o mcrouter mcrouter-main.o mcrouter-server.o mcrouter-standalone_options.o libmcroutercore.a lib/libmcrouter.a -lthrift -lthriftcpp2 -lfolly -lz -lssl -lcrypto -lcap -levent -lgflags -lglog -L/usr/lib/x86_64-linux-gnu -lboost_context -lboost_filesystem -lboost_system -lboost_regex -lpthread -pthread
libtool: link: g++ -DLIBMC_FBTRACE_DISABLE -Wno-missing-field-initializers -Wno-deprecated -O3 -g -W -Wall -Wextra -Wno-unused-parameter -fno-strict-aliasing -std=gnu++0x -g -O2 -o mcrouter mcrouter-main.o mcrouter-server.o mcrouter-standalone_options.o -pthread libmcroutercore.a lib/libmcrouter.a -lthrift -lthriftcpp2 -lfolly -lz -lssl -lcrypto -lcap -levent -lgflags -lglog -L/usr/lib/x86_64-linux-gnu -lboost_context -lboost_filesystem -lboost_system -lboost_regex -lpthread -pthread
/usr/bin/ld: libmcroutercore.a(libmcroutercore_a-stats.o): undefined reference to symbol '_ZNK17double_conversion23DoubleToStringConverter13ToExponentialEdiPNS_13StringBuilderE'
//usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [mcrouter] Error 1
make[2]: Leaving directory /root/mcrouter/mcrouter' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory/root/mcrouter/mcrouter'
make: *** [all] Error 2

Adding "-ldouble-conversion" to LIBS variable in the Makefile of mcrouter fixed the issue.

mcrouter config problem config-file vs config-str

Hi, I am testing mcrouter and the problem I found is that when I use config-file mcrouter.json:
{"pools":{"A":{"servers":["127.0.0.1:11211"]}},"route":"PoolRoute|A"}
mcrouter seems to lose connection to memcached

127.0.0.1:11211 (A) marked soft TKO. Total hard TKOs: 0; soft TKOs: 1. Reply: mc_res_timeout

but when I start mcrouter with config-str using the same line that is in the file, the mcrouter behaves perfect and memcslap loads data correctly.

I also tried to enable --disable-reload-configs thinking that maybe is related to some inotify issue.

I am missing something? I am running it on ubuntu 14.04 from master and installed using the provided script.

Error with libfolly.so.35, No such file or directory

There are three servers, no.1, no.2, no.3.

I follow the same process, git clone folly, double-conversion, compile it. And then git clone mcrouter, compile it.

And I make a bash to do it, please check: http://git.oschina.net/janpoem/ubuntu-server-deploy/blob/master/mc.sh

Everything is ok in no.1, no.2, but except no.3. When I execute mcrouter, it throws error as below:

mcrouter: error while loading shared libraries: libfolly.so.35: cannot open shared object file: No such file or directory

I try to rebuild folly and mcrouter many times, but the problem still there.

How to fix it?

install of dependency fails

Hi

I tried to install mcrouter on 'debian 7' but I got into some issue when compiling folly. Any suggestions on the below error?

In file included from io/async/AsyncTimeout.cpp:22:0:
./../folly/io/async/EventBase.h:130:3: error: looser throw specifier for 'virtual folly::EventBase::~EventBase()'
In file included from ./../folly/io/async/EventBase.h:22:0,
from io/async/AsyncTimeout.cpp:22:
./../folly/wangle/Executor.h:29:13: error: overriding 'virtual folly::wangle::Executor::~Executor() noexcept (true)'
make[2]: [io/async/AsyncTimeout.lo] Error 1
make[2]: Leaving directory /home/ciprian/folly-master/folly' make[1]: [all-recursive] Error 1 make[1]: Leaving directory/home/ciprian/folly-master/folly'
make: * [all] Error 2

Thanks!

Memcache binary protocol support

Hi,

mcrouter currently only supports ascii protocol, which is not ideal for performance. Is it planned to implement support for memcache binary protocol ? It would be great and would allow mcrouter to work with Dalli, the reference ruby gem to work with memcache.

I see that you support the umbrella protocol and are using it at Facebook, but I cant find any documentation on it. Is it for your internal use only ?

Thanks !

Question about ch3/furc hashing algorithm

Hi there,

I've noticed that when adding a box to the end of the list of servers in a PoolRoute using ch3 that it behaves as one would expect, in accordance with this comment in hash.h. However, recently we needed to remove a box about 2/3 of the way up in the list of servers. Coming from a hash ring implementation that was using ketama we were greeted with quite a surprise when we rolled out the new config that removed the offending host. About 2/3 of the cluster was cold :/ What's the best way to handle removing various failing hosts from the config? Is this just something that shouldn't be happening all that often and TKO tracking + FailOverRoutes should be good enough to hold over while a bad host is reprovisioned? Any chance that Ketama could be added as a hash option?

Thanks!
Justin Marney

Docs for AllAsyncRoute

I found reference to AllAsyncRoute in #9 , however I'm not seeing it on the List of Route Handles page. Can this route handle's details be added? Thanks!

--big-value-split-threshold Details

I was looking for some more details on the --big-value-split-threshold option.

  • What is the value of N? The size of a value in bytes?
  • How can I safely turn the option on? I just tried to in production and we received A LOT of timeouts for every get attempt that was over the threshold. I got too scared and backed out.

install error

when i install mcrouter some errors like below:
configure: error: C compiler cannot create executables
See `config.log' for more details.
make: *** No targets specified and no makefile found. Stop.
mcrouter.sh: line 20: mcrouter: command not found

how can I solve this issue ?

Using mcrouter with my Python web api

I was wondering how best to use Mcrouter with my python web api. I have been using a python wrapper for my memcached deployments before but couldn't find a similar wrapper for mcrouter.

php-fpm 5.5.23 doesn't work with mcrouter

Hello, I get a strange problem with mcrouter and php5-fpm. I have servers with php-fpm 5.5.4 they work fine with mcrouter via "session" and "session.save_path", but If I start php5-fpm 5.5.23 my app work very slow, if I replace in 5.5.23 session.save_path = "tcp://mcrouter.local:5000" to session.save_path = "tcp://memcached1.local:11211" php works fine. Do you know why this happinig?
Thanks.

Can I do both replication and sharding?

First of all, thanks for releasing McRouter!

Let me preface by saying I haven't completely understand the full specs of the config file. But this is what I have in mind:

I am thinking of setting up one big master pool which made of 3 replicas.
This is roughly the config file that I am thinking of (I don't know if this would actually work):

{
   "pools": {
     "Replica1": { "servers": ["memcache-1:11211", "memcache-2:11211"] },
     "Replica2": { "servers": ["memcache-3:11211", "memcache-4:11211"] },
     "Replica3": { "servers": ["memcache-5:11211", "memcache-6:11211"] },
     "Master": { "servers": ["Replica1", "Replica2", "Replica3"] }
   },
   "routes": [
     { "route": "PoolRoute|Replica1" },
     { "route": "PoolRoute|Replica2" },
     { "route": "PoolRoute|Replica3" },
     {
       "type": "OperationSelectorRoute",
       "operation_policies": {
         "add": "AllSyncRoute|Pool|Master",
         "delete": "AllSyncRoute|Pool|Master",
         "get": "LatestRoute|Pool|Master",
         "set": "AllSyncRoute|Pool|Master"
       }
     }
   ]
}

Now, I got a lot of things wrong here. For example, servers array cannot be made of pools and routes item must have aliases field. I am still going through the List of Route Handles docs.

If you don't mind me asking what's the config file to achieve what I am trying to do here? or maybe, point me at the right direction?

Deployment Best Practices

As I mentioned in the other issue (#24), we are testing mcrouter for warming memcached instances across data centers.

Our initial intention was to put mcrouter in front of 6 large (100G) memcached instances with approximately 500-1,000 Rails application connections to each mcrouter instance. However, it seems that with this many client connections mcrouter reaches a point where it can't keep up and client connections fail. We've tested this both with live application traffic and via synthetic load (memslap / mutilate). In every case mcrouter failed below 1,000 client connections.

We've checked obvious things, like ulimits, free ports, etc. But the general gist is nothing we have tried improves performance enough that this is a viable deployment strategy.

Our new strategy is to use a local mcrouter instance for each instance of the application. This would mean 10s of connections per mcrouter, and then many mcrouter instances pointed at the same group of memcached servers.

Can you provide any guidance on the best practices here? What should we expect?

TIA.

Reg:dalli connection with mcrouter

Hi,
when i am using Dalli to connect with mcrouter its breaking,its not able to identify the server.Can you please help out in this.

Regards,
Priyanka Sharma

Understanding Soft Tkos

We (@basecamp) are testing mcrouter as a method of warming memcached instances across data centers. Our application is served from a single live datacenter and we are using mcrouter to keep memcached warmed at the second site. (tldr; If a failover event occurs we need a warm cache.) The latency between data centers is approximately 21ms via private 10G paths.

Our mcrouter config looks like this: https://gist.github.com/tweibley/4f146e1cd1e8155d85ff. If we have configured it as intended, then we are serving requests primarily from Chicago (local).
We pass some options for startup: "--asynclog-disable -a /tmp --probe-timeout-initial 1000 --probe-timeout-max 30000 --latency-threshold-us 200000 --timeouts-until-tko 2 --proxy-threads=auto --managed-mode".

In the log we see something like https://gist.github.com/tweibley/9cc365ad7a7cc5cf52f8.

Can you help us understand why we are seeing soft-tkos?
Are soft tkos a product of measuring latency of each operation (ex:set,get), or of some other measurement? (The wiki page mentions sending version probes...)

response from mcrouter

Hello, my name is Maxim. Have some problem with working mcrouter and replicated pool. I have 1 server with mcrouter and 2 servers with memcached in pool.
When I testing replicated schema and turn off 1 of 2 nodes then my app get error from mcrouter:
Java App:
When all nodes work


  • MCROUTER TEST APP *
    2014.10.21 08:45:28.631 [ INFO] APPLICATION STARTING -
    2014.10.21 08:45:28.635 [ INFO] MemcachedProvider - Memcached client try to start for server on host: localhost port: 5000
    2014.10.21 08:45:28.851 [ INFO] MemcachedConnection - Added {QA sa=localhost/127.0.0.1:5000, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
    2014.10.21 08:45:28.856 [ INFO] Logic - Try to write key: 1
    2014.10.21 08:45:28.895 [DEBUG] MemcachedReal - For iKey: 1, expire: 3600, time: 38, resultOfGet: true, done: true
    2014.10.21 08:45:29.896 [ INFO] Logic - Try to write key: 2
    2014.10.21 08:45:29.901 [DEBUG] MemcachedReal - For iKey: 2, expire: 3600, time: 4, resultOfGet: true, done: true
    2014.10.21 08:45:30.903 [ INFO] Logic - Try to write key: 3
    2014.10.21 08:45:30.909 [DEBUG] MemcachedReal - For iKey: 3, expire: 3600, time: 4, resultOfGet: true, done: true
    2014.10.21 08:45:31.910 [ INFO] Logic - Try to write key: 4
    2014.10.21 08:45:31.915 [DEBUG] MemcachedReal - For iKey: 4, expire: 3600, time: 4, resultOfGet: true, done: true
    2014.10.21 08:45:32.916 [ INFO] Logic - Try to write key: 5
    2014.10.21 08:45:32.922 [DEBUG] MemcachedReal - For iKey: 5, expire: 3600, time: 4, resultOfGet: true, done: true
    2014.10.21 08:45:33.923 [ INFO] Logic - Try to write key: 6
    2014.10.21 08:45:33.928 [DEBUG] MemcachedReal - For iKey: 6, expire: 3600, time: 4, resultOfGet: true, done: true
    2014.10.21 08:45:34.930 [ INFO] Logic - Try to write key: 7
    2014.10.21 08:45:34.935 [DEBUG] MemcachedReal - For iKey: 7, expire: 3600, time: 4, resultOfGet: true, done: true

And when 1 of 2 nodes stop:

2014.10.21 08:45:35.936 [ INFO] Logic - Try to write key: 8
2014.10.21 08:45:35.945 [ERROR] StoreOperationImpl - Error: SERVER_ERROR unavailable
2014.10.21 08:45:35.949 [ INFO] MemcachedConnection - Reconnection due to exception handling a memcached operation on {QA sa=localhost/127.0.0.1:5000, #Rops=1, #Wops=0, #iq=0, topRop=Cmd: set Key: key_8 Flags: 0 Exp: 3600 Data Length: 7, topWop=null, toWrite=0, interested=1}. This may be due to an authentication failure.
OperationException: SERVER: SERVER_ERROR unavailable
at net.spy.memcached.protocol.BaseOperationImpl.handleError(BaseOperationImpl.java:192)
at net.spy.memcached.protocol.ascii.OperationImpl.readFromBuffer(OperationImpl.java:152)
at net.spy.memcached.MemcachedConnection.readBufferAndLogMetrics(MemcachedConnection.java:861)
at net.spy.memcached.MemcachedConnection.handleReads(MemcachedConnection.java:840)
at net.spy.memcached.MemcachedConnection.handleReadsAndWrites(MemcachedConnection.java:720)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:683)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:436)
at net.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:1445)
2014.10.21 08:45:35.950 [ WARN] MemcachedReal - Memcached exception for iKey: 8, expire: 3600
java.util.concurrent.ExecutionException: OperationException: SERVER: SERVER_ERROR unavailable
at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:174)
at com.gc.memcached.MemcachedReal.write(MemcachedReal.java:37)
at com.gc.Logic.doLogic(Logic.java:14)
at com.gc.Main.main(Main.java:27)
Caused by: OperationException: SERVER: SERVER_ERROR unavailable
at net.spy.memcached.protocol.BaseOperationImpl.handleError(BaseOperationImpl.java:192)
at net.spy.memcached.protocol.ascii.OperationImpl.readFromBuffer(OperationImpl.java:152)
at net.spy.memcached.MemcachedConnection.readBufferAndLogMetrics(MemcachedConnection.java:861)
at net.spy.memcached.MemcachedConnection.handleReads(MemcachedConnection.java:840)
at net.spy.memcached.MemcachedConnection.handleReadsAndWrites(MemcachedConnection.java:720)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:683)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:436)
at net.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:1445)

key:value stored on 1 node but apps get strange response from mcrouter: Caused by: OperationException: SERVER: SERVER_ERROR unavailable

Config mcrouter:
{
"pools":{
"A":{"servers":["172.18.45.25:11211","172.18.45.26:11211"]}
},
"route": {
"type": "PrefixPolicyRoute",
"operation_policies": {
"delete": "AllSyncRoute|Pool|A",
"get": "LatestRoute|Pool|A",
"set": "AllSyncRoute|Pool|A"
}
}
}

Can you help me please?
Thanks.

SASL authentication

Is it possible to support SASL authentication?
It will be useful for people who deploy their apps on Heroku platform with MCRouter running on AWS EC2 Cloud.
Thanks.

does mcrouter support udp protocol,

I am using udp as my server protcol transfering data to memcache, but I want to use mcrouter as proxy for my memcache, but I don't know how to start mcrouter with udp port, can anybody help me out? thx.

FailoverRoute issue

Hello again.
Currently I have config like this http://pastebin.com/Wfn08B5F
I have 1 server with mcrouter and 2 servers with memcached
For 'delete' - type AllAsyncRoute
For 'get' - type FailoverRoute
For 'set' - type AllAsyncRoute

From docs I read this:
"FailoverRoute

Sends the request to the first child in the list and waits for the reply. If the reply is a non-error, returns it immediately. Otherwise, sends the request to the second child, and so on. If all children respond with errors, returns the last error reply."

When I'm start my java app and run 1000 request on !set! to mcrouter server and test "AllAsyncRoute" (disconnect memcached1 or memcached2 via iptables rule) - it's OK, i can set all 1000 requests to both memcached servers, but when I start java app and run 1000 request on !get! from mcrouter then I get only keys from 1 of 2 servers and nothing all keys. I don't see failover mode.
Sorry for my stupid question, can you help me please?
Thanks.

flush_all doesn't work

Hello, I have mcrouter 1.0
When I try flushed all data I get this error:
telnet mcrouter.local 5001
Trying 172.18.45.240...
Connected to mcrouter.local.
Escape character is '^]'.
flush_all
SERVER_ERROR Command not supported
My config http://pastebin.com/npJagT9x
Can you help me please?
Thanks.

Assertion `state_ == INVALID' failed

Have tried to compile on debian wheezy 7.5 (amd64). gcc-4.9.2, boost-=1.56. It starts well:

mcrouter --config-str={"pools":{"A":{"servers":["10.0.0.21:11211"]}},
"route":"PoolRoute|A"} -p 11211
I1017 08:57:24.883425 28970 main.cpp:622] mcrouter 1.0 startup (28970)
I1017 08:57:24.895019 28970 proxy.cpp:900] reconfigured 1 proxies with 1 clients and 1 pools (30239781f4b68cd0970678d363619867)
I1017 08:57:24.895571 28970 server.cpp:136] Spawning AsyncMcServer

but after first "get" dies:

mcrouter: fibers/Fiber.cpp:215: void facebook::memcache::Fiber::setFunctionFinally(size_t, void ()(intptr_t, intptr_t), void ()(intptr_t, intptr_t), intptr_t, void (*)(intptr_t)): Assertion `state_ == INVALID' failed.

Update static assertions in lib/mc/umbrella.h

There are two static assertions in line 246 and line 255 of lib/mc/umbrella.h. However, both mc_npos and mc_nres are changed, in commit 5021d9c and 1b90855, respectively. As a result, mc_npos is now 27 and mc_nres, 31. I think the two assertions should be updated, or on compilers with _Static_assert support (clang++ in my case), the build fails.

$ CC=clang CXX=clang++ ./configure
(...other messages omitted...)
checking for _Static_assert... yes
(...other messages omitted...)
$ make
(...other messages omitted...)
In file included from ProxyDestinationMap.cpp:21:
In file included from oss_include/mcrouter/ProxyDestination.h:19:
In file included from oss_include/mcrouter/lib/network/AsyncMcClient.h:123:
In file included from oss_include/mcrouter/lib/network/AsyncMcClient-inl.h:12:
In file included from oss_include/mcrouter/lib/network/AsyncMcClientImpl.h:22:
In file included from oss_include/mcrouter/lib/network/McClientRequestContext.h:21:
In file included from oss_include/mcrouter/lib/network/ClientMcParser.h:12:
In file included from oss_include/mcrouter/lib/network/McParser.h:14:
In file included from oss_include/mcrouter/lib/mc/parser.h:20:
oss_include/mcrouter/lib/mc/umbrella.h:245:1: error: static_assert failed "If you add a new mc_op, make sure to update
      mc/umbrella_conv.h"
_Static_assert(
^
oss_include/mcrouter/lib/mc/umbrella.h:254:1: error: static_assert failed "If you add a new mc_res, make sure to
      update mc/umbrella_conv.h"
_Static_assert(
^
(...other messages omitted...)

num_clients

We've installed mcrouter on two hosts.

Then in order to monitor them we are periodically calling stats from both of them.
All worked ok for some time but then one server started reporting really large number.

We've checked and it's working fine.


Host 1.
STAT num_clients 18446744073709549633
Host 2.

STAT num_clients 864

config is:
commandargs --config-str={"pools":{"A":{"hash":"crc32","servers":["10.0.0.74:11211","10.0.0.192:11211","10.0.0.135:11211","10.0.0.86:11211","10.0.0.128:11211","10.0.0.129:11211"]}},"route":"PoolRoute|A"} -p 11211

Two questions about exptime and replication consistency.

hi, i want to ask two questions about mcrouter.

1.When i use the "Cold cache warm up" feature, i found the key exptime in the cold pool is different from that in the warm pool. It means that the key in the warm pool sometimes expired, but this key is still normal in the cold pool. Is this correct?
2.When i use the "Replicated pools" feature, will all the keys be consistent in the different memcached servers? If they are absolutely consistent, what did mcrouter do?

feature: Random MissFailoverRoute ?

Hello

Is there the equivalent of MissFailoverRoute but with random instead of sequential?

I also tried LatestRoute but the traffic was not load balanced evenly and from the documentation LatestRoute stops as soon as it gets a non error response, i want it to keep trying on "miss" but randomizing the pool.

thanx

Compiler Errors during installation

I'm attempting to install mcrouter on an out-of-the-box vagrant vm found on www.vagrantbox.es, a build of Ubuntu 14.04. Running the installation script produces a compiler error when attempting to compile Folly, and kills the build.

I get compilation errors after the following 2 commands:
libtool: compile: g++ -DHAVE_CONFIG_H -I./.. -pthread -I/usr/include -I/home/vagrant/mcrouter-install//install/include -I/home/vagrant/mcrouter-install//pkgs/double-conversion -std=gnu++0x -g -O2 -MT FileUtil.lo -MD -MP -MF .deps/FileUtil.Tpo -c FileUtil.cpp -fPIC -DPIC -o .libs/FileUtil.o
g++: internal compiler error: Killed (program cc1plus)

libtool: compile: g++ -DHAVE_CONFIG_H -I./.. -pthread -I/usr/include -I/home/vagrant/mcrouter-install//install/include -I/home/vagrant/mcrouter-install//pkgs/double-conversion -std=gnu++0x -g -O2 -MT Bits.lo -MD -MP -MF .deps/Bits.Tpo -c Bits.cpp -o Bits.o >/dev/null 2>&1
g++: internal compiler error: Killed (program cc1plus)

Is there a possible workaround for folly compilation? Or a fix in the pipeline?

Handling Soft TKOs

Is there a good way to gracefully handle soft TKOs? We've been hitting them quite a bit lately and I really cannot understand why.

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.