├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── crash_report.md │ ├── feature_request.md │ └── other_stuff.md └── workflows │ └── ci.yml ├── .gitignore ├── .gitmodules ├── 00-RELEASENOTES ├── BUGS ├── CONDUCT ├── COPYING ├── INSTALL ├── Makefile ├── README.md ├── TLS.md ├── build.yaml ├── ci.yaml ├── deps ├── Makefile ├── README.md ├── concurrentqueue │ ├── blockingconcurrentqueue.h │ ├── concurrentqueue.h │ └── lightweightsemaphore.h ├── cpp-statsd-client │ ├── .clang-format │ ├── .github │ │ └── workflows │ │ │ ├── coverage.yml │ │ │ ├── lint.yml │ │ │ ├── linux.yml │ │ │ └── windows.yml │ ├── .gitignore │ ├── CMakeLists.txt │ ├── LICENSE.md │ ├── Makefile │ ├── README.md │ ├── cmake │ │ ├── CodeCoverage.cmake │ │ ├── Config.cmake.in │ │ └── cpp-statsd-clientConfig.cmake.in │ ├── images │ │ └── logo.svg │ ├── include │ │ └── cpp-statsd-client │ │ │ ├── StatsdClient.hpp │ │ │ └── UDPSender.hpp │ └── tests │ │ ├── StatsdServer.hpp │ │ └── testStatsdClient.cpp ├── hdr_histogram │ ├── COPYING.txt │ ├── LICENSE.txt │ ├── Makefile │ ├── README.md │ ├── hdr_atomic.h │ ├── hdr_histogram.c │ └── hdr_histogram.h ├── hiredis │ ├── .gitignore │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── CMakeLists.txt │ ├── COPYING │ ├── Makefile │ ├── README.md │ ├── adapters │ │ ├── ae.h │ │ ├── glib.h │ │ ├── ivykis.h │ │ ├── libev.h │ │ ├── libevent.h │ │ ├── libuv.h │ │ ├── macosx.h │ │ └── qt.h │ ├── alloc.c │ ├── alloc.h │ ├── appveyor.yml │ ├── async.c │ ├── async.h │ ├── async_private.h │ ├── dict.c │ ├── dict.h │ ├── examples │ │ ├── CMakeLists.txt │ │ ├── example-ae.c │ │ ├── example-glib.c │ │ ├── example-ivykis.c │ │ ├── example-libev.c │ │ ├── example-libevent-ssl.c │ │ ├── example-libevent.c │ │ ├── example-libuv.c │ │ ├── example-macosx.c │ │ ├── example-push.c │ │ ├── example-qt.cpp │ │ ├── example-qt.h │ │ ├── example-ssl.c │ │ └── example.c │ ├── fmacros.h │ ├── hiredis-config.cmake.in │ ├── hiredis.c │ ├── hiredis.h │ ├── hiredis.pc.in │ ├── hiredis_ssl-config.cmake.in │ ├── hiredis_ssl.h │ ├── hiredis_ssl.pc.in │ ├── net.c │ ├── net.h │ ├── read.c │ ├── read.h │ ├── sds.c │ ├── sds.h │ ├── sdsalloc.h │ ├── sockcompat.c │ ├── sockcompat.h │ ├── ssl.c │ ├── test.c │ ├── test.sh │ └── win32.h ├── jemalloc │ ├── .appveyor.yml │ ├── .autom4te.cfg │ ├── .cirrus.yml │ ├── .gitattributes │ ├── .gitignore │ ├── .travis.yml │ ├── COPYING │ ├── ChangeLog │ ├── INSTALL.md │ ├── Makefile.in │ ├── README │ ├── TUNING.md │ ├── VERSION │ ├── autogen.sh │ ├── bin │ │ ├── jemalloc-config.in │ │ ├── jemalloc.sh.in │ │ └── jeprof.in │ ├── build-aux │ │ ├── config.guess │ │ ├── config.sub │ │ └── install-sh │ ├── config.stamp.in │ ├── configure │ ├── configure.ac │ ├── doc │ │ ├── html.xsl.in │ │ ├── jemalloc.xml.in │ │ ├── manpages.xsl.in │ │ └── stylesheet.xsl │ ├── include │ │ ├── jemalloc │ │ │ ├── internal │ │ │ │ ├── arena_externs.h │ │ │ │ ├── arena_inlines_a.h │ │ │ │ ├── arena_inlines_b.h │ │ │ │ ├── arena_stats.h │ │ │ │ ├── arena_structs_a.h │ │ │ │ ├── arena_structs_b.h │ │ │ │ ├── arena_types.h │ │ │ │ ├── assert.h │ │ │ │ ├── atomic.h │ │ │ │ ├── atomic_c11.h │ │ │ │ ├── atomic_gcc_atomic.h │ │ │ │ ├── atomic_gcc_sync.h │ │ │ │ ├── atomic_msvc.h │ │ │ │ ├── background_thread_externs.h │ │ │ │ ├── background_thread_inlines.h │ │ │ │ ├── background_thread_structs.h │ │ │ │ ├── base_externs.h │ │ │ │ ├── base_inlines.h │ │ │ │ ├── base_structs.h │ │ │ │ ├── base_types.h │ │ │ │ ├── bin.h │ │ │ │ ├── bin_stats.h │ │ │ │ ├── bin_types.h │ │ │ │ ├── bit_util.h │ │ │ │ ├── bitmap.h │ │ │ │ ├── cache_bin.h │ │ │ │ ├── ckh.h │ │ │ │ ├── ctl.h │ │ │ │ ├── div.h │ │ │ │ ├── emitter.h │ │ │ │ ├── extent_dss.h │ │ │ │ ├── extent_externs.h │ │ │ │ ├── extent_inlines.h │ │ │ │ ├── extent_mmap.h │ │ │ │ ├── extent_structs.h │ │ │ │ ├── extent_types.h │ │ │ │ ├── hash.h │ │ │ │ ├── hook.h │ │ │ │ ├── jemalloc_internal_decls.h │ │ │ │ ├── jemalloc_internal_defs.h.in │ │ │ │ ├── jemalloc_internal_externs.h │ │ │ │ ├── jemalloc_internal_includes.h │ │ │ │ ├── jemalloc_internal_inlines_a.h │ │ │ │ ├── jemalloc_internal_inlines_b.h │ │ │ │ ├── jemalloc_internal_inlines_c.h │ │ │ │ ├── jemalloc_internal_macros.h │ │ │ │ ├── jemalloc_internal_types.h │ │ │ │ ├── jemalloc_preamble.h.in │ │ │ │ ├── large_externs.h │ │ │ │ ├── log.h │ │ │ │ ├── malloc_io.h │ │ │ │ ├── mutex.h │ │ │ │ ├── mutex_pool.h │ │ │ │ ├── mutex_prof.h │ │ │ │ ├── nstime.h │ │ │ │ ├── pages.h │ │ │ │ ├── ph.h │ │ │ │ ├── private_namespace.sh │ │ │ │ ├── private_symbols.sh │ │ │ │ ├── prng.h │ │ │ │ ├── prof_externs.h │ │ │ │ ├── prof_inlines_a.h │ │ │ │ ├── prof_inlines_b.h │ │ │ │ ├── prof_structs.h │ │ │ │ ├── prof_types.h │ │ │ │ ├── public_namespace.sh │ │ │ │ ├── public_unnamespace.sh │ │ │ │ ├── ql.h │ │ │ │ ├── qr.h │ │ │ │ ├── quantum.h │ │ │ │ ├── rb.h │ │ │ │ ├── rtree.h │ │ │ │ ├── rtree_tsd.h │ │ │ │ ├── safety_check.h │ │ │ │ ├── sc.h │ │ │ │ ├── seq.h │ │ │ │ ├── smoothstep.h │ │ │ │ ├── smoothstep.sh │ │ │ │ ├── spin.h │ │ │ │ ├── stats.h │ │ │ │ ├── sz.h │ │ │ │ ├── tcache_externs.h │ │ │ │ ├── tcache_inlines.h │ │ │ │ ├── tcache_structs.h │ │ │ │ ├── tcache_types.h │ │ │ │ ├── test_hooks.h │ │ │ │ ├── ticker.h │ │ │ │ ├── tsd.h │ │ │ │ ├── tsd_generic.h │ │ │ │ ├── tsd_malloc_thread_cleanup.h │ │ │ │ ├── tsd_tls.h │ │ │ │ ├── tsd_types.h │ │ │ │ ├── tsd_win.h │ │ │ │ ├── util.h │ │ │ │ └── witness.h │ │ │ ├── jemalloc.sh │ │ │ ├── jemalloc_defs.h.in │ │ │ ├── jemalloc_macros.h.in │ │ │ ├── jemalloc_mangle.sh │ │ │ ├── jemalloc_protos.h.in │ │ │ ├── jemalloc_rename.sh │ │ │ └── jemalloc_typedefs.h.in │ │ └── msvc_compat │ │ │ ├── C99 │ │ │ ├── stdbool.h │ │ │ └── stdint.h │ │ │ ├── strings.h │ │ │ └── windows_extra.h │ ├── jemalloc.pc.in │ ├── m4 │ │ └── ax_cxx_compile_stdcxx.m4 │ ├── msvc │ │ ├── ReadMe.txt │ │ ├── jemalloc_vc2015.sln │ │ ├── jemalloc_vc2017.sln │ │ ├── projects │ │ │ ├── vc2015 │ │ │ │ ├── jemalloc │ │ │ │ │ ├── jemalloc.vcxproj │ │ │ │ │ └── jemalloc.vcxproj.filters │ │ │ │ └── test_threads │ │ │ │ │ ├── test_threads.vcxproj │ │ │ │ │ └── test_threads.vcxproj.filters │ │ │ └── vc2017 │ │ │ │ ├── jemalloc │ │ │ │ ├── jemalloc.vcxproj │ │ │ │ └── jemalloc.vcxproj.filters │ │ │ │ └── test_threads │ │ │ │ ├── test_threads.vcxproj │ │ │ │ └── test_threads.vcxproj.filters │ │ └── test_threads │ │ │ ├── test_threads.cpp │ │ │ ├── test_threads.h │ │ │ └── test_threads_main.cpp │ ├── run_tests.sh │ ├── scripts │ │ ├── gen_run_tests.py │ │ └── gen_travis.py │ ├── src │ │ ├── arena.c │ │ ├── background_thread.c │ │ ├── base.c │ │ ├── bin.c │ │ ├── bitmap.c │ │ ├── ckh.c │ │ ├── ctl.c │ │ ├── div.c │ │ ├── extent.c │ │ ├── extent_dss.c │ │ ├── extent_mmap.c │ │ ├── hash.c │ │ ├── hook.c │ │ ├── jemalloc.c │ │ ├── jemalloc_cpp.cpp │ │ ├── large.c │ │ ├── log.c │ │ ├── malloc_io.c │ │ ├── mutex.c │ │ ├── mutex_pool.c │ │ ├── nstime.c │ │ ├── pages.c │ │ ├── prng.c │ │ ├── prof.c │ │ ├── rtree.c │ │ ├── safety_check.c │ │ ├── sc.c │ │ ├── stats.c │ │ ├── sz.c │ │ ├── tcache.c │ │ ├── test_hooks.c │ │ ├── ticker.c │ │ ├── tsd.c │ │ ├── witness.c │ │ └── zone.c │ └── test │ │ ├── include │ │ └── test │ │ │ ├── SFMT-alti.h │ │ │ ├── SFMT-params.h │ │ │ ├── SFMT-params11213.h │ │ │ ├── SFMT-params1279.h │ │ │ ├── SFMT-params132049.h │ │ │ ├── SFMT-params19937.h │ │ │ ├── SFMT-params216091.h │ │ │ ├── SFMT-params2281.h │ │ │ ├── SFMT-params4253.h │ │ │ ├── SFMT-params44497.h │ │ │ ├── SFMT-params607.h │ │ │ ├── SFMT-params86243.h │ │ │ ├── SFMT-sse2.h │ │ │ ├── SFMT.h │ │ │ ├── btalloc.h │ │ │ ├── extent_hooks.h │ │ │ ├── jemalloc_test.h.in │ │ │ ├── jemalloc_test_defs.h.in │ │ │ ├── math.h │ │ │ ├── mq.h │ │ │ ├── mtx.h │ │ │ ├── test.h │ │ │ ├── thd.h │ │ │ └── timer.h │ │ ├── integration │ │ ├── MALLOCX_ARENA.c │ │ ├── aligned_alloc.c │ │ ├── allocated.c │ │ ├── cpp │ │ │ └── basic.cpp │ │ ├── extent.c │ │ ├── extent.sh │ │ ├── malloc.c │ │ ├── mallocx.c │ │ ├── mallocx.sh │ │ ├── overflow.c │ │ ├── posix_memalign.c │ │ ├── rallocx.c │ │ ├── sdallocx.c │ │ ├── slab_sizes.c │ │ ├── slab_sizes.sh │ │ ├── smallocx.c │ │ ├── smallocx.sh │ │ ├── thread_arena.c │ │ ├── thread_tcache_enabled.c │ │ ├── xallocx.c │ │ └── xallocx.sh │ │ ├── src │ │ ├── SFMT.c │ │ ├── btalloc.c │ │ ├── btalloc_0.c │ │ ├── btalloc_1.c │ │ ├── math.c │ │ ├── mq.c │ │ ├── mtx.c │ │ ├── test.c │ │ ├── thd.c │ │ └── timer.c │ │ ├── stress │ │ ├── hookbench.c │ │ └── microbench.c │ │ ├── test.sh.in │ │ └── unit │ │ ├── SFMT.c │ │ ├── a0.c │ │ ├── arena_reset.c │ │ ├── arena_reset_prof.c │ │ ├── arena_reset_prof.sh │ │ ├── atomic.c │ │ ├── background_thread.c │ │ ├── background_thread_enable.c │ │ ├── base.c │ │ ├── binshard.c │ │ ├── binshard.sh │ │ ├── bit_util.c │ │ ├── bitmap.c │ │ ├── ckh.c │ │ ├── decay.c │ │ ├── decay.sh │ │ ├── div.c │ │ ├── emitter.c │ │ ├── extent_quantize.c │ │ ├── extent_util.c │ │ ├── fork.c │ │ ├── hash.c │ │ ├── hook.c │ │ ├── huge.c │ │ ├── junk.c │ │ ├── junk.sh │ │ ├── junk_alloc.c │ │ ├── junk_alloc.sh │ │ ├── junk_free.c │ │ ├── junk_free.sh │ │ ├── log.c │ │ ├── mallctl.c │ │ ├── malloc_io.c │ │ ├── math.c │ │ ├── mq.c │ │ ├── mtx.c │ │ ├── nstime.c │ │ ├── pack.c │ │ ├── pack.sh │ │ ├── pages.c │ │ ├── ph.c │ │ ├── prng.c │ │ ├── prof_accum.c │ │ ├── prof_accum.sh │ │ ├── prof_active.c │ │ ├── prof_active.sh │ │ ├── prof_gdump.c │ │ ├── prof_gdump.sh │ │ ├── prof_idump.c │ │ ├── prof_idump.sh │ │ ├── prof_log.c │ │ ├── prof_log.sh │ │ ├── prof_reset.c │ │ ├── prof_reset.sh │ │ ├── prof_tctx.c │ │ ├── prof_tctx.sh │ │ ├── prof_thread_name.c │ │ ├── prof_thread_name.sh │ │ ├── ql.c │ │ ├── qr.c │ │ ├── rb.c │ │ ├── retained.c │ │ ├── rtree.c │ │ ├── safety_check.c │ │ ├── safety_check.sh │ │ ├── sc.c │ │ ├── seq.c │ │ ├── size_classes.c │ │ ├── slab.c │ │ ├── smoothstep.c │ │ ├── spin.c │ │ ├── stats.c │ │ ├── stats_print.c │ │ ├── test_hooks.c │ │ ├── ticker.c │ │ ├── tsd.c │ │ ├── witness.c │ │ ├── zero.c │ │ └── zero.sh ├── license │ ├── arm64 │ │ └── libkey.a │ ├── keycheck.h │ └── x64 │ │ └── libkey.a ├── linenoise │ ├── .gitignore │ ├── Makefile │ ├── README.markdown │ ├── example.c │ ├── linenoise.c │ └── linenoise.h ├── lua │ ├── COPYRIGHT │ ├── HISTORY │ ├── INSTALL │ ├── Makefile │ ├── README │ ├── doc │ │ ├── contents.html │ │ ├── cover.png │ │ ├── logo.gif │ │ ├── lua.1 │ │ ├── lua.css │ │ ├── lua.html │ │ ├── luac.1 │ │ ├── luac.html │ │ ├── manual.css │ │ ├── manual.html │ │ └── readme.html │ ├── etc │ │ ├── Makefile │ │ ├── README │ │ ├── all.c │ │ ├── lua.hpp │ │ ├── lua.ico │ │ ├── lua.pc │ │ ├── luavs.bat │ │ ├── min.c │ │ ├── noparser.c │ │ └── strict.lua │ ├── src │ │ ├── Makefile │ │ ├── fpconv.c │ │ ├── fpconv.h │ │ ├── lapi.c │ │ ├── lapi.h │ │ ├── lauxlib.c │ │ ├── lauxlib.h │ │ ├── lbaselib.c │ │ ├── lcode.c │ │ ├── lcode.h │ │ ├── ldblib.c │ │ ├── ldebug.c │ │ ├── ldebug.h │ │ ├── ldo.c │ │ ├── ldo.h │ │ ├── ldump.c │ │ ├── lfunc.c │ │ ├── lfunc.h │ │ ├── lgc.c │ │ ├── lgc.h │ │ ├── linit.c │ │ ├── liolib.c │ │ ├── llex.c │ │ ├── llex.h │ │ ├── llimits.h │ │ ├── lmathlib.c │ │ ├── lmem.c │ │ ├── lmem.h │ │ ├── loadlib.c │ │ ├── lobject.c │ │ ├── lobject.h │ │ ├── lopcodes.c │ │ ├── lopcodes.h │ │ ├── loslib.c │ │ ├── lparser.c │ │ ├── lparser.h │ │ ├── lstate.c │ │ ├── lstate.h │ │ ├── lstring.c │ │ ├── lstring.h │ │ ├── lstrlib.c │ │ ├── ltable.c │ │ ├── ltable.h │ │ ├── ltablib.c │ │ ├── ltm.c │ │ ├── ltm.h │ │ ├── lua.c │ │ ├── lua.h │ │ ├── lua_bit.c │ │ ├── lua_cjson.c │ │ ├── lua_cmsgpack.c │ │ ├── lua_struct.c │ │ ├── luac.c │ │ ├── luaconf.h │ │ ├── lualib.h │ │ ├── lundump.c │ │ ├── lundump.h │ │ ├── lvm.c │ │ ├── lvm.h │ │ ├── lzio.c │ │ ├── lzio.h │ │ ├── print.c │ │ ├── strbuf.c │ │ └── strbuf.h │ └── test │ │ ├── README │ │ ├── bisect.lua │ │ ├── cf.lua │ │ ├── echo.lua │ │ ├── env.lua │ │ ├── factorial.lua │ │ ├── fib.lua │ │ ├── fibfor.lua │ │ ├── globals.lua │ │ ├── hello.lua │ │ ├── life.lua │ │ ├── luac.lua │ │ ├── printf.lua │ │ ├── readonly.lua │ │ ├── sieve.lua │ │ ├── sort.lua │ │ ├── table.lua │ │ ├── trace-calls.lua │ │ ├── trace-globals.lua │ │ └── xd.lua ├── memkind │ ├── Makefile │ └── src │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── AUTHORS │ │ ├── CONTRIBUTING │ │ ├── COPYING │ │ ├── ChangeLog │ │ ├── INSTALL │ │ ├── MANIFEST │ │ ├── Makefile.am │ │ ├── NEWS │ │ ├── PULL_REQUEST_TEMPLATE.md │ │ ├── README │ │ ├── README.md │ │ ├── astyle.sh │ │ ├── autogen.sh │ │ ├── autohbw │ │ ├── Makefile.mk │ │ ├── autohbw.c │ │ ├── autohbw_README │ │ ├── autohbw_api.h │ │ ├── autohbw_get_src_lines.pl │ │ └── autohbw_test.sh │ │ ├── build.sh │ │ ├── build_jemalloc.sh │ │ ├── config.h.in~ │ │ ├── configure.ac │ │ ├── copying_headers │ │ ├── MANIFEST.EXEMPT │ │ ├── MANIFEST.freeBSD │ │ ├── MANIFEST.freeBSD3 │ │ ├── header.freeBSD │ │ ├── header.freeBSD3 │ │ └── header.intel-acpi │ │ ├── debian │ │ ├── changelog │ │ ├── compat │ │ ├── control │ │ └── rules │ │ ├── examples │ │ ├── Makefile.mk │ │ ├── README │ │ ├── autohbw_candidates.c │ │ ├── filter_example.c │ │ ├── hello_hbw_example.c │ │ ├── hello_memkind_example.c │ │ ├── memkind_allocated.hpp │ │ ├── memkind_allocated_example.cpp │ │ ├── memkind_decorator_debug.c │ │ ├── pmem_alignment.c │ │ ├── pmem_and_default_kind.c │ │ ├── pmem_cpp_allocator.cpp │ │ ├── pmem_free_with_unknown_kind.c │ │ ├── pmem_kinds.c │ │ ├── pmem_malloc.c │ │ ├── pmem_malloc_unlimited.c │ │ ├── pmem_multithreads.c │ │ ├── pmem_multithreads_onekind.c │ │ └── pmem_usable_size.c │ │ ├── include │ │ ├── hbw_allocator.h │ │ ├── hbwmalloc.h │ │ ├── memkind.h │ │ ├── memkind │ │ │ └── internal │ │ │ │ ├── heap_manager.h │ │ │ │ ├── memkind_arena.h │ │ │ │ ├── memkind_default.h │ │ │ │ ├── memkind_gbtlb.h │ │ │ │ ├── memkind_hbw.h │ │ │ │ ├── memkind_hugetlb.h │ │ │ │ ├── memkind_interleave.h │ │ │ │ ├── memkind_log.h │ │ │ │ ├── memkind_pmem.h │ │ │ │ ├── memkind_private.h │ │ │ │ ├── memkind_regular.h │ │ │ │ ├── tbb_mem_pool_policy.h │ │ │ │ └── tbb_wrapper.h │ │ ├── memkind_deprecated.h │ │ └── pmem_allocator.h │ │ ├── install_astyle.sh │ │ ├── jemalloc │ │ ├── .appveyor.yml │ │ ├── .autom4te.cfg │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── COPYING │ │ ├── ChangeLog │ │ ├── INSTALL.md │ │ ├── Makefile.in │ │ ├── README │ │ ├── autogen.sh │ │ ├── bin │ │ │ ├── jemalloc-config.in │ │ │ ├── jemalloc.sh.in │ │ │ └── jeprof.in │ │ ├── build-aux │ │ │ ├── config.guess │ │ │ ├── config.sub │ │ │ └── install-sh │ │ ├── config.stamp.in │ │ ├── configure.ac │ │ ├── doc │ │ │ ├── html.xsl.in │ │ │ ├── jemalloc.xml.in │ │ │ ├── manpages.xsl.in │ │ │ └── stylesheet.xsl │ │ ├── include │ │ │ ├── jemalloc │ │ │ │ ├── internal │ │ │ │ │ ├── arena_externs.h │ │ │ │ │ ├── arena_inlines_a.h │ │ │ │ │ ├── arena_inlines_b.h │ │ │ │ │ ├── arena_structs_a.h │ │ │ │ │ ├── arena_structs_b.h │ │ │ │ │ ├── arena_types.h │ │ │ │ │ ├── assert.h │ │ │ │ │ ├── atomic.h │ │ │ │ │ ├── atomic_c11.h │ │ │ │ │ ├── atomic_gcc_atomic.h │ │ │ │ │ ├── atomic_gcc_sync.h │ │ │ │ │ ├── atomic_msvc.h │ │ │ │ │ ├── background_thread_externs.h │ │ │ │ │ ├── background_thread_inlines.h │ │ │ │ │ ├── background_thread_structs.h │ │ │ │ │ ├── base_externs.h │ │ │ │ │ ├── base_inlines.h │ │ │ │ │ ├── base_structs.h │ │ │ │ │ ├── base_types.h │ │ │ │ │ ├── bit_util.h │ │ │ │ │ ├── bitmap.h │ │ │ │ │ ├── ckh.h │ │ │ │ │ ├── ctl.h │ │ │ │ │ ├── extent_dss.h │ │ │ │ │ ├── extent_externs.h │ │ │ │ │ ├── extent_inlines.h │ │ │ │ │ ├── extent_mmap.h │ │ │ │ │ ├── extent_structs.h │ │ │ │ │ ├── extent_types.h │ │ │ │ │ ├── hash.h │ │ │ │ │ ├── hooks.h │ │ │ │ │ ├── jemalloc_internal_decls.h │ │ │ │ │ ├── jemalloc_internal_defs.h.in │ │ │ │ │ ├── jemalloc_internal_externs.h │ │ │ │ │ ├── jemalloc_internal_includes.h │ │ │ │ │ ├── jemalloc_internal_inlines_a.h │ │ │ │ │ ├── jemalloc_internal_inlines_b.h │ │ │ │ │ ├── jemalloc_internal_inlines_c.h │ │ │ │ │ ├── jemalloc_internal_macros.h │ │ │ │ │ ├── jemalloc_internal_types.h │ │ │ │ │ ├── jemalloc_preamble.h.in │ │ │ │ │ ├── large_externs.h │ │ │ │ │ ├── malloc_io.h │ │ │ │ │ ├── mutex.h │ │ │ │ │ ├── mutex_pool.h │ │ │ │ │ ├── mutex_prof.h │ │ │ │ │ ├── nstime.h │ │ │ │ │ ├── pages.h │ │ │ │ │ ├── ph.h │ │ │ │ │ ├── private_namespace.sh │ │ │ │ │ ├── private_symbols.sh │ │ │ │ │ ├── prng.h │ │ │ │ │ ├── prof_externs.h │ │ │ │ │ ├── prof_inlines_a.h │ │ │ │ │ ├── prof_inlines_b.h │ │ │ │ │ ├── prof_structs.h │ │ │ │ │ ├── prof_types.h │ │ │ │ │ ├── public_namespace.sh │ │ │ │ │ ├── public_unnamespace.sh │ │ │ │ │ ├── ql.h │ │ │ │ │ ├── qr.h │ │ │ │ │ ├── rb.h │ │ │ │ │ ├── rtree.h │ │ │ │ │ ├── rtree_tsd.h │ │ │ │ │ ├── size_classes.sh │ │ │ │ │ ├── smoothstep.h │ │ │ │ │ ├── smoothstep.sh │ │ │ │ │ ├── spin.h │ │ │ │ │ ├── stats.h │ │ │ │ │ ├── stats_tsd.h │ │ │ │ │ ├── sz.h │ │ │ │ │ ├── tcache_externs.h │ │ │ │ │ ├── tcache_inlines.h │ │ │ │ │ ├── tcache_structs.h │ │ │ │ │ ├── tcache_types.h │ │ │ │ │ ├── ticker.h │ │ │ │ │ ├── tsd.h │ │ │ │ │ ├── tsd_generic.h │ │ │ │ │ ├── tsd_malloc_thread_cleanup.h │ │ │ │ │ ├── tsd_tls.h │ │ │ │ │ ├── tsd_types.h │ │ │ │ │ ├── tsd_win.h │ │ │ │ │ ├── util.h │ │ │ │ │ └── witness.h │ │ │ │ ├── jemalloc.sh │ │ │ │ ├── jemalloc_defs.h.in │ │ │ │ ├── jemalloc_macros.h.in │ │ │ │ ├── jemalloc_mangle.sh │ │ │ │ ├── jemalloc_protos.h.in │ │ │ │ ├── jemalloc_rename.sh │ │ │ │ └── jemalloc_typedefs.h.in │ │ │ └── msvc_compat │ │ │ │ ├── C99 │ │ │ │ ├── stdbool.h │ │ │ │ └── stdint.h │ │ │ │ ├── strings.h │ │ │ │ └── windows_extra.h │ │ ├── jemalloc.pc.in │ │ ├── m4 │ │ │ └── ax_cxx_compile_stdcxx.m4 │ │ ├── msvc │ │ │ ├── ReadMe.txt │ │ │ ├── jemalloc_vc2015.sln │ │ │ └── projects │ │ │ │ └── vc2015 │ │ │ │ ├── jemalloc │ │ │ │ ├── jemalloc.vcxproj │ │ │ │ └── jemalloc.vcxproj.filters │ │ │ │ └── test_threads │ │ │ │ ├── test_threads.cpp │ │ │ │ ├── test_threads.h │ │ │ │ ├── test_threads.vcxproj │ │ │ │ ├── test_threads.vcxproj.filters │ │ │ │ └── test_threads_main.cpp │ │ ├── run_tests.sh │ │ ├── scripts │ │ │ ├── gen_run_tests.py │ │ │ └── gen_travis.py │ │ ├── src │ │ │ ├── arena.c │ │ │ ├── background_thread.c │ │ │ ├── base.c │ │ │ ├── bitmap.c │ │ │ ├── ckh.c │ │ │ ├── ctl.c │ │ │ ├── extent.c │ │ │ ├── extent_dss.c │ │ │ ├── extent_mmap.c │ │ │ ├── hash.c │ │ │ ├── hooks.c │ │ │ ├── jemalloc.c │ │ │ ├── jemalloc_cpp.cpp │ │ │ ├── large.c │ │ │ ├── malloc_io.c │ │ │ ├── mutex.c │ │ │ ├── mutex_pool.c │ │ │ ├── nstime.c │ │ │ ├── pages.c │ │ │ ├── prng.c │ │ │ ├── prof.c │ │ │ ├── rtree.c │ │ │ ├── spin.c │ │ │ ├── stats.c │ │ │ ├── sz.c │ │ │ ├── tcache.c │ │ │ ├── ticker.c │ │ │ ├── tsd.c │ │ │ ├── witness.c │ │ │ └── zone.c │ │ └── test │ │ │ ├── include │ │ │ └── test │ │ │ │ ├── SFMT-alti.h │ │ │ │ ├── SFMT-params.h │ │ │ │ ├── SFMT-params11213.h │ │ │ │ ├── SFMT-params1279.h │ │ │ │ ├── SFMT-params132049.h │ │ │ │ ├── SFMT-params19937.h │ │ │ │ ├── SFMT-params216091.h │ │ │ │ ├── SFMT-params2281.h │ │ │ │ ├── SFMT-params4253.h │ │ │ │ ├── SFMT-params44497.h │ │ │ │ ├── SFMT-params607.h │ │ │ │ ├── SFMT-params86243.h │ │ │ │ ├── SFMT-sse2.h │ │ │ │ ├── SFMT.h │ │ │ │ ├── btalloc.h │ │ │ │ ├── extent_hooks.h │ │ │ │ ├── jemalloc_test.h.in │ │ │ │ ├── jemalloc_test_defs.h.in │ │ │ │ ├── math.h │ │ │ │ ├── mq.h │ │ │ │ ├── mtx.h │ │ │ │ ├── test.h │ │ │ │ ├── thd.h │ │ │ │ └── timer.h │ │ │ ├── integration │ │ │ ├── MALLOCX_ARENA.c │ │ │ ├── aligned_alloc.c │ │ │ ├── allocated.c │ │ │ ├── extent.c │ │ │ ├── extent.sh │ │ │ ├── mallocx.c │ │ │ ├── mallocx.sh │ │ │ ├── overflow.c │ │ │ ├── posix_memalign.c │ │ │ ├── rallocx.c │ │ │ ├── sdallocx.c │ │ │ ├── thread_arena.c │ │ │ ├── thread_tcache_enabled.c │ │ │ ├── xallocx.c │ │ │ └── xallocx.sh │ │ │ ├── src │ │ │ ├── SFMT.c │ │ │ ├── btalloc.c │ │ │ ├── btalloc_0.c │ │ │ ├── btalloc_1.c │ │ │ ├── math.c │ │ │ ├── mq.c │ │ │ ├── mtx.c │ │ │ ├── test.c │ │ │ ├── thd.c │ │ │ └── timer.c │ │ │ ├── stress │ │ │ └── microbench.c │ │ │ ├── test.sh.in │ │ │ └── unit │ │ │ ├── SFMT.c │ │ │ ├── a0.c │ │ │ ├── arena_reset.c │ │ │ ├── arena_reset_prof.c │ │ │ ├── arena_reset_prof.sh │ │ │ ├── atomic.c │ │ │ ├── background_thread.c │ │ │ ├── base.c │ │ │ ├── bit_util.c │ │ │ ├── bitmap.c │ │ │ ├── ckh.c │ │ │ ├── decay.c │ │ │ ├── decay.sh │ │ │ ├── extent_quantize.c │ │ │ ├── fork.c │ │ │ ├── hash.c │ │ │ ├── hooks.c │ │ │ ├── junk.c │ │ │ ├── junk.sh │ │ │ ├── junk_alloc.c │ │ │ ├── junk_alloc.sh │ │ │ ├── junk_free.c │ │ │ ├── junk_free.sh │ │ │ ├── mallctl.c │ │ │ ├── malloc_io.c │ │ │ ├── math.c │ │ │ ├── mq.c │ │ │ ├── mtx.c │ │ │ ├── nstime.c │ │ │ ├── pack.c │ │ │ ├── pack.sh │ │ │ ├── pages.c │ │ │ ├── ph.c │ │ │ ├── prng.c │ │ │ ├── prof_accum.c │ │ │ ├── prof_accum.sh │ │ │ ├── prof_active.c │ │ │ ├── prof_active.sh │ │ │ ├── prof_gdump.c │ │ │ ├── prof_gdump.sh │ │ │ ├── prof_idump.c │ │ │ ├── prof_idump.sh │ │ │ ├── prof_reset.c │ │ │ ├── prof_reset.sh │ │ │ ├── prof_tctx.c │ │ │ ├── prof_tctx.sh │ │ │ ├── prof_thread_name.c │ │ │ ├── prof_thread_name.sh │ │ │ ├── ql.c │ │ │ ├── qr.c │ │ │ ├── rb.c │ │ │ ├── retained.c │ │ │ ├── rtree.c │ │ │ ├── size_classes.c │ │ │ ├── slab.c │ │ │ ├── smoothstep.c │ │ │ ├── spin.c │ │ │ ├── stats.c │ │ │ ├── stats_print.c │ │ │ ├── ticker.c │ │ │ ├── tsd.c │ │ │ ├── witness.c │ │ │ ├── zero.c │ │ │ └── zero.sh │ │ ├── m4 │ │ ├── ax_cxx_compile_stdcxx.m4 │ │ ├── ax_cxx_compile_stdcxx_11.m4 │ │ └── ax_pthread.m4 │ │ ├── make_rpm.mk │ │ ├── man │ │ ├── autohbw.7 │ │ ├── hbwallocator.3 │ │ ├── hbwmalloc.3 │ │ ├── memkind-hbw-nodes.1 │ │ ├── memkind.3 │ │ ├── memkind_arena.3 │ │ ├── memkind_default.3 │ │ ├── memkind_hbw.3 │ │ ├── memkind_hugetlb.3 │ │ ├── memkind_interleave.3 │ │ ├── memkind_pmem.3 │ │ └── pmemallocator.3 │ │ ├── memkind.spec.mk │ │ ├── src │ │ ├── .memkind_pmem.c.swp │ │ ├── Makefile.mk │ │ ├── hbwmalloc.c │ │ ├── heap_manager.c │ │ ├── memkind-hbw-nodes.c │ │ ├── memkind.c │ │ ├── memkind_arena.c │ │ ├── memkind_default.c │ │ ├── memkind_gbtlb.c │ │ ├── memkind_hbw.c │ │ ├── memkind_hugetlb.c │ │ ├── memkind_interleave.c │ │ ├── memkind_log.c │ │ ├── memkind_pmem.c │ │ ├── memkind_regular.c │ │ └── tbb_wrapper.c │ │ └── test │ │ ├── Allocator.hpp │ │ ├── Makefile.mk │ │ ├── README │ │ ├── TestPolicy.hpp │ │ ├── alloc_benchmark.c │ │ ├── alloc_performance_tests.cpp │ │ ├── allocate_to_max_stress_test.cpp │ │ ├── allocator_perf_tool │ │ ├── AllocationSizes.hpp │ │ ├── Allocation_info.cpp │ │ ├── Allocation_info.hpp │ │ ├── Allocator.hpp │ │ ├── AllocatorFactory.hpp │ │ ├── CSVLogger.hpp │ │ ├── CommandLine.hpp │ │ ├── Configuration.hpp │ │ ├── ConsoleLog.hpp │ │ ├── FunctionCalls.hpp │ │ ├── FunctionCallsPerformanceTask.cpp │ │ ├── FunctionCallsPerformanceTask.h │ │ ├── GTestAdapter.hpp │ │ ├── HBWmallocAllocatorWithTimer.hpp │ │ ├── HugePageOrganizer.hpp │ │ ├── HugePageUnmap.hpp │ │ ├── Iterator.hpp │ │ ├── JemallocAllocatorWithTimer.hpp │ │ ├── Makefile │ │ ├── MemkindAllocatorWithTimer.hpp │ │ ├── Numastat.hpp │ │ ├── PmemMockup.cpp │ │ ├── PmemMockup.hpp │ │ ├── Runnable.hpp │ │ ├── ScenarioWorkload.cpp │ │ ├── ScenarioWorkload.h │ │ ├── StandardAllocatorWithTimer.hpp │ │ ├── Stats.hpp │ │ ├── StressIncreaseToMax.cpp │ │ ├── StressIncreaseToMax.h │ │ ├── Task.hpp │ │ ├── TaskFactory.hpp │ │ ├── Tests.hpp │ │ ├── Thread.hpp │ │ ├── TimerSysTime.hpp │ │ ├── VectorIterator.hpp │ │ ├── Workload.hpp │ │ ├── WrappersMacros.hpp │ │ └── main.cpp │ │ ├── autohbw_test.py │ │ ├── autohbw_test_helper.c │ │ ├── bat_tests.cpp │ │ ├── check.cpp │ │ ├── check.h │ │ ├── common.h │ │ ├── decorator_test.cpp │ │ ├── decorator_test.h │ │ ├── dlopen_test.cpp │ │ ├── draw_plots.py │ │ ├── environ_err_hbw_malloc_test.cpp │ │ ├── error_message_tests.cpp │ │ ├── freeing_memory_segfault_test.cpp │ │ ├── gb_page_tests_bind_policy.cpp │ │ ├── get_arena_test.cpp │ │ ├── gtest_fused │ │ └── gtest │ │ │ ├── gtest-all.cc │ │ │ └── gtest.h │ │ ├── hbw_allocator_tests.cpp │ │ ├── hbw_detection_test.py │ │ ├── hbw_verify_function_test.cpp │ │ ├── heap_manager_init_perf_test.cpp │ │ ├── huge_page_test.cpp │ │ ├── load_tbbmalloc_symbols.c │ │ ├── locality_test.cpp │ │ ├── main.cpp │ │ ├── memkind-afts-ext.ts │ │ ├── memkind-afts.ts │ │ ├── memkind-perf-ext.ts │ │ ├── memkind-perf.ts │ │ ├── memkind-pytests.ts │ │ ├── memkind-slts.ts │ │ ├── memkind_pmem_long_time_tests.cpp │ │ ├── memkind_pmem_tests.cpp │ │ ├── memkind_versioning_tests.cpp │ │ ├── memory_footprint_test.cpp │ │ ├── memory_manager.h │ │ ├── multithreaded_tests.cpp │ │ ├── negative_tests.cpp │ │ ├── performance │ │ ├── framework.cpp │ │ ├── framework.hpp │ │ ├── operations.hpp │ │ ├── perf_tests.cpp │ │ └── perf_tests.hpp │ │ ├── pmem_allocator_tests.cpp │ │ ├── proc_stat.h │ │ ├── python_framework │ │ ├── __init__.py │ │ ├── cmd_helper.py │ │ └── huge_page_organizer.py │ │ ├── random_sizes_allocator.h │ │ ├── run_alloc_benchmark.sh │ │ ├── static_kinds_list.h │ │ ├── static_kinds_tests.cpp │ │ ├── tbbmalloc.h │ │ ├── test.sh │ │ ├── trace_mechanism_test.py │ │ ├── trace_mechanism_test_helper.c │ │ ├── trial_generator.cpp │ │ └── trial_generator.h └── update-jemalloc.sh ├── fuzz └── rdb │ ├── dict.txt │ └── testcases │ ├── empty.rdb │ ├── expire.rdb │ ├── expireonload.rdb │ ├── integer.rdb │ ├── integer_shared.rdb │ ├── multidb.rdb │ ├── replica.rdb │ ├── set.rdb │ └── string.rdb ├── keydb.conf ├── machamp_scripts ├── Dockerfile └── build.sh ├── monkey └── monkey.py ├── pkg ├── README.md ├── deb │ ├── README.md │ ├── conf │ │ ├── keydb.conf │ │ └── sentinel.conf │ ├── deb-buildsource.sh │ ├── deb_files_generated │ │ └── .gitkeep │ ├── debian │ │ ├── bash_completion.d │ │ │ └── keydb-cli │ │ ├── bin │ │ │ └── generate-systemd-service-files │ │ ├── changelog │ │ ├── compat │ │ ├── control │ │ ├── copyright │ │ ├── keydb-benchmark.1 │ │ ├── keydb-check-aof.1 │ │ ├── keydb-check-rdb.1 │ │ ├── keydb-cli.1 │ │ ├── keydb-sentinel.1 │ │ ├── keydb-sentinel.install │ │ ├── keydb-sentinel.logrotate │ │ ├── keydb-sentinel.manpages │ │ ├── keydb-sentinel.postinst │ │ ├── keydb-sentinel.postrm │ │ ├── keydb-server.1 │ │ ├── keydb-server.docs │ │ ├── keydb-server.install │ │ ├── keydb-server.logrotate │ │ ├── keydb-server.manpages │ │ ├── keydb-server.postinst │ │ ├── keydb-server.postrm │ │ ├── keydb-tools.examples │ │ ├── keydb-tools.install │ │ ├── keydb-tools.manpages │ │ ├── keydb-tools.postinst │ │ ├── keydb-tools.postrm │ │ ├── rules │ │ ├── source │ │ │ ├── format │ │ │ └── lintian-overrides │ │ ├── tests │ │ │ ├── 0001-keydb-cli │ │ │ ├── 0002-benchmark │ │ │ ├── 0003-keydb-check-aof │ │ │ ├── 0004-keydb-check-rdb │ │ │ └── control │ │ ├── watch │ │ └── zsh-completion │ │ │ └── _keydb-cli │ ├── debian_dh9 │ │ ├── NEWS │ │ ├── bash_completion.d │ │ │ └── keydb-cli │ │ ├── bin │ │ │ └── generate-systemd-service-files │ │ ├── changelog │ │ ├── compat │ │ ├── control │ │ ├── copyright │ │ ├── files │ │ ├── gbp.conf │ │ ├── keydb-benchmark.1 │ │ ├── keydb-check-aof.1 │ │ ├── keydb-check-rdb.1 │ │ ├── keydb-cli.1 │ │ ├── keydb-sentinel.1 │ │ ├── keydb-sentinel.default │ │ ├── keydb-sentinel.init │ │ ├── keydb-sentinel.install │ │ ├── keydb-sentinel.logrotate │ │ ├── keydb-sentinel.maintscript │ │ ├── keydb-sentinel.manpages │ │ ├── keydb-sentinel.postinst │ │ ├── keydb-sentinel.postrm │ │ ├── keydb-server.1 │ │ ├── keydb-server.default │ │ ├── keydb-server.docs │ │ ├── keydb-server.init │ │ ├── keydb-server.install │ │ ├── keydb-server.logrotate │ │ ├── keydb-server.maintscript │ │ ├── keydb-server.manpages │ │ ├── keydb-server.postinst │ │ ├── keydb-server.postrm │ │ ├── keydb-tools.examples │ │ ├── keydb-tools.install │ │ ├── keydb-tools.manpages │ │ ├── keydb-tools.postinst │ │ ├── keydb-tools.postrm │ │ ├── patches │ │ │ ├── 0001-fix-ftbfs-on-kfreebsd.patch │ │ │ ├── 0010-Use-get_current_dir_name-over-PATHMAX-etc.patch │ │ │ ├── 0011-Add-support-for-a-USE_SYSTEM_LUA-flag.patch │ │ │ ├── debian-packaging │ │ │ │ ├── 0003-dpkg-buildflags.patch │ │ │ │ └── 0007-Set-Debian-configuration-defaults.patch │ │ │ ├── series │ │ │ └── test │ │ ├── rules │ │ ├── source │ │ │ ├── format │ │ │ ├── include-binaries │ │ │ ├── lintian-overrides │ │ │ └── options │ │ ├── tests │ │ │ ├── 0001-keydb-cli │ │ │ ├── 0002-benchmark │ │ │ ├── 0003-keydb-check-aof │ │ │ ├── 0004-keydb-check-rdb │ │ │ └── control │ │ └── watch │ └── master_changelog ├── docker │ ├── Dockerfile │ ├── Dockerfile_Alpine │ └── README.md └── rpm │ ├── README.md │ ├── generate_rpms.sh │ ├── keydb_build │ ├── keydb.spec │ └── keydb_rpm │ │ ├── etc │ │ ├── keydb │ │ │ ├── keydb.conf │ │ │ └── sentinel.conf │ │ ├── logrotate.d │ │ │ └── keydb │ │ └── systemd │ │ │ └── system │ │ │ ├── keydb-sentinel.service.d │ │ │ └── limit.conf │ │ │ └── keydb.service.d │ │ │ └── limit.conf │ │ └── usr │ │ ├── lib │ │ └── systemd │ │ │ └── system │ │ │ ├── keydb-sentinel.service │ │ │ └── keydb.service │ │ ├── libexec │ │ └── keydb-shutdown │ │ └── share │ │ ├── licenses │ │ └── keydb │ │ │ ├── COPYING │ │ │ ├── COPYING-hiredis │ │ │ ├── COPYING-jemalloc │ │ │ └── COPYRIGHT-lua │ │ └── man │ │ ├── man1 │ │ ├── keydb-benchmark.1.gz │ │ ├── keydb-check-aof.1.gz │ │ ├── keydb-check-rdb.1.gz │ │ ├── keydb-cli.1.gz │ │ ├── keydb-sentinel.1.gz │ │ └── keydb-server.1.gz │ │ └── man5 │ │ ├── keydb-sentinel.conf.5.gz │ │ └── keydb.conf.5.gz │ └── rpm_files_generated │ └── .gitkeep ├── runtest ├── runtest-cluster ├── runtest-moduleapi ├── runtest-rotation ├── runtest-sentinel ├── sentinel.conf ├── src ├── .gitignore ├── AsyncWorkQueue.cpp ├── AsyncWorkQueue.h ├── IStorage.h ├── Makefile ├── SnapshotPayloadParseState.cpp ├── SnapshotPayloadParseState.h ├── StorageCache.cpp ├── StorageCache.h ├── acl.cpp ├── adlist.c ├── adlist.h ├── ae.cpp ├── ae.h ├── ae_epoll.cpp ├── ae_evport.c ├── ae_kqueue.c ├── ae_select.c ├── aelocker.h ├── anet.c ├── anet.h ├── aof.cpp ├── asciilogo.h ├── atomicvar.h ├── bio.cpp ├── bio.h ├── bitops.cpp ├── blocked.cpp ├── childinfo.cpp ├── cli_common.c ├── cli_common.h ├── cluster.cpp ├── cluster.h ├── compactvector.h ├── config.cpp ├── config.h ├── connection.cpp ├── connection.h ├── connhelpers.h ├── cowptr.h ├── crc16.c ├── crc16_slottable.h ├── crc64.c ├── crc64.h ├── crcspeed.c ├── crcspeed.h ├── cron.cpp ├── cron.h ├── db.cpp ├── debug.cpp ├── debugmacro.h ├── defrag.cpp ├── dict.cpp ├── dict.h ├── endianconv.c ├── endianconv.h ├── evict.cpp ├── expire.cpp ├── expire.h ├── fastlock.cpp ├── fastlock.h ├── fastlock_x64.asm ├── fmacros.h ├── gc.h ├── geo.cpp ├── geo.h ├── geohash.c ├── geohash.h ├── geohash_helper.cpp ├── geohash_helper.h ├── help.h ├── hyperloglog.cpp ├── intset.c ├── intset.h ├── keydb-diagnostic-tool.cpp ├── keydbutils.cpp ├── latency.cpp ├── latency.h ├── lazyfree.cpp ├── listpack.c ├── listpack.h ├── listpack_malloc.h ├── localtime.c ├── lolwut.c ├── lolwut.h ├── lolwut5.c ├── lolwut6.c ├── lzf.h ├── lzfP.h ├── lzf_c.c ├── lzf_d.c ├── meminfo.cpp ├── memtest.c ├── mkreleasehdr.sh ├── module.cpp ├── modules │ ├── .gitignore │ ├── Makefile │ ├── gendoc.rb │ ├── helloacl.c │ ├── helloblock.c │ ├── hellocluster.c │ ├── hellodict.c │ ├── hellohook.c │ ├── hellotimer.c │ ├── hellotype.c │ ├── helloworld.c │ └── keydb_modstatsd │ │ ├── Makefile │ │ ├── modmain.cpp │ │ └── redismodule.h ├── monotonic.c ├── monotonic.h ├── motd.cpp ├── motd.h ├── mt19937-64.c ├── mt19937-64.h ├── multi.cpp ├── networking.cpp ├── new.cpp ├── new.h ├── notify.cpp ├── object.cpp ├── pqsort.c ├── pqsort.h ├── pubsub.cpp ├── quicklist.c ├── quicklist.h ├── rand.c ├── rand.h ├── rax.c ├── rax.h ├── rax_malloc.h ├── rdb-s3.cpp ├── rdb.cpp ├── rdb.h ├── readwritelock.h ├── redis-benchmark.cpp ├── redis-check-aof.cpp ├── redis-check-rdb.cpp ├── redis-cli-cpphelper.cpp ├── redis-cli.c ├── redis-cli.h ├── redis-trib.rb ├── redisassert.h ├── redismodule.h ├── release.c ├── replication.cpp ├── rio.cpp ├── rio.h ├── scripting.cpp ├── sds.c ├── sds.h ├── sdsalloc.h ├── sdscompat.h ├── semiorderedset.h ├── sentinel.cpp ├── server.cpp ├── server.h ├── serverassert.h ├── setcpuaffinity.c ├── setproctitle.c ├── sha1.c ├── sha1.h ├── sha256.c ├── sha256.h ├── siphash.c ├── slowlog.cpp ├── slowlog.h ├── snapshot.cpp ├── solarisfixes.h ├── sort.cpp ├── sparkline.cpp ├── sparkline.h ├── storage-lite.c ├── storage.cpp ├── storage.h ├── storage │ ├── rocksdb.cpp │ ├── rocksdb.h │ ├── rocksdbfactor_internal.h │ ├── rocksdbfactory.cpp │ ├── rocksdbfactory.h │ ├── teststorageprovider.cpp │ └── teststorageprovider.h ├── stream.h ├── syncio.cpp ├── t_hash.cpp ├── t_list.cpp ├── t_nhash.cpp ├── t_nhash.h ├── t_set.cpp ├── t_stream.cpp ├── t_string.cpp ├── t_zset.cpp ├── testhelp.h ├── timeout.cpp ├── tls.cpp ├── tracking.cpp ├── util.c ├── util.h ├── uuid.h ├── valgrind.sup ├── version.h ├── ziplist.c ├── ziplist.h ├── zipmap.c ├── zipmap.h ├── zmalloc.cpp └── zmalloc.h ├── tests ├── assets │ ├── corrupt_empty_keys.rdb │ ├── corrupt_ziplist.rdb │ ├── default.conf │ ├── encodings.rdb │ ├── hash-zipmap.rdb │ ├── minimal.conf │ ├── nodefaultuser.acl │ ├── redis-module-save.rdb │ ├── redis-save.rdb │ └── user.acl ├── cluster │ ├── cluster.tcl │ ├── run.tcl │ ├── tests │ │ ├── 00-base.tcl │ │ ├── 01-faildet.tcl │ │ ├── 02-failover.tcl │ │ ├── 03-failover-loop.tcl │ │ ├── 04-resharding.tcl │ │ ├── 05-slave-selection.tcl │ │ ├── 06-slave-stop-cond.tcl │ │ ├── 07-replica-migration.tcl │ │ ├── 08-update-msg.tcl │ │ ├── 09-pubsub.tcl │ │ ├── 10-manual-failover.tcl │ │ ├── 11-manual-takeover.tcl │ │ ├── 12-replica-migration-2.tcl │ │ ├── 12.1-replica-migration-3.tcl │ │ ├── 13-no-failover-option.tcl │ │ ├── 14-consistency-check.tcl │ │ ├── 15-cluster-slots.tcl │ │ ├── 16-transactions-on-replica.tcl │ │ ├── 17-diskless-load-swapdb.tcl │ │ ├── 18-info.tcl │ │ ├── 19-cluster-nodes-slots.tcl │ │ ├── 20-half-migrated-slot.tcl │ │ ├── 21-many-slot-migration.tcl │ │ ├── helpers │ │ │ └── onlydots.tcl │ │ └── includes │ │ │ ├── init-tests.tcl │ │ │ └── utils.tcl │ └── tmp │ │ └── .gitignore ├── helpers │ ├── bg_block_op.tcl │ ├── bg_complex_data.tcl │ ├── fake_redis_node.tcl │ ├── gen_climbing_load.tcl │ └── gen_write_load.tcl ├── instances.tcl ├── integration │ ├── aof-race.tcl │ ├── aof.tcl │ ├── block-repl.tcl │ ├── convert-zipmap-hash-on-load.tcl │ ├── corrupt-dump-fuzzer.tcl │ ├── corrupt-dump.tcl │ ├── failover.tcl │ ├── keydb-benchmark.tcl │ ├── keydb-cli.tcl │ ├── logging.tcl │ ├── multimaster-psync.tcl │ ├── psync2-pingoff.tcl │ ├── psync2-reg-multimaster.tcl │ ├── psync2-reg.tcl │ ├── psync2.tcl │ ├── rdb-repl-tests │ ├── rdb.tcl │ ├── replication-2.tcl │ ├── replication-3.tcl │ ├── replication-4.tcl │ ├── replication-active.tcl │ ├── replication-fast.tcl │ ├── replication-multimaster-connect.tcl │ ├── replication-multimaster.tcl │ ├── replication-psync-flash.tcl │ ├── replication-psync-multimaster.tcl │ ├── replication-psync.tcl │ └── replication.tcl ├── modules │ ├── Makefile │ ├── auth.c │ ├── basics.c │ ├── blockedclient.c │ ├── blockonbackground.c │ ├── blockonkeys.c │ ├── commandfilter.c │ ├── datatype.c │ ├── defragtest.c │ ├── fork.c │ ├── getkeys.c │ ├── hash.c │ ├── hooks.c │ ├── infotest.c │ ├── keyspace_events.c │ ├── load.c │ ├── misc.c │ ├── propagate.c │ ├── scan.c │ ├── stream.c │ ├── test_lazyfree.c │ ├── testrdb.c │ ├── timer.c │ ├── timers.c │ └── zset.c ├── sentinel │ ├── run.tcl │ ├── tests │ │ ├── 00-base.tcl │ │ ├── 01-conf-update.tcl │ │ ├── 02-slaves-reconf.tcl │ │ ├── 03-runtime-reconf.tcl │ │ ├── 04-slave-selection.tcl │ │ ├── 05-manual.tcl │ │ ├── 06-ckquorum.tcl │ │ ├── 07-down-conditions.tcl │ │ ├── 08-hostname-conf.tcl │ │ ├── 09-acl-support.tcl │ │ ├── 10-replica-priority.tcl │ │ ├── helpers │ │ │ └── check_leaked_fds.tcl │ │ └── includes │ │ │ ├── init-tests.tcl │ │ │ ├── sentinel.conf │ │ │ └── start-init-tests.tcl │ └── tmp │ │ └── .gitignore ├── support │ ├── benchmark.tcl │ ├── cli.tcl │ ├── cluster.tcl │ ├── keydb.tcl │ ├── server.tcl │ ├── test.tcl │ ├── tmpfile.tcl │ └── util.tcl ├── test_helper.tcl ├── tmp │ └── .gitignore └── unit │ ├── acl.tcl │ ├── aofrw.tcl │ ├── auth.tcl │ ├── bitfield.tcl │ ├── bitops.tcl │ ├── cron.tcl │ ├── dump.tcl │ ├── expire.tcl │ ├── flash.tcl │ ├── flash.tcl.save │ ├── geo.tcl │ ├── hyperloglog.tcl │ ├── info.tcl │ ├── introspection-2.tcl │ ├── introspection.tcl │ ├── keyspace.tcl │ ├── latency-monitor.tcl │ ├── lazyfree.tcl │ ├── limits.tcl │ ├── loadsave.tcl │ ├── maxmemory.tcl │ ├── memefficiency.tcl │ ├── moduleapi │ ├── auth.tcl │ ├── basics.tcl │ ├── blockedclient.tcl │ ├── blockonbackground.tcl │ ├── blockonkeys.tcl │ ├── commandfilter.tcl │ ├── datatype.tcl │ ├── defrag.tcl │ ├── fork.tcl │ ├── getkeys.tcl │ ├── hash.tcl │ ├── hooks.tcl │ ├── infotest.tcl │ ├── keyspace_events.tcl │ ├── load.tcl │ ├── misc.tcl │ ├── moduleloadsave.tcl │ ├── propagate.tcl │ ├── scan.tcl │ ├── stream.tcl │ ├── test_lazyfree.tcl │ ├── testrdb.tcl │ ├── timer.tcl │ └── zset.tcl │ ├── multi.tcl │ ├── networking.tcl │ ├── obuf-limits.tcl │ ├── oom-score-adj.tcl │ ├── other.tcl │ ├── pause.tcl │ ├── pendingquerybuf.tcl │ ├── printver.tcl │ ├── protocol.tcl │ ├── pubsub.tcl │ ├── quit.tcl │ ├── replication.tcl │ ├── rreplay.tcl │ ├── scan.tcl │ ├── scripting.tcl │ ├── shutdown.tcl │ ├── slowlog.tcl │ ├── soft_shutdown.tcl │ ├── sort.tcl │ ├── tls-auditlog.tcl │ ├── tls-name-validation.tcl │ ├── tls-rotation.tcl │ ├── tls.tcl │ ├── tracking.tcl │ ├── type │ ├── hash.tcl │ ├── incr.tcl │ ├── list-2.tcl │ ├── list-3.tcl │ ├── list-common.tcl │ ├── list.tcl │ ├── nestedhash.tcl │ ├── set.tcl │ ├── stream-cgroups.tcl │ ├── stream.tcl │ ├── string.tcl │ └── zset.tcl │ ├── violations.tcl │ └── wait.tcl └── utils ├── build-static-symbols.tcl ├── cluster_fail_time.tcl ├── compare_config.sh ├── corrupt_rdb.c ├── create-cluster ├── .gitignore ├── README └── create-cluster ├── gen-test-certs.sh ├── generate-command-help.rb ├── graphs └── commits-over-time │ ├── README.md │ └── genhtml.tcl ├── hashtable ├── README └── rehashing.c ├── hyperloglog ├── .gitignore ├── hll-err.rb └── hll-gnuplot-graph.rb ├── install_server.sh ├── lru ├── README ├── lfu-simulation.c └── test-lru.rb ├── redis-copy.rb ├── redis-sha1.rb ├── redis_init_script ├── redis_init_script.tpl ├── releasetools ├── 01_create_tarball.sh ├── 02_upload_tarball.sh ├── 03_test_release.sh ├── 04_release_hash.sh └── changelog.tcl ├── speed-regression.tcl ├── srandmember ├── README.md ├── showdist.rb └── showfreq.rb ├── systemd-redis_multiple_servers@.service ├── systemd-redis_server.service ├── tracking_collisions.c └── whatisdoing.sh /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Help us improve KeyDB by reporting a bug 4 | title: '[BUG]' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | 12 | A short description of the bug. 13 | 14 | **To reproduce** 15 | 16 | Steps to reproduce the behavior and/or a minimal code sample. 17 | 18 | **Expected behavior** 19 | 20 | A description of what you expected to happen. 21 | 22 | **Additional information** 23 | 24 | Any additional information that is relevant to the problem. 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/crash_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Crash report 3 | about: Submit a crash report 4 | title: '[CRASH]' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Crash report** 11 | 12 | Paste the complete crash log between the quotes below. Please include a few lines from the log preceding the crash report to provide some context. 13 | 14 | ``` 15 | ``` 16 | 17 | **Aditional information** 18 | 19 | 1. OS distribution and version 20 | 2. Steps to reproduce (if any) 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest a feature for KeyDB 4 | title: '[NEW]' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **The problem/use-case that the feature addresses** 11 | 12 | A description of the problem that the feature will solve, or the use-case with which the feature will be used. 13 | 14 | **Description of the feature** 15 | 16 | A description of what you want to happen. 17 | 18 | **Alternatives you've considered** 19 | 20 | Any alternative solutions or features you've considered, including references to existing open and closed feature requests in this repository. 21 | 22 | **Additional information** 23 | 24 | Any additional information that is relevant to the feature request. 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other_stuff.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Other 3 | about: Can't find the right issue type? Use this one! 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .*.swp 2 | core 3 | *.o 4 | *.xo 5 | *.so 6 | *.d 7 | !**/bash_completion.d 8 | !**/logrotate.d 9 | !**/keydb.service.d 10 | !**/keydb-sentinel.service.d 11 | *.log 12 | dump.rdb 13 | src/keydb-server 14 | **/bin/keydb-server 15 | **/app/keydb-server 16 | *.deb 17 | *.rpm 18 | src/keydb-cli 19 | **/bin/keydb-cli 20 | **/app/keydb-cli 21 | src/keydb-sentinel 22 | **/bin/keydb-sentinel 23 | **/app/keydb-sentinel 24 | redis-benchmark 25 | keydb-benchmark 26 | redis-check-aof 27 | keydb-check-aof 28 | redis-check-rdb 29 | keydb-check-rdb 30 | redis-check-dump 31 | keydb-check-dump 32 | keydb-diagnostic-tool 33 | redis-cli 34 | redis-sentinel 35 | redis-server 36 | doc-tools 37 | release 38 | misc/* 39 | src/release.h 40 | appendonly.aof 41 | SHORT_TERM_TODO 42 | release.h 43 | src/transfer.sh 44 | src/configs 45 | redis.ds 46 | src/keydb.conf 47 | src/nodes.conf 48 | deps/lua/src/lua 49 | deps/lua/src/luac 50 | deps/lua/src/liblua.a 51 | tests/tls*/* 52 | .make-* 53 | .prerequisites 54 | *.dSYM 55 | Makefile.dep 56 | .vscode/* 57 | .idea/* 58 | .ccls 59 | .ccls-cache/* 60 | compile_commands.json 61 | keydb.code-workspace 62 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "deps/rocksdb"] 2 | path = deps/rocksdb 3 | url = https://github.com/facebook/rocksdb.git 4 | [submodule "deps/depot_tools"] 5 | path = deps/depot_tools 6 | url = https://chromium.googlesource.com/chromium/tools/depot_tools.git 7 | -------------------------------------------------------------------------------- /BUGS: -------------------------------------------------------------------------------- 1 | Please check https://github.com/redis/redis/issues 2 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | See README 2 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Top level makefile, this just calls into src/Makefile where the real work is done. Changes should be made there. 2 | 3 | default: all 4 | 5 | .DEFAULT: 6 | cd src && $(MAKE) $@ 7 | 8 | install: 9 | cd src && $(MAKE) $@ 10 | 11 | .PHONY: install 12 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/.github/workflows/coverage.yml: -------------------------------------------------------------------------------- 1 | name: Coverage 2 | 3 | on: [push, pull_request] 4 | jobs: 5 | coverage: 6 | runs-on: ubuntu-20.04 7 | steps: 8 | - uses: actions/checkout@v2 9 | - name: dependencies 10 | shell: bash 11 | run: | 12 | sudo apt-get update 13 | sudo apt-get install -y -qq make cmake gcc g++ lcov bc 14 | - name: build 15 | shell: bash 16 | run: | 17 | export LD_LIBRARY_PATH=.:$(cat /etc/ld.so.conf.d/* | grep -vF "#" | tr "\\n" ":" | sed -e "s/:$//g") 18 | cmake . -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=On 19 | make all -j$(nproc) 20 | - name: coverage 21 | shell: bash 22 | run: | 23 | make coverage 24 | lines=$(lcov --summary coverage.info | grep -F lines | awk '{print $2}' | sed -e "s/%//g") 25 | if (( $(echo "${lines} < ${COVERAGE_THRESHOLD}" | bc -l) )); then 26 | echo "Line coverage dropped below ${COVERAGE_THRESHOLD}% to ${lines}%" 27 | exit 1 28 | fi 29 | env: 30 | COVERAGE_THRESHOLD: 85.0 31 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: [push, pull_request] 4 | jobs: 5 | lint: 6 | runs-on: ubuntu-20.04 7 | steps: 8 | - uses: actions/checkout@v2 9 | - name: lint 10 | uses: DoozyX/clang-format-lint-action@v0.12 11 | with: 12 | clangFormatVersion: 12 13 | source: './include/cpp-statsd-client ./tests' 14 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/.github/workflows/linux.yml: -------------------------------------------------------------------------------- 1 | name: Linux 2 | 3 | on: [push, pull_request] 4 | jobs: 5 | linux: 6 | runs-on: ubuntu-20.04 7 | steps: 8 | - uses: actions/checkout@v2 9 | - name: dependencies 10 | shell: bash 11 | run: | 12 | sudo apt-get update 13 | sudo apt-get install -y -qq make cmake gcc g++ 14 | - name: build 15 | shell: bash 16 | run: | 17 | export LD_LIBRARY_PATH=.:$(cat /etc/ld.so.conf.d/* | grep -vF "#" | tr "\\n" ":" | sed -e "s/:$//g") 18 | cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_SANITIZERS=On 19 | make all -j$(nproc) 20 | - name: test 21 | shell: bash 22 | run: | 23 | make test 24 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/.github/workflows/windows.yml: -------------------------------------------------------------------------------- 1 | name: Windows 2 | 3 | on: [push, pull_request] 4 | jobs: 5 | windows: 6 | runs-on: windows-latest 7 | steps: 8 | - uses: actions/checkout@v2 9 | - name: dependencies 10 | run: | 11 | choco install cmake 12 | - name: build 13 | run: | 14 | cmake -S . -B build -G "Visual Studio 16 2019" -A x64 15 | cmake --build build --target ALL_BUILD --config Release 16 | - name: test 17 | run: | 18 | cmake --build build --target RUN_TESTS --config Release 19 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/.gitignore: -------------------------------------------------------------------------------- 1 | bin -------------------------------------------------------------------------------- /deps/cpp-statsd-client/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Vincent Thiery 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /deps/cpp-statsd-client/Makefile: -------------------------------------------------------------------------------- 1 | # simple makefile to build, test and clean 2 | 3 | BUILD_MODE ?= Release 4 | ENABLE_COVERAGE ?= On 5 | 6 | build: clean 7 | @echo "Build in ${BUILD_MODE} mode" 8 | mkdir -p bin/${BUILD_MODE} 9 | @cd bin/${BUILD_MODE}; cmake ../../ -DCMAKE_BUILD_TYPE=${BUILD_MODE} -DENABLE_COVERAGE=${ENABLE_COVERAGE} 10 | @cd bin/${BUILD_MODE}; make 11 | 12 | test: build 13 | @cd bin/${BUILD_MODE}; make test 14 | 15 | coverage: build 16 | @cd bin/${BUILD_MODE}; make coverage 17 | 18 | install: build 19 | @cd bin/${BUILD_MODE}; make install 20 | 21 | clean: 22 | @rm -rf bin 23 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/cmake/Config.cmake.in: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2016, Ruslan Baratov 2 | # 3 | # Licensed under the MIT License (the "License"); you may not use this file except 4 | # in compliance with the License. You may obtain a copy of the License at 5 | # 6 | # http://opensource.org/licenses/MIT 7 | # 8 | # Unless required by applicable law or agreed to in writing, software distributed 9 | # under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 10 | # CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | # specific language governing permissions and limitations under the License. 12 | 13 | @PACKAGE_INIT@ 14 | 15 | find_package(Threads REQUIRED) 16 | 17 | include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") 18 | check_required_components("@PROJECT_NAME@") 19 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/cmake/cpp-statsd-clientConfig.cmake.in: -------------------------------------------------------------------------------- 1 | @PACKAGE_INIT@ 2 | 3 | include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") 4 | check_required_components("@PROJECT_NAME@") 5 | -------------------------------------------------------------------------------- /deps/cpp-statsd-client/images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Artboard Copy 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /deps/hdr_histogram/Makefile: -------------------------------------------------------------------------------- 1 | STD= 2 | WARN= -Wall 3 | OPT= -Os 4 | 5 | R_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) 6 | R_LDFLAGS= $(LDFLAGS) 7 | DEBUG= -g 8 | 9 | R_CC=$(CC) $(R_CFLAGS) 10 | R_LD=$(CC) $(R_LDFLAGS) 11 | 12 | hdr_histogram.o: hdr_histogram.h hdr_histogram.c 13 | 14 | .c.o: 15 | $(R_CC) -c $< 16 | 17 | clean: 18 | rm -f *.o 19 | 20 | 21 | -------------------------------------------------------------------------------- /deps/hdr_histogram/README.md: -------------------------------------------------------------------------------- 1 | HdrHistogram_c v0.11.0 2 | 3 | ---------------------------------------------- 4 | 5 | This port contains a subset of the 'C' version of High Dynamic Range (HDR) Histogram available at [github.com/HdrHistogram/HdrHistogram_c](https://github.com/HdrHistogram/HdrHistogram_c). 6 | 7 | 8 | The code present on `hdr_histogram.c`, `hdr_histogram.h`, and `hdr_atomic.c` was Written by Gil Tene, Michael Barker, 9 | and Matt Warren, and released to the public domain, as explained at 10 | http://creativecommons.org/publicdomain/zero/1.0/. -------------------------------------------------------------------------------- /deps/hiredis/.gitignore: -------------------------------------------------------------------------------- 1 | /hiredis-test 2 | /examples/hiredis-example* 3 | /*.o 4 | /*.so 5 | /*.dylib 6 | /*.a 7 | /*.pc 8 | *.dSYM 9 | tags 10 | -------------------------------------------------------------------------------- /deps/hiredis/appveyor.yml: -------------------------------------------------------------------------------- 1 | # Appveyor configuration file for CI build of hiredis on Windows (under Cygwin) 2 | environment: 3 | matrix: 4 | - CYG_BASH: C:\cygwin64\bin\bash 5 | CC: gcc 6 | - CYG_BASH: C:\cygwin\bin\bash 7 | CC: gcc 8 | CFLAGS: -m32 9 | CXXFLAGS: -m32 10 | LDFLAGS: -m32 11 | 12 | clone_depth: 1 13 | 14 | # Attempt to ensure we don't try to convert line endings to Win32 CRLF as this will cause build to fail 15 | init: 16 | - git config --global core.autocrlf input 17 | 18 | # Install needed build dependencies 19 | install: 20 | - '%CYG_BASH% -lc "cygcheck -dc cygwin"' 21 | 22 | build_script: 23 | - 'echo building...' 24 | - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0 5 | 6 | class ExampleQt : public QObject { 7 | 8 | Q_OBJECT 9 | 10 | public: 11 | ExampleQt(const char * value, QObject * parent = 0) 12 | : QObject(parent), m_value(value) {} 13 | 14 | signals: 15 | void finished(); 16 | 17 | public slots: 18 | void run(); 19 | 20 | private: 21 | void finish() { emit finished(); } 22 | 23 | private: 24 | const char * m_value; 25 | redisAsyncContext * m_ctx; 26 | RedisQtAdapter m_adapter; 27 | 28 | friend 29 | void getCallback(redisAsyncContext *, void *, void *); 30 | }; 31 | 32 | #endif /* !__HIREDIS_EXAMPLE_QT_H */ 33 | -------------------------------------------------------------------------------- /deps/hiredis/fmacros.h: -------------------------------------------------------------------------------- 1 | #ifndef __HIREDIS_FMACRO_H 2 | #define __HIREDIS_FMACRO_H 3 | 4 | #define _XOPEN_SOURCE 600 5 | #define _POSIX_C_SOURCE 200112L 6 | 7 | #if defined(__APPLE__) && defined(__MACH__) 8 | /* Enable TCP_KEEPALIVE */ 9 | #define _DARWIN_C_SOURCE 10 | #endif 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /deps/hiredis/hiredis-config.cmake.in: -------------------------------------------------------------------------------- 1 | @PACKAGE_INIT@ 2 | 3 | set_and_check(hiredis_INCLUDEDIR "@PACKAGE_INCLUDE_INSTALL_DIR@") 4 | 5 | IF (NOT TARGET hiredis::hiredis) 6 | INCLUDE(${CMAKE_CURRENT_LIST_DIR}/hiredis-targets.cmake) 7 | ENDIF() 8 | 9 | SET(hiredis_LIBRARIES hiredis::hiredis) 10 | SET(hiredis_INCLUDE_DIRS ${hiredis_INCLUDEDIR}) 11 | 12 | check_required_components(hiredis) 13 | 14 | -------------------------------------------------------------------------------- /deps/hiredis/hiredis.pc.in: -------------------------------------------------------------------------------- 1 | prefix=@CMAKE_INSTALL_PREFIX@ 2 | install_libdir=@CMAKE_INSTALL_LIBDIR@ 3 | exec_prefix=${prefix} 4 | libdir=${exec_prefix}/${install_libdir} 5 | includedir=${prefix}/include 6 | pkgincludedir=${includedir}/hiredis 7 | 8 | Name: hiredis 9 | Description: Minimalistic C client library for Redis. 10 | Version: @PROJECT_VERSION@ 11 | Libs: -L${libdir} -lhiredis 12 | Cflags: -I${pkgincludedir} -D_FILE_OFFSET_BITS=64 13 | -------------------------------------------------------------------------------- /deps/hiredis/hiredis_ssl-config.cmake.in: -------------------------------------------------------------------------------- 1 | @PACKAGE_INIT@ 2 | 3 | set_and_check(hiredis_ssl_INCLUDEDIR "@PACKAGE_INCLUDE_INSTALL_DIR@") 4 | 5 | IF (NOT TARGET hiredis::hiredis_ssl) 6 | INCLUDE(${CMAKE_CURRENT_LIST_DIR}/hiredis_ssl-targets.cmake) 7 | ENDIF() 8 | 9 | SET(hiredis_ssl_LIBRARIES hiredis::hiredis_ssl) 10 | SET(hiredis_ssl_INCLUDE_DIRS ${hiredis_ssl_INCLUDEDIR}) 11 | 12 | check_required_components(hiredis_ssl) 13 | 14 | -------------------------------------------------------------------------------- /deps/hiredis/hiredis_ssl.pc.in: -------------------------------------------------------------------------------- 1 | prefix=@CMAKE_INSTALL_PREFIX@ 2 | exec_prefix=${prefix} 3 | libdir=${exec_prefix}/lib 4 | includedir=${prefix}/include 5 | pkgincludedir=${includedir}/hiredis 6 | 7 | Name: hiredis_ssl 8 | Description: SSL Support for hiredis. 9 | Version: @PROJECT_VERSION@ 10 | Requires: hiredis 11 | Libs: -L${libdir} -lhiredis_ssl 12 | Libs.private: -lssl -lcrypto 13 | -------------------------------------------------------------------------------- /deps/jemalloc/.autom4te.cfg: -------------------------------------------------------------------------------- 1 | begin-language: "Autoconf-without-aclocal-m4" 2 | args: --no-cache 3 | end-language: "Autoconf-without-aclocal-m4" 4 | -------------------------------------------------------------------------------- /deps/jemalloc/.cirrus.yml: -------------------------------------------------------------------------------- 1 | env: 2 | CIRRUS_CLONE_DEPTH: 1 3 | ARCH: amd64 4 | 5 | task: 6 | freebsd_instance: 7 | matrix: 8 | image: freebsd-12-0-release-amd64 9 | image: freebsd-11-2-release-amd64 10 | install_script: 11 | - sed -i.bak -e 's,pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly,pkg+http://pkg.FreeBSD.org/\${ABI}/latest,' /etc/pkg/FreeBSD.conf 12 | - pkg upgrade -y 13 | - pkg install -y autoconf gmake 14 | script: 15 | - autoconf 16 | #- ./configure ${COMPILER_FLAGS:+ CC="$CC $COMPILER_FLAGS" CXX="$CXX $COMPILER_FLAGS" } $CONFIGURE_FLAGS 17 | - ./configure 18 | - export JFLAG=`sysctl -n kern.smp.cpus` 19 | - gmake -j${JFLAG} 20 | - gmake -j${JFLAG} tests 21 | - gmake check 22 | -------------------------------------------------------------------------------- /deps/jemalloc/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /deps/jemalloc/README: -------------------------------------------------------------------------------- 1 | jemalloc is a general purpose malloc(3) implementation that emphasizes 2 | fragmentation avoidance and scalable concurrency support. jemalloc first came 3 | into use as the FreeBSD libc allocator in 2005, and since then it has found its 4 | way into numerous applications that rely on its predictable behavior. In 2010 5 | jemalloc development efforts broadened to include developer support features 6 | such as heap profiling and extensive monitoring/tuning hooks. Modern jemalloc 7 | releases continue to be integrated back into FreeBSD, and therefore versatility 8 | remains critical. Ongoing development efforts trend toward making jemalloc 9 | among the best allocators for a broad range of demanding applications, and 10 | eliminating/mitigating weaknesses that have practical repercussions for real 11 | world applications. 12 | 13 | The COPYING file contains copyright and licensing information. 14 | 15 | The INSTALL file contains information on how to configure, build, and install 16 | jemalloc. 17 | 18 | The ChangeLog file contains a brief summary of changes for each release. 19 | 20 | URL: http://jemalloc.net/ 21 | -------------------------------------------------------------------------------- /deps/jemalloc/VERSION: -------------------------------------------------------------------------------- 1 | 5.2.1-0-g0 2 | -------------------------------------------------------------------------------- /deps/jemalloc/autogen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for i in autoconf; do 4 | echo "$i" 5 | $i 6 | if [ $? -ne 0 ]; then 7 | echo "Error $? in $i" 8 | exit 1 9 | fi 10 | done 11 | 12 | echo "./configure --enable-autogen $@" 13 | ./configure --enable-autogen $@ 14 | if [ $? -ne 0 ]; then 15 | echo "Error $? in ./configure" 16 | exit 1 17 | fi 18 | -------------------------------------------------------------------------------- /deps/jemalloc/bin/jemalloc.sh.in: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | prefix=@prefix@ 4 | exec_prefix=@exec_prefix@ 5 | libdir=@libdir@ 6 | 7 | @LD_PRELOAD_VAR@=${libdir}/libjemalloc.@SOREV@ 8 | export @LD_PRELOAD_VAR@ 9 | exec "$@" 10 | -------------------------------------------------------------------------------- /deps/jemalloc/config.stamp.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/jemalloc/config.stamp.in -------------------------------------------------------------------------------- /deps/jemalloc/doc/html.xsl.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /deps/jemalloc/doc/manpages.xsl.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /deps/jemalloc/doc/stylesheet.xsl: -------------------------------------------------------------------------------- 1 | 2 | ansi 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/arena_structs_a.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_ARENA_STRUCTS_A_H 2 | #define JEMALLOC_INTERNAL_ARENA_STRUCTS_A_H 3 | 4 | #include "jemalloc/internal/bitmap.h" 5 | 6 | struct arena_slab_data_s { 7 | /* Per region allocated/deallocated bitmap. */ 8 | bitmap_t bitmap[BITMAP_GROUPS_MAX]; 9 | }; 10 | 11 | #endif /* JEMALLOC_INTERNAL_ARENA_STRUCTS_A_H */ 12 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/base_externs.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_BASE_EXTERNS_H 2 | #define JEMALLOC_INTERNAL_BASE_EXTERNS_H 3 | 4 | extern metadata_thp_mode_t opt_metadata_thp; 5 | extern const char *metadata_thp_mode_names[]; 6 | 7 | base_t *b0get(void); 8 | base_t *base_new(tsdn_t *tsdn, unsigned ind, extent_hooks_t *extent_hooks); 9 | void base_delete(tsdn_t *tsdn, base_t *base); 10 | extent_hooks_t *base_extent_hooks_get(base_t *base); 11 | extent_hooks_t *base_extent_hooks_set(base_t *base, 12 | extent_hooks_t *extent_hooks); 13 | void *base_alloc(tsdn_t *tsdn, base_t *base, size_t size, size_t alignment); 14 | extent_t *base_alloc_extent(tsdn_t *tsdn, base_t *base); 15 | void base_stats_get(tsdn_t *tsdn, base_t *base, size_t *allocated, 16 | size_t *resident, size_t *mapped, size_t *n_thp); 17 | void base_prefork(tsdn_t *tsdn, base_t *base); 18 | void base_postfork_parent(tsdn_t *tsdn, base_t *base); 19 | void base_postfork_child(tsdn_t *tsdn, base_t *base); 20 | bool base_boot(tsdn_t *tsdn); 21 | 22 | #endif /* JEMALLOC_INTERNAL_BASE_EXTERNS_H */ 23 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/base_inlines.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_BASE_INLINES_H 2 | #define JEMALLOC_INTERNAL_BASE_INLINES_H 3 | 4 | static inline unsigned 5 | base_ind_get(const base_t *base) { 6 | return base->ind; 7 | } 8 | 9 | static inline bool 10 | metadata_thp_enabled(void) { 11 | return (opt_metadata_thp != metadata_thp_disabled); 12 | } 13 | #endif /* JEMALLOC_INTERNAL_BASE_INLINES_H */ 14 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/bin_types.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_BIN_TYPES_H 2 | #define JEMALLOC_INTERNAL_BIN_TYPES_H 3 | 4 | #include "jemalloc/internal/sc.h" 5 | 6 | #define BIN_SHARDS_MAX (1 << EXTENT_BITS_BINSHARD_WIDTH) 7 | #define N_BIN_SHARDS_DEFAULT 1 8 | 9 | /* Used in TSD static initializer only. Real init in arena_bind(). */ 10 | #define TSD_BINSHARDS_ZERO_INITIALIZER {{UINT8_MAX}} 11 | 12 | typedef struct tsd_binshards_s tsd_binshards_t; 13 | struct tsd_binshards_s { 14 | uint8_t binshard[SC_NBINS]; 15 | }; 16 | 17 | #endif /* JEMALLOC_INTERNAL_BIN_TYPES_H */ 18 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/extent_dss.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_EXTENT_DSS_H 2 | #define JEMALLOC_INTERNAL_EXTENT_DSS_H 3 | 4 | typedef enum { 5 | dss_prec_disabled = 0, 6 | dss_prec_primary = 1, 7 | dss_prec_secondary = 2, 8 | 9 | dss_prec_limit = 3 10 | } dss_prec_t; 11 | #define DSS_PREC_DEFAULT dss_prec_secondary 12 | #define DSS_DEFAULT "secondary" 13 | 14 | extern const char *dss_prec_names[]; 15 | 16 | extern const char *opt_dss; 17 | 18 | dss_prec_t extent_dss_prec_get(void); 19 | bool extent_dss_prec_set(dss_prec_t dss_prec); 20 | void *extent_alloc_dss(tsdn_t *tsdn, arena_t *arena, void *new_addr, 21 | size_t size, size_t alignment, bool *zero, bool *commit); 22 | bool extent_in_dss(void *addr); 23 | bool extent_dss_mergeable(void *addr_a, void *addr_b); 24 | void extent_dss_boot(void); 25 | 26 | #endif /* JEMALLOC_INTERNAL_EXTENT_DSS_H */ 27 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/extent_mmap.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H 2 | #define JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H 3 | 4 | extern bool opt_retain; 5 | 6 | void *extent_alloc_mmap(void *new_addr, size_t size, size_t alignment, 7 | bool *zero, bool *commit); 8 | bool extent_dalloc_mmap(void *addr, size_t size); 9 | 10 | #endif /* JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H */ 11 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/extent_types.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_EXTENT_TYPES_H 2 | #define JEMALLOC_INTERNAL_EXTENT_TYPES_H 3 | 4 | typedef struct extent_s extent_t; 5 | typedef struct extents_s extents_t; 6 | 7 | typedef struct extent_util_stats_s extent_util_stats_t; 8 | typedef struct extent_util_stats_verbose_s extent_util_stats_verbose_t; 9 | 10 | #define EXTENT_HOOKS_INITIALIZER NULL 11 | 12 | /* 13 | * When reuse (and split) an active extent, (1U << opt_lg_extent_max_active_fit) 14 | * is the max ratio between the size of the active extent and the new extent. 15 | */ 16 | #define LG_EXTENT_MAX_ACTIVE_FIT_DEFAULT 6 17 | 18 | typedef enum { 19 | EXTENT_NOT_HEAD, 20 | EXTENT_IS_HEAD /* Only relevant for Windows && opt.retain. */ 21 | } extent_head_state_t; 22 | 23 | #endif /* JEMALLOC_INTERNAL_EXTENT_TYPES_H */ 24 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/private_namespace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for symbol in `cat "$@"` ; do 4 | echo "#define ${symbol} JEMALLOC_N(${symbol})" 5 | done 6 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/public_namespace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for nm in `cat $1` ; do 4 | n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'` 5 | echo "#define je_${n} JEMALLOC_N(${n})" 6 | done 7 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/public_unnamespace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for nm in `cat $1` ; do 4 | n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'` 5 | echo "#undef je_${n}" 6 | done 7 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/safety_check.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_SAFETY_CHECK_H 2 | #define JEMALLOC_INTERNAL_SAFETY_CHECK_H 3 | 4 | void safety_check_fail(const char *format, ...); 5 | /* Can set to NULL for a default. */ 6 | void safety_check_set_abort(void (*abort_fn)()); 7 | 8 | JEMALLOC_ALWAYS_INLINE void 9 | safety_check_set_redzone(void *ptr, size_t usize, size_t bumped_usize) { 10 | assert(usize < bumped_usize); 11 | for (size_t i = usize; i < bumped_usize && i < usize + 32; ++i) { 12 | *((unsigned char *)ptr + i) = 0xBC; 13 | } 14 | } 15 | 16 | JEMALLOC_ALWAYS_INLINE void 17 | safety_check_verify_redzone(const void *ptr, size_t usize, size_t bumped_usize) 18 | { 19 | for (size_t i = usize; i < bumped_usize && i < usize + 32; ++i) { 20 | if (unlikely(*((unsigned char *)ptr + i) != 0xBC)) { 21 | safety_check_fail("Use after free error\n"); 22 | } 23 | } 24 | } 25 | 26 | #endif /*JEMALLOC_INTERNAL_SAFETY_CHECK_H */ 27 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/spin.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_SPIN_H 2 | #define JEMALLOC_INTERNAL_SPIN_H 3 | 4 | #define SPIN_INITIALIZER {0U} 5 | 6 | typedef struct { 7 | unsigned iteration; 8 | } spin_t; 9 | 10 | static inline void 11 | spin_cpu_spinwait() { 12 | # if HAVE_CPU_SPINWAIT 13 | CPU_SPINWAIT; 14 | # else 15 | volatile int x = 0; 16 | x = x; 17 | # endif 18 | } 19 | 20 | static inline void 21 | spin_adaptive(spin_t *spin) { 22 | volatile uint32_t i; 23 | 24 | if (spin->iteration < 5) { 25 | for (i = 0; i < (1U << spin->iteration); i++) { 26 | spin_cpu_spinwait(); 27 | } 28 | spin->iteration++; 29 | } else { 30 | #ifdef _WIN32 31 | SwitchToThread(); 32 | #else 33 | sched_yield(); 34 | #endif 35 | } 36 | } 37 | 38 | #undef SPIN_INLINE 39 | 40 | #endif /* JEMALLOC_INTERNAL_SPIN_H */ 41 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/test_hooks.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_TEST_HOOKS_H 2 | #define JEMALLOC_INTERNAL_TEST_HOOKS_H 3 | 4 | extern JEMALLOC_EXPORT void (*test_hooks_arena_new_hook)(); 5 | extern JEMALLOC_EXPORT void (*test_hooks_libc_hook)(); 6 | 7 | #define JEMALLOC_HOOK(fn, hook) ((void)(hook != NULL && (hook(), 0)), fn) 8 | 9 | #define open JEMALLOC_HOOK(open, test_hooks_libc_hook) 10 | #define read JEMALLOC_HOOK(read, test_hooks_libc_hook) 11 | #define write JEMALLOC_HOOK(write, test_hooks_libc_hook) 12 | #define readlink JEMALLOC_HOOK(readlink, test_hooks_libc_hook) 13 | #define close JEMALLOC_HOOK(close, test_hooks_libc_hook) 14 | #define creat JEMALLOC_HOOK(creat, test_hooks_libc_hook) 15 | #define secure_getenv JEMALLOC_HOOK(secure_getenv, test_hooks_libc_hook) 16 | /* Note that this is undef'd and re-define'd in src/prof.c. */ 17 | #define _Unwind_Backtrace JEMALLOC_HOOK(_Unwind_Backtrace, test_hooks_libc_hook) 18 | 19 | #endif /* JEMALLOC_INTERNAL_TEST_HOOKS_H */ 20 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/internal/tsd_types.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_TSD_TYPES_H 2 | #define JEMALLOC_INTERNAL_TSD_TYPES_H 3 | 4 | #define MALLOC_TSD_CLEANUPS_MAX 2 5 | 6 | typedef struct tsd_s tsd_t; 7 | typedef struct tsdn_s tsdn_t; 8 | typedef bool (*malloc_tsd_cleanup_t)(void); 9 | 10 | #endif /* JEMALLOC_INTERNAL_TSD_TYPES_H */ 11 | -------------------------------------------------------------------------------- /deps/jemalloc/include/jemalloc/jemalloc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | objroot=$1 4 | 5 | cat < 5 | 6 | /* MSVC doesn't define _Bool or bool in C, but does have BOOL */ 7 | /* Note this doesn't pass autoconf's test because (bool) 0.5 != true */ 8 | /* Clang-cl uses MSVC headers, so needs msvc_compat, but has _Bool as 9 | * a built-in type. */ 10 | #ifndef __clang__ 11 | typedef BOOL _Bool; 12 | #endif 13 | 14 | #define bool _Bool 15 | #define true 1 16 | #define false 0 17 | 18 | #define __bool_true_false_are_defined 1 19 | 20 | #endif /* stdbool_h */ 21 | -------------------------------------------------------------------------------- /deps/jemalloc/include/msvc_compat/windows_extra.h: -------------------------------------------------------------------------------- 1 | #ifndef MSVC_COMPAT_WINDOWS_EXTRA_H 2 | #define MSVC_COMPAT_WINDOWS_EXTRA_H 3 | 4 | #include 5 | 6 | #endif /* MSVC_COMPAT_WINDOWS_EXTRA_H */ 7 | -------------------------------------------------------------------------------- /deps/jemalloc/jemalloc.pc.in: -------------------------------------------------------------------------------- 1 | prefix=@prefix@ 2 | exec_prefix=@exec_prefix@ 3 | libdir=@libdir@ 4 | includedir=@includedir@ 5 | install_suffix=@install_suffix@ 6 | 7 | Name: jemalloc 8 | Description: A general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support. 9 | URL: http://jemalloc.net/ 10 | Version: @jemalloc_version_major@.@jemalloc_version_minor@.@jemalloc_version_bugfix@_@jemalloc_version_nrev@ 11 | Cflags: -I${includedir} 12 | Libs: -L${libdir} -ljemalloc${install_suffix} 13 | -------------------------------------------------------------------------------- /deps/jemalloc/msvc/ReadMe.txt: -------------------------------------------------------------------------------- 1 | 2 | How to build jemalloc for Windows 3 | ================================= 4 | 5 | 1. Install Cygwin with at least the following packages: 6 | * autoconf 7 | * autogen 8 | * gawk 9 | * grep 10 | * sed 11 | 12 | 2. Install Visual Studio 2015 or 2017 with Visual C++ 13 | 14 | 3. Add Cygwin\bin to the PATH environment variable 15 | 16 | 4. Open "x64 Native Tools Command Prompt for VS 2017" 17 | (note: x86/x64 doesn't matter at this point) 18 | 19 | 5. Generate header files: 20 | sh -c "CC=cl ./autogen.sh" 21 | 22 | 6. Now the project can be opened and built in Visual Studio: 23 | msvc\jemalloc_vc2017.sln 24 | -------------------------------------------------------------------------------- /deps/jemalloc/msvc/test_threads/test_threads.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | int test_threads(); 4 | -------------------------------------------------------------------------------- /deps/jemalloc/msvc/test_threads/test_threads_main.cpp: -------------------------------------------------------------------------------- 1 | #include "test_threads.h" 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std::chrono_literals; 7 | 8 | int main(int argc, char** argv) { 9 | int rc = test_threads(); 10 | return rc; 11 | } 12 | -------------------------------------------------------------------------------- /deps/jemalloc/run_tests.sh: -------------------------------------------------------------------------------- 1 | $(dirname "$)")/scripts/gen_run_tests.py | bash 2 | -------------------------------------------------------------------------------- /deps/jemalloc/src/extent_mmap.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_EXTENT_MMAP_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | 5 | #include "jemalloc/internal/assert.h" 6 | #include "jemalloc/internal/extent_mmap.h" 7 | 8 | /******************************************************************************/ 9 | /* Data. */ 10 | 11 | bool opt_retain = 12 | #ifdef JEMALLOC_RETAIN 13 | true 14 | #else 15 | false 16 | #endif 17 | ; 18 | 19 | /******************************************************************************/ 20 | 21 | void * 22 | extent_alloc_mmap(void *new_addr, size_t size, size_t alignment, bool *zero, 23 | bool *commit) { 24 | assert(alignment == ALIGNMENT_CEILING(alignment, PAGE)); 25 | void *ret = pages_map(new_addr, size, alignment, commit); 26 | if (ret == NULL) { 27 | return NULL; 28 | } 29 | assert(ret != NULL); 30 | if (*commit) { 31 | *zero = true; 32 | } 33 | return ret; 34 | } 35 | 36 | bool 37 | extent_dalloc_mmap(void *addr, size_t size) { 38 | if (!opt_retain) { 39 | pages_unmap(addr, size); 40 | } 41 | return opt_retain; 42 | } 43 | -------------------------------------------------------------------------------- /deps/jemalloc/src/hash.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_HASH_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | -------------------------------------------------------------------------------- /deps/jemalloc/src/mutex_pool.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_MUTEX_POOL_C_ 2 | 3 | #include "jemalloc/internal/jemalloc_preamble.h" 4 | #include "jemalloc/internal/jemalloc_internal_includes.h" 5 | 6 | #include "jemalloc/internal/mutex.h" 7 | #include "jemalloc/internal/mutex_pool.h" 8 | 9 | bool 10 | mutex_pool_init(mutex_pool_t *pool, const char *name, witness_rank_t rank) { 11 | for (int i = 0; i < MUTEX_POOL_SIZE; ++i) { 12 | if (malloc_mutex_init(&pool->mutexes[i], name, rank, 13 | malloc_mutex_address_ordered)) { 14 | return true; 15 | } 16 | } 17 | return false; 18 | } 19 | -------------------------------------------------------------------------------- /deps/jemalloc/src/prng.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_PRNG_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | -------------------------------------------------------------------------------- /deps/jemalloc/src/safety_check.c: -------------------------------------------------------------------------------- 1 | #include "jemalloc/internal/jemalloc_preamble.h" 2 | #include "jemalloc/internal/jemalloc_internal_includes.h" 3 | 4 | static void (*safety_check_abort)(const char *message); 5 | 6 | void safety_check_set_abort(void (*abort_fn)(const char *)) { 7 | safety_check_abort = abort_fn; 8 | } 9 | 10 | void safety_check_fail(const char *format, ...) { 11 | char buf[MALLOC_PRINTF_BUFSIZE]; 12 | 13 | va_list ap; 14 | va_start(ap, format); 15 | malloc_vsnprintf(buf, MALLOC_PRINTF_BUFSIZE, format, ap); 16 | va_end(ap); 17 | 18 | if (safety_check_abort == NULL) { 19 | malloc_write(buf); 20 | abort(); 21 | } else { 22 | safety_check_abort(buf); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /deps/jemalloc/src/test_hooks.c: -------------------------------------------------------------------------------- 1 | #include "jemalloc/internal/jemalloc_preamble.h" 2 | 3 | /* 4 | * The hooks are a little bit screwy -- they're not genuinely exported in the 5 | * sense that we want them available to end-users, but we do want them visible 6 | * from outside the generated library, so that we can use them in test code. 7 | */ 8 | JEMALLOC_EXPORT 9 | void (*test_hooks_arena_new_hook)() = NULL; 10 | 11 | JEMALLOC_EXPORT 12 | void (*test_hooks_libc_hook)() = NULL; 13 | -------------------------------------------------------------------------------- /deps/jemalloc/src/ticker.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_TICKER_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | -------------------------------------------------------------------------------- /deps/jemalloc/test/include/test/btalloc.h: -------------------------------------------------------------------------------- 1 | /* btalloc() provides a mechanism for allocating via permuted backtraces. */ 2 | void *btalloc(size_t size, unsigned bits); 3 | 4 | #define btalloc_n_proto(n) \ 5 | void *btalloc_##n(size_t size, unsigned bits); 6 | btalloc_n_proto(0) 7 | btalloc_n_proto(1) 8 | 9 | #define btalloc_n_gen(n) \ 10 | void * \ 11 | btalloc_##n(size_t size, unsigned bits) { \ 12 | void *p; \ 13 | \ 14 | if (bits == 0) { \ 15 | p = mallocx(size, 0); \ 16 | } else { \ 17 | switch (bits & 0x1U) { \ 18 | case 0: \ 19 | p = (btalloc_0(size, bits >> 1)); \ 20 | break; \ 21 | case 1: \ 22 | p = (btalloc_1(size, bits >> 1)); \ 23 | break; \ 24 | default: not_reached(); \ 25 | } \ 26 | } \ 27 | /* Intentionally sabotage tail call optimization. */ \ 28 | assert_ptr_not_null(p, "Unexpected mallocx() failure"); \ 29 | return p; \ 30 | } 31 | -------------------------------------------------------------------------------- /deps/jemalloc/test/include/test/jemalloc_test_defs.h.in: -------------------------------------------------------------------------------- 1 | #include "jemalloc/internal/jemalloc_internal_defs.h" 2 | #include "jemalloc/internal/jemalloc_internal_decls.h" 3 | 4 | /* 5 | * For use by SFMT. configure.ac doesn't actually define HAVE_SSE2 because its 6 | * dependencies are notoriously unportable in practice. 7 | */ 8 | #undef HAVE_SSE2 9 | #undef HAVE_ALTIVEC 10 | -------------------------------------------------------------------------------- /deps/jemalloc/test/include/test/mtx.h: -------------------------------------------------------------------------------- 1 | /* 2 | * mtx is a slightly simplified version of malloc_mutex. This code duplication 3 | * is unfortunate, but there are allocator bootstrapping considerations that 4 | * would leak into the test infrastructure if malloc_mutex were used directly 5 | * in tests. 6 | */ 7 | 8 | typedef struct { 9 | #ifdef _WIN32 10 | CRITICAL_SECTION lock; 11 | #elif (defined(JEMALLOC_OS_UNFAIR_LOCK)) 12 | os_unfair_lock lock; 13 | #else 14 | pthread_mutex_t lock; 15 | #endif 16 | } mtx_t; 17 | 18 | bool mtx_init(mtx_t *mtx); 19 | void mtx_fini(mtx_t *mtx); 20 | void mtx_lock(mtx_t *mtx); 21 | void mtx_unlock(mtx_t *mtx); 22 | -------------------------------------------------------------------------------- /deps/jemalloc/test/include/test/thd.h: -------------------------------------------------------------------------------- 1 | /* Abstraction layer for threading in tests. */ 2 | #ifdef _WIN32 3 | typedef HANDLE thd_t; 4 | #else 5 | typedef pthread_t thd_t; 6 | #endif 7 | 8 | void thd_create(thd_t *thd, void *(*proc)(void *), void *arg); 9 | void thd_join(thd_t thd, void **ret); 10 | -------------------------------------------------------------------------------- /deps/jemalloc/test/include/test/timer.h: -------------------------------------------------------------------------------- 1 | /* Simple timer, for use in benchmark reporting. */ 2 | 3 | typedef struct { 4 | nstime_t t0; 5 | nstime_t t1; 6 | } timedelta_t; 7 | 8 | void timer_start(timedelta_t *timer); 9 | void timer_stop(timedelta_t *timer); 10 | uint64_t timer_usec(const timedelta_t *timer); 11 | void timer_ratio(timedelta_t *a, timedelta_t *b, char *buf, size_t buflen); 12 | -------------------------------------------------------------------------------- /deps/jemalloc/test/integration/cpp/basic.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "test/jemalloc_test.h" 3 | 4 | TEST_BEGIN(test_basic) { 5 | auto foo = new long(4); 6 | assert_ptr_not_null(foo, "Unexpected new[] failure"); 7 | delete foo; 8 | // Test nullptr handling. 9 | foo = nullptr; 10 | delete foo; 11 | 12 | auto bar = new long; 13 | assert_ptr_not_null(bar, "Unexpected new failure"); 14 | delete bar; 15 | // Test nullptr handling. 16 | bar = nullptr; 17 | delete bar; 18 | } 19 | TEST_END 20 | 21 | int 22 | main() { 23 | return test( 24 | test_basic); 25 | } 26 | -------------------------------------------------------------------------------- /deps/jemalloc/test/integration/extent.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="junk:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/integration/malloc.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_zero_alloc) { 4 | void *res = malloc(0); 5 | assert(res); 6 | size_t usable = malloc_usable_size(res); 7 | assert(usable > 0); 8 | free(res); 9 | } 10 | TEST_END 11 | 12 | int 13 | main(void) { 14 | return test( 15 | test_zero_alloc); 16 | } 17 | -------------------------------------------------------------------------------- /deps/jemalloc/test/integration/mallocx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="junk:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/integration/slab_sizes.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Some screwy-looking slab sizes. 4 | export MALLOC_CONF="slab_sizes:1-4096:17|100-200:1|128-128:2" 5 | -------------------------------------------------------------------------------- /deps/jemalloc/test/integration/smallocx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="junk:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/integration/xallocx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="junk:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/src/btalloc.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | void * 4 | btalloc(size_t size, unsigned bits) { 5 | return btalloc_0(size, bits); 6 | } 7 | -------------------------------------------------------------------------------- /deps/jemalloc/test/src/btalloc_0.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | btalloc_n_gen(0) 4 | -------------------------------------------------------------------------------- /deps/jemalloc/test/src/btalloc_1.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | btalloc_n_gen(1) 4 | -------------------------------------------------------------------------------- /deps/jemalloc/test/src/math.c: -------------------------------------------------------------------------------- 1 | #define MATH_C_ 2 | #include "test/jemalloc_test.h" 3 | -------------------------------------------------------------------------------- /deps/jemalloc/test/src/mq.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | /* 4 | * Sleep for approximately ns nanoseconds. No lower *nor* upper bound on sleep 5 | * time is guaranteed. 6 | */ 7 | void 8 | mq_nanosleep(unsigned ns) { 9 | assert(ns <= 1000*1000*1000); 10 | 11 | #ifdef _WIN32 12 | Sleep(ns / 1000); 13 | #else 14 | { 15 | struct timespec timeout; 16 | 17 | if (ns < 1000*1000*1000) { 18 | timeout.tv_sec = 0; 19 | timeout.tv_nsec = ns; 20 | } else { 21 | timeout.tv_sec = 1; 22 | timeout.tv_nsec = 0; 23 | } 24 | nanosleep(&timeout, NULL); 25 | } 26 | #endif 27 | } 28 | -------------------------------------------------------------------------------- /deps/jemalloc/test/src/thd.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | #ifdef _WIN32 4 | void 5 | thd_create(thd_t *thd, void *(*proc)(void *), void *arg) { 6 | LPTHREAD_START_ROUTINE routine = (LPTHREAD_START_ROUTINE)proc; 7 | *thd = CreateThread(NULL, 0, routine, arg, 0, NULL); 8 | if (*thd == NULL) { 9 | test_fail("Error in CreateThread()\n"); 10 | } 11 | } 12 | 13 | void 14 | thd_join(thd_t thd, void **ret) { 15 | if (WaitForSingleObject(thd, INFINITE) == WAIT_OBJECT_0 && ret) { 16 | DWORD exit_code; 17 | GetExitCodeThread(thd, (LPDWORD) &exit_code); 18 | *ret = (void *)(uintptr_t)exit_code; 19 | } 20 | } 21 | 22 | #else 23 | void 24 | thd_create(thd_t *thd, void *(*proc)(void *), void *arg) { 25 | if (pthread_create(thd, NULL, proc, arg) != 0) { 26 | test_fail("Error in pthread_create()\n"); 27 | } 28 | } 29 | 30 | void 31 | thd_join(thd_t thd, void **ret) { 32 | pthread_join(thd, ret); 33 | } 34 | #endif 35 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/a0.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_a0) { 4 | void *p; 5 | 6 | p = a0malloc(1); 7 | assert_ptr_not_null(p, "Unexpected a0malloc() error"); 8 | a0dalloc(p); 9 | } 10 | TEST_END 11 | 12 | int 13 | main(void) { 14 | return test_no_malloc_init( 15 | test_a0); 16 | } 17 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/arena_reset_prof.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | #define ARENA_RESET_PROF_C_ 3 | 4 | #include "arena_reset.c" 5 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/arena_reset_prof.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MALLOC_CONF="prof:true,lg_prof_sample:0" 4 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/binshard.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MALLOC_CONF="narenas:1,bin_shards:1-160:16|129-512:4|256-256:8" 4 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/decay.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MALLOC_CONF="dirty_decay_ms:1000,muzzy_decay_ms:1000,lg_tcache_max:0" 4 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/div.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | #include "jemalloc/internal/div.h" 4 | 5 | TEST_BEGIN(test_div_exhaustive) { 6 | for (size_t divisor = 2; divisor < 1000 * 1000; ++divisor) { 7 | div_info_t div_info; 8 | div_init(&div_info, divisor); 9 | size_t max = 1000 * divisor; 10 | if (max < 1000 * 1000) { 11 | max = 1000 * 1000; 12 | } 13 | for (size_t dividend = 0; dividend < 1000 * divisor; 14 | dividend += divisor) { 15 | size_t quotient = div_compute( 16 | &div_info, dividend); 17 | assert_zu_eq(dividend, quotient * divisor, 18 | "With divisor = %zu, dividend = %zu, " 19 | "got quotient %zu", divisor, dividend, quotient); 20 | } 21 | } 22 | } 23 | TEST_END 24 | 25 | int 26 | main(void) { 27 | return test_no_reentrancy( 28 | test_div_exhaustive); 29 | } 30 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/junk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,zero:false,junk:true" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/junk_alloc.c: -------------------------------------------------------------------------------- 1 | #include "junk.c" 2 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/junk_alloc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,zero:false,junk:alloc" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/junk_free.c: -------------------------------------------------------------------------------- 1 | #include "junk.c" 2 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/junk_free.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,zero:false,junk:free" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/pack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Immediately purge to minimize fragmentation. 4 | export MALLOC_CONF="dirty_decay_ms:0,muzzy_decay_ms:0" 5 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/pages.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_pages_huge) { 4 | size_t alloc_size; 5 | bool commit; 6 | void *pages, *hugepage; 7 | 8 | alloc_size = HUGEPAGE * 2 - PAGE; 9 | commit = true; 10 | pages = pages_map(NULL, alloc_size, PAGE, &commit); 11 | assert_ptr_not_null(pages, "Unexpected pages_map() error"); 12 | 13 | if (init_system_thp_mode == thp_mode_default) { 14 | hugepage = (void *)(ALIGNMENT_CEILING((uintptr_t)pages, HUGEPAGE)); 15 | assert_b_ne(pages_huge(hugepage, HUGEPAGE), have_madvise_huge, 16 | "Unexpected pages_huge() result"); 17 | assert_false(pages_nohuge(hugepage, HUGEPAGE), 18 | "Unexpected pages_nohuge() result"); 19 | } 20 | 21 | pages_unmap(pages, alloc_size); 22 | } 23 | TEST_END 24 | 25 | int 26 | main(void) { 27 | return test( 28 | test_pages_huge); 29 | } 30 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_accum.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_active.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_thread_active_init:false,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_gdump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_active:false,prof_gdump:true" 5 | fi 6 | 7 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_idump.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | static bool did_prof_dump_open; 4 | 5 | static int 6 | prof_dump_open_intercept(bool propagate_err, const char *filename) { 7 | int fd; 8 | 9 | did_prof_dump_open = true; 10 | 11 | fd = open("/dev/null", O_WRONLY); 12 | assert_d_ne(fd, -1, "Unexpected open() failure"); 13 | 14 | return fd; 15 | } 16 | 17 | TEST_BEGIN(test_idump) { 18 | bool active; 19 | void *p; 20 | 21 | test_skip_if(!config_prof); 22 | 23 | active = true; 24 | assert_d_eq(mallctl("prof.active", NULL, NULL, (void *)&active, 25 | sizeof(active)), 0, 26 | "Unexpected mallctl failure while activating profiling"); 27 | 28 | prof_dump_open = prof_dump_open_intercept; 29 | 30 | did_prof_dump_open = false; 31 | p = mallocx(1, 0); 32 | assert_ptr_not_null(p, "Unexpected mallocx() failure"); 33 | dallocx(p, 0); 34 | assert_true(did_prof_dump_open, "Expected a profile dump"); 35 | } 36 | TEST_END 37 | 38 | int 39 | main(void) { 40 | return test( 41 | test_idump); 42 | } 43 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_idump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MALLOC_CONF="tcache:false" 4 | if [ "x${enable_prof}" = "x1" ] ; then 5 | export MALLOC_CONF="${MALLOC_CONF},prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0,lg_prof_interval:0" 6 | fi 7 | 8 | 9 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_log.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_reset.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_active:false,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_tctx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/prof_thread_name.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_active:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/safety_check.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/sc.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_update_slab_size) { 4 | sc_data_t data; 5 | memset(&data, 0, sizeof(data)); 6 | sc_data_init(&data); 7 | sc_t *tiny = &data.sc[0]; 8 | size_t tiny_size = (ZU(1) << tiny->lg_base) 9 | + (ZU(tiny->ndelta) << tiny->lg_delta); 10 | size_t pgs_too_big = (tiny_size * BITMAP_MAXBITS + PAGE - 1) / PAGE + 1; 11 | sc_data_update_slab_size(&data, tiny_size, tiny_size, (int)pgs_too_big); 12 | assert_zu_lt((size_t)tiny->pgs, pgs_too_big, "Allowed excessive pages"); 13 | 14 | sc_data_update_slab_size(&data, 1, 10 * PAGE, 1); 15 | for (int i = 0; i < data.nbins; i++) { 16 | sc_t *sc = &data.sc[i]; 17 | size_t reg_size = (ZU(1) << sc->lg_base) 18 | + (ZU(sc->ndelta) << sc->lg_delta); 19 | if (reg_size <= PAGE) { 20 | assert_d_eq(sc->pgs, 1, "Ignored valid page size hint"); 21 | } else { 22 | assert_d_gt(sc->pgs, 1, 23 | "Allowed invalid page size hint"); 24 | } 25 | } 26 | } 27 | TEST_END 28 | 29 | int 30 | main(void) { 31 | return test( 32 | test_update_slab_size); 33 | } 34 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/slab.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_arena_slab_regind) { 4 | szind_t binind; 5 | 6 | for (binind = 0; binind < SC_NBINS; binind++) { 7 | size_t regind; 8 | extent_t slab; 9 | const bin_info_t *bin_info = &bin_infos[binind]; 10 | extent_init(&slab, NULL, mallocx(bin_info->slab_size, 11 | MALLOCX_LG_ALIGN(LG_PAGE)), bin_info->slab_size, true, 12 | binind, 0, extent_state_active, false, true, true, 13 | EXTENT_NOT_HEAD); 14 | assert_ptr_not_null(extent_addr_get(&slab), 15 | "Unexpected malloc() failure"); 16 | for (regind = 0; regind < bin_info->nregs; regind++) { 17 | void *reg = (void *)((uintptr_t)extent_addr_get(&slab) + 18 | (bin_info->reg_size * regind)); 19 | assert_zu_eq(arena_slab_regind(&slab, binind, reg), 20 | regind, 21 | "Incorrect region index computed for size %zu", 22 | bin_info->reg_size); 23 | } 24 | free(extent_addr_get(&slab)); 25 | } 26 | } 27 | TEST_END 28 | 29 | int 30 | main(void) { 31 | return test( 32 | test_arena_slab_regind); 33 | } 34 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/spin.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | #include "jemalloc/internal/spin.h" 4 | 5 | TEST_BEGIN(test_spin) { 6 | spin_t spinner = SPIN_INITIALIZER; 7 | 8 | for (unsigned i = 0; i < 100; i++) { 9 | spin_adaptive(&spinner); 10 | } 11 | } 12 | TEST_END 13 | 14 | int 15 | main(void) { 16 | return test( 17 | test_spin); 18 | } 19 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/test_hooks.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | static bool hook_called = false; 4 | 5 | static void 6 | hook() { 7 | hook_called = true; 8 | } 9 | 10 | static int 11 | func_to_hook(int arg1, int arg2) { 12 | return arg1 + arg2; 13 | } 14 | 15 | #define func_to_hook JEMALLOC_HOOK(func_to_hook, test_hooks_libc_hook) 16 | 17 | TEST_BEGIN(unhooked_call) { 18 | test_hooks_libc_hook = NULL; 19 | hook_called = false; 20 | assert_d_eq(3, func_to_hook(1, 2), "Hooking changed return value."); 21 | assert_false(hook_called, "Nulling out hook didn't take."); 22 | } 23 | TEST_END 24 | 25 | TEST_BEGIN(hooked_call) { 26 | test_hooks_libc_hook = &hook; 27 | hook_called = false; 28 | assert_d_eq(3, func_to_hook(1, 2), "Hooking changed return value."); 29 | assert_true(hook_called, "Hook should have executed."); 30 | } 31 | TEST_END 32 | 33 | int 34 | main(void) { 35 | return test( 36 | unhooked_call, 37 | hooked_call); 38 | } 39 | -------------------------------------------------------------------------------- /deps/jemalloc/test/unit/zero.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,junk:false,zero:true" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/license/arm64/libkey.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/license/arm64/libkey.a -------------------------------------------------------------------------------- /deps/license/keycheck.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | bool FValidKey(const char *key, size_t cch); 4 | -------------------------------------------------------------------------------- /deps/license/x64/libkey.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/license/x64/libkey.a -------------------------------------------------------------------------------- /deps/linenoise/.gitignore: -------------------------------------------------------------------------------- 1 | linenoise_example 2 | *.dSYM 3 | history.txt 4 | -------------------------------------------------------------------------------- /deps/linenoise/Makefile: -------------------------------------------------------------------------------- 1 | STD= 2 | WARN= -Wall 3 | OPT= -Os 4 | 5 | R_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) 6 | R_LDFLAGS= $(LDFLAGS) 7 | DEBUG= -g 8 | 9 | R_CC=$(CC) $(R_CFLAGS) 10 | R_LD=$(CC) $(R_LDFLAGS) 11 | 12 | linenoise.o: linenoise.h linenoise.c 13 | 14 | linenoise_example: linenoise.o example.o 15 | $(R_LD) -o $@ $^ 16 | 17 | .c.o: 18 | $(R_CC) -c $< 19 | 20 | clean: 21 | rm -f linenoise_example *.o 22 | -------------------------------------------------------------------------------- /deps/lua/doc/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/lua/doc/cover.png -------------------------------------------------------------------------------- /deps/lua/doc/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/lua/doc/logo.gif -------------------------------------------------------------------------------- /deps/lua/doc/manual.css: -------------------------------------------------------------------------------- 1 | h3 code { 2 | font-family: inherit ; 3 | font-size: inherit ; 4 | } 5 | 6 | pre, code { 7 | font-size: 12pt ; 8 | } 9 | 10 | span.apii { 11 | float: right ; 12 | font-family: inherit ; 13 | font-style: normal ; 14 | font-size: small ; 15 | color: gray ; 16 | } 17 | 18 | p+h1, ul+h1 { 19 | padding-top: 0.4em ; 20 | padding-bottom: 0.4em ; 21 | padding-left: 30px ; 22 | margin-left: -30px ; 23 | background-color: #E0E0FF ; 24 | } 25 | -------------------------------------------------------------------------------- /deps/lua/doc/readme.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Lua documentation 4 | 5 | 6 | 7 | 8 | 9 |
10 |

11 | Lua 12 | Documentation 13 |

14 | 15 | This is the documentation included in the source distribution of Lua 5.1.5. 16 | 17 | 25 | 26 | Lua's 27 | official web site 28 | contains updated documentation, 29 | especially the 30 | reference manual. 31 |

32 | 33 |


34 | 35 | Last update: 36 | Fri Feb 3 09:44:42 BRST 2012 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /deps/lua/etc/Makefile: -------------------------------------------------------------------------------- 1 | # makefile for Lua etc 2 | 3 | TOP= .. 4 | LIB= $(TOP)/src 5 | INC= $(TOP)/src 6 | BIN= $(TOP)/src 7 | SRC= $(TOP)/src 8 | TST= $(TOP)/test 9 | 10 | CC= gcc 11 | CFLAGS= -O2 -Wall -I$(INC) $(MYCFLAGS) 12 | MYCFLAGS= 13 | MYLDFLAGS= -Wl,-E 14 | MYLIBS= -lm 15 | #MYLIBS= -lm -Wl,-E -ldl -lreadline -lhistory -lncurses 16 | RM= rm -f 17 | 18 | default: 19 | @echo 'Please choose a target: min noparser one strict clean' 20 | 21 | min: min.c 22 | $(CC) $(CFLAGS) $@.c -L$(LIB) -llua $(MYLIBS) 23 | echo 'print"Hello there!"' | ./a.out 24 | 25 | noparser: noparser.o 26 | $(CC) noparser.o $(SRC)/lua.o -L$(LIB) -llua $(MYLIBS) 27 | $(BIN)/luac $(TST)/hello.lua 28 | -./a.out luac.out 29 | -./a.out -e'a=1' 30 | 31 | one: 32 | $(CC) $(CFLAGS) all.c $(MYLIBS) 33 | ./a.out $(TST)/hello.lua 34 | 35 | strict: 36 | -$(BIN)/lua -e 'print(a);b=2' 37 | -$(BIN)/lua -lstrict -e 'print(a)' 38 | -$(BIN)/lua -e 'function f() b=2 end f()' 39 | -$(BIN)/lua -lstrict -e 'function f() b=2 end f()' 40 | 41 | clean: 42 | $(RM) a.out core core.* *.o luac.out 43 | 44 | .PHONY: default min noparser one strict clean 45 | -------------------------------------------------------------------------------- /deps/lua/etc/all.c: -------------------------------------------------------------------------------- 1 | /* 2 | * all.c -- Lua core, libraries and interpreter in a single file 3 | */ 4 | 5 | #define luaall_c 6 | 7 | #include "lapi.c" 8 | #include "lcode.c" 9 | #include "ldebug.c" 10 | #include "ldo.c" 11 | #include "ldump.c" 12 | #include "lfunc.c" 13 | #include "lgc.c" 14 | #include "llex.c" 15 | #include "lmem.c" 16 | #include "lobject.c" 17 | #include "lopcodes.c" 18 | #include "lparser.c" 19 | #include "lstate.c" 20 | #include "lstring.c" 21 | #include "ltable.c" 22 | #include "ltm.c" 23 | #include "lundump.c" 24 | #include "lvm.c" 25 | #include "lzio.c" 26 | 27 | #include "lauxlib.c" 28 | #include "lbaselib.c" 29 | #include "ldblib.c" 30 | #include "liolib.c" 31 | #include "linit.c" 32 | #include "lmathlib.c" 33 | #include "loadlib.c" 34 | #include "loslib.c" 35 | #include "lstrlib.c" 36 | #include "ltablib.c" 37 | 38 | #include "lua.c" 39 | -------------------------------------------------------------------------------- /deps/lua/etc/lua.hpp: -------------------------------------------------------------------------------- 1 | // lua.hpp 2 | // Lua header files for C++ 3 | // <> not supplied automatically because Lua also compiles as C++ 4 | 5 | extern "C" { 6 | #include "lua.h" 7 | #include "lualib.h" 8 | #include "lauxlib.h" 9 | } 10 | -------------------------------------------------------------------------------- /deps/lua/etc/lua.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/lua/etc/lua.ico -------------------------------------------------------------------------------- /deps/lua/etc/lua.pc: -------------------------------------------------------------------------------- 1 | # lua.pc -- pkg-config data for Lua 2 | 3 | # vars from install Makefile 4 | 5 | # grep '^V=' ../Makefile 6 | V= 5.1 7 | # grep '^R=' ../Makefile 8 | R= 5.1.5 9 | 10 | # grep '^INSTALL_.*=' ../Makefile | sed 's/INSTALL_TOP/prefix/' 11 | prefix= /usr/local 12 | INSTALL_BIN= ${prefix}/bin 13 | INSTALL_INC= ${prefix}/include 14 | INSTALL_LIB= ${prefix}/lib 15 | INSTALL_MAN= ${prefix}/man/man1 16 | INSTALL_LMOD= ${prefix}/share/lua/${V} 17 | INSTALL_CMOD= ${prefix}/lib/lua/${V} 18 | 19 | # canonical vars 20 | exec_prefix=${prefix} 21 | libdir=${exec_prefix}/lib 22 | includedir=${prefix}/include 23 | 24 | Name: Lua 25 | Description: An Extensible Extension Language 26 | Version: ${R} 27 | Requires: 28 | Libs: -L${libdir} -llua -lm 29 | Cflags: -I${includedir} 30 | 31 | # (end of lua.pc) 32 | -------------------------------------------------------------------------------- /deps/lua/etc/min.c: -------------------------------------------------------------------------------- 1 | /* 2 | * min.c -- a minimal Lua interpreter 3 | * loads stdin only with minimal error handling. 4 | * no interaction, and no standard library, only a "print" function. 5 | */ 6 | 7 | #include 8 | 9 | #include "lua.h" 10 | #include "lauxlib.h" 11 | 12 | static int print(lua_State *L) 13 | { 14 | int n=lua_gettop(L); 15 | int i; 16 | for (i=1; i<=n; i++) 17 | { 18 | if (i>1) printf("\t"); 19 | if (lua_isstring(L,i)) 20 | printf("%s",lua_tostring(L,i)); 21 | else if (lua_isnil(L,i)) 22 | printf("%s","nil"); 23 | else if (lua_isboolean(L,i)) 24 | printf("%s",lua_toboolean(L,i) ? "true" : "false"); 25 | else 26 | printf("%s:%p",luaL_typename(L,i),lua_topointer(L,i)); 27 | } 28 | printf("\n"); 29 | return 0; 30 | } 31 | 32 | int main(void) 33 | { 34 | lua_State *L=lua_open(); 35 | lua_register(L,"print",print); 36 | if (luaL_dofile(L,NULL)!=0) fprintf(stderr,"%s\n",lua_tostring(L,-1)); 37 | lua_close(L); 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /deps/lua/etc/strict.lua: -------------------------------------------------------------------------------- 1 | -- 2 | -- strict.lua 3 | -- checks uses of undeclared global variables 4 | -- All global variables must be 'declared' through a regular assignment 5 | -- (even assigning nil will do) in a main chunk before being used 6 | -- anywhere or assigned to inside a function. 7 | -- 8 | 9 | local getinfo, error, rawset, rawget = debug.getinfo, error, rawset, rawget 10 | 11 | local mt = getmetatable(_G) 12 | if mt == nil then 13 | mt = {} 14 | setmetatable(_G, mt) 15 | end 16 | 17 | mt.__declared = {} 18 | 19 | local function what () 20 | local d = getinfo(3, "S") 21 | return d and d.what or "C" 22 | end 23 | 24 | mt.__newindex = function (t, n, v) 25 | if not mt.__declared[n] then 26 | local w = what() 27 | if w ~= "main" and w ~= "C" then 28 | error("assign to undeclared variable '"..n.."'", 2) 29 | end 30 | mt.__declared[n] = true 31 | end 32 | rawset(t, n, v) 33 | end 34 | 35 | mt.__index = function (t, n) 36 | if not mt.__declared[n] and what() ~= "C" then 37 | error("variable '"..n.."' is not declared", 2) 38 | end 39 | return rawget(t, n) 40 | end 41 | 42 | -------------------------------------------------------------------------------- /deps/lua/src/fpconv.h: -------------------------------------------------------------------------------- 1 | /* Lua CJSON floating point conversion routines */ 2 | 3 | /* Buffer required to store the largest string representation of a double. 4 | * 5 | * Longest double printed with %.14g is 21 characters long: 6 | * -1.7976931348623e+308 */ 7 | # define FPCONV_G_FMT_BUFSIZE 32 8 | 9 | #ifdef USE_INTERNAL_FPCONV 10 | static inline void fpconv_init() 11 | { 12 | /* Do nothing - not required */ 13 | } 14 | #else 15 | extern void fpconv_init(); 16 | #endif 17 | 18 | extern int fpconv_g_fmt(char*, double, int); 19 | extern double fpconv_strtod(const char*, char**); 20 | 21 | /* vi:ai et sw=4 ts=4: 22 | */ 23 | -------------------------------------------------------------------------------- /deps/lua/src/lapi.h: -------------------------------------------------------------------------------- 1 | /* 2 | ** $Id: lapi.h,v 2.2.1.1 2007/12/27 13:02:25 roberto Exp $ 3 | ** Auxiliary functions from Lua API 4 | ** See Copyright Notice in lua.h 5 | */ 6 | 7 | #ifndef lapi_h 8 | #define lapi_h 9 | 10 | 11 | #include "lobject.h" 12 | 13 | 14 | LUAI_FUNC void luaA_pushobject (lua_State *L, const TValue *o); 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /deps/lua/src/linit.c: -------------------------------------------------------------------------------- 1 | /* 2 | ** $Id: linit.c,v 1.14.1.1 2007/12/27 13:02:25 roberto Exp $ 3 | ** Initialization of libraries for lua.c 4 | ** See Copyright Notice in lua.h 5 | */ 6 | 7 | 8 | #define linit_c 9 | #define LUA_LIB 10 | 11 | #include "lua.h" 12 | 13 | #include "lualib.h" 14 | #include "lauxlib.h" 15 | 16 | 17 | static const luaL_Reg lualibs[] = { 18 | {"", luaopen_base}, 19 | {LUA_LOADLIBNAME, luaopen_package}, 20 | {LUA_TABLIBNAME, luaopen_table}, 21 | {LUA_IOLIBNAME, luaopen_io}, 22 | {LUA_OSLIBNAME, luaopen_os}, 23 | {LUA_STRLIBNAME, luaopen_string}, 24 | {LUA_MATHLIBNAME, luaopen_math}, 25 | {LUA_DBLIBNAME, luaopen_debug}, 26 | {NULL, NULL} 27 | }; 28 | 29 | 30 | LUALIB_API void luaL_openlibs (lua_State *L) { 31 | const luaL_Reg *lib = lualibs; 32 | for (; lib->func; lib++) { 33 | lua_pushcfunction(L, lib->func); 34 | lua_pushstring(L, lib->name); 35 | lua_call(L, 1, 0); 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /deps/lua/src/lstring.h: -------------------------------------------------------------------------------- 1 | /* 2 | ** $Id: lstring.h,v 1.43.1.1 2007/12/27 13:02:25 roberto Exp $ 3 | ** String table (keep all strings handled by Lua) 4 | ** See Copyright Notice in lua.h 5 | */ 6 | 7 | #ifndef lstring_h 8 | #define lstring_h 9 | 10 | 11 | #include "lgc.h" 12 | #include "lobject.h" 13 | #include "lstate.h" 14 | 15 | 16 | #define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char)) 17 | 18 | #define sizeudata(u) (sizeof(union Udata)+(u)->len) 19 | 20 | #define luaS_new(L, s) (luaS_newlstr(L, s, strlen(s))) 21 | #define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ 22 | (sizeof(s)/sizeof(char))-1)) 23 | 24 | #define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT) 25 | 26 | LUAI_FUNC void luaS_resize (lua_State *L, int newsize); 27 | LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e); 28 | LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); 29 | 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /deps/lua/src/lundump.h: -------------------------------------------------------------------------------- 1 | /* 2 | ** $Id: lundump.h,v 1.37.1.1 2007/12/27 13:02:25 roberto Exp $ 3 | ** load precompiled Lua chunks 4 | ** See Copyright Notice in lua.h 5 | */ 6 | 7 | #ifndef lundump_h 8 | #define lundump_h 9 | 10 | #include "lobject.h" 11 | #include "lzio.h" 12 | 13 | /* load one chunk; from lundump.c */ 14 | LUAI_FUNC Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name); 15 | 16 | /* make header; from lundump.c */ 17 | LUAI_FUNC void luaU_header (char* h); 18 | 19 | /* dump one chunk; from ldump.c */ 20 | LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip); 21 | 22 | #ifdef luac_c 23 | /* print one chunk; from print.c */ 24 | LUAI_FUNC void luaU_print (const Proto* f, int full); 25 | #endif 26 | 27 | /* for header of binary files -- this is Lua 5.1 */ 28 | #define LUAC_VERSION 0x51 29 | 30 | /* for header of binary files -- this is the official format */ 31 | #define LUAC_FORMAT 0 32 | 33 | /* size of header of binary files */ 34 | #define LUAC_HEADERSIZE 12 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /deps/lua/test/bisect.lua: -------------------------------------------------------------------------------- 1 | -- bisection method for solving non-linear equations 2 | 3 | delta=1e-6 -- tolerance 4 | 5 | function bisect(f,a,b,fa,fb) 6 | local c=(a+b)/2 7 | io.write(n," c=",c," a=",a," b=",b,"\n") 8 | if c==a or c==b or math.abs(a-b)>> ",string.rep(" ",level)) 9 | if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end 10 | t=debug.getinfo(2) 11 | if event=="call" then 12 | level=level+1 13 | else 14 | level=level-1 if level<0 then level=0 end 15 | end 16 | if t.what=="main" then 17 | if event=="call" then 18 | io.write("begin ",t.short_src) 19 | else 20 | io.write("end ",t.short_src) 21 | end 22 | elseif t.what=="Lua" then 23 | -- table.foreach(t,print) 24 | io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">") 25 | else 26 | io.write(event," ",t.name or "(C)"," [",t.what,"] ") 27 | end 28 | io.write("\n") 29 | end 30 | 31 | debug.sethook(hook,"cr") 32 | level=0 33 | -------------------------------------------------------------------------------- /deps/lua/test/trace-globals.lua: -------------------------------------------------------------------------------- 1 | -- trace assigments to global variables 2 | 3 | do 4 | -- a tostring that quotes strings. note the use of the original tostring. 5 | local _tostring=tostring 6 | local tostring=function(a) 7 | if type(a)=="string" then 8 | return string.format("%q",a) 9 | else 10 | return _tostring(a) 11 | end 12 | end 13 | 14 | local log=function (name,old,new) 15 | local t=debug.getinfo(3,"Sl") 16 | local line=t.currentline 17 | io.write(t.short_src) 18 | if line>=0 then io.write(":",line) end 19 | io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n") 20 | end 21 | 22 | local g={} 23 | local set=function (t,name,value) 24 | log(name,g[name],value) 25 | g[name]=value 26 | end 27 | setmetatable(getfenv(),{__index=g,__newindex=set}) 28 | end 29 | 30 | -- an example 31 | 32 | a=1 33 | b=2 34 | a=10 35 | b=20 36 | b=nil 37 | b=200 38 | print(a,b,c) 39 | -------------------------------------------------------------------------------- /deps/lua/test/xd.lua: -------------------------------------------------------------------------------- 1 | -- hex dump 2 | -- usage: lua xd.lua < file 3 | 4 | local offset=0 5 | while true do 6 | local s=io.read(16) 7 | if s==nil then return end 8 | io.write(string.format("%08X ",offset)) 9 | string.gsub(s,"(.)", 10 | function (c) io.write(string.format("%02X ",string.byte(c))) end) 11 | io.write(string.rep(" ",3*(16-string.len(s)))) 12 | io.write(" ",string.gsub(s,"%c","."),"\n") 13 | offset=offset+16 14 | end 15 | -------------------------------------------------------------------------------- /deps/memkind/Makefile: -------------------------------------------------------------------------------- 1 | export JE_PREFIX=jemk_ 2 | 3 | .PHONY: all 4 | all: 5 | cd src; ./build_jemalloc.sh 6 | cd src; ./build.sh 7 | 8 | .PHONY: clean 9 | clean: 10 | cd src; make clean 11 | 12 | 13 | -------------------------------------------------------------------------------- /deps/memkind/src/README.md: -------------------------------------------------------------------------------- 1 | README -------------------------------------------------------------------------------- /deps/memkind/src/copying_headers/MANIFEST.freeBSD3: -------------------------------------------------------------------------------- 1 | examples/pmem_kinds.c 2 | examples/pmem_malloc.c 3 | examples/pmem_malloc_unlimited.c 4 | examples/pmem_usable_size.c 5 | examples/pmem_alignment.c 6 | examples/pmem_and_default_kind 7 | examples/pmem_multithreads.c 8 | examples/pmem_multithreads_onekind.c 9 | examples/pmem_free_with_unknown_kind.c 10 | examples/pmem_cpp_allocator.cpp 11 | -------------------------------------------------------------------------------- /deps/memkind/src/debian/changelog: -------------------------------------------------------------------------------- 1 | memkind (0.0.0) UNRELEASED; urgency=low 2 | 3 | * See ChangeLog for more details 4 | 5 | -- Krzysztof Kulakowski Mon, 12 Dec 2016 15:53:31 +0000 6 | -------------------------------------------------------------------------------- /deps/memkind/src/debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /deps/memkind/src/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | # -*- makefile -*- 3 | 4 | # Uncomment this to turn on verbose mode. 5 | #export DH_VERBOSE=1 6 | 7 | # ignore tests during build 8 | override_dh_auto_test: 9 | 10 | override_dh_auto_configure: 11 | ./build_jemalloc.sh 12 | ./autogen.sh 13 | dh_auto_configure -- --prefix=/usr --libdir=/usr/lib \ 14 | --includedir=/usr/include --sbindir=/usr/sbin --enable-cxx11 \ 15 | --mandir=/usr/share/man --docdir=/usr/share/doc/memkind 16 | 17 | override_dh_auto_build: 18 | dh_auto_build -- checkprogs 19 | 20 | %: 21 | dh $@ 22 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/.autom4te.cfg: -------------------------------------------------------------------------------- 1 | begin-language: "Autoconf-without-aclocal-m4" 2 | args: --no-cache 3 | end-language: "Autoconf-without-aclocal-m4" 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/autogen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for i in autoconf; do 4 | echo "$i" 5 | $i 6 | if [ $? -ne 0 ]; then 7 | echo "Error $? in $i" 8 | exit 1 9 | fi 10 | done 11 | 12 | echo "./configure --enable-autogen $@" 13 | ./configure --enable-autogen $@ 14 | if [ $? -ne 0 ]; then 15 | echo "Error $? in ./configure" 16 | exit 1 17 | fi 18 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/bin/jemalloc.sh.in: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | prefix=@prefix@ 4 | exec_prefix=@exec_prefix@ 5 | libdir=@libdir@ 6 | 7 | @LD_PRELOAD_VAR@=${libdir}/libjemalloc.@SOREV@ 8 | export @LD_PRELOAD_VAR@ 9 | exec "$@" 10 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/config.stamp.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/memkind/src/jemalloc/config.stamp.in -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/doc/html.xsl.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/doc/manpages.xsl.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/doc/stylesheet.xsl: -------------------------------------------------------------------------------- 1 | 2 | ansi 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/arena_structs_a.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_ARENA_STRUCTS_A_H 2 | #define JEMALLOC_INTERNAL_ARENA_STRUCTS_A_H 3 | 4 | #include "jemalloc/internal/bitmap.h" 5 | 6 | struct arena_slab_data_s { 7 | /* Per region allocated/deallocated bitmap. */ 8 | bitmap_t bitmap[BITMAP_GROUPS_MAX]; 9 | }; 10 | 11 | #endif /* JEMALLOC_INTERNAL_ARENA_STRUCTS_A_H */ 12 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/base_externs.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_BASE_EXTERNS_H 2 | #define JEMALLOC_INTERNAL_BASE_EXTERNS_H 3 | 4 | base_t *b0get(void); 5 | base_t *base_new(tsdn_t *tsdn, unsigned ind, extent_hooks_t *extent_hooks); 6 | void base_delete(base_t *base); 7 | extent_hooks_t *base_extent_hooks_get(base_t *base); 8 | extent_hooks_t *base_extent_hooks_set(base_t *base, 9 | extent_hooks_t *extent_hooks); 10 | void *base_alloc(tsdn_t *tsdn, base_t *base, size_t size, size_t alignment); 11 | extent_t *base_alloc_extent(tsdn_t *tsdn, base_t *base); 12 | void base_stats_get(tsdn_t *tsdn, base_t *base, size_t *allocated, 13 | size_t *resident, size_t *mapped); 14 | void base_prefork(tsdn_t *tsdn, base_t *base); 15 | void base_postfork_parent(tsdn_t *tsdn, base_t *base); 16 | void base_postfork_child(tsdn_t *tsdn, base_t *base); 17 | bool base_boot(tsdn_t *tsdn); 18 | 19 | #endif /* JEMALLOC_INTERNAL_BASE_EXTERNS_H */ 20 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/base_inlines.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_BASE_INLINES_H 2 | #define JEMALLOC_INTERNAL_BASE_INLINES_H 3 | 4 | static inline unsigned 5 | base_ind_get(const base_t *base) { 6 | return base->ind; 7 | } 8 | 9 | #endif /* JEMALLOC_INTERNAL_BASE_INLINES_H */ 10 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/base_types.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_BASE_TYPES_H 2 | #define JEMALLOC_INTERNAL_BASE_TYPES_H 3 | 4 | typedef struct base_block_s base_block_t; 5 | typedef struct base_s base_t; 6 | 7 | #endif /* JEMALLOC_INTERNAL_BASE_TYPES_H */ 8 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/extent_dss.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_EXTENT_DSS_H 2 | #define JEMALLOC_INTERNAL_EXTENT_DSS_H 3 | 4 | typedef enum { 5 | dss_prec_disabled = 0, 6 | dss_prec_primary = 1, 7 | dss_prec_secondary = 2, 8 | 9 | dss_prec_limit = 3 10 | } dss_prec_t; 11 | #define DSS_PREC_DEFAULT dss_prec_secondary 12 | #define DSS_DEFAULT "secondary" 13 | 14 | extern const char *dss_prec_names[]; 15 | 16 | extern const char *opt_dss; 17 | 18 | dss_prec_t extent_dss_prec_get(void); 19 | bool extent_dss_prec_set(dss_prec_t dss_prec); 20 | void *extent_alloc_dss(tsdn_t *tsdn, arena_t *arena, void *new_addr, 21 | size_t size, size_t alignment, bool *zero, bool *commit); 22 | bool extent_in_dss(void *addr); 23 | bool extent_dss_mergeable(void *addr_a, void *addr_b); 24 | void extent_dss_boot(void); 25 | 26 | #endif /* JEMALLOC_INTERNAL_EXTENT_DSS_H */ 27 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/extent_mmap.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H 2 | #define JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H 3 | 4 | extern bool opt_retain; 5 | 6 | void *extent_alloc_mmap(void *new_addr, size_t size, size_t alignment, 7 | bool *zero, bool *commit); 8 | bool extent_dalloc_mmap(void *addr, size_t size); 9 | 10 | #endif /* JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H */ 11 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/extent_types.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_EXTENT_TYPES_H 2 | #define JEMALLOC_INTERNAL_EXTENT_TYPES_H 3 | 4 | typedef struct extent_s extent_t; 5 | typedef struct extents_s extents_t; 6 | 7 | #define EXTENT_HOOKS_INITIALIZER NULL 8 | 9 | #endif /* JEMALLOC_INTERNAL_EXTENT_TYPES_H */ 10 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/hooks.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_HOOKS_H 2 | #define JEMALLOC_INTERNAL_HOOKS_H 3 | 4 | extern JEMALLOC_EXPORT void (*hooks_arena_new_hook)(); 5 | extern JEMALLOC_EXPORT void (*hooks_libc_hook)(); 6 | 7 | #define JEMALLOC_HOOK(fn, hook) ((void)(hook != NULL && (hook(), 0)), fn) 8 | 9 | #define open JEMALLOC_HOOK(open, hooks_libc_hook) 10 | #define read JEMALLOC_HOOK(read, hooks_libc_hook) 11 | #define write JEMALLOC_HOOK(write, hooks_libc_hook) 12 | #define readlink JEMALLOC_HOOK(readlink, hooks_libc_hook) 13 | #define close JEMALLOC_HOOK(close, hooks_libc_hook) 14 | #define creat JEMALLOC_HOOK(creat, hooks_libc_hook) 15 | #define secure_getenv JEMALLOC_HOOK(secure_getenv, hooks_libc_hook) 16 | /* Note that this is undef'd and re-define'd in src/prof.c. */ 17 | #define _Unwind_Backtrace JEMALLOC_HOOK(_Unwind_Backtrace, hooks_libc_hook) 18 | 19 | #endif /* JEMALLOC_INTERNAL_HOOKS_H */ 20 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/private_namespace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for symbol in `cat "$@"` ; do 4 | echo "#define ${symbol} JEMALLOC_N(${symbol})" 5 | done 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/public_namespace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for nm in `cat $1` ; do 4 | n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'` 5 | echo "#define je_${n} JEMALLOC_N(${n})" 6 | done 7 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/public_unnamespace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for nm in `cat $1` ; do 4 | n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'` 5 | echo "#undef je_${n}" 6 | done 7 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/spin.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_SPIN_H 2 | #define JEMALLOC_INTERNAL_SPIN_H 3 | 4 | #ifdef JEMALLOC_SPIN_C_ 5 | # define SPIN_INLINE extern inline 6 | #else 7 | # define SPIN_INLINE inline 8 | #endif 9 | 10 | #define SPIN_INITIALIZER {0U} 11 | 12 | typedef struct { 13 | unsigned iteration; 14 | } spin_t; 15 | 16 | SPIN_INLINE void 17 | spin_adaptive(spin_t *spin) { 18 | volatile uint32_t i; 19 | 20 | if (spin->iteration < 5) { 21 | for (i = 0; i < (1U << spin->iteration); i++) { 22 | CPU_SPINWAIT; 23 | } 24 | spin->iteration++; 25 | } else { 26 | #ifdef _WIN32 27 | SwitchToThread(); 28 | #else 29 | sched_yield(); 30 | #endif 31 | } 32 | } 33 | 34 | #undef SPIN_INLINE 35 | 36 | #endif /* JEMALLOC_INTERNAL_SPIN_H */ 37 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/stats_tsd.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_STATS_TSD_H 2 | #define JEMALLOC_INTERNAL_STATS_TSD_H 3 | 4 | typedef struct tcache_bin_stats_s { 5 | /* 6 | * Number of allocation requests that corresponded to the size of this 7 | * bin. 8 | */ 9 | uint64_t nrequests; 10 | } tcache_bin_stats_t; 11 | 12 | #endif /* JEMALLOC_INTERNAL_STATS_TSD_H */ 13 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/internal/tsd_types.h: -------------------------------------------------------------------------------- 1 | #ifndef JEMALLOC_INTERNAL_TSD_TYPES_H 2 | #define JEMALLOC_INTERNAL_TSD_TYPES_H 3 | 4 | #define MALLOC_TSD_CLEANUPS_MAX 2 5 | 6 | typedef struct tsd_s tsd_t; 7 | typedef struct tsdn_s tsdn_t; 8 | typedef bool (*malloc_tsd_cleanup_t)(void); 9 | 10 | #endif /* JEMALLOC_INTERNAL_TSD_TYPES_H */ 11 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/jemalloc/jemalloc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | objroot=$1 4 | 5 | cat < 5 | 6 | /* MSVC doesn't define _Bool or bool in C, but does have BOOL */ 7 | /* Note this doesn't pass autoconf's test because (bool) 0.5 != true */ 8 | /* Clang-cl uses MSVC headers, so needs msvc_compat, but has _Bool as 9 | * a built-in type. */ 10 | #ifndef __clang__ 11 | typedef BOOL _Bool; 12 | #endif 13 | 14 | #define bool _Bool 15 | #define true 1 16 | #define false 0 17 | 18 | #define __bool_true_false_are_defined 1 19 | 20 | #endif /* stdbool_h */ 21 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/include/msvc_compat/windows_extra.h: -------------------------------------------------------------------------------- 1 | #ifndef MSVC_COMPAT_WINDOWS_EXTRA_H 2 | #define MSVC_COMPAT_WINDOWS_EXTRA_H 3 | 4 | #include 5 | 6 | #endif /* MSVC_COMPAT_WINDOWS_EXTRA_H */ 7 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/jemalloc.pc.in: -------------------------------------------------------------------------------- 1 | prefix=@prefix@ 2 | exec_prefix=@exec_prefix@ 3 | libdir=@libdir@ 4 | includedir=@includedir@ 5 | install_suffix=@install_suffix@ 6 | 7 | Name: jemalloc 8 | Description: A general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support. 9 | URL: http://jemalloc.net/ 10 | Version: @jemalloc_version@ 11 | Cflags: -I${includedir} 12 | Libs: -L${libdir} -ljemalloc${install_suffix} 13 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/msvc/ReadMe.txt: -------------------------------------------------------------------------------- 1 | 2 | How to build jemalloc for Windows 3 | ================================= 4 | 5 | 1. Install Cygwin with at least the following packages: 6 | * autoconf 7 | * autogen 8 | * gawk 9 | * grep 10 | * sed 11 | 12 | 2. Install Visual Studio 2015 with Visual C++ 13 | 14 | 3. Add Cygwin\bin to the PATH environment variable 15 | 16 | 4. Open "VS2015 x86 Native Tools Command Prompt" 17 | (note: x86/x64 doesn't matter at this point) 18 | 19 | 5. Generate header files: 20 | sh -c "CC=cl ./autogen.sh" 21 | 22 | 6. Now the project can be opened and built in Visual Studio: 23 | msvc\jemalloc_vc2015.sln 24 | 25 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/msvc/projects/vc2015/test_threads/test_threads.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | int test_threads(); 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/msvc/projects/vc2015/test_threads/test_threads.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | 14 | 15 | Source Files 16 | 17 | 18 | Source Files 19 | 20 | 21 | 22 | 23 | Header Files 24 | 25 | 26 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/msvc/projects/vc2015/test_threads/test_threads_main.cpp: -------------------------------------------------------------------------------- 1 | #include "test_threads.h" 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std::chrono_literals; 7 | 8 | int main(int argc, char** argv) { 9 | int rc = test_threads(); 10 | return rc; 11 | } 12 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/run_tests.sh: -------------------------------------------------------------------------------- 1 | $(dirname "$)")/scripts/gen_run_tests.py | bash 2 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/src/extent_mmap.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_EXTENT_MMAP_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | 5 | #include "jemalloc/internal/assert.h" 6 | #include "jemalloc/internal/extent_mmap.h" 7 | 8 | /******************************************************************************/ 9 | /* Data. */ 10 | 11 | bool opt_retain = 12 | #ifdef JEMALLOC_RETAIN 13 | true 14 | #else 15 | false 16 | #endif 17 | ; 18 | 19 | /******************************************************************************/ 20 | 21 | void * 22 | extent_alloc_mmap(void *new_addr, size_t size, size_t alignment, bool *zero, 23 | bool *commit) { 24 | void *ret = pages_map(new_addr, size, ALIGNMENT_CEILING(alignment, 25 | PAGE), commit); 26 | if (ret == NULL) { 27 | return NULL; 28 | } 29 | assert(ret != NULL); 30 | if (*commit) { 31 | *zero = true; 32 | } 33 | return ret; 34 | } 35 | 36 | bool 37 | extent_dalloc_mmap(void *addr, size_t size) { 38 | if (!opt_retain) { 39 | pages_unmap(addr, size); 40 | } 41 | return opt_retain; 42 | } 43 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/src/hash.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_HASH_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/src/hooks.c: -------------------------------------------------------------------------------- 1 | #include "jemalloc/internal/jemalloc_preamble.h" 2 | 3 | /* 4 | * The hooks are a little bit screwy -- they're not genuinely exported in the 5 | * sense that we want them available to end-users, but we do want them visible 6 | * from outside the generated library, so that we can use them in test code. 7 | */ 8 | JEMALLOC_EXPORT 9 | void (*hooks_arena_new_hook)() = NULL; 10 | 11 | JEMALLOC_EXPORT 12 | void (*hooks_libc_hook)() = NULL; 13 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/src/mutex_pool.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_MUTEX_POOL_C_ 2 | 3 | #include "jemalloc/internal/jemalloc_preamble.h" 4 | #include "jemalloc/internal/jemalloc_internal_includes.h" 5 | 6 | #include "jemalloc/internal/mutex.h" 7 | #include "jemalloc/internal/mutex_pool.h" 8 | 9 | bool 10 | mutex_pool_init(mutex_pool_t *pool, const char *name, witness_rank_t rank) { 11 | for (int i = 0; i < MUTEX_POOL_SIZE; ++i) { 12 | if (malloc_mutex_init(&pool->mutexes[i], name, rank, 13 | malloc_mutex_address_ordered)) { 14 | return true; 15 | } 16 | } 17 | return false; 18 | } 19 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/src/prng.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_PRNG_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/src/spin.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_SPIN_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | 4 | #include "jemalloc/internal/spin.h" 5 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/src/ticker.c: -------------------------------------------------------------------------------- 1 | #define JEMALLOC_TICKER_C_ 2 | #include "jemalloc/internal/jemalloc_preamble.h" 3 | #include "jemalloc/internal/jemalloc_internal_includes.h" 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/include/test/btalloc.h: -------------------------------------------------------------------------------- 1 | /* btalloc() provides a mechanism for allocating via permuted backtraces. */ 2 | void *btalloc(size_t size, unsigned bits); 3 | 4 | #define btalloc_n_proto(n) \ 5 | void *btalloc_##n(size_t size, unsigned bits); 6 | btalloc_n_proto(0) 7 | btalloc_n_proto(1) 8 | 9 | #define btalloc_n_gen(n) \ 10 | void * \ 11 | btalloc_##n(size_t size, unsigned bits) { \ 12 | void *p; \ 13 | \ 14 | if (bits == 0) { \ 15 | p = mallocx(size, 0); \ 16 | } else { \ 17 | switch (bits & 0x1U) { \ 18 | case 0: \ 19 | p = (btalloc_0(size, bits >> 1)); \ 20 | break; \ 21 | case 1: \ 22 | p = (btalloc_1(size, bits >> 1)); \ 23 | break; \ 24 | default: not_reached(); \ 25 | } \ 26 | } \ 27 | /* Intentionally sabotage tail call optimization. */ \ 28 | assert_ptr_not_null(p, "Unexpected mallocx() failure"); \ 29 | return p; \ 30 | } 31 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/include/test/jemalloc_test_defs.h.in: -------------------------------------------------------------------------------- 1 | #include "jemalloc/internal/jemalloc_internal_defs.h" 2 | #include "jemalloc/internal/jemalloc_internal_decls.h" 3 | 4 | /* 5 | * For use by SFMT. configure.ac doesn't actually define HAVE_SSE2 because its 6 | * dependencies are notoriously unportable in practice. 7 | */ 8 | #undef HAVE_SSE2 9 | #undef HAVE_ALTIVEC 10 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/include/test/mtx.h: -------------------------------------------------------------------------------- 1 | /* 2 | * mtx is a slightly simplified version of malloc_mutex. This code duplication 3 | * is unfortunate, but there are allocator bootstrapping considerations that 4 | * would leak into the test infrastructure if malloc_mutex were used directly 5 | * in tests. 6 | */ 7 | 8 | typedef struct { 9 | #ifdef _WIN32 10 | CRITICAL_SECTION lock; 11 | #elif (defined(JEMALLOC_OS_UNFAIR_LOCK)) 12 | os_unfair_lock lock; 13 | #elif (defined(JEMALLOC_OSSPIN)) 14 | OSSpinLock lock; 15 | #else 16 | pthread_mutex_t lock; 17 | #endif 18 | } mtx_t; 19 | 20 | bool mtx_init(mtx_t *mtx); 21 | void mtx_fini(mtx_t *mtx); 22 | void mtx_lock(mtx_t *mtx); 23 | void mtx_unlock(mtx_t *mtx); 24 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/include/test/thd.h: -------------------------------------------------------------------------------- 1 | /* Abstraction layer for threading in tests. */ 2 | #ifdef _WIN32 3 | typedef HANDLE thd_t; 4 | #else 5 | typedef pthread_t thd_t; 6 | #endif 7 | 8 | void thd_create(thd_t *thd, void *(*proc)(void *), void *arg); 9 | void thd_join(thd_t thd, void **ret); 10 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/include/test/timer.h: -------------------------------------------------------------------------------- 1 | /* Simple timer, for use in benchmark reporting. */ 2 | 3 | typedef struct { 4 | nstime_t t0; 5 | nstime_t t1; 6 | } timedelta_t; 7 | 8 | void timer_start(timedelta_t *timer); 9 | void timer_stop(timedelta_t *timer); 10 | uint64_t timer_usec(const timedelta_t *timer); 11 | void timer_ratio(timedelta_t *a, timedelta_t *b, char *buf, size_t buflen); 12 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/integration/extent.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="junk:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/integration/mallocx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="junk:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/integration/xallocx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="junk:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/src/btalloc.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | void * 4 | btalloc(size_t size, unsigned bits) { 5 | return btalloc_0(size, bits); 6 | } 7 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/src/btalloc_0.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | btalloc_n_gen(0) 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/src/btalloc_1.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | btalloc_n_gen(1) 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/src/math.c: -------------------------------------------------------------------------------- 1 | #define MATH_C_ 2 | #include "test/jemalloc_test.h" 3 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/src/mq.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | /* 4 | * Sleep for approximately ns nanoseconds. No lower *nor* upper bound on sleep 5 | * time is guaranteed. 6 | */ 7 | void 8 | mq_nanosleep(unsigned ns) { 9 | assert(ns <= 1000*1000*1000); 10 | 11 | #ifdef _WIN32 12 | Sleep(ns / 1000); 13 | #else 14 | { 15 | struct timespec timeout; 16 | 17 | if (ns < 1000*1000*1000) { 18 | timeout.tv_sec = 0; 19 | timeout.tv_nsec = ns; 20 | } else { 21 | timeout.tv_sec = 1; 22 | timeout.tv_nsec = 0; 23 | } 24 | nanosleep(&timeout, NULL); 25 | } 26 | #endif 27 | } 28 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/src/thd.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | #ifdef _WIN32 4 | void 5 | thd_create(thd_t *thd, void *(*proc)(void *), void *arg) { 6 | LPTHREAD_START_ROUTINE routine = (LPTHREAD_START_ROUTINE)proc; 7 | *thd = CreateThread(NULL, 0, routine, arg, 0, NULL); 8 | if (*thd == NULL) { 9 | test_fail("Error in CreateThread()\n"); 10 | } 11 | } 12 | 13 | void 14 | thd_join(thd_t thd, void **ret) { 15 | if (WaitForSingleObject(thd, INFINITE) == WAIT_OBJECT_0 && ret) { 16 | DWORD exit_code; 17 | GetExitCodeThread(thd, (LPDWORD) &exit_code); 18 | *ret = (void *)(uintptr_t)exit_code; 19 | } 20 | } 21 | 22 | #else 23 | void 24 | thd_create(thd_t *thd, void *(*proc)(void *), void *arg) { 25 | if (pthread_create(thd, NULL, proc, arg) != 0) { 26 | test_fail("Error in pthread_create()\n"); 27 | } 28 | } 29 | 30 | void 31 | thd_join(thd_t thd, void **ret) { 32 | pthread_join(thd, ret); 33 | } 34 | #endif 35 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/a0.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_a0) { 4 | void *p; 5 | 6 | p = a0malloc(1); 7 | assert_ptr_not_null(p, "Unexpected a0malloc() error"); 8 | a0dalloc(p); 9 | } 10 | TEST_END 11 | 12 | int 13 | main(void) { 14 | return test_no_malloc_init( 15 | test_a0); 16 | } 17 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/arena_reset_prof.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | #define ARENA_RESET_PROF_C_ 3 | 4 | #include "arena_reset.c" 5 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/arena_reset_prof.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MALLOC_CONF="prof:true,lg_prof_sample:0" 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/decay.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MALLOC_CONF="dirty_decay_ms:1000,muzzy_decay_ms:1000,lg_tcache_max:0" 4 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/hooks.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | static bool hook_called = false; 4 | 5 | static void 6 | hook() { 7 | hook_called = true; 8 | } 9 | 10 | static int 11 | func_to_hook(int arg1, int arg2) { 12 | return arg1 + arg2; 13 | } 14 | 15 | #define func_to_hook JEMALLOC_HOOK(func_to_hook, hooks_libc_hook) 16 | 17 | TEST_BEGIN(unhooked_call) { 18 | hooks_libc_hook = NULL; 19 | hook_called = false; 20 | assert_d_eq(3, func_to_hook(1, 2), "Hooking changed return value."); 21 | assert_false(hook_called, "Nulling out hook didn't take."); 22 | } 23 | TEST_END 24 | 25 | TEST_BEGIN(hooked_call) { 26 | hooks_libc_hook = &hook; 27 | hook_called = false; 28 | assert_d_eq(3, func_to_hook(1, 2), "Hooking changed return value."); 29 | assert_true(hook_called, "Hook should have executed."); 30 | } 31 | TEST_END 32 | 33 | int 34 | main(void) { 35 | return test( 36 | unhooked_call, 37 | hooked_call); 38 | } 39 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/junk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,zero:false,junk:true" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/junk_alloc.c: -------------------------------------------------------------------------------- 1 | #include "junk.c" 2 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/junk_alloc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,zero:false,junk:alloc" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/junk_free.c: -------------------------------------------------------------------------------- 1 | #include "junk.c" 2 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/junk_free.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,zero:false,junk:free" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/pack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Immediately purge to minimize fragmentation. 4 | export MALLOC_CONF="dirty_decay_ms:0,muzzy_decay_ms:0" 5 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/pages.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_pages_huge) { 4 | size_t alloc_size; 5 | bool commit; 6 | void *pages, *hugepage; 7 | 8 | alloc_size = HUGEPAGE * 2 - PAGE; 9 | commit = true; 10 | pages = pages_map(NULL, alloc_size, PAGE, &commit); 11 | assert_ptr_not_null(pages, "Unexpected pages_map() error"); 12 | 13 | hugepage = (void *)(ALIGNMENT_CEILING((uintptr_t)pages, HUGEPAGE)); 14 | assert_b_ne(pages_huge(hugepage, HUGEPAGE), config_thp, 15 | "Unexpected pages_huge() result"); 16 | assert_false(pages_nohuge(hugepage, HUGEPAGE), 17 | "Unexpected pages_nohuge() result"); 18 | 19 | pages_unmap(pages, alloc_size); 20 | } 21 | TEST_END 22 | 23 | int 24 | main(void) { 25 | return test( 26 | test_pages_huge); 27 | } 28 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_accum.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_active.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_thread_active_init:false,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_gdump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_active:false,prof_gdump:true" 5 | fi 6 | 7 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_idump.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | static bool did_prof_dump_open; 4 | 5 | static int 6 | prof_dump_open_intercept(bool propagate_err, const char *filename) { 7 | int fd; 8 | 9 | did_prof_dump_open = true; 10 | 11 | fd = open("/dev/null", O_WRONLY); 12 | assert_d_ne(fd, -1, "Unexpected open() failure"); 13 | 14 | return fd; 15 | } 16 | 17 | TEST_BEGIN(test_idump) { 18 | bool active; 19 | void *p; 20 | 21 | test_skip_if(!config_prof); 22 | 23 | active = true; 24 | assert_d_eq(mallctl("prof.active", NULL, NULL, (void *)&active, 25 | sizeof(active)), 0, 26 | "Unexpected mallctl failure while activating profiling"); 27 | 28 | prof_dump_open = prof_dump_open_intercept; 29 | 30 | did_prof_dump_open = false; 31 | p = mallocx(1, 0); 32 | assert_ptr_not_null(p, "Unexpected mallocx() failure"); 33 | dallocx(p, 0); 34 | assert_true(did_prof_dump_open, "Expected a profile dump"); 35 | } 36 | TEST_END 37 | 38 | int 39 | main(void) { 40 | return test( 41 | test_idump); 42 | } 43 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_idump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export MALLOC_CONF="tcache:false" 4 | if [ "x${enable_prof}" = "x1" ] ; then 5 | export MALLOC_CONF="${MALLOC_CONF},prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0,lg_prof_interval:0" 6 | fi 7 | 8 | 9 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_reset.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_active:false,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_tctx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,lg_prof_sample:0" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/prof_thread_name.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_prof}" = "x1" ] ; then 4 | export MALLOC_CONF="prof:true,prof_active:false" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/slab.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | TEST_BEGIN(test_arena_slab_regind) { 4 | szind_t binind; 5 | 6 | for (binind = 0; binind < NBINS; binind++) { 7 | size_t regind; 8 | extent_t slab; 9 | const arena_bin_info_t *bin_info = &arena_bin_info[binind]; 10 | extent_init(&slab, NULL, mallocx(bin_info->slab_size, 11 | MALLOCX_LG_ALIGN(LG_PAGE)), bin_info->slab_size, true, 12 | binind, 0, extent_state_active, false, true); 13 | assert_ptr_not_null(extent_addr_get(&slab), 14 | "Unexpected malloc() failure"); 15 | for (regind = 0; regind < bin_info->nregs; regind++) { 16 | void *reg = (void *)((uintptr_t)extent_addr_get(&slab) + 17 | (bin_info->reg_size * regind)); 18 | assert_zu_eq(arena_slab_regind(&slab, binind, reg), 19 | regind, 20 | "Incorrect region index computed for size %zu", 21 | bin_info->reg_size); 22 | } 23 | free(extent_addr_get(&slab)); 24 | } 25 | } 26 | TEST_END 27 | 28 | int 29 | main(void) { 30 | return test( 31 | test_arena_slab_regind); 32 | } 33 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/spin.c: -------------------------------------------------------------------------------- 1 | #include "test/jemalloc_test.h" 2 | 3 | #include "jemalloc/internal/spin.h" 4 | 5 | TEST_BEGIN(test_spin) { 6 | spin_t spinner = SPIN_INITIALIZER; 7 | 8 | for (unsigned i = 0; i < 100; i++) { 9 | spin_adaptive(&spinner); 10 | } 11 | } 12 | TEST_END 13 | 14 | int 15 | main(void) { 16 | return test( 17 | test_spin); 18 | } 19 | -------------------------------------------------------------------------------- /deps/memkind/src/jemalloc/test/unit/zero.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "x${enable_fill}" = "x1" ] ; then 4 | export MALLOC_CONF="abort:false,junk:false,zero:true" 5 | fi 6 | -------------------------------------------------------------------------------- /deps/memkind/src/src/.memkind_pmem.c.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/deps/memkind/src/src/.memkind_pmem.c.swp -------------------------------------------------------------------------------- /deps/memkind/src/test/memkind-afts-ext.ts: -------------------------------------------------------------------------------- 1 | /usr/share/mpss/test/memkind-dt/all_tests -a --gtest_filter=-PerformanceTest.* 2 | /usr/share/mpss/test/memkind-dt/decorator_test -a 3 | /usr/share/mpss/test/memkind-dt/gb_page_tests_bind_policy -a 4 | -------------------------------------------------------------------------------- /deps/memkind/src/test/memkind-afts.ts: -------------------------------------------------------------------------------- 1 | /usr/share/mpss/test/memkind-dt/all_tests -a --gtest_filter=-PerformanceTest.*:*.*ext* 2 | /usr/share/mpss/test/memkind-dt/decorator_test -a 3 | /usr/share/mpss/test/memkind-dt/gb_page_tests_bind_policy -a --gtest_filter=-*.*ext* 4 | /usr/share/mpss/test/memkind-dt/gb_page_tests_bind_policy -a --gtest_filter=-*.*ext* 5 | -------------------------------------------------------------------------------- /deps/memkind/src/test/memkind-perf-ext.ts: -------------------------------------------------------------------------------- 1 | /usr/share/mpss/test/memkind-dt/all_tests -a --gtest_filter=PerformanceTest.* 2 | /usr/share/mpss/test/memkind-dt/allocator_perf_tool_tests -a --gtest_filter=HeapManagerInitPerfTest*:AllocPerformanceTest* 3 | -------------------------------------------------------------------------------- /deps/memkind/src/test/memkind-perf.ts: -------------------------------------------------------------------------------- 1 | /usr/share/mpss/test/memkind-dt/all_tests -a --gtest_filter=PerformanceTest.* 2 | /usr/share/mpss/test/memkind-dt/allocator_perf_tool_tests -a --gtest_filter=HeapManagerInitPerfTest*:AllocPerformanceTest*:-*.*ext* 3 | -------------------------------------------------------------------------------- /deps/memkind/src/test/memkind-pytests.ts: -------------------------------------------------------------------------------- 1 | -k "test_TC_MEMKIND_" 2 | -------------------------------------------------------------------------------- /deps/memkind/src/test/memkind-slts.ts: -------------------------------------------------------------------------------- 1 | /usr/share/mpss/test/memkind-dt/allocator_perf_tool_tests -a --gtest_filter=AllocateToMaxStressTests*:-HugePageTest* 2 | /usr/share/mpss/test/memkind-dt/allocator_perf_tool_tests -a --gtest_filter=HugePageTest* --gtest_repeat=10 --gtest_break_on_failure 3 | -------------------------------------------------------------------------------- /deps/update-jemalloc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | VER=$1 3 | URL="http://www.canonware.com/download/jemalloc/jemalloc-${VER}.tar.bz2" 4 | echo "Downloading $URL" 5 | curl $URL > /tmp/jemalloc.tar.bz2 6 | tar xvjf /tmp/jemalloc.tar.bz2 7 | rm -rf jemalloc 8 | mv jemalloc-${VER} jemalloc 9 | echo "Use git status, add all files and commit changes." 10 | -------------------------------------------------------------------------------- /fuzz/rdb/dict.txt: -------------------------------------------------------------------------------- 1 | ="repl-stream-db" 2 | ="repl-id" 3 | ="repl-offset" 4 | ="lua" 5 | ="redis-ver" 6 | ="ctime" 7 | ="used-mem" 8 | ="aof-preamble" 9 | ="redis-bits" 10 | ="mvcc-tstamp" 11 | ="keydb-subexpire-key" 12 | ="keydb-subexpire-when" 13 | 14 | -------------------------------------------------------------------------------- /fuzz/rdb/testcases/empty.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/empty.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/expire.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/expire.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/expireonload.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/expireonload.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/integer.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/integer.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/integer_shared.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/integer_shared.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/multidb.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/multidb.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/replica.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/replica.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/set.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/set.rdb -------------------------------------------------------------------------------- /fuzz/rdb/testcases/string.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/fuzz/rdb/testcases/string.rdb -------------------------------------------------------------------------------- /machamp_scripts/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # make the build 4 | git submodule init && git submodule update 5 | make BUILD_TLS=yes ENABLE_FLASH=yes -j$(nproc) KEYDB_CFLAGS='-Werror' KEYDB_CXXFLAGS='-Werror' 6 | 7 | # gen-cert 8 | ./utils/gen-test-certs.sh -------------------------------------------------------------------------------- /pkg/deb/deb_files_generated/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/deb/deb_files_generated/.gitkeep -------------------------------------------------------------------------------- /pkg/deb/debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-check-aof.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-CHECK-AOF 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-check-aof \- Check integrity of a KeyDB .AOF file 4 | .SH SYNOPSIS 5 | .B keydb-check-aof 6 | filename 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | This utility checks the integrity of a dumped .AOF file. 13 | .SH AUTHOR 14 | \fBkeydb-check-aof\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 15 | .PP 16 | This manual page was written by Chris Lamb for the Debian 17 | project (but may be used by others). Modified by Ben Schermel 18 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-check-rdb.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-CHECK-RDB 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-check-rdb \- Check integrity of KeyDB dumped database file 4 | .SH SYNOPSIS 5 | .B keydb-check-rdb 6 | filename 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | This utility checks the integrity of a dumped database file. 13 | .SH AUTHOR 14 | \fBredis-check-rdb\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 15 | .PP 16 | This manual page was written by Chris Lamb for the Debian 17 | project (but may be used by others). Modified by Ben Schermel 18 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-cli.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-CLI 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-cli \- Command-line client to keydb-server 4 | .SH SYNOPSIS 5 | .B keydb-cli 6 | .RI [options] 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | \fBkeydb-cli\fP provides a simple command-line interface to a KeyDB server. 13 | .SH OPTIONS 14 | See \fBkeydb-doc\fP for more information on the commands KeyDB accepts. 15 | .SH AUTHOR 16 | \fBkeydb-cli\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 17 | .PP 18 | This manual page was written by Chris Lamb for the Debian 19 | project (but may be used by others). Modified by Ben Schermel 20 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-sentinel.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-SENTINEL 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-sentinel \- Persistent key-value database (cluster mode) 4 | .SH SYNOPSIS 5 | .B keydb-sentinel 6 | .RI configfile 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | .SH OPTIONS 13 | .IP "configfile" 14 | Read options from specified configuration file. 15 | .SH NOTES 16 | On Debian GNU/Linux systems, \fBkeydb-sentinel\fP is typically started via the 17 | \fB/etc/init.d/keydb-sentinel\fP initscript, not manually. This defaults to using 18 | \fB/etc/keydb/sentinel.conf\fP as a configuration file. 19 | .SH AUTHOR 20 | \fBkeydb-sentinel\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 21 | .PP 22 | This manual page was written by Chris Lamb for the Debian 23 | project (but may be used by others). Modified by Ben Schermel 24 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-sentinel.install: -------------------------------------------------------------------------------- 1 | debian/keydb-sentinel.service /lib/systemd/system/ 2 | pkg/deb/conf/sentinel.conf /etc/keydb 3 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-sentinel.logrotate: -------------------------------------------------------------------------------- 1 | /var/log/keydb/keydb-sentinel*.log { 2 | weekly 3 | missingok 4 | rotate 12 5 | compress 6 | notifempty 7 | } 8 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-sentinel.manpages: -------------------------------------------------------------------------------- 1 | debian/keydb-sentinel.1 2 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-sentinel.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | USER="keydb" 6 | GROUP="$USER" 7 | CONFFILE="/etc/keydb/sentinel.conf" 8 | 9 | if [ "$1" = "configure" ] 10 | then 11 | if ! dpkg-statoverride --list ${CONFFILE} >/dev/null 2>&1 12 | then 13 | dpkg-statoverride --update --add ${USER} ${GROUP} 640 ${CONFFILE} 14 | fi 15 | fi 16 | 17 | #DEBHELPER# 18 | 19 | if [ "$1" = "configure" ] 20 | then 21 | find /etc/keydb -maxdepth 1 -type d -name 'keydb-sentinel.*.d' -empty -delete 22 | fi 23 | 24 | systemctl daemon-reload 25 | 26 | exit 0 27 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-sentinel.postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | CONFFILE="/etc/keydb/sentinel.conf" 6 | 7 | if [ "$1" = "purge" ] 8 | then 9 | dpkg-statoverride --remove ${CONFFILE} || test $? -eq 2 10 | fi 11 | 12 | #DEBHELPER# 13 | 14 | systemctl daemon-reload 15 | 16 | exit 0 17 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-server.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-SERVER 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-server \- Persistent key-value database 4 | .SH SYNOPSIS 5 | .B keydb-server 6 | .RI configfile 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | .SH OPTIONS 13 | .IP "configfile" 14 | Read options from specified configuration file. 15 | .SH NOTES 16 | On Debian GNU/Linux systems, \fBkeydb-server\fP is typically started via the 17 | \fB/etc/init.d/keydb-server\fP initscript, not manually. This defaults to using 18 | \fB/etc/keydb/keydb.conf\fP as a configuration file. 19 | .SH AUTHOR 20 | \fBkeydb-server\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 21 | .PP 22 | This manual page was written by Chris Lamb for the Debian 23 | project (but may be used by others). Modified by Ben Schermel 24 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-server.docs: -------------------------------------------------------------------------------- 1 | README.md 2 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-server.install: -------------------------------------------------------------------------------- 1 | debian/keydb-server.service /lib/systemd/system/ 2 | pkg/deb/conf/keydb.conf /etc/keydb 3 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-server.logrotate: -------------------------------------------------------------------------------- 1 | /var/log/keydb/keydb-server*.log { 2 | weekly 3 | missingok 4 | rotate 12 5 | compress 6 | notifempty 7 | } 8 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-server.manpages: -------------------------------------------------------------------------------- 1 | debian/keydb-server.1 2 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-server.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | USER="keydb" 6 | GROUP="$USER" 7 | CONFFILE="/etc/keydb/keydb.conf" 8 | 9 | if [ "$1" = "configure" ] 10 | then 11 | if ! dpkg-statoverride --list ${CONFFILE} >/dev/null 2>&1 12 | then 13 | dpkg-statoverride --update --add ${USER} ${GROUP} 640 ${CONFFILE} 14 | fi 15 | fi 16 | 17 | #DEBHELPER# 18 | 19 | if [ "$1" = "configure" ] 20 | then 21 | find /etc/keydb -maxdepth 1 -type d -name 'keydb-server.*.d' -empty -delete 22 | fi 23 | 24 | systemctl daemon-reload 25 | 26 | exit 0 27 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-server.postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | CONFFILE="/etc/keydb/keydb.conf" 6 | 7 | if [ "${1}" = "purge" ] 8 | then 9 | dpkg-statoverride --remove ${CONFFILE} || test $? -eq 2 10 | fi 11 | 12 | #DEBHELPER# 13 | 14 | systemctl daemon-reload 15 | 16 | exit 0 17 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-tools.examples: -------------------------------------------------------------------------------- 1 | src/redis-trib.rb 2 | utils/lru 3 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-tools.install: -------------------------------------------------------------------------------- 1 | debian/bash_completion.d/* /usr/share/bash-completion/completions 2 | src/keydb-benchmark /usr/bin 3 | src/keydb-check-aof /usr/bin 4 | src/keydb-check-rdb /usr/bin 5 | src/keydb-cli /usr/bin 6 | src/keydb-server /usr/bin 7 | src/keydb-sentinel /usr/bin 8 | src/keydb-diagnostic-tool /usr/bin 9 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-tools.manpages: -------------------------------------------------------------------------------- 1 | debian/keydb-benchmark.1 2 | debian/keydb-check-aof.1 3 | debian/keydb-check-rdb.1 4 | debian/keydb-cli.1 5 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-tools.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | USER="keydb" 6 | 7 | Setup_dir () { 8 | DIR="${1}" 9 | MODE="${2}" 10 | GROUP="${3}" 11 | 12 | mkdir -p ${DIR} 13 | 14 | case "${DIR}" in 15 | /var/log/keydb) 16 | MODE="02750" 17 | GROUP="adm" 18 | ;; 19 | *) 20 | MODE="750" 21 | GROUP="${USER}" 22 | ;; 23 | esac 24 | 25 | if ! dpkg-statoverride --list ${DIR} >/dev/null 2>&1 26 | then 27 | chown ${USER}:${GROUP} ${DIR} 28 | chmod ${MODE} ${DIR} 29 | fi 30 | } 31 | 32 | if [ "$1" = "configure" ] 33 | then 34 | adduser \ 35 | --system \ 36 | --home /var/lib/keydb \ 37 | --quiet \ 38 | --group \ 39 | ${USER} || true 40 | 41 | Setup_dir /var/log/keydb ${USER}:adm 2750 42 | Setup_dir /var/lib/keydb ${USER}:${USER} 750 43 | fi 44 | 45 | #DEBHELPER# 46 | 47 | exit 0 48 | -------------------------------------------------------------------------------- /pkg/deb/debian/keydb-tools.postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | if [ "${1}" = "purge" ] 6 | then 7 | userdel keydb || true 8 | rm -rf /var/lib/keydb /var/log/keydb 9 | fi 10 | 11 | #DEBHELPER# 12 | 13 | exit 0 14 | -------------------------------------------------------------------------------- /pkg/deb/debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /pkg/deb/debian/source/lintian-overrides: -------------------------------------------------------------------------------- 1 | # Upstream do not provide signed tarballs. 2 | keydb-pro source: debian-watch-does-not-check-gpg-signature 3 | -------------------------------------------------------------------------------- /pkg/deb/debian/tests/0001-keydb-cli: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Show the INFO from "keydb-cli" 4 | 5 | set -eu 6 | 7 | keydb-cli INFO 8 | keydb-cli LOLWUT 9 | -------------------------------------------------------------------------------- /pkg/deb/debian/tests/0002-benchmark: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Run the benchmarking 4 | 5 | set -eu 6 | 7 | keydb-benchmark -P 10 8 | -------------------------------------------------------------------------------- /pkg/deb/debian/tests/0003-keydb-check-aof: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Smoke test keydb-check-aof 4 | 5 | keydb-check-aof 2>&1 | grep -qsi usage: 6 | -------------------------------------------------------------------------------- /pkg/deb/debian/tests/0004-keydb-check-rdb: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Test keydb-check-rdb 4 | 5 | set -eu 6 | 7 | # Perform a synchronous save to ensure .rdb file eixsts 8 | keydb-cli SAVE 9 | 10 | keydb-check-rdb /var/lib/keydb/dump.rdb 11 | -------------------------------------------------------------------------------- /pkg/deb/debian/tests/control: -------------------------------------------------------------------------------- 1 | Tests: 0001-keydb-cli 2 | 3 | Tests: 0002-benchmark 4 | 5 | Tests: 0003-keydb-check-aof 6 | 7 | Tests: 0004-keydb-check-rdb 8 | Restrictions: needs-root 9 | -------------------------------------------------------------------------------- /pkg/deb/debian/watch: -------------------------------------------------------------------------------- 1 | version=6 2 | opts=uversionmangle=s/-?(alpha|beta|rc)/~$1/ \ 3 | https://github.com/EQ-Alpha/KeyDB/releases .*/archive/(.*).tar.gz 4 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/NEWS: -------------------------------------------------------------------------------- 1 | keydb (4:4.0.2-3) unstable; urgency=medium 2 | 3 | This version drops the Debian-specific support for the 4 | /etc/keydb/keydb-{server,sentinel}.{pre,post}-{up,down}.d directories in 5 | favour of using systemd's ExecStartPre, ExecStartPost, ExecStopPre, 6 | ExecStopPost commands. 7 | 8 | -- Chris Lamb Wed, 11 Oct 2017 22:55:00 -0400 9 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/files: -------------------------------------------------------------------------------- 1 | keydb_5.3.3-1~bionic1_source.buildinfo database optional 2 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/gbp.conf: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | debian-branch=debian/sid 3 | upstream-branch=upstream/sid 4 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-check-aof.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-CHECK-AOF 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-check-aof \- Check integrity of a KeyDB .AOF file 4 | .SH SYNOPSIS 5 | .B keydb-check-aof 6 | filename 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | This utility checks the integrity of a dumped .AOF file. 13 | .SH AUTHOR 14 | \fBkeydb-check-aof\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 15 | .PP 16 | This manual page was written by Chris Lamb for the Debian 17 | project (but may be used by others). Modified by Ben Schermel 18 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-check-rdb.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-CHECK-RDB 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-check-rdb \- Check integrity of KeyDB dumped database file 4 | .SH SYNOPSIS 5 | .B keydb-check-rdb 6 | filename 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | This utility checks the integrity of a dumped database file. 13 | .SH AUTHOR 14 | \fBredis-check-rdb\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 15 | .PP 16 | This manual page was written by Chris Lamb for the Debian 17 | project (but may be used by others). Modified by Ben Schermel 18 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-cli.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-CLI 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-cli \- Command-line client to keydb-server 4 | .SH SYNOPSIS 5 | .B keydb-cli 6 | .RI [options] 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | \fBkeydb-cli\fP provides a simple command-line interface to a KeyDB server. 13 | .SH OPTIONS 14 | See \fBkeydb-doc\fP for more information on the commands KeyDB accepts. 15 | .SH AUTHOR 16 | \fBkeydb-cli\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 17 | .PP 18 | This manual page was written by Chris Lamb for the Debian 19 | project (but may be used by others). Modified by Ben Schermel 20 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-SENTINEL 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-sentinel \- Persistent key-value database (cluster mode) 4 | .SH SYNOPSIS 5 | .B keydb-sentinel 6 | .RI configfile 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | .SH OPTIONS 13 | .IP "configfile" 14 | Read options from specified configuration file. 15 | .SH NOTES 16 | On Debian GNU/Linux systems, \fBkeydb-sentinel\fP is typically started via the 17 | \fB/etc/init.d/keydb-sentinel\fP initscript, not manually. This defaults to using 18 | \fB/etc/keydb/sentinel.conf\fP as a configuration file. 19 | .SH AUTHOR 20 | \fBkeydb-sentinel\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 21 | .PP 22 | This manual page was written by Chris Lamb for the Debian 23 | project (but may be used by others). Modified by Ben Schermel 24 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.default: -------------------------------------------------------------------------------- 1 | # keydb-sentinel configure options 2 | 3 | # ULIMIT: Call ulimit -n with this argument prior to invoking KeyDB Sentinel 4 | # itself. This may be required for high-concurrency environments. KeyDB 5 | # Sentinel itself cannot alter its limits as it is not being run as root. 6 | # (default: 65536) 7 | # 8 | ULIMIT=65536 9 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.install: -------------------------------------------------------------------------------- 1 | debian/keydb-sentinel.service /lib/systemd/system 2 | pkg/deb/conf/sentinel.conf /etc/keydb 3 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.logrotate: -------------------------------------------------------------------------------- 1 | /var/log/keydb/keydb-sentinel*.log { 2 | weekly 3 | missingok 4 | rotate 12 5 | compress 6 | notifempty 7 | } 8 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.maintscript: -------------------------------------------------------------------------------- 1 | rm_conffile /etc/keydb/keydb-sentinel.post-down.d/00_example 4:4.0.2-3~ 2 | rm_conffile /etc/keydb/keydb-sentinel.post-up.d/00_example 4:4.0.2-3~ 3 | rm_conffile /etc/keydb/keydb-sentinel.pre-down.d/00_example 4:4.0.2-3~ 4 | rm_conffile /etc/keydb/keydb-sentinel.pre-up.d/00_example 4:4.0.2-3~ 5 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.manpages: -------------------------------------------------------------------------------- 1 | debian/keydb-sentinel.1 2 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | USER="keydb" 6 | GROUP="$USER" 7 | CONFFILE="/etc/keydb/sentinel.conf" 8 | 9 | if [ "$1" = "configure" ] 10 | then 11 | if ! dpkg-statoverride --list ${CONFFILE} >/dev/null 2>&1 12 | then 13 | dpkg-statoverride --update --add ${USER} ${GROUP} 640 ${CONFFILE} 14 | fi 15 | fi 16 | 17 | #DEBHELPER# 18 | 19 | if [ "$1" = "configure" ] 20 | then 21 | find /etc/keydb -maxdepth 1 -type d -name 'keydb-sentinel.*.d' -empty -delete 22 | fi 23 | 24 | exit 0 25 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-sentinel.postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | CONFFILE="/etc/keydb/sentinel.conf" 6 | 7 | if [ "$1" = "purge" ] 8 | then 9 | dpkg-statoverride --remove ${CONFFILE} || test $? -eq 2 10 | fi 11 | 12 | #DEBHELPER# 13 | 14 | exit 0 15 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.1: -------------------------------------------------------------------------------- 1 | .TH KEYDB-SERVER 1 "August 17, 2019" 2 | .SH NAME 3 | keydb-server \- Persistent key-value database 4 | .SH SYNOPSIS 5 | .B keydb-server 6 | .RI configfile 7 | .SH DESCRIPTION 8 | KeyDB is a key-value database. It is similar to memcached but the dataset is 9 | not volatile and other datatypes (such as lists and sets) are natively 10 | supported. 11 | .PP 12 | .SH OPTIONS 13 | .IP "configfile" 14 | Read options from specified configuration file. 15 | .SH NOTES 16 | On Debian GNU/Linux systems, \fBkeydb-server\fP is typically started via the 17 | \fB/etc/init.d/keydb-server\fP initscript, not manually. This defaults to using 18 | \fB/etc/keydb/keydb.conf\fP as a configuration file. 19 | .SH AUTHOR 20 | \fBkeydb-server\fP was written by John Sully, originating as a fork of Redis. Redis was written by Salvatore Sanfilippo. 21 | .PP 22 | This manual page was written by Chris Lamb for the Debian 23 | project (but may be used by others). Modified by Ben Schermel 24 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.default: -------------------------------------------------------------------------------- 1 | # keydb-server configure options 2 | 3 | # ULIMIT: Call ulimit -n with this argument prior to invoking Redis itself. 4 | # This may be required for high-concurrency environments. KeyDB itself cannot 5 | # alter its limits as it is not being run as root. (default: 65536) 6 | # 7 | ULIMIT=65536 8 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.docs: -------------------------------------------------------------------------------- 1 | README.md 2 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.install: -------------------------------------------------------------------------------- 1 | debian/keydb-server.service /lib/systemd/system 2 | pkg/deb/conf/keydb.conf /etc/keydb 3 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.logrotate: -------------------------------------------------------------------------------- 1 | /var/log/keydb/keydb-server*.log { 2 | weekly 3 | missingok 4 | rotate 12 5 | compress 6 | notifempty 7 | } 8 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.maintscript: -------------------------------------------------------------------------------- 1 | rm_conffile /etc/keydb/keydb-server.post-down.d/00_example 4:4.0.2-3~ 2 | rm_conffile /etc/keydb/keydb-server.post-up.d/00_example 4:4.0.2-3~ 3 | rm_conffile /etc/keydb/keydb-server.pre-down.d/00_example 4:4.0.2-3~ 4 | rm_conffile /etc/keydb/keydb-server.pre-up.d/00_example 4:4.0.2-3~ 5 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.manpages: -------------------------------------------------------------------------------- 1 | debian/keydb-server.1 2 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | USER="keydb" 6 | GROUP="$USER" 7 | CONFFILE="/etc/keydb/keydb.conf" 8 | 9 | if [ "$1" = "configure" ] 10 | then 11 | if ! dpkg-statoverride --list ${CONFFILE} >/dev/null 2>&1 12 | then 13 | dpkg-statoverride --update --add ${USER} ${GROUP} 640 ${CONFFILE} 14 | fi 15 | fi 16 | 17 | #DEBHELPER# 18 | 19 | if [ "$1" = "configure" ] 20 | then 21 | find /etc/keydb -maxdepth 1 -type d -name 'keydb-server.*.d' -empty -delete 22 | fi 23 | 24 | exit 0 25 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-server.postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | CONFFILE="/etc/keydb/keydb.conf" 6 | 7 | if [ "${1}" = "purge" ] 8 | then 9 | dpkg-statoverride --remove ${CONFFILE} || test $? -eq 2 10 | fi 11 | 12 | #DEBHELPER# 13 | 14 | exit 0 15 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-tools.examples: -------------------------------------------------------------------------------- 1 | src/redis-trib.rb 2 | utils/lru 3 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-tools.install: -------------------------------------------------------------------------------- 1 | debian/bash_completion.d/* /usr/share/bash-completion/completions 2 | src/keydb-server /usr/bin 3 | src/keydb-benchmark /usr/bin 4 | src/keydb-check-aof /usr/bin 5 | src/keydb-check-rdb /usr/bin 6 | src/keydb-cli /usr/bin 7 | src/keydb-sentinel /usr/bin 8 | src/keydb-diagnostic-tool /usr/bin 9 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-tools.manpages: -------------------------------------------------------------------------------- 1 | debian/keydb-benchmark.1 2 | debian/keydb-check-aof.1 3 | debian/keydb-check-rdb.1 4 | debian/keydb-cli.1 5 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-tools.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | USER="keydb" 6 | 7 | Setup_dir () { 8 | DIR="${1}" 9 | MODE="${2}" 10 | GROUP="${3}" 11 | 12 | mkdir -p ${DIR} 13 | 14 | case "${DIR}" in 15 | /var/log/keydb) 16 | MODE="02750" 17 | GROUP="adm" 18 | ;; 19 | *) 20 | MODE="750" 21 | GROUP="${USER}" 22 | ;; 23 | esac 24 | 25 | if ! dpkg-statoverride --list ${DIR} >/dev/null 2>&1 26 | then 27 | chown ${USER}:${GROUP} ${DIR} 28 | chmod ${MODE} ${DIR} 29 | fi 30 | } 31 | 32 | if [ "$1" = "configure" ] 33 | then 34 | adduser \ 35 | --system \ 36 | --home /var/lib/keydb \ 37 | --quiet \ 38 | --group \ 39 | ${USER} || true 40 | 41 | Setup_dir /var/log/keydb ${USER}:adm 2750 42 | Setup_dir /var/lib/keydb ${USER}:${USER} 750 43 | fi 44 | 45 | #DEBHELPER# 46 | 47 | exit 0 48 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/keydb-tools.postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | if [ "${1}" = "purge" ] 6 | then 7 | userdel keydb || true 8 | rm -rf /var/lib/keydb /var/log/keydb 9 | fi 10 | 11 | #DEBHELPER# 12 | 13 | exit 0 14 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/patches/0001-fix-ftbfs-on-kfreebsd.patch: -------------------------------------------------------------------------------- 1 | From: Chris Lamb 2 | Date: Fri, 30 Oct 2015 10:53:42 +0000 3 | Subject: fix-ftbfs-on-kfreebsd 4 | 5 | --- 6 | src/fmacros.h | 2 +- 7 | 1 file changed, 1 insertion(+), 1 deletion(-) 8 | 9 | diff --git a/src/fmacros.h b/src/fmacros.h 10 | index 6e56c75..d490aec 100644 11 | --- a/src/fmacros.h 12 | +++ b/src/fmacros.h 13 | @@ -41,7 +41,7 @@ 14 | #define _ALL_SOURCE 15 | #endif 16 | 17 | -#if defined(__linux__) || defined(__OpenBSD__) 18 | +#if defined(__linux__) || defined(__OpenBSD__) || defined(__GLIBC__) 19 | #define _XOPEN_SOURCE 700 20 | /* 21 | * On NetBSD, _XOPEN_SOURCE undefines _NETBSD_SOURCE and 22 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/patches/series: -------------------------------------------------------------------------------- 1 | 0001-fix-ftbfs-on-kfreebsd.patch 2 | #debian-packaging/0003-dpkg-buildflags.patch 3 | #debian-packaging/0007-Set-Debian-configuration-defaults.patch 4 | #0010-Use-get_current_dir_name-over-PATHMAX-etc.patch 5 | #0011-Add-support-for-a-USE_SYSTEM_LUA-flag.patch 6 | #test 7 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/source/include-binaries: -------------------------------------------------------------------------------- 1 | keydb_5.0.6.orig.tar.gz 2 | keydb_5.0.6-1chl1~bionic1.debian.tar.xz 3 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/source/lintian-overrides: -------------------------------------------------------------------------------- 1 | # Upstream do not provide signed tarballs. 2 | keydb source: debian-watch-does-not-check-gpg-signature 3 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/source/options: -------------------------------------------------------------------------------- 1 | extend-diff-ignore = "^\.travis\.yml$" 2 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/tests/0001-keydb-cli: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Show the INFO from "keydb-cli" 4 | 5 | set -eu 6 | 7 | keydb-cli INFO 8 | keydb-cli LOLWUT 9 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/tests/0002-benchmark: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Run the benchmarking 4 | 5 | set -eu 6 | 7 | keydb-benchmark -P 10 8 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/tests/0003-keydb-check-aof: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Smoke test keydb-check-aof 4 | 5 | keydb-check-aof 2>&1 | grep -qsi usage: 6 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/tests/0004-keydb-check-rdb: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Test keydb-check-rdb 4 | 5 | set -eu 6 | 7 | # Perform a synchronous save to ensure .rdb file eixsts 8 | keydb-cli SAVE 9 | 10 | keydb-check-rdb /var/lib/keydb/dump.rdb 11 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/tests/control: -------------------------------------------------------------------------------- 1 | Tests: 0001-keydb-cli 2 | 3 | Tests: 0002-benchmark 4 | 5 | Tests: 0003-keydb-check-aof 6 | 7 | Tests: 0004-keydb-check-rdb 8 | Restrictions: needs-root 9 | -------------------------------------------------------------------------------- /pkg/deb/debian_dh9/watch: -------------------------------------------------------------------------------- 1 | version=4 2 | opts=uversionmangle=s/-?(alpha|beta|rc)/~$1/ \ 3 | https://github.com/EQ-Alpha/KeyDB/releases .*/archive/(.*).tar.gz 4 | -------------------------------------------------------------------------------- /pkg/docker/README.md: -------------------------------------------------------------------------------- 1 | This Dockerfile will clone the KeyDB repo, build, and generate a Docker image you can use 2 | 3 | To build, use experimental mode to enable use of build args. Tag the build and specify branch name. The command below will generate your docker image: 4 | 5 | ``` 6 | DOCKER_CLI_EXPERIMENTAL=enabled docker build --build-arg BRANCH= -t 7 | ``` 8 | -------------------------------------------------------------------------------- /pkg/rpm/README.md: -------------------------------------------------------------------------------- 1 | ### Generate RPM files for the generated binaries 2 | 3 | After making the binaries you can run the following script 4 | 5 | Usage: 6 | ``` 7 | $ cd KeyDB/pkg/rpm 8 | $ sudo ./generate-rpms.sh 9 | ``` 10 | 11 | This rpm script is currently tested on centos 7 and centos 8 builds 12 | 13 | Dependencies: 14 | ``` 15 | yum install -y scl-utils centos-release-scl rpm-build 16 | ``` 17 | -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/etc/logrotate.d/keydb: -------------------------------------------------------------------------------- 1 | /var/log/keydb/*.log { 2 | weekly 3 | rotate 10 4 | copytruncate 5 | delaycompress 6 | compress 7 | notifempty 8 | missingok 9 | } 10 | -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/etc/systemd/system/keydb-sentinel.service.d/limit.conf: -------------------------------------------------------------------------------- 1 | # If you need to change max open file limit 2 | # for example, when you change maxclient in configuration 3 | # you can change the LimitNOFILE value below 4 | # see "man systemd.exec" for information 5 | 6 | [Service] 7 | LimitNOFILE=10240 8 | -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/etc/systemd/system/keydb.service.d/limit.conf: -------------------------------------------------------------------------------- 1 | # If you need to change max open file limit 2 | # for example, when you change maxclient in configuration 3 | # you can change the LimitNOFILE value below 4 | # see "man systemd.exec" for information 5 | 6 | [Service] 7 | LimitNOFILE=10240 8 | -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-benchmark.1.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-benchmark.1.gz -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-check-aof.1.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-check-aof.1.gz -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-check-rdb.1.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-check-rdb.1.gz -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-cli.1.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-cli.1.gz -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-sentinel.1.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-sentinel.1.gz -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-server.1.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man1/keydb-server.1.gz -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man5/keydb-sentinel.conf.5.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man5/keydb-sentinel.conf.5.gz -------------------------------------------------------------------------------- /pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man5/keydb.conf.5.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/pkg/rpm/keydb_build/keydb_rpm/usr/share/man/man5/keydb.conf.5.gz -------------------------------------------------------------------------------- /pkg/rpm/rpm_files_generated/.gitkeep: -------------------------------------------------------------------------------- 1 | # keep this directory 2 | -------------------------------------------------------------------------------- /runtest: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | TCL_VERSIONS="8.5 8.6" 3 | TCLSH="" 4 | 5 | export ASAN_OPTIONS=allocator_may_return_null=1 $ASAN_OPTIONS 6 | 7 | for VERSION in $TCL_VERSIONS; do 8 | TCL=`which tclsh$VERSION 2>/dev/null` && TCLSH=$TCL 9 | done 10 | 11 | if [ -z $TCLSH ] 12 | then 13 | echo "You need tcl 8.5 or newer in order to run the KeyDB test" 14 | exit 1 15 | fi 16 | $TCLSH tests/test_helper.tcl "${@}" 17 | -------------------------------------------------------------------------------- /runtest-cluster: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | TCL_VERSIONS="8.5 8.6" 3 | TCLSH="" 4 | 5 | for VERSION in $TCL_VERSIONS; do 6 | TCL=`which tclsh$VERSION 2>/dev/null` && TCLSH=$TCL 7 | done 8 | 9 | if [ -z $TCLSH ] 10 | then 11 | echo "You need tcl 8.5 or newer in order to run the KeyDB Cluster test" 12 | exit 1 13 | fi 14 | $TCLSH tests/cluster/run.tcl $* 15 | -------------------------------------------------------------------------------- /runtest-rotation: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | TCL_VERSIONS="8.5 8.6" 3 | TCLSH="" 4 | 5 | export ASAN_OPTIONS=allocator_may_return_null=1 $ASAN_OPTIONS 6 | 7 | for VERSION in $TCL_VERSIONS; do 8 | TCL=`which tclsh$VERSION 2>/dev/null` && TCLSH=$TCL 9 | done 10 | 11 | if [ -z $TCLSH ] 12 | then 13 | echo "You need tcl 8.5 or newer in order to run the KeyDB test" 14 | exit 1 15 | fi 16 | if [ ! -r tests/tls ] || [ ! -r tests/tls_1 ] || [ ! -r tests/tls_2 ]; 17 | then 18 | echo "Generating neccessary certificates for TLS rotation testing." 19 | rm -rf tests/tls tests/tls_1 tests/tls_2 20 | 21 | utils/gen-test-certs.sh 22 | mv tests/tls tests/tls_1 23 | utils/gen-test-certs.sh 24 | mv tests/tls tests/tls_2 25 | utils/gen-test-certs.sh 26 | fi 27 | $TCLSH tests/test_helper.tcl \ 28 | --single unit/tls-rotation \ 29 | --tls \ 30 | --config server-threads 3 \ 31 | "${@}" 32 | -------------------------------------------------------------------------------- /runtest-sentinel: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | TCL_VERSIONS="8.5 8.6" 3 | TCLSH="" 4 | 5 | for VERSION in $TCL_VERSIONS; do 6 | TCL=`which tclsh$VERSION 2>/dev/null` && TCLSH=$TCL 7 | done 8 | 9 | if [ -z $TCLSH ] 10 | then 11 | echo "You need tcl 8.5 or newer in order to run the KeyDB Sentinel test" 12 | exit 1 13 | fi 14 | $TCLSH tests/sentinel/run.tcl $* 15 | -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | *.gcda 2 | *.gcno 3 | *.gcov 4 | redis.info 5 | KeyDB.info 6 | lcov-html 7 | -------------------------------------------------------------------------------- /src/AsyncWorkQueue.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "fastlock.h" 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | class AsyncWorkQueue 12 | { 13 | struct WorkItem 14 | { 15 | WorkItem(std::function &&fnAsync) 16 | : fnAsync(std::move(fnAsync)) 17 | {} 18 | 19 | WorkItem(WorkItem&&) = default; 20 | std::function fnAsync; 21 | }; 22 | std::vector m_vecthreads; 23 | std::vector m_vecpthreadVars; 24 | std::deque m_workqueue; 25 | std::mutex m_mutex; 26 | std::condition_variable m_cvWakeup; 27 | std::atomic m_fQuitting { false }; 28 | 29 | void WorkerThreadMain(); 30 | public: 31 | AsyncWorkQueue(int nthreads); 32 | ~AsyncWorkQueue(); 33 | 34 | void AddWorkFunction(std::function &&fnAsync, bool fHiPri = false); 35 | bool removeClientAsyncWrites(struct client *c); 36 | 37 | void shutdown(); 38 | 39 | void abandonThreads(); 40 | }; -------------------------------------------------------------------------------- /src/crc64.h: -------------------------------------------------------------------------------- 1 | #ifndef CRC64_H 2 | #define CRC64_H 3 | 4 | #include 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | void crc64_init(void); 11 | uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l); 12 | 13 | #ifdef REDIS_TEST 14 | int crc64Test(int argc, char *argv[], int accurate); 15 | #endif 16 | 17 | #ifdef __cplusplus 18 | } 19 | #endif 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /src/cron.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | struct cronjob 4 | { 5 | sdsstring script; 6 | uint64_t interval; 7 | uint64_t startTime; 8 | std::vector veckeys; 9 | std::vector vecargs; 10 | int dbNum = 0; 11 | bool fSingleShot = false; 12 | }; 13 | 14 | void freeCronObject(robj_roptr o); 15 | void executeCronJobExpireHook(const char *key, robj *o); 16 | void cronCommand(client *c); -------------------------------------------------------------------------------- /src/geo.h: -------------------------------------------------------------------------------- 1 | #ifndef __GEO_H__ 2 | #define __GEO_H__ 3 | 4 | #include "server.h" 5 | 6 | /* Structures used inside geo.c in order to represent points and array of 7 | * points on the earth. */ 8 | typedef struct geoPoint { 9 | double longitude; 10 | double latitude; 11 | double dist; 12 | double score; 13 | char *member; 14 | } geoPoint; 15 | 16 | typedef struct geoArray { 17 | struct geoPoint *array; 18 | size_t buckets; 19 | size_t used; 20 | } geoArray; 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /src/keydbutils.cpp: -------------------------------------------------------------------------------- 1 | #include "server.h" 2 | 3 | namespace keydbutils 4 | { 5 | template<> 6 | size_t hash(const sdsview& t) 7 | { 8 | return (size_t)dictGenHashFunction(static_cast(t), t.size()); 9 | } 10 | } -------------------------------------------------------------------------------- /src/meminfo.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | static size_t getMemKey(std::string key) { 6 | # ifdef __linux__ 7 | std::string token; 8 | std::ifstream f("/proc/meminfo"); 9 | while (f >> token) { 10 | if (token == key) { 11 | size_t mem_val; 12 | if (f >> mem_val) { 13 | return mem_val * 1024; // values are in kB 14 | } else { 15 | return 0; 16 | } 17 | f.ignore(std::numeric_limits::max(), '\n'); 18 | } 19 | } 20 | return 0; 21 | # else 22 | (void)key; 23 | return 0; 24 | # endif 25 | } 26 | 27 | size_t getMemAvailable() { 28 | return getMemKey("MemAvailable:"); 29 | } 30 | 31 | size_t getMemTotal() { 32 | return getMemKey("MemTotal:"); 33 | } -------------------------------------------------------------------------------- /src/mkreleasehdr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | GIT_SHA1=`(git show-ref --head --hash=8 2> /dev/null || echo 00000000) | head -n1` 3 | GIT_DIRTY=`git diff --no-ext-diff 2> /dev/null | wc -l` 4 | BUILD_ID=`uname -n`"-"`date +%s` 5 | if [ -n "$SOURCE_DATE_EPOCH" ]; then 6 | BUILD_ID=$(date -u -d "@$SOURCE_DATE_EPOCH" +%s 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" +%s 2>/dev/null || date -u +%s) 7 | fi 8 | test -f release.h || touch release.h 9 | (cat release.h | grep SHA1 | grep $GIT_SHA1) && \ 10 | (cat release.h | grep DIRTY | grep $GIT_DIRTY) && exit 0 # Already up-to-date 11 | echo "#define REDIS_GIT_SHA1 \"$GIT_SHA1\"" > release.h 12 | echo "#define REDIS_GIT_DIRTY \"$GIT_DIRTY\"" >> release.h 13 | echo "#define REDIS_BUILD_ID \"$BUILD_ID\"" >> release.h 14 | touch release.c # Force recompile of release.c 15 | -------------------------------------------------------------------------------- /src/modules/.gitignore: -------------------------------------------------------------------------------- 1 | *.so 2 | *.xo 3 | -------------------------------------------------------------------------------- /src/modules/keydb_modstatsd/Makefile: -------------------------------------------------------------------------------- 1 | MODULE_FLAGS := -fPIC -O2 -Wall -Werror 2 | 3 | OBJECT_FILES := modmain.o 4 | MODSNAP_CXX_FLAGS := -std=gnu++14 5 | 6 | %.o: %.cpp 7 | $(CXX) -o $@ -c $< $(MODULE_FLAGS) -I../../../deps/cpp-statsd-client/include $(MODSNAP_CXX_FLAGS) -g 8 | 9 | modstatsd.so: $(OBJECT_FILES) 10 | $(CXX) -shared $(OBJECT_FILES) -o modstatsd.so 11 | 12 | clean: 13 | rm -f $(OBJECT_FILES) modstatsd.so 14 | -------------------------------------------------------------------------------- /src/motd.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | extern const char *motd_url; 4 | extern const char *motd_cache_file; 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | char *fetchMOTD(int fCache, int enable_motd); 10 | void freeMOTD(const char*); 11 | #ifdef __cplusplus 12 | } 13 | #endif 14 | -------------------------------------------------------------------------------- /src/new.cpp: -------------------------------------------------------------------------------- 1 | #include // std::size_t 2 | #include "server.h" 3 | #include "new.h" 4 | #include 5 | 6 | #ifdef SANITIZE 7 | void *operator new(size_t size, enum MALLOC_CLASS mclass) 8 | { 9 | (void)mclass; 10 | return ::operator new(size); 11 | } 12 | 13 | #else 14 | [[deprecated]] 15 | void *operator new(size_t size) 16 | { 17 | return zmalloc(size, MALLOC_LOCAL); 18 | } 19 | 20 | void *operator new(size_t size, enum MALLOC_CLASS mclass) 21 | { 22 | return zmalloc(size, mclass); 23 | } 24 | 25 | void *operator new(std::size_t size, const std::nothrow_t &) noexcept 26 | { 27 | return zmalloc(size, MALLOC_LOCAL); 28 | } 29 | 30 | //need to do null checks for delete since the compiler can optimize out null checks in zfree 31 | void operator delete(void * p) noexcept 32 | { 33 | if (p != nullptr) 34 | zfree(p); 35 | } 36 | 37 | void operator delete(void *p, std::size_t) noexcept 38 | { 39 | if (p != nullptr) 40 | zfree(p); 41 | } 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /src/new.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include // std::size_t 3 | #include "storage.h" 4 | 5 | void *operator new(size_t size, enum MALLOC_CLASS mclass); 6 | 7 | #ifndef SANITIZE 8 | void *operator new(size_t size); 9 | 10 | void operator delete(void * p) noexcept; 11 | void operator delete(void *p, std::size_t) noexcept; 12 | #endif -------------------------------------------------------------------------------- /src/serverassert.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void _serverAssertWithInfo(const struct client *c, class robj_roptr o, const char *estr, const char *file, int line); 4 | extern "C" void _serverAssert(const char *estr, const char *file, int line); 5 | #ifdef __GNUC__ 6 | extern "C" void _serverPanic(const char *file, int line, const char *msg, ...) 7 | __attribute__ ((format (printf, 3, 4))); 8 | #else 9 | extern "C" void _serverPanic(const char *file, int line, const char *msg, ...); 10 | #endif 11 | 12 | extern int g_fInCrash; 13 | 14 | /* We can print the stacktrace, so our assert is defined this way: */ 15 | #define serverAssertWithInfo(_c,_o,_e) ((_e)?(void)0 : (_serverAssertWithInfo(_c,_o,#_e,__FILE__,__LINE__),_exit(1))) 16 | #define serverAssert(_e) (((_e) || g_fInCrash) ?(void)0 : (_serverAssert(#_e,__FILE__,__LINE__),_exit(1))) 17 | #ifdef _DEBUG 18 | #define serverAssertDebug(_e) serverAssert(_e) 19 | #else 20 | #define serverAssertDebug(_e) 21 | #endif 22 | #define serverPanic(...) _serverPanic(__FILE__,__LINE__,__VA_ARGS__),_exit(1) -------------------------------------------------------------------------------- /src/sha1.h: -------------------------------------------------------------------------------- 1 | #ifndef SHA1_H 2 | #define SHA1_H 3 | /* ================ sha1.h ================ */ 4 | /* 5 | SHA-1 in C 6 | By Steve Reid 7 | 100% Public Domain 8 | */ 9 | 10 | #ifdef __cplusplus 11 | extern "C" { 12 | #endif 13 | 14 | typedef struct { 15 | uint32_t state[5]; 16 | uint32_t count[2]; 17 | unsigned char buffer[64]; 18 | } SHA1_CTX; 19 | 20 | void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]); 21 | void SHA1Init(SHA1_CTX* context); 22 | void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len); 23 | void SHA1Final(unsigned char digest[20], SHA1_CTX* context); 24 | 25 | #ifdef REDIS_TEST 26 | int sha1Test(int argc, char **argv, int accurate); 27 | #endif 28 | 29 | #ifdef __cplusplus 30 | } 31 | #endif 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/storage.h: -------------------------------------------------------------------------------- 1 | #ifndef __STORAGE_H__ 2 | #define __STORAGE_H__ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | enum MALLOC_CLASS 9 | { 10 | MALLOC_LOCAL, 11 | MALLOC_SHARED, 12 | }; 13 | 14 | void storage_init(const char *tmpfilePath, size_t cbFileReserve); 15 | 16 | void *salloc(size_t cb, enum MALLOC_CLASS mclass); 17 | void *scalloc(size_t cb, size_t c, enum MALLOC_CLASS mclass); 18 | void sfree(void*); 19 | void *srealloc(void *pv, size_t cb, enum MALLOC_CLASS mclass); 20 | size_t salloc_usable_size(void *ptr); 21 | 22 | struct redisObject *salloc_objembstr(); 23 | void sfree_objembstr(struct redisObject *obj); 24 | struct redisObject *salloc_obj(); 25 | void sfree_obj(struct redisObject *obj); 26 | 27 | #ifdef __cplusplus 28 | } 29 | #endif 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /src/storage/rocksdbfactory.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class IStorageFactory *CreateRocksDBStorageFactory(const char *path, int dbnum, const char *rgchConfig, size_t cchConfig); -------------------------------------------------------------------------------- /src/t_nhash.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void freeNestedHashObject(robj_roptr o); 4 | 5 | void nhsetCommand(client *c); 6 | void nhgetCommand(client *c); 7 | -------------------------------------------------------------------------------- /src/uuid.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define UUID_BINARY_LEN 16 4 | 5 | static inline int FUuidNil(unsigned char *uuid) 6 | { 7 | unsigned char val = 0; 8 | for (int i = 0; i < UUID_BINARY_LEN; ++i) 9 | val |= uuid[i]; 10 | return (val == 0); 11 | } 12 | 13 | static inline int FUuidEqual(unsigned char *uuid1, unsigned char *uuid2) 14 | { 15 | unsigned char val = 0; 16 | for (int i = 0; i < UUID_BINARY_LEN; ++i) 17 | val |= (uuid1[i] ^ uuid2[i]); 18 | return (val == 0); 19 | } -------------------------------------------------------------------------------- /src/valgrind.sup: -------------------------------------------------------------------------------- 1 | { 2 | 3 | Memcheck:Cond 4 | fun:lzf_compress 5 | } 6 | 7 | { 8 | 9 | Memcheck:Value4 10 | fun:lzf_compress 11 | } 12 | 13 | { 14 | 15 | Memcheck:Value8 16 | fun:lzf_compress 17 | } 18 | 19 | { 20 | 21 | Memcheck:FishyValue 22 | malloc(size) 23 | fun:malloc 24 | fun:ztrymalloc_usable 25 | fun:ztrymalloc 26 | } 27 | -------------------------------------------------------------------------------- /src/version.h: -------------------------------------------------------------------------------- 1 | #define KEYDB_REAL_VERSION "255.255.255" 2 | #define KEYDB_VERSION_NUM 0x00ffffff 3 | extern const char *KEYDB_SET_VERSION; // Unlike real version, this can be overriden by the config 4 | 5 | enum VersionCompareResult 6 | { 7 | EqualVersion, 8 | OlderVersion, 9 | NewerVersion, 10 | IncompatibleVersion, 11 | }; 12 | 13 | struct SymVer 14 | { 15 | long major; 16 | long minor; 17 | long build; 18 | }; 19 | 20 | #ifdef __cplusplus 21 | extern "C" 22 | { 23 | #endif 24 | 25 | struct SymVer parseVersion(const char *version); 26 | enum VersionCompareResult compareVersion(struct SymVer *pver); 27 | 28 | #ifdef __cplusplus 29 | } 30 | #endif 31 | -------------------------------------------------------------------------------- /tests/assets/corrupt_empty_keys.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/tests/assets/corrupt_empty_keys.rdb -------------------------------------------------------------------------------- /tests/assets/corrupt_ziplist.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/tests/assets/corrupt_ziplist.rdb -------------------------------------------------------------------------------- /tests/assets/default.conf: -------------------------------------------------------------------------------- 1 | # KeyDB configuration for testing. 2 | 3 | always-show-logo yes 4 | notify-keyspace-events KEA 5 | daemonize no 6 | pidfile /var/run/keydb.pid 7 | port 6379 8 | timeout 0 9 | bind 127.0.0.1 10 | loglevel verbose 11 | logfile '' 12 | databases 16 13 | latency-monitor-threshold 1 14 | 15 | save 900 1 16 | save 300 10 17 | save 60 10000 18 | 19 | rdbcompression yes 20 | dbfilename dump.rdb 21 | dir ./ 22 | 23 | slave-serve-stale-data yes 24 | appendonly no 25 | appendfsync everysec 26 | no-appendfsync-on-rewrite no 27 | activerehashing yes 28 | 29 | -------------------------------------------------------------------------------- /tests/assets/encodings.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/tests/assets/encodings.rdb -------------------------------------------------------------------------------- /tests/assets/hash-zipmap.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/tests/assets/hash-zipmap.rdb -------------------------------------------------------------------------------- /tests/assets/minimal.conf: -------------------------------------------------------------------------------- 1 | # Minimal configuration for testing. 2 | bind 127.0.0.1 3 | always-show-logo yes 4 | daemonize no 5 | pidfile /var/run/keydb.pid 6 | loglevel verbose 7 | -------------------------------------------------------------------------------- /tests/assets/nodefaultuser.acl: -------------------------------------------------------------------------------- 1 | user alice on nopass ~* +@all 2 | user bob on nopass ~* &* +@all -------------------------------------------------------------------------------- /tests/assets/redis-module-save.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/tests/assets/redis-module-save.rdb -------------------------------------------------------------------------------- /tests/assets/redis-save.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Snapchat/KeyDB/603ebb27fb82a27fb98b0feb6749b0f7661a1c4b/tests/assets/redis-save.rdb -------------------------------------------------------------------------------- /tests/assets/user.acl: -------------------------------------------------------------------------------- 1 | user alice on allcommands allkeys >alice 2 | user bob on -@all +@set +acl ~set* >bob 3 | user default on nopass ~* +@all 4 | -------------------------------------------------------------------------------- /tests/cluster/run.tcl: -------------------------------------------------------------------------------- 1 | # Cluster test suite. Copyright (C) 2014 Salvatore Sanfilippo antirez@gmail.com 2 | # This software is released under the BSD License. See the COPYING file for 3 | # more information. 4 | 5 | cd tests/cluster 6 | source cluster.tcl 7 | source ../instances.tcl 8 | source ../../support/cluster.tcl ; # Redis Cluster client. 9 | 10 | set ::instances_count 20 ; # How many instances we use at max. 11 | set ::tlsdir "../../tls" 12 | 13 | proc main {} { 14 | parse_options 15 | spawn_instance redis $::redis_base_port $::instances_count { 16 | "bind 127.0.0.1" 17 | "cluster-enabled yes" 18 | "appendonly yes" 19 | "testmode yes" 20 | "server-threads 3" 21 | } 22 | run_tests 23 | cleanup 24 | end_tests 25 | } 26 | 27 | if {[catch main e]} { 28 | puts $::errorInfo 29 | if {$::pause_on_error} pause_on_error 30 | cleanup 31 | exit 1 32 | } 33 | -------------------------------------------------------------------------------- /tests/cluster/tests/01-faildet.tcl: -------------------------------------------------------------------------------- 1 | # Check the basic monitoring and failover capabilities. 2 | 3 | source "../tests/includes/init-tests.tcl" 4 | 5 | test "Create a 5 nodes cluster" { 6 | create_cluster 5 5 7 | } 8 | 9 | test "Cluster should start ok" { 10 | assert_cluster_state ok 11 | } 12 | 13 | test "Killing two slave nodes" { 14 | kill_instance redis 5 15 | kill_instance redis 6 16 | } 17 | 18 | test "Cluster should be still up" { 19 | assert_cluster_state ok 20 | } 21 | 22 | test "Killing one master node" { 23 | kill_instance redis 0 24 | } 25 | 26 | # Note: the only slave of instance 0 is already down so no 27 | # failover is possible, that would change the state back to ok. 28 | test "Cluster should be down now" { 29 | assert_cluster_state fail 30 | } 31 | 32 | test "Restarting master node" { 33 | restart_instance redis 0 34 | } 35 | 36 | test "Cluster should be up again" { 37 | assert_cluster_state ok 38 | } 39 | -------------------------------------------------------------------------------- /tests/cluster/tests/helpers/onlydots.tcl: -------------------------------------------------------------------------------- 1 | # Read the standard input and only shows dots in the output, filtering out 2 | # all the other characters. Designed to avoid bufferization so that when 3 | # we get the output of keydb-trib and want to show just the dots, we'll see 4 | # the dots as soon as keydb-trib will output them. 5 | 6 | fconfigure stdin -buffering none 7 | 8 | while 1 { 9 | set c [read stdin 1] 10 | if {$c eq {}} { 11 | exit 0; # EOF 12 | } elseif {$c eq {.}} { 13 | puts -nonewline . 14 | flush stdout 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/cluster/tests/includes/utils.tcl: -------------------------------------------------------------------------------- 1 | source "../../../tests/support/cli.tcl" 2 | 3 | proc config_set_all_nodes {keyword value} { 4 | foreach_redis_id id { 5 | R $id config set $keyword $value 6 | } 7 | } 8 | 9 | proc fix_cluster {addr} { 10 | set code [catch { 11 | exec ../../../src/keydb-cli {*}[rediscli_tls_config "../../../tests"] --cluster fix $addr << yes 12 | } result] 13 | if {$code != 0} { 14 | puts "keydb-cli --cluster fix returns non-zero exit code, output below:\n$result" 15 | } 16 | # Note: keydb-cli --cluster fix may return a non-zero exit code if nodes don't agree, 17 | # but we can ignore that and rely on the check below. 18 | assert_cluster_state ok 19 | wait_for_condition 100 100 { 20 | [catch {exec ../../../src/keydb-cli {*}[rediscli_tls_config "../../../tests"] --cluster check $addr} result] == 0 21 | } else { 22 | puts "keydb-cli --cluster check returns non-zero exit code, output below:\n$result" 23 | fail "Cluster could not settle with configuration" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/cluster/tmp/.gitignore: -------------------------------------------------------------------------------- 1 | redis_* 2 | sentinel_* 3 | -------------------------------------------------------------------------------- /tests/helpers/bg_complex_data.tcl: -------------------------------------------------------------------------------- 1 | source tests/support/keydb.tcl 2 | source tests/support/util.tcl 3 | 4 | set ::tlsdir "tests/tls" 5 | 6 | proc bg_complex_data {host port db ops tls} { 7 | set r [redis $host $port 0 $tls] 8 | $r client setname LOAD_HANDLER 9 | $r select $db 10 | createComplexDataset $r $ops 11 | } 12 | 13 | bg_complex_data [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3] [lindex $argv 4] 14 | -------------------------------------------------------------------------------- /tests/helpers/gen_climbing_load.tcl: -------------------------------------------------------------------------------- 1 | source tests/support/keydb.tcl 2 | 3 | 4 | set ::tlsdir "tests/tls" 5 | 6 | proc gen_climbing_load {host port db ops tls} { 7 | set start_time [clock seconds] 8 | set r [redis $host $port 1 $tls] 9 | $r client setname LOAD_HANDLER 10 | $r select $db 11 | set x 0 12 | while {$x < $ops} { 13 | incr x 14 | $r set [expr $x] [expr rand()] 15 | } 16 | } 17 | 18 | gen_climbing_load [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3] [lindex $argv 4] 19 | -------------------------------------------------------------------------------- /tests/helpers/gen_write_load.tcl: -------------------------------------------------------------------------------- 1 | source tests/support/keydb.tcl 2 | 3 | set ::tlsdir "tests/tls" 4 | 5 | proc gen_write_load {host port seconds tls} { 6 | set start_time [clock seconds] 7 | set r [redis $host $port 1 $tls] 8 | $r client setname LOAD_HANDLER 9 | $r select 9 10 | while 1 { 11 | $r set [expr rand()] [expr rand()] 12 | if {[clock seconds]-$start_time > $seconds} { 13 | exit 0 14 | } 15 | } 16 | } 17 | 18 | gen_write_load [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3] 19 | -------------------------------------------------------------------------------- /tests/integration/rdb-repl-tests: -------------------------------------------------------------------------------- 1 | diskless no replicas drop during rdb pipe 2 | diskless slow replicas drop during rdb pipe 3 | diskless timeout replicas drop during rdb pipe 4 | Kill rdb child process if its dumping RDB is not useful -------------------------------------------------------------------------------- /tests/sentinel/run.tcl: -------------------------------------------------------------------------------- 1 | # Sentinel test suite. Copyright (C) 2014 Salvatore Sanfilippo antirez@gmail.com 2 | # This software is released under the BSD License. See the COPYING file for 3 | # more information. 4 | 5 | cd tests/sentinel 6 | source ../instances.tcl 7 | 8 | set ::instances_count 5 ; # How many instances we use at max. 9 | set ::tlsdir "../../tls" 10 | 11 | proc main {} { 12 | parse_options 13 | if {$::leaked_fds_file != ""} { 14 | set ::env(LEAKED_FDS_FILE) $::leaked_fds_file 15 | } 16 | spawn_instance sentinel $::sentinel_base_port $::instances_count [list "sentinel deny-scripts-reconfig no"] "../tests/includes/sentinel.conf" 17 | spawn_instance redis $::redis_base_port $::instances_count 18 | run_tests 19 | cleanup 20 | end_tests 21 | } 22 | 23 | if {[catch main e]} { 24 | puts $::errorInfo 25 | cleanup 26 | exit 1 27 | } 28 | -------------------------------------------------------------------------------- /tests/sentinel/tests/03-runtime-reconf.tcl: -------------------------------------------------------------------------------- 1 | # Test runtime reconfiguration command SENTINEL SET. 2 | -------------------------------------------------------------------------------- /tests/sentinel/tests/04-slave-selection.tcl: -------------------------------------------------------------------------------- 1 | # Test slave selection algorithm. 2 | # 3 | # This unit should test: 4 | # 1) That when there are no suitable slaves no failover is performed. 5 | # 2) That among the available slaves, the one with better offset is picked. 6 | -------------------------------------------------------------------------------- /tests/sentinel/tests/includes/sentinel.conf: -------------------------------------------------------------------------------- 1 | # assume master is down after being unresponsive for 20s 2 | sentinel down-after-milliseconds setmaster 20000 3 | # reconfigure one slave at a time 4 | sentinel parallel-syncs setmaster 2 5 | # wait for 4m before assuming failover went wrong 6 | sentinel failover-timeout setmaster 240000 7 | # monitoring set 8 | sentinel monitor setmaster 10.0.0.1 30000 2 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/sentinel/tests/includes/start-init-tests.tcl: -------------------------------------------------------------------------------- 1 | test "(start-init) Flush config and compare rewrite config file lines" { 2 | foreach_sentinel_id id { 3 | assert_match "OK" [S $id SENTINEL FLUSHCONFIG] 4 | set file1 ../tests/includes/sentinel.conf 5 | set file2 [file join "sentinel_${id}" "sentinel.conf"] 6 | set fh1 [open $file1 r] 7 | set fh2 [open $file2 r] 8 | while {[gets $fh1 line1]} { 9 | if {[gets $fh2 line2]} { 10 | assert [string equal $line1 $line2] 11 | } else { 12 | fail "sentinel config file rewrite sequence changed" 13 | } 14 | } 15 | close $fh1 16 | close $fh2 17 | } 18 | } -------------------------------------------------------------------------------- /tests/sentinel/tmp/.gitignore: -------------------------------------------------------------------------------- 1 | redis_* 2 | sentinel_* 3 | -------------------------------------------------------------------------------- /tests/support/benchmark.tcl: -------------------------------------------------------------------------------- 1 | proc redisbenchmark_tls_config {testsdir} { 2 | set tlsdir [file join $testsdir tls] 3 | set cert [file join $tlsdir client.crt] 4 | set key [file join $tlsdir client.key] 5 | set cacert [file join $tlsdir ca.crt] 6 | 7 | if {$::tls} { 8 | return [list --tls --cert $cert --key $key --cacert $cacert] 9 | } else { 10 | return {} 11 | } 12 | } 13 | 14 | proc redisbenchmark {host port {opts {}}} { 15 | set cmd [list src/keydb-benchmark -h $host -p $port] 16 | lappend cmd {*}[redisbenchmark_tls_config "tests"] 17 | lappend cmd {*}$opts 18 | return $cmd 19 | } 20 | -------------------------------------------------------------------------------- /tests/support/cli.tcl: -------------------------------------------------------------------------------- 1 | proc rediscli_tls_config {testsdir} { 2 | set tlsdir [file join $testsdir tls] 3 | set cert [file join $tlsdir client.crt] 4 | set key [file join $tlsdir client.key] 5 | set cacert [file join $tlsdir ca.crt] 6 | 7 | if {$::tls} { 8 | return [list --tls --cert $cert --key $key --cacert $cacert] 9 | } else { 10 | return {} 11 | } 12 | } 13 | 14 | proc rediscli {host port {opts {}}} { 15 | set cmd [list src/keydb-cli --no-motd -h $host -p $port] 16 | lappend cmd {*}[rediscli_tls_config "tests"] 17 | lappend cmd {*}$opts 18 | return $cmd 19 | } 20 | -------------------------------------------------------------------------------- /tests/support/tmpfile.tcl: -------------------------------------------------------------------------------- 1 | set ::tmpcounter 0 2 | set ::tmproot "./tests/tmp" 3 | file mkdir $::tmproot 4 | 5 | # returns a dirname unique to this process to write to 6 | proc tmpdir {basename} { 7 | set dir [file join $::tmproot $basename.[pid].[incr ::tmpcounter]] 8 | file mkdir $dir 9 | set _ $dir 10 | } 11 | 12 | # return a filename unique to this process to write to 13 | proc tmpfile {basename} { 14 | file join $::tmproot $basename.[pid].[incr ::tmpcounter] 15 | } 16 | -------------------------------------------------------------------------------- /tests/tmp/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /tests/unit/limits.tcl: -------------------------------------------------------------------------------- 1 | start_server {tags {"limits network"} overrides {maxclients 10}} { 2 | if {$::tls} { 3 | set expected_code "*I/O error*" 4 | } else { 5 | set expected_code "*ERR max*reached*" 6 | } 7 | test {Check if maxclients works refusing connections} { 8 | set c 0 9 | catch { 10 | while {$c < 50} { 11 | incr c 12 | set rd [redis_deferring_client] 13 | $rd ping 14 | $rd read 15 | after 100 16 | } 17 | } e 18 | assert {$c > 8 && $c <= 10} 19 | set e 20 | } $expected_code 21 | } 22 | -------------------------------------------------------------------------------- /tests/unit/moduleapi/basics.tcl: -------------------------------------------------------------------------------- 1 | set testmodule [file normalize tests/modules/basics.so] 2 | 3 | 4 | start_server {tags {"modules"}} { 5 | r module load $testmodule 6 | 7 | test {test module api basics} { 8 | r test.basics 9 | } {ALL TESTS PASSED} 10 | 11 | r module unload test 12 | } 13 | -------------------------------------------------------------------------------- /tests/unit/moduleapi/fork.tcl: -------------------------------------------------------------------------------- 1 | set testmodule [file normalize tests/modules/fork.so] 2 | 3 | proc count_log_message {pattern} { 4 | set result [exec grep -c $pattern < [srv 0 stdout]] 5 | } 6 | 7 | start_server {tags {"modules"}} { 8 | r module load $testmodule 9 | 10 | test {Module fork} { 11 | # the argument to fork.create is the exitcode on termination 12 | r fork.create 3 13 | wait_for_condition 20 100 { 14 | [r fork.exitcode] != -1 15 | } else { 16 | fail "fork didn't terminate" 17 | } 18 | r fork.exitcode 19 | } {3} 20 | 21 | test {Module fork kill} { 22 | r fork.create 3 23 | after 250 24 | r fork.kill 25 | 26 | assert {[count_log_message "fork child started"] eq "2"} 27 | assert {[count_log_message "Received SIGUSR1 in child"] eq "1"} 28 | assert {[count_log_message "fork child exiting"] eq "1"} 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /tests/unit/moduleapi/load.tcl: -------------------------------------------------------------------------------- 1 | set testmodule [file normalize tests/modules/load.so] 2 | 3 | if {$::flash_enabled} { 4 | start_server [list tags [list "modules"] overrides [list storage-provider {flash ./rocks.db.master.load.test} databases 256 loadmodule $testmodule]] { 5 | test "Module is notified of keys loaded from flash" { 6 | r flushall 7 | r set foo bar 8 | r set bar foo 9 | r set foobar barfoo 10 | assert_equal [r load.count] 0 11 | r debug reload 12 | assert_equal [r load.count] 3 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /tests/unit/moduleapi/test_lazyfree.tcl: -------------------------------------------------------------------------------- 1 | set testmodule [file normalize tests/modules/test_lazyfree.so] 2 | 3 | start_server {tags {"modules"}} { 4 | r module load $testmodule 5 | 6 | test "modules allocated memory can be reclaimed in the background" { 7 | set orig_mem [s used_memory] 8 | set rd [redis_deferring_client] 9 | 10 | # LAZYFREE_THRESHOLD is 64 11 | for {set i 0} {$i < 10000} {incr i} { 12 | $rd lazyfreelink.insert lazykey $i 13 | } 14 | 15 | for {set j 0} {$j < 10000} {incr j} { 16 | $rd read 17 | } 18 | 19 | assert {[r lazyfreelink.len lazykey] == 10000} 20 | 21 | set peak_mem [s used_memory] 22 | assert {[r unlink lazykey] == 1} 23 | assert {$peak_mem > $orig_mem+10000} 24 | wait_for_condition 50 100 { 25 | [s used_memory] < $peak_mem && 26 | [s used_memory] < $orig_mem*2 && 27 | [string match {*lazyfreed_objects:1*} [r info Memory]] 28 | } else { 29 | fail "Module memory is not reclaimed by UNLINK" 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /tests/unit/moduleapi/zset.tcl: -------------------------------------------------------------------------------- 1 | set testmodule [file normalize tests/modules/zset.so] 2 | 3 | start_server {tags {"modules"}} { 4 | r module load $testmodule 5 | 6 | test {Module zset rem} { 7 | r del k 8 | r zadd k 100 hello 200 world 9 | assert_equal 1 [r zset.rem k hello] 10 | assert_equal 0 [r zset.rem k hello] 11 | assert_equal 1 [r exists k] 12 | # Check that removing the last element deletes the key 13 | assert_equal 1 [r zset.rem k world] 14 | assert_equal 0 [r exists k] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/unit/printver.tcl: -------------------------------------------------------------------------------- 1 | start_server {} { 2 | set i [r info] 3 | regexp {redis_version:(.*?)\r\n} $i - version 4 | regexp {redis_git_sha1:(.*?)\r\n} $i - sha1 5 | puts "Testing Redis version $version ($sha1)" 6 | } 7 | -------------------------------------------------------------------------------- /tests/unit/replication.tcl: -------------------------------------------------------------------------------- 1 | 2 | start_server {tags {"repl"}} { 3 | test "incr of expired key on replica doesn't cause a crash" { 4 | r debug force-master yes 5 | r set testkey 1 6 | r pexpire testkey 1 7 | after 500 8 | r incr testkey 9 | r incr testkey 10 | r debug force-master no 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tests/unit/rreplay.tcl: -------------------------------------------------------------------------------- 1 | start_server {tags {"rreplay"} overrides {active-replica yes}} { 2 | 3 | test {RREPLAY use current db} { 4 | r debug force-master yes 5 | r select 4 6 | r set dbnum invalid 7 | r rreplay "f4d5b2b5-4f07-4ee5-a4f2-5dc98507dfce" "*3\r\n\$3\r\nSET\r\n\$5\r\ndbnum\r\n\$4\r\nfour\r\n" 8 | r get dbnum 9 | } {four} 10 | reconnect 11 | 12 | test {RREPLAY db different} { 13 | r debug force-master yes 14 | r select 4 15 | r set testkey four 16 | r rreplay "f4d5b2b5-4f07-4ee5-a4f2-5dc98507dfce" "*3\r\n\$3\r\nSET\r\n\$7\r\ntestkey\r\n\$4\r\nbebe\r\n" 2 17 | r select 4 18 | assert { [r get testkey] == "four" } 19 | r select 2 20 | r get testkey 21 | } {bebe} 22 | 23 | reconnect 24 | 25 | test {RREPLAY not master} { 26 | assert_error "*master*" {r rreplay "f4d5b2b5-4f07-4ee5-a4f2-5dc98507dfce" "*3\r\n\$3\r\nSET\r\n\$7\r\ntestkey\r\n\$4\r\nbebe\r\n" 2} 27 | } 28 | 29 | r flushdb 30 | } 31 | -------------------------------------------------------------------------------- /tests/unit/type/list-common.tcl: -------------------------------------------------------------------------------- 1 | # We need a value larger than list-max-ziplist-value to make sure 2 | # the list has the right encoding when it is swapped in again. 3 | array set largevalue {} 4 | set largevalue(ziplist) "hello" 5 | set largevalue(linkedlist) [string repeat "hello" 4] 6 | -------------------------------------------------------------------------------- /utils/build-static-symbols.tcl: -------------------------------------------------------------------------------- 1 | # Build a symbol table for static symbols of redis.c 2 | # Useful to get stack traces on segfault without a debugger. See redis.c 3 | # for more information. 4 | # 5 | # Copyright(C) 2009 Salvatore Sanfilippo, under the BSD license. 6 | 7 | set fd [open redis.c] 8 | set symlist {} 9 | while {[gets $fd line] != -1} { 10 | if {[regexp {^static +[A-z0-9]+[ *]+([A-z0-9]*)\(} $line - sym]} { 11 | lappend symlist $sym 12 | } 13 | } 14 | set symlist [lsort -unique $symlist] 15 | puts "static struct redisFunctionSym symsTable\[\] = {" 16 | foreach sym $symlist { 17 | puts "{\"$sym\",(unsigned long)$sym}," 18 | } 19 | puts "{NULL,0}" 20 | puts "};" 21 | 22 | close $fd 23 | -------------------------------------------------------------------------------- /utils/create-cluster/.gitignore: -------------------------------------------------------------------------------- 1 | config.sh 2 | *.rdb 3 | *.aof 4 | *.conf 5 | *.log 6 | -------------------------------------------------------------------------------- /utils/graphs/commits-over-time/README.md: -------------------------------------------------------------------------------- 1 | This Tcl script is what I used in order to generate the graph you 2 | can find at http://antirez.com/news/98. It's really quick & dirty, more 3 | a trow away program than anything else, but probably could be reused or 4 | modified in the future in order to visualize other similar data or an 5 | updated version of the same data. 6 | 7 | The usage is trivial: 8 | 9 | ./genhtml.tcl > output.html 10 | 11 | The generated HTML is quite broken but good enough to grab a screenshot 12 | from the browser. Feel free to improve it if you got time / interest. 13 | 14 | Note that the code filtering the tags, and the hardcoded branch name, does 15 | not make the script, as it is, able to analyze a different repository. 16 | However the changes needed are trivial. 17 | -------------------------------------------------------------------------------- /utils/hashtable/README: -------------------------------------------------------------------------------- 1 | Hash table implementation related utilities. 2 | 3 | rehashing.c 4 | --- 5 | 6 | Visually show buckets in the two hash tables between rehashings. Also stress 7 | test getRandomKeys() implementation, that may actually disappear from 8 | Redis soon, However the visualization code is reusable in new bugs 9 | investigation. 10 | 11 | Compile with: 12 | 13 | cc -I ../../src/ rehashing.c ../../src/zmalloc.c ../../src/dict.c -o rehashing_test 14 | -------------------------------------------------------------------------------- /utils/hyperloglog/.gitignore: -------------------------------------------------------------------------------- 1 | *.txt 2 | -------------------------------------------------------------------------------- /utils/hyperloglog/hll-err.rb: -------------------------------------------------------------------------------- 1 | # hll-err.rb - Copyright (C) 2014 Salvatore Sanfilippo 2 | # BSD license, See the COPYING file for more information. 3 | # 4 | # Check error of HyperLogLog Redis implementation for different set sizes. 5 | 6 | require 'rubygems' 7 | require 'redis' 8 | require 'digest/sha1' 9 | 10 | r = Redis.new 11 | r.del('hll') 12 | i = 0 13 | while true do 14 | 100.times { 15 | elements = [] 16 | 1000.times { 17 | ele = Digest::SHA1.hexdigest(i.to_s) 18 | elements << ele 19 | i += 1 20 | } 21 | r.pfadd('hll',elements) 22 | } 23 | approx = r.pfcount('hll') 24 | abs_err = (approx-i).abs 25 | rel_err = 100.to_f*abs_err/i 26 | puts "#{i} vs #{approx}: #{rel_err}%" 27 | end 28 | -------------------------------------------------------------------------------- /utils/lru/README: -------------------------------------------------------------------------------- 1 | The test-lru.rb program can be used in order to check the behavior of the 2 | Redis approximated LRU algorithm against the theoretical output of true 3 | LRU algorithm. 4 | 5 | In order to use the program you need to recompile Redis setting the define 6 | REDIS_LRU_CLOCK_RESOLUTION to 1, by editing the file server.h. 7 | This allows to execute the program in a fast way since the 1 ms resolution 8 | is enough for all the objects to have a different enough time stamp during 9 | the test. 10 | 11 | The program is executed like this: 12 | 13 | ruby test-lru.rb /tmp/lru.html 14 | 15 | You can optionally specify a number of times to run, so that the program 16 | will output averages of different runs, by adding an additional argument. 17 | For instance in order to run the test 10 times use: 18 | 19 | ruby test-lru.rb /tmp/lru.html 10 20 | -------------------------------------------------------------------------------- /utils/releasetools/01_create_tarball.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | if [ $# != "1" ] 3 | then 4 | echo "Usage: ./utils/releasetools/01_create_tarball.sh " 5 | exit 1 6 | fi 7 | 8 | TAG=$1 9 | TARNAME="redis-${TAG}.tar" 10 | echo "Generating /tmp/${TARNAME}" 11 | git archive $TAG --prefix redis-${TAG}/ > /tmp/$TARNAME || exit 1 12 | echo "Gizipping the archive" 13 | rm -f /tmp/$TARNAME.gz 14 | gzip -9 /tmp/$TARNAME 15 | -------------------------------------------------------------------------------- /utils/releasetools/02_upload_tarball.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ $# != "1" ] 3 | then 4 | echo "Usage: ./utils/releasetools/02_upload_tarball.sh " 5 | exit 1 6 | fi 7 | 8 | echo "Uploading..." 9 | scp /tmp/redis-${1}.tar.gz ubuntu@host.redis.io:/var/www/download/releases/ 10 | echo "Updating web site... " 11 | echo "Please check the github action tests for the release." 12 | echo "Press any key if it is a stable release, or Ctrl+C to abort" 13 | read x 14 | ssh ubuntu@host.redis.io "cd /var/www/download; 15 | rm -rf redis-${1}.tar.gz; 16 | wget http://download.redis.io/releases/redis-${1}.tar.gz; 17 | tar xvzf redis-${1}.tar.gz; 18 | rm -rf redis-stable; 19 | mv redis-${1} redis-stable; 20 | tar cvzf redis-stable.tar.gz redis-stable; 21 | rm -rf redis-${1}.tar.gz; 22 | shasum -a 256 redis-stable.tar.gz > redis-stable.tar.gz.SHA256SUM; 23 | " 24 | -------------------------------------------------------------------------------- /utils/releasetools/03_test_release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | if [ $# != "1" ] 4 | then 5 | echo "Usage: ./utils/releasetools/03_test_release.sh " 6 | exit 1 7 | fi 8 | 9 | TAG=$1 10 | TARNAME="redis-${TAG}.tar.gz" 11 | DOWNLOADURL="http://download.redis.io/releases/${TARNAME}" 12 | 13 | echo "Doing sanity test on the actual tarball" 14 | 15 | cd /tmp 16 | rm -rf test_release_tmp_dir 17 | mkdir test_release_tmp_dir 18 | cd test_release_tmp_dir 19 | rm -f $TARNAME 20 | rm -rf redis-${TAG} 21 | wget $DOWNLOADURL 22 | tar xvzf $TARNAME 23 | cd redis-${TAG} 24 | make 25 | ./runtest 26 | ./runtest-sentinel 27 | ./runtest-cluster 28 | ./runtest-moduleapi 29 | -------------------------------------------------------------------------------- /utils/releasetools/04_release_hash.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ $# != "1" ] 3 | then 4 | echo "Usage: ./utils/releasetools/04_release_hash.sh " 5 | exit 1 6 | fi 7 | 8 | SHA=$(curl -s http://download.redis.io/releases/redis-${1}.tar.gz | shasum -a 256 | cut -f 1 -d' ') 9 | ENTRY="hash redis-${1}.tar.gz sha256 $SHA http://download.redis.io/releases/redis-${1}.tar.gz" 10 | echo $ENTRY >> ../redis-hashes/README 11 | echo "Press any key to commit, Ctrl-C to abort)." 12 | read yes 13 | (cd ../redis-hashes; git commit -a -m "${1} hash."; git push) 14 | -------------------------------------------------------------------------------- /utils/srandmember/README.md: -------------------------------------------------------------------------------- 1 | The utilities in this directory plot the distribution of SRANDMEMBER to 2 | evaluate how fair it is. 3 | 4 | See http://theshfl.com/redis_sets for more information on the topic that lead 5 | to such investigation fix. 6 | 7 | showdist.rb -- shows the distribution of the frequency elements are returned. 8 | The x axis is the number of times elements were returned, and 9 | the y axis is how many elements were returned with such 10 | frequency. 11 | 12 | showfreq.rb -- shows the frequency each element was returned. 13 | The x axis is the element number. 14 | The y axis is the times it was returned. 15 | -------------------------------------------------------------------------------- /utils/srandmember/showdist.rb: -------------------------------------------------------------------------------- 1 | require 'redis' 2 | 3 | r = Redis.new 4 | r.select(9) 5 | r.del("myset"); 6 | r.sadd("myset",(0..999).to_a) 7 | freq = {} 8 | 100.times { 9 | res = r.pipelined { 10 | 1000.times { 11 | r.srandmember("myset") 12 | } 13 | } 14 | res.each{|ele| 15 | freq[ele] = 0 if freq[ele] == nil 16 | freq[ele] += 1 17 | } 18 | } 19 | 20 | # Convert into frequency distribution 21 | dist = {} 22 | freq.each{|item,count| 23 | dist[count] = 0 if dist[count] == nil 24 | dist[count] += 1 25 | } 26 | 27 | min = dist.keys.min 28 | max = dist.keys.max 29 | (min..max).each{|x| 30 | count = dist[x] 31 | count = 0 if count == nil 32 | puts "#{x} -> #{"*"*count}" 33 | } 34 | -------------------------------------------------------------------------------- /utils/srandmember/showfreq.rb: -------------------------------------------------------------------------------- 1 | require 'redis' 2 | 3 | r = Redis.new 4 | r.select(9) 5 | r.del("myset"); 6 | r.sadd("myset",(0..999).to_a) 7 | freq = {} 8 | 500.times { 9 | res = r.pipelined { 10 | 1000.times { 11 | r.srandmember("myset") 12 | } 13 | } 14 | res.each{|ele| 15 | freq[ele] = 0 if freq[ele] == nil 16 | freq[ele] += 1 17 | } 18 | } 19 | 20 | # Print the frequency each element was yeld to process it with gnuplot 21 | freq.each{|item,count| 22 | puts "#{item} #{count}" 23 | } 24 | -------------------------------------------------------------------------------- /utils/whatisdoing.sh: -------------------------------------------------------------------------------- 1 | # This script is from http://poormansprofiler.org/ 2 | # 3 | # NOTE: Instead of using this script, you should use the Redis 4 | # Software Watchdog, which provides a similar functionality but in 5 | # a more reliable / easy to use way. 6 | # 7 | # Check https://redis.io/topics/latency for more information. 8 | 9 | #!/bin/bash 10 | nsamples=1 11 | sleeptime=0 12 | pid=$(ps auxww | grep '[r]edis-server' | awk '{print $2}') 13 | 14 | for x in $(seq 1 $nsamples) 15 | do 16 | gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid 17 | sleep $sleeptime 18 | done | \ 19 | awk ' 20 | BEGIN { s = ""; } 21 | /Thread/ { print s; s = ""; } 22 | /^\#/ { if (s != "" ) { s = s "," $4} else { s = $4 } } 23 | END { print s }' | \ 24 | sort | uniq -c | sort -r -n -k 1,1 25 | --------------------------------------------------------------------------------