Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

aeWait bug that may crash slave when fd exceeds 1024 #267

Closed
jokea opened this issue Dec 22, 2011 · 4 comments
Closed

aeWait bug that may crash slave when fd exceeds 1024 #267

jokea opened this issue Dec 22, 2011 · 4 comments
Milestone

Comments

@jokea
Copy link
Contributor

jokea commented Dec 22, 2011

Let's modify redis.c to demonstrate this problem:
....
int main(int argc, char **argv) {
for (int i=1020; i<1030; i++)
aeWait(i, AE_READABLE, 10);
....
}

Run the program with strace:

strace -T ./redis-server

....
select(1021, [1020], [], [], {0, 10000}) = 0 (Timeout) < 0.010108>
select(1022, [1021], [], [], {0, 10000}) = 0 (Timeout) < 0.010105>
select(1023, [1022], [], [], {0, 10000}) = 0 (Timeout) < 0.010204>
select(1024, [1023], [], [], {0, 10000}) = 0 (Timeout) < 0.010111>
select(1025, [1024], [], [], {1, 10000}) = 0 (Timeout) < 1.011132>
select(1026, [1025], [], [], {2, 10000}) = 0 (Timeout) < 2.012141>
select(1027, [1026], [], [], {4, 10000}) = 0 (Timeout) < 4.012903>
select(1028, [1027], [], [], {8, 10000}) = 0 (Timeout) < 8.014138>
select(1029, [1028], [], [], {16, 10000}) = 0 (Timeout) < 16.011984>
select(1030, [1029], [], [], {32, 10000}) = 0 (Timeout) < 32.014721>
...

See, the timeval parameter passed to select gets changed after fd exceeds 1024.
in aeWait(), we have:
...
365 tv.tv_sec = milliseconds/1000;
366 tv.tv_usec = (milliseconds%1000)*1000;
367 FD_ZERO(&rfds);
368 FD_ZERO(&wfds);
369 FD_ZERO(&efds);
370
371 if (mask & AE_READABLE) FD_SET(fd,&rfds);
372 if (mask & AE_WRITABLE) FD_SET(fd,&wfds);
373 if ((retval = select(fd+1, &rfds, &wfds, &efds, &tv)) > 0) {
...

Debugging using gdb shows that the FD_SET macro modified tv accidentally in line 371 and 372.
If we move line 365 and 366 after line 372, then it works as expected:

strace -T ./redis-server

...
select(1021, [1020], [], [], {0, 10000}) = 0 (Timeout) < 0.010135>
select(1022, [1021], [], [], {0, 10000}) = 0 (Timeout) < 0.010162>
select(1023, [1022], [], [], {0, 10000}) = 0 (Timeout) < 0.010146>
select(1024, [1023], [], [], {0, 10000}) = 0 (Timeout) < 0.010123>
select(1025, [], [], [], {0, 10000}) = 0 (Timeout) < 0.010143>
select(1026, [], [], [], {0, 10000}) = 0 (Timeout) < 0.010137>
select(1027, [], [], [], {0, 10000}) = 0 (Timeout) < 0.010388>
select(1028, [], [], [], {0, 10000}) = 0 (Timeout) < 0.010151>
select(1029, [], [], [], {0, 10000}) = 0 (Timeout) < 0.010206>
select(1030, [], [], [], {0, 10000}) = 0 (Timeout) < 0.010160>
...

However, this is not the right solution to this problem, and I think using
poll(2) will be a better choice.

@jokea
Copy link
Contributor Author

jokea commented Dec 22, 2011

More interesting result:
if we start from 1087:
for (i=1087; k<2000; i++) {
aeWait(i, AE_READABLE, 10);
...
}
strace shows this:
select(1088, [1087], [], [], {9223372036854775808, 10000}) = -1 EINVAL (Invalid argument) < 0.000006>
select(1089, [1088], [], [], {0, 10001}) = 0 (Timeout) < 0.010180>
select(1090, [1089], [], [], {0, 10002}) = 0 (Timeout) < 0.010110>
select(1091, [1090], [], [], {0, 10004}) = 0 (Timeout) < 0.010127>
select(1092, [1091], [], [], {0, 10008}) = 0 (Timeout) < 0.010119>
select(1093, [1092], [], [], {0, 10000}) = 0 (Timeout) < 0.010123>
select(1094, [1092 1093], [], [], {0, 10032}) = 0 (Timeout) < 0.010151>

Note the first call to select returns -1, so the following line from redis-2.0
will cause redis block for an hour if fd happens to be 1087:
8104 if (syncReadLine(fd,buf,1024,3600) == -1) {
8105 close(fd);
8106 redisLog(REDIS_WARNING,"I/O error reading bulk count from MASTER: %s",
8107 strerror(errno));
8108 return REDIS_ERR;
8109 }

I think this caused several of our slave instances blocked and cost 100% of cpu today when
they connect to their master.

@jokea
Copy link
Contributor Author

jokea commented Dec 23, 2011

The way to reproduce the problem with latest stable version:

  1. start a master and set a password for it
    #./redis-server

config set requirepass foobar

2.start a slave and sync from master:
#./redis-server -
port 6380

slaveof 127.0.0.1 6379

The log of slave:
[5894] 23 Dec 14:00:45 * Connecting to MASTER...
[5894] 23 Dec 14:00:45 * MASTER <-> SLAVE sync started
[5894] 23 Dec 14:00:45 * Non blocking connect for SYNC fired the event.
[5894] 23 Dec 14:00:45 # MASTER aborted replication with an error: ERR operation not permitted
[5894] 23 Dec 14:00:46 * Connecting to MASTER...
[5894] 23 Dec 14:00:46 * MASTER <-> SLAVE sync started
[5894] 23 Dec 14:00:46 * Non blocking connect for SYNC fired the event.
[5894] 23 Dec 14:00:46 # MASTER aborted replication with an error: ERR operation not permitted

The slave received error from master immediately after it sent "SYNC".

3.Attach 1100 idle clients to the slave:
#./redis-benchmark -p 6380 -c 1100 -I

4.Now the log of slave shows this:
[5894] 23 Dec 14:00:47 * Connecting to MASTER...
[5894] 23 Dec 14:00:47 * MASTER <-> SLAVE sync started
[5894] 23 Dec 14:00:47 * Non blocking connect for SYNC fired the event.
[5894] 23 Dec 14:00:47 # MASTER aborted replication with an error: ERR operation not permitted
[5894] 23 Dec 14:00:48 * Connecting to MASTER...
[5894] 23 Dec 14:00:48 * MASTER <-> SLAVE sync started
[5894] 23 Dec 14:00:48 * Non blocking connect for SYNC fired the event.
[5894] 23 Dec 14:00:55 # I/O error reading bulk count from MASTER: Connection timed out
[5894] 23 Dec 14:00:55 * Connecting to MASTER...
[5894] 23 Dec 14:00:55 * MASTER <-> SLAVE sync started
[5894] 23 Dec 14:00:55 * Non blocking connect for SYNC fired the event.
[5894] 23 Dec 14:01:02 # I/O error reading bulk count from MASTER: Connection timed out

The slave is blocked for 7 seconds, and gets a time out error. The strace output:
...
write(1105, "SYNC \r\n", 7) = 7 <0.000062>
open("temp-1324620644.8034.rdb", O_WRONLY|O_CREAT|O_EXCL, 0644) = 1106 <0.000027>
epoll_ctl(3, EPOLL_CTL_ADD, 1105, {EPOLLIN, {u32=1105, u64=1105}}) = 0 <0.000006>
epoll_wait(3, {{EPOLLIN, {u32=1105, u64=1105}}}, 102400, 100) = 1 <0.000006>
select(1106, [1024], [], [], {1, 0}) = 0 (Timeout) <1.002646>
select(1106, [1024], [], [], {1, 0}) = 0 (Timeout) <1.001798>
select(1106, [1024], [], [], {1, 0}) = 0 (Timeout) <1.001797>
select(1106, [1024], [], [], {1, 0}) = 0 (Timeout) <1.001797>
select(1106, [1024], [], [], {1, 0}) = 0 (Timeout) <1.001805>
select(1106, [1024], [], [], {1, 0}) = 0 (Timeout) <1.001801>
select(1106, [1024], [], [], {1, 0}) = 0 (Timeout) <1.001784>
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=405, ...}) = 0 <0.000011>
write(1, "[8034] 23 Dec 14:10:51 # I/O err"..., 88) = 88 <0.000048>
epoll_ctl(3, EPOLL_CTL_DEL, 1105, {0, {u32=1105, u64=1105}}) = 0 <0.000007>
...

@jokea
Copy link
Contributor Author

jokea commented Dec 26, 2011

The problem exists in latest release and can cause the slave crash:

  1. start master with a password:
    #./redis-server

config set requirepass foo

2.start slave and attach 2200 idle clients:
#./redis-server -
port 6380
#./redis-benchmark -p 6380 -c 2200 -I

3.start replication:

slaveof 127.0.0.1 6379
and the slave crashed with the following backtrace:

[404] 26 Dec 15:43:22 - Accepted 127.0.0.1:56379
[404] 26 Dec 15:43:22 * SLAVE OF 127.0.0.1:6379 enabled (user request)
[404] 26 Dec 15:43:22 * Connecting to MASTER...
[404] 26 Dec 15:43:22 * MASTER <-> SLAVE sync started
[404] 26 Dec 15:43:22 * Non blocking connect for SYNC fired the event.
[404] 26 Dec 15:43:22 # === REDIS BUG REPORT START: Cut & paste starting from here ===
[404] 26 Dec 15:43:22 # Redis 2.4.5 crashed by signal: 11
[404] 26 Dec 15:43:22 # Failed assertion: (:0)
[404] 26 Dec 15:43:22 # --- STACK TRACE
[404] 26 Dec 15:43:22 # /lib64/libpthread.so.0 [0x344360e7c0]
[404] 26 Dec 15:43:22 # --- INFO OUTPUT
[404] 26 Dec 15:43:22 # redis_version:2.4.5
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:epoll
process_id:404
uptime_in_seconds:46
uptime_in_days:0
lru_clock:367964
used_cpu_sys:0.08
used_cpu_user:0.05
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
connected_clients:2200
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:19479080
used_memory_human:18.58M
used_memory_rss:11563008
used_memory_peak:19479080
used_memory_peak_human:18.58M
mem_fragmentation_ratio:0.59
mem_allocator:jemalloc-2.2.5
loading:0
aof_enabled:0
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1324885356
bgrewriteaof_in_progress:0
total_connections_received:2203
total_commands_processed:3
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
vm_enabled:0
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
master_link_down_since_seconds:1324885403

[404] 26 Dec 15:43:22 # --- CLIENT LIST OUTPUT
[404] 26 Dec 15:43:22 # addr=127.0.0.1:54170 fd=5 idle=10 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=NULL
addr=127.0.0.1:54171 fd=6 idle=10 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=NULL
.....
addr=127.0.0.1:54210 fd=45 idle=10 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=NULL
addr=127.0.0.1:54211 fd=46 idle=10 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 ev
[404] 26 Dec 15:43:22 # === REDIS BUG REPORT END. Make sure to include from START to END. ===

Please report the crash opening an issue on github:

    http://github.com/antirez/redis/issues

Segmentation fault

@antirez
Copy link
Contributor

antirez commented Apr 6, 2012

Fixed merging your pull request, thank you. Closing.

@antirez antirez closed this as completed Apr 6, 2012
JackieXie168 pushed a commit to JackieXie168/redis that referenced this issue Aug 29, 2016
spring-operator added a commit to spring-operator/redis-doc that referenced this issue Mar 20, 2019
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* [ ] http://antirez.com/news/44 (200) with 1 occurrences could not be migrated:
   ([https](https://antirez.com/news/44) result AnnotatedConnectException).
* [ ] http://aspell.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://aspell.net/) result AnnotatedConnectException).
* [ ] http://download.redis.io/redis-stable.tar.gz (200) with 3 occurrences could not be migrated:
   ([https](https://download.redis.io/redis-stable.tar.gz) result AnnotatedConnectException).
* [ ] http://engage.calibreapps.com/ (200) with 1 occurrences could not be migrated:
   ([https](https://engage.calibreapps.com/) result ConnectTimeoutException).
* [ ] http://l.yimg.com/g/images/en-us/flickr-yahoo-logo.png.v3 (200) with 1 occurrences could not be migrated:
   ([https](https://l.yimg.com/g/images/en-us/flickr-yahoo-logo.png.v3) result 404).
* [ ] http://libhugetlbfs.sourceforge.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://libhugetlbfs.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://oldhome.schmorp.de/marc/liblzf.html (200) with 1 occurrences could not be migrated:
   ([https](https://oldhome.schmorp.de/marc/liblzf.html) result SSLHandshakeException).
* [ ] http://qix.it (200) with 1 occurrences could not be migrated:
   ([https](https://qix.it) result AnnotatedConnectException).
* [ ] http://rediska.geometria-lab.net (200) with 2 occurrences could not be migrated:
   ([https](https://rediska.geometria-lab.net) result SSLHandshakeException).
* [ ] http://topics.io (200) with 1 occurrences could not be migrated:
   ([https](https://topics.io) result SSLHandshakeException).
* [ ] http://web.pond.pt/ (200) with 1 occurrences could not be migrated:
   ([https](https://web.pond.pt/) result NotSslRecordException).
* [ ] http://www.devshed.com/c/a/BrainDump/Linux-Files-and-the-Event-Poll-Interface/ (200) with 1 occurrences could not be migrated:
   ([https](https://www.devshed.com/c/a/BrainDump/Linux-Files-and-the-Event-Poll-Interface/) result SSLHandshakeException).
* [ ] http://www.poraora.com/ (301) with 1 occurrences could not be migrated:
   ([https](https://www.poraora.com/) result SSLHandshakeException).
* [ ] http://graphbug.com/ (301) with 1 occurrences could not be migrated:
   ([https](https://graphbug.com/) result AnnotatedConnectException).
* [ ] http://retwis.antirez.com (302) with 2 occurrences could not be migrated:
   ([https](https://retwis.antirez.com) result AnnotatedConnectException).
* [ ] http://antirez.com/post/redis-memcached-benchmark.html (303) with 1 occurrences could not be migrated:
   ([https](https://antirez.com/post/redis-memcached-benchmark.html) result AnnotatedConnectException).
* [ ] http://antirez.com/post/redis-moka-awards-2011.html (303) with 1 occurrences could not be migrated:
   ([https](https://antirez.com/post/redis-moka-awards-2011.html) result AnnotatedConnectException).
* [ ] http://antirez.com/post/redis-persistence-demystified.html (303) with 1 occurrences could not be migrated:
   ([https](https://antirez.com/post/redis-persistence-demystified.html) result AnnotatedConnectException).
* [ ] http://antirez.com/post/update-on-memcached-redis-benchmark.html (303) with 1 occurrences could not be migrated:
   ([https](https://antirez.com/post/update-on-memcached-redis-benchmark.html) result AnnotatedConnectException).
* [ ] http://devblog.bu.mp/how-we-use-redis-at-bump (404) with 1 occurrences could not be migrated:
   ([https](https://devblog.bu.mp/how-we-use-redis-at-bump) result SSLHandshakeException).
* [ ] http://showmetheco.de/articles/2011/1/using-perl-mojolicious-and-redis-in-a-real-world-asynchronous-application.html (404) with 1 occurrences could not be migrated:
   ([https](https://showmetheco.de/articles/2011/1/using-perl-mojolicious-and-redis-in-a-real-world-asynchronous-application.html) result SSLHandshakeException).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* [ ] http://www.squeaksource.com/Redis.html (302) with 1 occurrences migrated to:
  /@cpavrZLip1SN2gzC/NeRH3bgR ([https](https://www.squeaksource.com/Redis.html) result IllegalArgumentException).
* [ ] http://shopsquad.com/ (302) with 1 occurrences migrated to:
  https://undeveloped.com/buy-domain/.com/shopsquad.com?redirected=true ([https](https://shopsquad.com/) result SSLHandshakeException).
* [ ] http://www.swarmiq.com/ (302) with 1 occurrences migrated to:
  https://www.afternic.com/forsale/swarmiq.com?utm_source=TDFS_DASLNC&utm_medium=DASLNC&utm_campaign=TDFS_DASLNC&traffic_type=TDFS_DASLNC&traffic_id=daslnc& ([https](https://www.swarmiq.com/) result ConnectTimeoutException).
* [ ] http://pennyace.com/ (302) with 1 occurrences migrated to:
  https://www.hugedomains.com/domain_profile.cfm?d=pennyace&e=com ([https](https://pennyace.com/) result ConnectTimeoutException).
* [ ] http://forrst.com (ConnectTimeoutException) with 1 occurrences migrated to:
  https://forrst.com ([https](https://forrst.com) result ConnectTimeoutException).
* [ ] http://heywatch.com (ConnectTimeoutException) with 1 occurrences migrated to:
  https://heywatch.com ([https](https://heywatch.com) result ConnectTimeoutException).
* [ ] http://www.canonware.com/jemalloc/ (ConnectTimeoutException) with 1 occurrences migrated to:
  https://www.canonware.com/jemalloc/ ([https](https://www.canonware.com/jemalloc/) result ConnectTimeoutException).
* [ ] http://www.darkcurse.com (ConnectTimeoutException) with 1 occurrences migrated to:
  https://www.darkcurse.com ([https](https://www.darkcurse.com) result ConnectTimeoutException).
* [ ] http://www.mig33.com (ConnectTimeoutException) with 1 occurrences migrated to:
  https://www.mig33.com ([https](https://www.mig33.com) result ConnectTimeoutException).
* [ ] http://developers.diggstatic.com/sites/all/themes/about/img/footer_logo.jpg (UnknownHostException) with 1 occurrences migrated to:
  https://developers.diggstatic.com/sites/all/themes/about/img/footer_logo.jpg ([https](https://developers.diggstatic.com/sites/all/themes/about/img/footer_logo.jpg) result UnknownHostException).
* [ ] http://gomogu.org (UnknownHostException) with 1 occurrences migrated to:
  https://gomogu.org ([https](https://gomogu.org) result UnknownHostException).
* [ ] http://lloogg.com (UnknownHostException) with 1 occurrences migrated to:
  https://lloogg.com ([https](https://lloogg.com) result UnknownHostException).
* [ ] http://localshow.tv/ (UnknownHostException) with 1 occurrences migrated to:
  https://localshow.tv/ ([https](https://localshow.tv/) result UnknownHostException).
* [ ] http://redis-rb.keyvalue.org (UnknownHostException) with 1 occurrences migrated to:
  https://redis-rb.keyvalue.org ([https](https://redis-rb.keyvalue.org) result UnknownHostException).
* [ ] http://retwisj.cloudfoundry.com/ (UnknownHostException) with 1 occurrences migrated to:
  https://retwisj.cloudfoundry.com/ ([https](https://retwisj.cloudfoundry.com/) result UnknownHostException).
* [ ] http://retwisrb.danlucraft.com/ (UnknownHostException) with 1 occurrences migrated to:
  https://retwisrb.danlucraft.com/ ([https](https://retwisrb.danlucraft.com/) result UnknownHostException).
* [ ] http://rubyminds.com (UnknownHostException) with 1 occurrences migrated to:
  https://rubyminds.com ([https](https://rubyminds.com) result UnknownHostException).
* [ ] http://www.mrkris.com/ (UnknownHostException) with 1 occurrences migrated to:
  https://www.mrkris.com/ ([https](https://www.mrkris.com/) result UnknownHostException).
* [ ] http://www.thematchfixer.com/ (UnknownHostException) with 1 occurrences migrated to:
  https://www.thematchfixer.com/ ([https](https://www.thematchfixer.com/) result UnknownHostException).
* [ ] http://vidiowiki.com (403) with 1 occurrences migrated to:
  https://vidiowiki.com ([https](https://vidiowiki.com) result 403).
* [ ] http://mediacdn.disqus.com/1294274648/img/disqus-logo.png (301) with 1 occurrences migrated to:
  https://a.disquscdn.com/1294274648/img/disqus-logo.png ([https](https://mediacdn.disqus.com/1294274648/img/disqus-logo.png) result 404).
* [ ] http://bretthoerner.com/2011/2/21/redis-at-disqus/ (404) with 1 occurrences migrated to:
  https://bretthoerner.com/2011/2/21/redis-at-disqus/ ([https](https://bretthoerner.com/2011/2/21/redis-at-disqus/) result 404).
* [ ] http://qi4j.org/extension-es-redis.html (301) with 1 occurrences migrated to:
  https://polygene.apache.org/extension-es-redis.html ([https](https://qi4j.org/extension-es-redis.html) result 404).
* [ ] http://sstatic.net/stackoverflow/img/logo.png (404) with 1 occurrences migrated to:
  https://sstatic.net/stackoverflow/img/logo.png ([https](https://sstatic.net/stackoverflow/img/logo.png) result 404).
* [ ] http://www.engineyard.com/images/logo.png (301) with 1 occurrences migrated to:
  https://www.engineyard.com/images/logo.png ([https](https://www.engineyard.com/images/logo.png) result 404).
* [ ] http://www.redhat.com/magazine/001nov04/features/vm/ (302) with 1 occurrences migrated to:
  https://www.redhat.com/magazine/001nov04/features/vm/ ([https](https://www.redhat.com/magazine/001nov04/features/vm/) result 404).
* [ ] http://www.telefonica.com/es/digital/html/home/ (301) with 1 occurrences migrated to:
  https://www.telefonica.com/es/digital/html/home/ ([https](https://www.telefonica.com/es/digital/html/home/) result 404).
* [ ] http://www.socialreviver.net/ (301) with 1 occurrences migrated to:
  https://www.socialreviver.net/ ([https](https://www.socialreviver.net/) result 503).

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://authoritylabs.com/ with 1 occurrences migrated to:
  https://authoritylabs.com/ ([https](https://authoritylabs.com/) result 200).
* [ ] http://bitbucket.org/videlalvaro/redis-haskell/src with 1 occurrences migrated to:
  https://bitbucket.org/videlalvaro/redis-haskell/src ([https](https://bitbucket.org/videlalvaro/redis-haskell/src) result 200).
* [ ] http://bitbucket.org/videlalvaro/redis-haskell/wiki/Home with 1 occurrences migrated to:
  https://bitbucket.org/videlalvaro/redis-haskell/wiki/Home ([https](https://bitbucket.org/videlalvaro/redis-haskell/wiki/Home) result 200).
* [ ] http://bradjasper.com/ with 1 occurrences migrated to:
  https://bradjasper.com/ ([https](https://bradjasper.com/) result 200).
* [ ] http://check-host.net/ with 1 occurrences migrated to:
  https://check-host.net/ ([https](https://check-host.net/) result 200).
* [ ] http://dormando.livejournal.com/525147.html with 1 occurrences migrated to:
  https://dormando.livejournal.com/525147.html ([https](https://dormando.livejournal.com/525147.html) result 200).
* [ ] http://en.wikipedia.org/wiki/Comparison_of_file_systems with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Comparison_of_file_systems ([https](https://en.wikipedia.org/wiki/Comparison_of_file_systems) result 200).
* [ ] http://en.wikipedia.org/wiki/Publish/subscribe with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Publish/subscribe ([https](https://en.wikipedia.org/wiki/Publish/subscribe) result 200).
* [ ] http://en.wikipedia.org/wiki/Unix_time with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Unix_time ([https](https://en.wikipedia.org/wiki/Unix_time) result 200).
* [ ] http://favstar.fm with 1 occurrences migrated to:
  https://favstar.fm ([https](https://favstar.fm) result 200).
* [ ] http://github.com/Shumkov/Rediska with 1 occurrences migrated to:
  https://github.com/Shumkov/Rediska ([https](https://github.com/Shumkov/Rediska) result 200).
* [ ] http://github.com/antirez/redis with 1 occurrences migrated to:
  https://github.com/antirez/redis ([https](https://github.com/antirez/redis) result 200).
* [ ] http://github.com/antirez/redis-tools with 1 occurrences migrated to:
  https://github.com/antirez/redis-tools ([https](https://github.com/antirez/redis-tools) result 200).
* [ ] http://github.com/antirez/redis/issues/141 with 1 occurrences migrated to:
  redis/redis#141 ([https](redis/redis#141) result 200).
* [ ] http://github.com/antirez/redis/issues/267 with 1 occurrences migrated to:
  redis/redis#267 ([https](redis/redis#267) result 200).
* [ ] http://github.com/antirez/redis/issues/460 with 1 occurrences migrated to:
  redis/redis#460 ([https](redis/redis#460) result 200).
* [ ] http://github.com/antirez/redis/raw/2.2/redis.conf with 2 occurrences migrated to:
  https://github.com/antirez/redis/raw/2.2/redis.conf ([https](https://github.com/antirez/redis/raw/2.2/redis.conf) result 200).
* [ ] http://github.com/chriso/redback with 1 occurrences migrated to:
  https://github.com/chriso/redback ([https](https://github.com/chriso/redback) result 200).
* [ ] http://github.com/ezmobius/redis-rb with 1 occurrences migrated to:
  https://github.com/ezmobius/redis-rb ([https](https://github.com/ezmobius/redis-rb) result 200).
* [ ] http://github.com/qi4j/qi4j-sdk with 1 occurrences migrated to:
  https://github.com/qi4j/qi4j-sdk ([https](https://github.com/qi4j/qi4j-sdk) result 200).
* [ ] http://hackage.haskell.org/package/hedis with 1 occurrences migrated to:
  https://hackage.haskell.org/package/hedis ([https](https://hackage.haskell.org/package/hedis) result 200).
* [ ] http://iwantmyname.com with 1 occurrences migrated to:
  https://iwantmyname.com ([https](https://iwantmyname.com) result 200).
* [ ] http://leatherbound.me/ with 1 occurrences migrated to:
  https://leatherbound.me/ ([https](https://leatherbound.me/) result 200).
* [ ] http://linux.die.net/man/2/fork with 2 occurrences migrated to:
  https://linux.die.net/man/2/fork ([https](https://linux.die.net/man/2/fork) result 200).
* [ ] http://linux.die.net/man/2/fsync with 1 occurrences migrated to:
  https://linux.die.net/man/2/fsync ([https](https://linux.die.net/man/2/fsync) result 200).
* [ ] http://lwn.net/Articles/374424/ with 1 occurrences migrated to:
  https://lwn.net/Articles/374424/ ([https](https://lwn.net/Articles/374424/) result 200).
* [ ] http://man.cx/accept with 1 occurrences migrated to:
  https://man.cx/accept ([https](https://man.cx/accept) result 200).
* [ ] http://man.cx/accept%282%29 with 1 occurrences migrated to:
  https://man.cx/accept%282%29 ([https](https://man.cx/accept%282%29) result 200).
* [ ] http://man.cx/epoll_create%282%29 with 1 occurrences migrated to:
  https://man.cx/epoll_create%282%29 ([https](https://man.cx/epoll_create%282%29) result 200).
* [ ] http://man.cx/epoll_ctl with 1 occurrences migrated to:
  https://man.cx/epoll_ctl ([https](https://man.cx/epoll_ctl) result 200).
* [ ] http://man.cx/epoll_wait with 1 occurrences migrated to:
  https://man.cx/epoll_wait ([https](https://man.cx/epoll_wait) result 200).
* [ ] http://oknotizie.virgilio.it (301) with 1 occurrences migrated to:
  https://notizie.virgilio.it ([https](https://oknotizie.virgilio.it) result 200).
* [ ] http://ohm.keyvalue.org with 1 occurrences migrated to:
  https://ohm.keyvalue.org ([https](https://ohm.keyvalue.org) result 200).
* [ ] http://redis.io with 1 occurrences migrated to:
  https://redis.io ([https](https://redis.io) result 200).
* [ ] http://redis.io/clients with 2 occurrences migrated to:
  https://redis.io/clients ([https](https://redis.io/clients) result 200).
* [ ] http://redis.io/commands/client-list with 2 occurrences migrated to:
  https://redis.io/commands/client-list ([https](https://redis.io/commands/client-list) result 200).
* [ ] http://redis.io/commands/script-load with 1 occurrences migrated to:
  https://redis.io/commands/script-load ([https](https://redis.io/commands/script-load) result 200).
* [ ] http://redis.io/topics/data-types-intro with 1 occurrences migrated to:
  https://redis.io/topics/data-types-intro ([https](https://redis.io/topics/data-types-intro) result 200).
* [ ] http://redis.io/topics/persistence with 2 occurrences migrated to:
  https://redis.io/topics/persistence ([https](https://redis.io/topics/persistence) result 200).
* [ ] http://seatgeek.com/ with 1 occurrences migrated to:
  https://seatgeek.com/ ([https](https://seatgeek.com/) result 200).
* [ ] http://static.guim.co.uk/static/97665/networkfront/images/guardian_logo.png with 1 occurrences migrated to:
  https://static.guim.co.uk/static/97665/networkfront/images/guardian_logo.png ([https](https://static.guim.co.uk/static/97665/networkfront/images/guardian_logo.png) result 200).
* [ ] http://static.mlstatic.com/org-img/logo_ml/logoAlpha.png with 1 occurrences migrated to:
  https://static.mlstatic.com/org-img/logo_ml/logoAlpha.png ([https](https://static.mlstatic.com/org-img/logo_ml/logoAlpha.png) result 200).
* [ ] http://static.pe.studivz.net/20101222-0/Img/logo.png with 1 occurrences migrated to:
  https://static.pe.studivz.net/20101222-0/Img/logo.png ([https](https://static.pe.studivz.net/20101222-0/Img/logo.png) result 200).
* [ ] http://surfingbird.com with 1 occurrences migrated to:
  https://surfingbird.com ([https](https://surfingbird.com) result 200).
* [ ] http://twitter.com/antirez with 1 occurrences migrated to:
  https://twitter.com/antirez ([https](https://twitter.com/antirez) result 200).
* [ ] http://twitter.com/costinl with 1 occurrences migrated to:
  https://twitter.com/costinl ([https](https://twitter.com/costinl) result 200).
* [ ] http://twitter.com/pnoordhuis with 1 occurrences migrated to:
  https://twitter.com/pnoordhuis ([https](https://twitter.com/pnoordhuis) result 200).
* [ ] http://webd.is/ with 1 occurrences migrated to:
  https://webd.is/ ([https](https://webd.is/) result 200).
* [ ] http://wiki.call-cc.org/eggref/4/redis-client with 1 occurrences migrated to:
  https://wiki.call-cc.org/eggref/4/redis-client ([https](https://wiki.call-cc.org/eggref/4/redis-client) result 200).
* [ ] http://www.ancestry.com/ with 1 occurrences migrated to:
  https://www.ancestry.com/ ([https](https://www.ancestry.com/) result 200).
* [ ] http://www.boxcar.io with 1 occurrences migrated to:
  https://www.boxcar.io ([https](https://www.boxcar.io) result 200).
* [ ] http://www.cliki.net/cl-redis with 1 occurrences migrated to:
  https://www.cliki.net/cl-redis ([https](https://www.cliki.net/cl-redis) result 200).
* [ ] http://www.linuxjournal.com/article/6340 with 1 occurrences migrated to:
  https://www.linuxjournal.com/article/6340 ([https](https://www.linuxjournal.com/article/6340) result 200).
* [ ] http://www.lua.org/pil/19.1.html with 1 occurrences migrated to:
  https://www.lua.org/pil/19.1.html ([https](https://www.lua.org/pil/19.1.html) result 200).
* [ ] http://www.rsyslog.com/doc/build_from_repo.html with 1 occurrences migrated to:
  https://www.rsyslog.com/doc/build_from_repo.html ([https](https://www.rsyslog.com/doc/build_from_repo.html) result 200).
* [ ] http://www.sharpcloud.com with 1 occurrences migrated to:
  https://www.sharpcloud.com ([https](https://www.sharpcloud.com) result 200).
* [ ] http://www.wooga.com/games/ with 1 occurrences migrated to:
  https://www.wooga.com/games/ ([https](https://www.wooga.com/games/) result 200).
* [ ] http://adilbaig.github.com/Tiny-Redis/ with 1 occurrences migrated to:
  https://adilbaig.github.com/Tiny-Redis/ ([https](https://adilbaig.github.com/Tiny-Redis/) result 301).
* [ ] http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps with 2 occurrences migrated to:
  https://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps ([https](https://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps) result 301).
* [ ] http://carlhoerberg.github.com/meerkat/ with 1 occurrences migrated to:
  https://carlhoerberg.github.com/meerkat/ ([https](https://carlhoerberg.github.com/meerkat/) result 301).
* [ ] http://citrusbyte.com with 1 occurrences migrated to:
  https://citrusbyte.com ([https](https://citrusbyte.com) result 301).
* [ ] http://code.flickr.com/blog/2011/10/11/talk-real-time-updates-on-the-cheap-for-fun-and-profit/ (301) with 1 occurrences migrated to:
  https://code.flickr.net/blog/2011/10/11/talk-real-time-updates-on-the-cheap-for-fun-and-profit/ ([https](https://code.flickr.com/blog/2011/10/11/talk-real-time-updates-on-the-cheap-for-fun-and-profit/) result 301).
* [ ] http://code.google.com/p/booksleeve/ with 1 occurrences migrated to:
  https://code.google.com/p/booksleeve/ ([https](https://code.google.com/p/booksleeve/) result 301).
* [ ] http://code.google.com/p/credis/source/browse with 1 occurrences migrated to:
  https://code.google.com/p/credis/source/browse ([https](https://code.google.com/p/credis/source/browse) result 301).
* [ ] http://code.google.com/p/eredis with 1 occurrences migrated to:
  https://code.google.com/p/eredis ([https](https://code.google.com/p/eredis) result 301).
* [ ] http://code.google.com/p/google-perftools/ with 1 occurrences migrated to:
  https://code.google.com/p/google-perftools/ ([https](https://code.google.com/p/google-perftools/) result 301).
* [ ] http://code.google.com/p/hxneko-redis with 1 occurrences migrated to:
  https://code.google.com/p/hxneko-redis ([https](https://code.google.com/p/hxneko-redis) result 301).
* [ ] http://code.google.com/p/hxneko-redis/source/browse with 1 occurrences migrated to:
  https://code.google.com/p/hxneko-redis/source/browse ([https](https://code.google.com/p/hxneko-redis/source/browse) result 301).
* [ ] http://code.google.com/p/jdbc-redis with 1 occurrences migrated to:
  https://code.google.com/p/jdbc-redis ([https](https://code.google.com/p/jdbc-redis) result 301).
* [ ] http://code.google.com/p/jdbc-redis/source/browse with 1 occurrences migrated to:
  https://code.google.com/p/jdbc-redis/source/browse ([https](https://code.google.com/p/jdbc-redis/source/browse) result 301).
* [ ] http://code.google.com/p/jredis with 1 occurrences migrated to:
  https://code.google.com/p/jredis ([https](https://code.google.com/p/jredis) result 301).
* [ ] http://code.google.com/p/redis with 1 occurrences migrated to:
  https://code.google.com/p/redis ([https](https://code.google.com/p/redis) result 301).
* [ ] http://code.google.com/p/redis/downloads/list with 2 occurrences migrated to:
  https://code.google.com/p/redis/downloads/list ([https](https://code.google.com/p/redis/downloads/list) result 301).
* [ ] http://code.google.com/p/redis/issues/detail?id=270 with 1 occurrences migrated to:
  https://code.google.com/p/redis/issues/detail?id=270 ([https](https://code.google.com/p/redis/issues/detail?id=270) result 301).
* [ ] http://code.google.com/p/redis/issues/detail?id=34 with 1 occurrences migrated to:
  https://code.google.com/p/redis/issues/detail?id=34 ([https](https://code.google.com/p/redis/issues/detail?id=34) result 301).
* [ ] http://code.google.com/p/redis/wiki/README with 1 occurrences migrated to:
  https://code.google.com/p/redis/wiki/README ([https](https://code.google.com/p/redis/wiki/README) result 301).
* [ ] http://code.google.com/p/tcgl/ with 1 occurrences migrated to:
  https://code.google.com/p/tcgl/ ([https](https://code.google.com/p/tcgl/) result 301).
* [ ] http://engineyard.com with 1 occurrences migrated to:
  https://engineyard.com ([https](https://engineyard.com) result 301).
* [ ] http://github.com/SpringSource/spring-data-redis with 1 occurrences migrated to:
  https://github.com/SpringSource/spring-data-redis ([https](https://github.com/SpringSource/spring-data-redis) result 301).
* [ ] http://groups.google.com/group/redis-db with 1 occurrences migrated to:
  https://groups.google.com/group/redis-db ([https](https://groups.google.com/group/redis-db) result 301).
* [ ] http://groups.google.com/group/redis-db/browse_thread/thread/b52814e9ef15b8d0/ with 1 occurrences migrated to:
  https://groups.google.com/group/redis-db/browse_thread/thread/b52814e9ef15b8d0/ ([https](https://groups.google.com/group/redis-db/browse_thread/thread/b52814e9ef15b8d0/) result 301).
* [ ] http://j.mp/eo6z6I with 1 occurrences migrated to:
  https://j.mp/eo6z6I ([https](https://j.mp/eo6z6I) result 301).
* [ ] http://linode.com with 1 occurrences migrated to:
  https://linode.com ([https](https://linode.com) result 301).
* [ ] http://memtest86.com with 1 occurrences migrated to:
  https://memtest86.com ([https](https://memtest86.com) result 301).
* [ ] http://meta.stackoverflow.com/questions/69164/does-stackoverflow-use-caching-and-if-so-how/69172 with 1 occurrences migrated to:
  https://meta.stackoverflow.com/questions/69164/does-stackoverflow-use-caching-and-if-so-how/69172 ([https](https://meta.stackoverflow.com/questions/69164/does-stackoverflow-use-caching-and-if-so-how/69172) result 301).
* [ ] http://mperham.github.com/sidekiq/ with 1 occurrences migrated to:
  https://mperham.github.com/sidekiq/ ([https](https://mperham.github.com/sidekiq/) result 301).
* [ ] http://nuget.org/List/Packages/Sider with 1 occurrences migrated to:
  https://nuget.org/List/Packages/Sider ([https](https://nuget.org/List/Packages/Sider) result 301).
* [ ] http://pypi.python.org/pypi/txredis/0.1.1 with 1 occurrences migrated to:
  https://pypi.python.org/pypi/txredis/0.1.1 ([https](https://pypi.python.org/pypi/txredis/0.1.1) result 301).
* [ ] http://redis.codeplex.com/ with 1 occurrences migrated to:
  https://redis.codeplex.com/ ([https](https://redis.codeplex.com/) result 301).
* [ ] http://search.cpan.org/dist/AnyEvent-Hiredis with 1 occurrences migrated to:
  https://search.cpan.org/dist/AnyEvent-Hiredis ([https](https://search.cpan.org/dist/AnyEvent-Hiredis) result 301).
* [ ] http://search.cpan.org/dist/AnyEvent-Redis with 1 occurrences migrated to:
  https://search.cpan.org/dist/AnyEvent-Redis ([https](https://search.cpan.org/dist/AnyEvent-Redis) result 301).
* [ ] http://search.cpan.org/dist/AnyEvent-Redis-RipeRedis with 1 occurrences migrated to:
  https://search.cpan.org/dist/AnyEvent-Redis-RipeRedis ([https](https://search.cpan.org/dist/AnyEvent-Redis-RipeRedis) result 301).
* [ ] http://search.cpan.org/dist/Danga-Socket-Redis with 1 occurrences migrated to:
  https://search.cpan.org/dist/Danga-Socket-Redis ([https](https://search.cpan.org/dist/Danga-Socket-Redis) result 301).
* [ ] http://search.cpan.org/dist/MojoX-Redis with 1 occurrences migrated to:
  https://search.cpan.org/dist/MojoX-Redis ([https](https://search.cpan.org/dist/MojoX-Redis) result 301).
* [ ] http://search.cpan.org/dist/Redis with 1 occurrences migrated to:
  https://search.cpan.org/dist/Redis ([https](https://search.cpan.org/dist/Redis) result 301).
* [ ] http://search.cpan.org/dist/Redis-hiredis/ with 1 occurrences migrated to:
  https://search.cpan.org/dist/Redis-hiredis/ ([https](https://search.cpan.org/dist/Redis-hiredis/) result 301).
* [ ] http://search.cpan.org/dist/RedisDB with 1 occurrences migrated to:
  https://search.cpan.org/dist/RedisDB ([https](https://search.cpan.org/dist/RedisDB) result 301).
* [ ] http://simonwillison.net/2009/Dec/20/crowdsourcing with 1 occurrences migrated to:
  https://simonwillison.net/2009/Dec/20/crowdsourcing ([https](https://simonwillison.net/2009/Dec/20/crowdsourcing) result 301).
* [ ] http://thewikigame.com with 1 occurrences migrated to:
  https://thewikigame.com ([https](https://thewikigame.com) result 301).
* [ ] http://top10.com with 1 occurrences migrated to:
  https://top10.com ([https](https://top10.com) result 301).
* [ ] http://vmware.com with 2 occurrences migrated to:
  https://vmware.com ([https](https://vmware.com) result 301).
* [ ] http://t.sina.com.cn/ (301) with 1 occurrences migrated to:
  https://weibo.com/ ([https](https://t.sina.com.cn/) result 301).
* [ ] http://wish.hu with 1 occurrences migrated to:
  https://wish.hu ([https](https://wish.hu) result 301).
* [ ] http://www.clemesha.org/blog/really-using-redis-to-build-fast-real-time-web-apps/ with 1 occurrences migrated to:
  https://www.clemesha.org/blog/really-using-redis-to-build-fast-real-time-web-apps/ ([https](https://www.clemesha.org/blog/really-using-redis-to-build-fast-real-time-web-apps/) result 301).
* [ ] http://www.hitmeister.de/ with 1 occurrences migrated to:
  https://www.hitmeister.de/ ([https](https://www.hitmeister.de/) result 301).
* [ ] http://slicehost.com (301) with 1 occurrences migrated to:
  https://www.rackspace.com/cloud/vps/ ([https](https://slicehost.com) result 301).
* [ ] http://www.springsource.org/spring-data/redis with 1 occurrences migrated to:
  https://www.springsource.org/spring-data/redis ([https](https://www.springsource.org/spring-data/redis) result 301).
* [ ] http://www.tweetdeck.com/assets/logo/UpdatedLogo-500x500.png with 1 occurrences migrated to:
  https://www.tweetdeck.com/assets/logo/UpdatedLogo-500x500.png ([https](https://www.tweetdeck.com/assets/logo/UpdatedLogo-500x500.png) result 301).
* [ ] http://www.zoombu.co.uk with 1 occurrences migrated to:
  https://www.zoombu.co.uk ([https](https://www.zoombu.co.uk) result 301).
* [ ] http://blog.superfeedr.com/redis/mysql/memcache/datastore/performance/redis-at-superfeedr with 1 occurrences migrated to:
  https://blog.superfeedr.com/redis/mysql/memcache/datastore/performance/redis-at-superfeedr ([https](https://blog.superfeedr.com/redis/mysql/memcache/datastore/performance/redis-at-superfeedr) result 302).
* [ ] http://nk.pl/ with 1 occurrences migrated to:
  https://nk.pl/ ([https](https://nk.pl/) result 302).
* [ ] http://us.blizzard.com/_images/company/about/awards/logo-dev.gif with 1 occurrences migrated to:
  https://us.blizzard.com/_images/company/about/awards/logo-dev.gif ([https](https://us.blizzard.com/_images/company/about/awards/logo-dev.gif) result 302).
* [ ] http://www.fotolog.com/ with 1 occurrences migrated to:
  https://www.fotolog.com/ ([https](https://www.fotolog.com/) result 302).
* [ ] http://www.moodstocks.com/2010/11/26/the-tech-behind-moodstocks-notes with 1 occurrences migrated to:
  https://www.moodstocks.com/2010/11/26/the-tech-behind-moodstocks-notes ([https](https://www.moodstocks.com/2010/11/26/the-tech-behind-moodstocks-notes) result 302).
PatKamin added a commit to PatKamin/redis that referenced this issue Oct 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants