eight. Add a counter of threads used by sql commands. This is because sql commands can create database locks that "live" across many commands and it is possible to deadlock while waiting on a db lock and no threads available in the pool to unlock. If you reach this limit, the only option is to terminate the connection. (The better thing to do would be not to ever block in threads, but for now this will suffice).
a busy or locked sqlite database. It's important to note that an exclusive transaction on a db will prevent all saving from happening, but at this point I cannot think of a way around this. Also fix a bug where we would start a deferred multibulk and then end up with an error - the whole response should be discarded.
All test should pass and sqlite seems to working stably under heavy loads.
expire keys in randomkey and wrap the propogate() call in a server lock.
transactions. There is now a db connection per client, which allows for more concurrency and resolves some issues.
returned. Add type to the column row. Fix a 64bit compiler warning.
the Lua client is freed.
1. Eliminate trylock spins that were needlessly eating CPU cycles. 2. Instead use a timedEvent to continue pipelined commands, which sadly requires an additional eventLoop-level lock. 3. Release the client lock in debug sleep and in Lua scripts - the locking in Lua is only necessary around redis calls.
locking_mode and are in one of the commands that always run in the main thread.
threads are running. This should make Thredis perform at native speed when locking mode is off.
few places to make it less confusing when running both alongside.
writable event by using trylock in sendReplyToClient. Fix the MONITOR test - it was sporadically failing with ae_select because of command ordering.
(default), in which case the size of the threadpool would be equal to the number of CPU's. (hopefully this is cross-platform)
… expires on the slave. This could be useful for non-readonly slaves where temporary data is created based on the replicated keys and it needs to be expired after a TTL.