antirez / antirez/neural-redis

Redis bug report

Open
#6 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
2.2k
Forks
100
PR merge metrics
No merged PRs in 30d

Description

I created a docker with the redis unstable branch and neural redis installed in it. I ran it on an AWS t2.micro instance, and tried to create a neural network just to play with. The docker crashed with the below bug report. The machine is just too small to work with it?

> === REDIS BUG REPORT START: Cut & paste starting from here ===
> 1:M 14 Oct 15:05:57.557 # Redis 999.999.999 crashed by signal: 4
> 1:M 14 Oct 15:05:57.557 # Crashed running the instuction at: 0x7fd4aaff730c
> 1:M 14 Oct 15:05:57.557 # Failed assertion: (:0)
>
> ------ STACK TRACE ------
> EIP:
> /usr/src/neural-redis/neuralredis.so(AnnSetDeltas+0x1c)[0x7fd4aaff730c]
>
> Backtrace:
> redis-server *:6379(logStackTrace+0x29)[0x463da9]
> redis-server *:6379(sigsegvHandler+0xa6)[0x464446]
> /lib/x86_64-linux-gnu/libpthread.so.0(+0xf8d0)[0x7fd4ad29a8d0]
> /usr/src/neural-redis/neuralredis.so(AnnSetDeltas+0x1c)[0x7fd4aaff730c]
>
> ------ INFO OUTPUT ------
> # Server
>
> redis_version:999.999.999
> redis_git_sha1:f6332120
> redis_git_dirty:1
> redis_build_id:897972011416e494
> redis_mode:standalone
> os:Linux 3.13.0-92-generic x86_64
> arch_bits:64
> multiplexing_api:epoll
> gcc_version:4.9.2
> process_id:1
> run_id:71b1bc746de2285bdf48e53bd19a6c1ccf5fd7e2
> tcp_port:6379
> uptime_in_seconds:602
> uptime_in_days:0
> hz:10
> lru_clock:62549
> executable:/data/redis-server
> config_file:
> # Clients
>
> connected_clients:6
> client_longest_output_list:0
> client_biggest_input_buf:0
> blocked_clients:0
> # Memory
>
> used_memory:934192
> used_memory_human:912.30K
> used_memory_rss:4571136
> used_memory_rss_human:4.36M
> used_memory_peak:994496
> used_memory_peak_human:971.19K
> used_memory_peak_perc:93.94%
> used_memory_overhead:798424
> used_memory_startup:765592
> used_memory_dataset:135768
> used_memory_dataset_perc:80.53%
> total_system_memory:1040695296
> total_system_memory_human:992.48M
> used_memory_lua:37888
> used_memory_lua_human:37.00K
> maxmemory:0
> maxmemory_human:0B
> maxmemory_policy:noeviction
> mem_fragmentation_ratio:4.89
> mem_allocator:jemalloc-4.0.3
> lazyfree_pending_objects:0
> # Persistence
>
> loading:0
> rdb_changes_since_last_save:204
> rdb_bgsave_in_progress:0
> rdb_last_save_time:1476456955
> rdb_last_bgsave_status:ok
> rdb_last_bgsave_time_sec:-1
> rdb_current_bgsave_time_sec:-1
> rdb_last_cow_size:0
> aof_enabled:0
> aof_rewrite_in_progress:0
> aof_rewrite_scheduled:0
> aof_last_rewrite_time_sec:-1
> aof_current_rewrite_time_sec:-1
> aof_last_bgrewrite_status:ok
> aof_last_write_status:ok
> aof_last_cow_size:0
> # Stats
>
> total_connections_received:9
> total_commands_processed:811
> instantaneous_ops_per_sec:7
> total_net_input_bytes:31366
> total_net_output_bytes:1999708
> instantaneous_input_kbps:0.25
> instantaneous_output_kbps:0.06
> rejected_connections:0
> sync_full:0
> sync_partial_ok:0
> sync_partial_err:0
> expired_keys:0
> evicted_keys:0
> keyspace_hits:3
> keyspace_misses:195
> pubsub_channels:0
> pubsub_patterns:1
> latest_fork_usec:0
> migrate_cached_sockets:0
> # Replication
>
> role:master
> connected_slaves:0
> master_repl_offset:0
> repl_backlog_active:0
> repl_backlog_size:1048576
> repl_backlog_first_byte_offset:0
> repl_backlog_histlen:0
> # CPU
>
> used_cpu_sys:0.25
> used_cpu_user:0.31
> used_cpu_sys_children:0.00
> used_cpu_user_children:0.00
> # Commandstats
>
> cmdstat_del:calls=1,usec=581,usec_per_call=581.00
> cmdstat_zadd:calls=3,usec=42,usec_per_call=14.00
> cmdstat_multi:calls=198,usec=276,usec_per_call=1.39
> cmdstat_exec:calls=594,usec=4179,usec_per_call=7.04
> cmdstat_psubscribe:calls=2,usec=7,usec_per_call=3.50
> cmdstat_publish:calls=11,usec=26,usec_per_call=2.36
> cmdstat_command:calls=2,usec=633,usec_per_call=316.50
> # Cluster
>
> cluster_enabled:0
> # Keyspace
>
> hash_init_value: 1476991743
>
> ------ CLIENT LIST OUTPUT ------
> id=4 addr=127.0.0.1:45054 fd=7 name= age=258 idle=97 flags=N db=0 sub=0 psub=1 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=psubscribe
> id=6 addr=172.17.0.3:48818 fd=6 name= age=99 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=exec
> id=7 addr=172.17.0.3:48820 fd=8 name= age=99 idle=97 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=publish
> id=8 addr=172.17.0.3:48821 fd=9 name= age=99 idle=1 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=exec
> id=9 addr=172.17.0.3:48822 fd=10 name= age=99 idle=99 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=publish
> id=10 addr=172.17.0.3:48827 fd=11 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=nr.create
>
> ------ CURRENT CLIENT INFO ------
> id=10 addr=172.17.0.3:48827 fd=11 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=nr.create
> argv[0]: 'NR.CREATE'
> argv[1]: 'filters_nn'
> argv[2]: 'CLASSIFIER'
> argv[3]: '24'
> argv[4]: '20'
> argv[5]: '->'
> argv[6]: '14'
> argv[7]: 'DATASET'
> argv[8]: '1000'
> argv[9]: 'TEST'
> argv[10]: '500'
> argv[11]: 'NORMALIZE'
>
> ------ REGISTERS ------
> 1:M 14 Oct 15:05:57.576 #
> RAX:0000000000000040 RBX:0000000000000003
> RCX:00000000017ea530 RDX:0000000000000003
> RDI:00000000017e8500 RSI:00000000017ea4b0
> RBP:00000000017e8500 RSP:00007ffde85eabc0
> R8 :00007fd4ad2850e8 R9 :00007fd4ad285120
> R10:00007ffde85eabe0 R11:00000000017ecf00
> R12:0000000000000003 R13:00007ffde85eacc0
> R14:00000000000001f4 R15:00007fd4ab1fbbd0
> RIP:00007fd4aaff730c EFL:0000000000010202
> CSGSFS:0000000000000033
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabcf) -> 00007fd4ab1fbaf8
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabce) -> 000000000000000c
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabcd) -> 00007fd4ad005a10
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabcc) -> 00007fd4aca23080
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabcb) -> 00007ffde85eacc0
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabca) -> 000003e8e85eada0
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc9) -> 00007fd4aaff17cf
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc8) -> 0000000000000003
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc7) -> 00007fd4acb30000
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc6) -> 00007ffde85eac50
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc5) -> 000000000000000c
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc4) -> 0000000000000088
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc3) -> 00007fd4aaff7738
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc2) -> 00007fd4ab1fbbd0
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc1) -> 00000000000001f4
> 1:M 14 Oct 15:05:57.577 # (00007ffde85eabc0) -> 00007ffde85eacc0
>
> ------ FAST MEMORY TEST ------
> 1:M 14 Oct 15:05:57.577 # Bio thread for job type #0 terminated
> 1:M 14 Oct 15:05:57.578 # Bio thread for job type #1 terminated
> 1:M 14 Oct 15:05:57.578 # Bio thread for job type #2 terminated
> **\* Preparing to test memory region 744000 (94208 bytes)
> **\* Preparing to test memory region 17de000 (135168 bytes)
> **\* Preparing to test memory region 7fd4ab1fc000 (4096 bytes)
> **\* Preparing to test memory region 7fd4ab1fe000 (8388608 bytes)
> **\* Preparing to test memory region 7fd4ab9ff000 (8388608 bytes)
> **\* Preparing to test memory region 7fd4ac200000 (12582912 bytes)
> **\* Preparing to test memory region 7fd4ad287000 (16384 bytes)
> **\* Preparing to test memory region 7fd4ad4a4000 (16384 bytes)
> **\* Preparing to test memory region 7fd4adbc4000 (16384 bytes)
> **\* Preparing to test memory region 7fd4adbc9000 (16384 bytes)
> **\* Preparing to test memory region 7fd4adbcf000 (4096 bytes)
> .O.O.O.O.O.O.O.O.O.O.O
> Fast memory test PASSED, however your memory can still be broken. Please run a memory test for several hours if possible.
>
> ------ DUMPING CODE AROUND EIP ------
> Symbol: AnnSetDeltas (base: 0x7fd4aaff72f0)
> Module: /usr/src/neural-redis/neuralredis.so (base 0x7fd4aafec000)
> $ xxd -r -p /tmp/dump.hex /tmp/dump.bin
> ## $ objdump --adjust-vma=0x7fd4aaff72f0 -D -b binary -m i386:x86-64 /tmp/dump.bin
>
> 1:M 14 Oct 15:05:57.690 # dump of function (hexdump of 156 bytes):
> 8b470483f8010f8eb40100004c8d5424084883e4e083e80248c1e006c4e27d18c841ff72f8554889e54154415253488b5720488d7a784c8d8c02b800000066908b57880faf57c885d20f8e57010000488b0f4889c883e01f48c1e80248f7d883e00739d00f47c283fa0a0f8f5801000089d083f801c5fa11010f846101000083f802c5fa1141040f84d301000083f803c5fa1141080f84b501000083
>
> === REDIS BUG REPORT END. Make sure to include from START to END. ===

Dockerfile largely copied from [the standard redis 3.2 dockerfile](https://github.com/docker-library/redis/blob/a38166e6f3430512ba8ce2cb5ebd889ee17b9dc4/3.2/Dockerfile):

```
FROM debian:jessie

# TAKEN FROM:
# https://github.com/docker-library/redis/blob/a38166e6f3430512ba8ce2cb5ebd889ee17b9dc4/3.2/Dockerfile
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r redis && useradd -r -g redis redis

RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
wget \
&& rm -rf /var/lib/apt/lists/*

# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true

# Common dependencies
RUN apt-get update && apt-get install -y \
gcc \
libc6-dev \
make \
git \
&& rm -rf /var/lib/apt/lists/*

# Github redis unstable install
RUN mkdir -p /usr/src \
&& git clone https://github.com/antirez/redis.git /usr/src/redis \
\
# Disable Redis protected mode [1] as it is unnecessary in context
# of Docker. Ports are not automatically exposed when running inside
# Docker, but rather explicitely by specifying -p / -P.
# [1] https://github.com/antirez/redis/commit/edd4d555df57dc84265fdfb4ef59a4678832f6da
&& grep -q '^#define CONFIG_DEFAULT_PROTECTED_MODE 1$' /usr/src/redis/src/server.h \
&& sed -ri 's!^(#define CONFIG_DEFAULT_PROTECTED_MODE) 1$!\1 0!' /usr/src/redis/src/server.h \
&& grep -q '^#define CONFIG_DEFAULT_PROTECTED_MODE 0$' /usr/src/redis/src/server.h \
# for future reference, we modify this directly in the source instead of just supplying a default configuration flag because apparently "if you specify any argument to redis-server, [it assumes] you are going to specify everything"
# see also https://github.com/docker-library/redis/issues/4#issuecomment-50780840
# (more exactly, this makes sure the default behavior of "save on SIGTERM" stays functional by default)
\
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
\
&& rm -r /usr/src/redis

# Neural redis install
RUN mkdir -p /usr/src \
&& git clone https://github.com/antirez/neural-redis.git /usr/src/neural-redis \
&& make -C /usr/src/neural-redis avx

# Remove common dependencies
RUN apt-get purge -y --auto-remove \
gcc \
libc6-dev \
make \
git

RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data

COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 6379
CMD [ "redis-server", "--loadmodule", "/usr/src/neural-redis/neuralredis.so" ]
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.