1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595
|
1.3.7 (Sep. 19 2024)
fix: repeated DELETE requests can leave unresponsive subscribers connected to a channel
fix: channel info subscriber count incorrect when using Redis following unclean worker exit
(Thanks, Steven Green)
feature: manually set Redis server roles to master or slave
fix: Redis server blacklist was only applied in cluster mode
(Thanks, piotr-lwks)
fix: Nchan may fail to connect to non-cluster Redis if more than 1 server is specified
(Thanks, Mike Baroukh)
fix: Some invalid message IDs may result in a worker crash
fix: Nchan may fail to reconnect ro a Redis cluster when using many workers due to a race condition
(Thanks, Fabio Urquiza)
fix: subscriber info may be incorrect for Redis version >=7
fix: Redis cluster may fail to reconnect to a cluster without consensus
(Thanks, Fabio Urquiza)
1.3.6 (Jan. 6 2023)
fix: reloading Nginx with nchan_stub_status enabled may result in a crash (introduced in v1.3.1)
fix: nchan_redis_upstream_stats_enabled incorrectly documented as having "yes/no" values instead of "on/off"
fix: compilation erros for Nginx 1.23.2
1.3.5 (Oct. 27 2022)
feature: track Redis upstreams statistics with nchan_redis_upstream_stats
fix: possible invalid memory access after Redis cluster node discovery
fix: GET publisher location request may return incorrect subscriber count when using Redis
fix: possible to log invalid string for rare error
1.3.4 (Sep. 1 2022)
fix: Redis cluster slave failover may result in crash
1.3.3 (Aug. 29 2022)
fix: incorrect timeout handling for new nchan_redis_accurate_subscriber_count resulted in inaccurate subscriber counts
1.3.2 (Aug. 23 2022)
feature: stub status now shows the total number of commands sent to Redis
fix: Redis cluster checks may not time out
fix: Redis cluster may not be marked unhealthy if a required node is marked in the node list as 'fail'
fix: simultaneous creating many Redis-backed channels may result in CPU usage spikes on Redis server
1.3.1 (Aug. 1 2022)
fix: Nchan may become unresponsive after a worker is uncleanly terminated
change: nchan_redis_optimize_setting is now obsolete
feature: nchan_redis_accurate_subscriber_count that doesn't corrupt Redis
subscriber counts when nginx workers are killed
feature: added "redis unhealthy upstreams" to nchan_stub_status
fix: incorrect nchan_stub_status variables after a worker is uncleanly terminated
fix: build errors with Nginx >= 1.20.1
feature: Redis >=7.0.1 SMESSAGE support
fix: Redis cluster slot assignments may not be reconfigured correctly
fix: discovery of Redis slave nodes in cluster may be incomplete
1.3.0 (May 26 2022)
feature: configurable Redis command timeouts with nchan_redis_command_timeout
feature: configurable Redis command retries with nchan_redis_retry_commands and nchan_redis_retry_commands_max_wait
fix: Redis cluster status checks can now discover new slaves
fix: Redis 7 cluster keyslot errors not recognized on Redis 7
feature: Redis 7 sharded pubsub support
feature: configurable Redis cluster recovery time, backoff, and jitter
feature: Redis cluster failure recovery without disconnection
feature: configurable Redis reconnection time, backoff, and jitter
fix: Redis scripts are now loaded only when missing
1.2.15 (Dec. 27 2021)
fix: publishing to >255 string-delimitered channels could result in a crash
fix: Redis connection failures (since 1 2.14)
1.2.14 [WITHDRAWN] (Dec. 20 2021)
fix: compiler warnings from the use of the 'typeof' macro
fix: Nchan can't be built without the Nginx SSL module (bug introduced in 1.2.13)
update: hiredis updated to 1.0.2
fix: some Redis connection failures could result in a crash (bug introduced in 1.2.13)
fix: upstream subrequests crashed with Nginx >= 1.19.9
1.2.13 [WITHDRAWN] (Dec. 13 2021)
feature: Redis ACL support with username and passwword
feature: Redis TLS support
1.2.12 (Sep. 22 2021)
fix: better Redis cluster connection logging
fix: redundant method to discover Redis slave nodes in cluster mode could result in receiving unreachable IPs
1.2.11 (Sep. 17 2021)
feature: nchan_redis_discovered_ip_range_blacklist for ignoring autotiscoreved nodes
feature: nchan_redis_storage_mode is now configurable in location contexts
1.2.10 (Aug. 25 2021)
fix: Nchan could not be built without openssl due to hiredis dependency
(introduced in v1.2.9)
feature: allow no separator for http-raw-stream (thanks @sclem)
1.2.9 (Aug. 12 2021)
feature: Redis cluster reconfiguration check timer,
nchan_redis_cluster_check_interval setting
fix: detect Redis cluster reconfiguration when publishing messages in "nostore" mode
update: hiredis updated to v1.0.0
fix: segfault on out-of-shared-memory condition for multiplexed publishers
1.2.8 (Apr. 12 2021)
feature: nchan_subscriber_info locations for receiving customizable info from
subscribers of a given channel.
fix: incorrect lgging of disconnected subscribers with 400 error instead of 499
(bug introduced in v1.2.7)
feature: add $nchan_channel_subscriber_last_seen, $nchan_channel_subscriber_count
and $nchan_channel_message_count variables
fix: GCC 10 compatibility
1.2.7 (Mar. 17 2020)
fix: unidirectional subscribers have their connection terminated if they send any data to the server
after the initial request handshake. This applies to all subscribers except Websocket
feature: periodic pings for EventSource subscribers
fix: Redis pending commands count may be incorrect in nchan's stub status page
fix: channel deletion fails to propagate to Redis slaves
fix: possible stack overflow when using websocket subscribers
1.2.6 (Jun. 18 2019)
fix: when using Redis, a channel can stop receiving new messages if
they are published faster than they can be sent to subscribers and the
message buffer is sufficiently small
fix: websocket PONG response did not contain PING frame data
fix: multiplexed channels may stop receiving messages
fix (security): specially crafted websocket publisher requests when using Redis
may result in use-after-free memory access
fix: Nginx config reload may result in crash when using Redis cluster
1.2.5 (Mar. 20 2019)
fix: using multiplexed channels with Redis in backup mode may result in worker crash
fix: nchan_publisher_channel_id could not be set exclusively in a publisher location
fix: Google pagespeed module compatibility
fix: nchan prevents nginx from starting if no http {} block is configured
1.2.4 (Feb. 25 2019)
fix: Redis cluster info with zero-length hostname may result in worker crash
fix: build problems with included hiredis lib in FreeBSD
feature: nchan_redis_namespace and nchan_redis_ping_interval now work in upstream blocks
fix: websocket publisher did not publishing channel events
fix: Redis namespace was limited to 8 bytes
1.2.3 (Oct. 15 2018)
fix: possible invalid memory access when the initial connection to a Redis cluster node times out
1.2.2 (Oct. 9 2018)
fix (security): using an unresponsive, overloaded Redis server may result in invalid memory access
fix: incorrect logging of discovered Redis cluster nodes
fix: better handling of connection loss when Redis server is unresponsive
fix: presence of Redis cluster nodes with no known address ("noaddr") nodes could result in worker crash
fix (security): subscriber may erroneously receive a 400 Bad Request or crash a worker
based on data from a previous subscriber
feature: built-in backend benchmark
feature: add optimized fastpublish option to Redis nostore mode for maximum
message publishing thoroughput via Redis
feature: add no-store Redis mode that uses Redis for broadcasting messages, not storage
fix: connecting to load-balancing Redis proxy resulted in crash
fix: using longpoll-multipart in "raw" mode cound result in worker crash
fix: channel events used with Redis resulted in segfault
1.2.1 (Aug. 2 2018)
fix: channel last_requested was set to 0 instead of -1 on channel creation
fix: authentication failure body not forwarded for Nginx > 1.13.10
fix: possible invalid memory access for websocket unsubscribe requests
fix: building Nchan could interfere with building other modules
1.2.0 (Jul. 23 2018)
feature: configurable support for CORS Access-Control-Allow-Credentials header
fix: better compliance with RFC7692 Websocket permessage-deflate parameter negotiation
fix (security): possible busy-loop denial-of-service for specially crafted
handshakes from Websocket subscribers using permessage-deflate
(Thanks, Benjamin Michéle)
fix: nchan_permessage_deflate_compression_memlevel was not applied when set
refactor: all publisher and subscriber upstream requests are now more memory-efficient
fix: Using websocket publisher upstream requests may result in invalid memory access
fix: publishing Redis-backed messages with 1-second expiration may fail after
cluster restart
change: nchan_redis_wait_after_connecting directive is now obsolete, and is ignored
feature: nchan_redis_optimize_target for "cpu" or "bandwidth". Trades off CPU
load on Redis slaves for syncronization bandwidth.
feature: configurable Redis master/slave channel subscribe weights with
nchan_redis_subscribe_weights
fix: Compilation issues on OS X and systems lacking non-POSIX memrchr()
fix: nchan_pubsub CORS Allowed headers did not include headers used by subscribers
fix: Redis-backed channel buffer length could exceed nchan_message_buffer_length
fix: Publisher upstream compatibility for Nginx > 1.13.10
feature: nchan_redis_connect_timeout to configure maximum connection time
to Redis servers
feature: Offload Redis SUBSCRIBE traffic to slaves
(one SUBSCRIBE per channel per worker)
fix: Redis cluster and master/slave failover and reconnection issues
refactor: Redis connection handling rewritten from scratch
fix: subscribers may not receive new messages after reconnecting to Redis
fix: publishing to an unavailable Redis-backed channel may result in a
following 400 Bad Request
change: Old Redis-backed channel messages are now delivered after the message
buffer is fully loaded into memory. Previously they were delivered
incrementally while the buffer loaded.
fix: multiplexed Redis-backed channels may not deliver messages if one or
more channels' messages all expire
fix: possible crash when catching up to reconnected Redis channel with
subscribers waiting for consecutive messages
fix: possible crash from rapidly creating and deleting channels
1.1.15 (Apr. 27 2018)
fix: A disconnect from a Redis cluster node can result in a segfault
fix: Using Redis-backed multiplexed channels can result in a segfault
1.1.14 (Jan. 10 2018)
feature: added nchan_redis_wait_after_connecting setting
fix: compatibility with Redis >= 4.0 cluster
1.1.13 (Dec. 4 2017)
fix: added Redis backwards compatibility with Nchan 1.1.7 and below
for online upgrades with mixed-version Nchan cluster
1.1.12 (Dec. 1 2017)
fix: possible "Unexpected spool == nuspool" worker crash
fix: subscriber messages delivered during active nchan_subscribe subrequest
may be garbled
1.1.11 (Nov. 29 2017)
fix: Redis backup-mode not working (since 1.1.9)
fix: incorrect handling of Redis permessage-deflated messages results in
missing first char of eventsource event type
fix: worker crash when unable to create temp file for large websocket
permessage-deflate message
fix: CPU-bound overloaded Nginx may result in worker crashes
(may occur with large Openresty Lua load)
change: default nchan_shared_memory_size is now 128M
fix: some channel info from publisher GET requests may be incorrect with Redis
fix: file descriptor leak when reconnecting to Redis
1.1.10 (Nov. 13 2017)
feature: nchan_authorize_request failure response forwarded back to subscriber
Sponsored by Symless (https://symless.com/)
fix: allow nchan_access_control_allow_origin in if blocks
fix: longpoll-multipart may read uninitialized memory when receiving
zero-length message
fix (security): invalid memory access for aborted websocket subscriber
after channel existence check via Redis
fix: websocket handhshake failure handled incorrectly when messages
are available
fix (security): websocket subscriber disconnecting before handshake may
result in invalid memory access
fix (security): possible invalid memory access for disappearing longpoll sub
feature: add "shared memory limit" to nchan_stub_status output
1.1.9 (Oct. 30 2017)
fix: more proper websocket extension negotiation with more
informative failure messages
fix: websocket handshake failure response included superfluous CLOSE frame
feature: websocket deflate-frame and x-webkit-deflate-frame support
1.1.8 (Oct. 26 2017)
feature: websocket permessage-deflate support
Sponsored by HYFN (https://hyfn.com/)
fix (security): websocket publisher may crash worker when publishing with
channel group accounting on to a new group
fix: messages published to Nchan via websocket binary frames
should have content-type set to "application/octet-stream"
fix: accept websocket publisher binary frames (thanks @rponczkowski)
fix: multiplexing over exactly 255 channels results in worker crash
fix (security): Specially crafted invalid subscriber msgid may crash worker
fix: nchan_subscriber_first_message <= 0 (newest) with existing Redis data
incorrectly treated as "oldest" for initial subscribers
fix: 0-length channel name may crash worker
fix: subscribe/unsubscribe callback requests do not work when used with
authorization callback request
fix (security): Messages published with Redis through websocket publisher
may result in worker crash (bug introduced in 1.1.5)
fix: nchan_pubsub setting may not be parsed correctly
1.1.7 (Jul. 3 2017)
fix: possible read-after-free after redis disconnect
fix: publishing to redis cluster before it is connected results in worker crash
fix: possible use-after-free for suddenly disconnected longpoll-multipart subscriber
fix: possible use-after-free when using nchan_authorize_request for slow subscribers and slow upstream
fix: nchan_stub_status "stored messages" value could be incorrect when using Redis
1.1.6 (May 9 2017)
fix: messages published through Redis may crash worker (introduced in 1.1.5)
fix (security): urlencoded message id in url parsed incorrectly can result in worker crash
1.1.5 (May 3 2017)
feature: get current Nchan version through $nchan_version variable
and nchan_stub_status
fix (security): invalid memory access for multiplexed channel subscribers
with buffered output (Thanks Casey Forbes (@caseyf) for debugging.)
fix: "redis pending commands" nchan_stub_status stat could be wrong after
deleting channels
fix: invalid memory access when using Redis under high load
fix: possible "message from the past" errors under high publishing load
fix: graceful publisher/subscriber notifications when out of shared memory
(via HTTP 507 Insufficient Storage status code)
fix: compatibility with limit_except directive
1.1.4 (Apr. 25 2017)
fix (security): possible memory corruption using multiplexed channels
at high load (Thanks Giovanni Caporaletti (@TrustNoOne) for debugging.)
fix: possible crash when reconnecting to Redis cluster (introduced in 1.1.3)
1.1.3 (Mar. 25 2017)
fix (security): incorrect handling of WS optimization could trigger SIGABRT
fix: Redis cluster reconnect readiness verification
1.1.2 (Mar. 1 2017)
change: "interprocess alert X delayed by Y sec" log messages downgraded
from ERROR to NOTICE
fix: "group info string too short" error
fix: Incorrect handling of connections to Redis cluster nodes with round-robin
DNS hostnames (Thanks to ring.com for sponsoring this fix!)
1.1.1 (Feb. 8 2017)
fix: incorrect stats for nchan_stub_status after reload.
(Stats are no longer reset after reload)
fix: websocket subscriber may receive two CLOSE frames
fix: websocket with ws+meta.nchan subprotocol did not receive empty messages
feature: websocket client heartbeats with nchan_websocket_client_heartbeat
fix: websocket now echoes code and reason when connection close initiated from client
1.1.0 (Jan. 4 2017)
feature: websocket subscribers now receive "application/octet-stream" messages
in binary frame rather than text
fix: publisher request variables not always passed to nchan_publisher_upstream_request
feature: Redis storage 'backup' mode strictly for data persistence
fix: possible lingering subscriber if connection is closed just before subscribing
fix: possible memory leak when using multiplexed channels
security fix: subscribing with If-Modified-Since and without If-None-Match headers
crashed the Nginx worker (thanks @supertong)
security fix: sending an empty message to multipart/mixed subscriber crashed Nginx worker
fix: publisher & subscriber response codes were logged incorrectly
fix: websocket subscriber memory leak on upstream authentication failure
fix: possible crash after reloading when using several instances of Nchan with Redis
feature: nchan_access_control_allow_origin can accept nginx variables
feature: Redis key namespaces
feature: all size configurations can now parse decimal values
fix: off-by-one subscriber count when using multiplexed channels
feature: accounting and dynamic limits for channel groups
1.0.8 (Nov. 28 2016)
fix: possible crash under severely heavy load, introduced in 1.0.7 with stack-overflow fix
1.0.7 (Nov. 27 2016)
fix: memory leak after websocket publisher uncleanly aborts connection
fix: misbehaving websocket publisher with nchan_publisher_upstream_request
fix: potential stack overflow with very large message buffers
fix: invalid memory access with empty nchan_publisher_upstream_request for websocket publisher
fix: incorrect handling of chunked response from nchan_publisher_upstream_request
fix: publishing through websocket too fast may result in buffered messages that never arrive
fix: DELETE to multiplexed channel should delete all listed channels
fix: abort if publishing to multiple channels while using redis
1.0.6 (Nov. 15 2016)
fix: large messages were sometimes incorrectly cleaned up, leaving behind temp files
fix: file descriptor leak when listening on a unix socket and suddenly
aborting client connections
fix: invalid memory access after reloading twice with redis enabled
fix: crash after shutting down nginx when 'master_process' set to 'off'
change: nchan_max_channel_subscribers now always refers to subscribers on this instance of
Nchan, even when using Redis.
feature: subscribe/unsubscribe callbacks with nchan_subscribe_request and nchan_unsubscribe_request
1.0.4 (Oct. 28 2016)
security: fix crash when receiving large messages over websocket with ws+nchan subprotocol
1.0.3 (Sept. 3 2016)
feature: nchan_message_timeout and nchan_message_buffer_length
can now use nginx variables for dynamic values
fix: unsolicited websocket PONGs disconnected the subscriber in violation of RFC6455
fix: possible script error when getting channel from Redis
fix: possible incorrect message IDs when using Redis (thanks @supertong)
security: possible invalid memory access on publisher GET, POST, or DELETE when
using Redis and the publisher connection is terminated before receiving
a response
fix: correct publisher response code when nchan_authorize_request is unavailable
(502 instead of 500)
security: crash if publisher POSTs request with no Content-Length header when
using nchan_authorize_request
1.0.2 (Aug. 29 2016)
fix: more informative missed-message warnings
fix: invalid memory access when Redis enabled without setting server URL
fix: incomplete redis channel deletion
fix: Redis command responses may not be processed after large message
until next command
feature: catch up with missed messages after reconnecting to Redis cluster
fix: possible invalid memory access after disconnecting from Redis cluster
fix: Redis-stored unbuffered messages may not be delivered
fix: possible invalid memory access when using previously idling channels
fix: invalid memory access if publisher POST request's connection terminates
before receiving response
fix: messages published rapidly to Redis via different Ncnan servers may
be received out of order
fix: possible stack overflow when receiving messages through Redis
for multiplexed channels
fix: channels with 'nchan_store_messages off' published 1 message per second
fix: issue warning when out-of-order published message is detected
fix: Redis cluster compatibility with channel ids containing '}' character
fix: Redis-stored channel deleted too quickly when publishing short-lived messages
1.0.1 (Aug. 22 2016)
feature: nchan_stub_status shared memory accounting
fix: various compiler warnings
1.0.0 (Aug. 20 2016)
fix: incorrectly repeated subscriber_enqueue channel events
fix: badly handled Redis messages with TTL < 1 (again)
fix: websocket didn't close connection on PING fail
feature: nchan_stub_status stats location
fix: bad memory access for Redis channels when unsubscribing and very busy
optimize: SSE2 & AVX2 optimizations for websocket frame unmasking
feature: Redis Cluster support
(WARNING:) data in Redis from previous versions will be inaccessible
feature: different locations can use different Redis servers
feature: nchan_subscriber_first_message can take a number (positive or negative)
for nth message (from first or last)
feature: expire Redis-stored idle channels with nchan_redis_idle_channel_cache_timeout
fix: some multiplexed channels never garbage-collected when inactive
fix: unbuffered message garbage collector was too lazy
fix: update nchan_message_buffer_length correctly when using Redis (thanks @supertong)
fix: incorrect handling of missing/expired messages in multiplexed channels
fix: memory leak when publishing via Websocket on a pubsub location
fix: multiplexed channel DELETE when using Redis handled incorrectly
fix: rare Redis script error when publishing message
fix: Redis connection ping infinite loop when reloading
fix: crash if Redis message TTL less than 1 sec
fix: message delivery occasionally stopped when using Redis
and rapidly publishing messages
fix: logpoll-multipart sometimes failed to respond when using Redis
and rapidly publishing messages
fix: don't crash if Redis server is busy loading data
0.99.16 (Jun 10 2016)
fix: invalid memory access when upstream subscriber authorize request failed
fix: longpoll-multipart subscriber was managed incorrectly on channel deletion
fix: subscribers may not receive messages after Redis reconnection
0.99.15 (May 31 2016)
feature: Redis client keepalive configurable with nchan_redis_ping_interval
feature: try to reconnect to Redis after lost connection to Redis
fix: invalid memory access after lost connection to Redis
fix: use-after-free error if subscriber disconnects before response
from upstream authorize server (thanks Filip Jenicek)
fix: corrupt longpoll-multipart boundary data with long messages
feature: 'raw' mode for longpoll-multipart
feature: http-raw-stream client, like Push Stream Module's 'stream' mode
fix: incomplete longpoll-multipart response when using Redis
fix: "subrequests cycle" error for websocket publisher for nginx > 1.9.4
fix: nchan_channel_id_split_delimiter inheritance
fix: subscriber memory leak from 0.99.8
fix: reload crash from 0.99.14
0.99.14 (May 4 2016)
fix: trailing NULL character in Publisher response content-type for json, xml, and yaml
fix: don't crash when out of shared memory
fix: invalid memory access when using nchan_publisher_upstream_request with websocket
fix: incorrect stored messages count when using Redis store
fix: incorrect last_message_id on publisher GETs (memstore and Redis)
fix: incorrect behavior when subscribing right after startup before all workers are ready
fix: some internal event loop timers were not being canceled, leading to slow shutdown
fix: resuming some subscribers with valid message ids didn't work when using Redis store
fix: possible invalid memory access when restarting Nginx after using multiplexed channels
fix: accept url-encoded message ids
feature: add ws+meta.nchan websocket subprotocol that include message metadata
fix: all requests after X-Accel-Redirect from upstream were treated as GETs
0.99.13 (Apr. 20 2016)
fix: invalid content-length for nchan_authorize_request publisher requests
fix: "subrequests cycle" error after 200 websocket publish requests
fix: zero-size buf warning when publishing empty messages via websocket
fix: nchan_max_channel_subscribers was ignored
fix: use a blocking Redis connection for commands during shutdown to ensure commands are sent
fix: better TTL handling for Redis keys
0.99.12 (Apr. 10 2016)
fix: SPDY compatibility with EventSource and multipart/mixed subscribers
fix: warnings when shutting down Redis storage
feature: use system's hiredis library if present
fix: incorrect handling of missing messages when publishing to Redis
0.99.11 (Apr. 3 2016)
feature: nchan can be built as a dynamic module (for nginx >= 1.9.11)
0.99.10 (Apr. 2 2016)
fix: messages not freed until expired after being deleted from channel
fix: buffering and output issues for large messages
update: hiredis updated to v0.13.3
fix: Redis publishing and subscribing memory leaks
optimize: per-channel Redis subscriber counts batched into 100-ms intervals
to prevent Redis roundtrip floods
fix: Redis subscriber memory leak
refactor: extracted shared subscriber and message store logic
fix: use-after-free error for Redis channels without subscribers
fix: channel readying logic sometimes got confused and tripped up assert()s
fix: even more proper handling of websocket close frames
change: 408 Request Timeout instead of 304 No Content status code for timed out subscribers
0.99.8 (Mar. 13 2016)
fix: multipart/mixed subscriber output issues
fix: memory leak for multiplexed > 4 channels
fix: invalid memory access for aborted subscriber connection with Redis
and nchan_subscribe_existing_channels_only
fix: accept websocket binary data frames
fix: proper handling of websocket close frames
fix: incorrect expire calculation for cached Redis-stored messages
fix: double free for multiplexed >4 websocket subs
0.99.7 (Mar. 10 2016)
fix: websocket infinite ping loop after reload
feature: nchan_subscriber_message_id_custom_etag_header for misbehaving proxies that eat etags
fix: 100% cpu after lost Redis connection
fix: refined CORS cross-origin access control headers and logic
fix: longpoll subscriber in multipart mode didn't output all messages
fix: longpoll subscriber in multipart mode could access invalid memory
fix: compatibility with supported Redis versions < 2.8.14
fix: nchan_message_timeout 0 should not expire messages
0.99.6 (Feb. 22 2016)
fix: SIGHUP reloading under load
0.99.5 (Feb 15 2016)
fix: publishing with client_body_in_file_only enabled
0.99.4 (Feb 12 2016)
fix: invalid memory access in channel DELETE response
fix: race condition in IPC during channel creation (thanks vtslothy)
0.99.3 (Feb 10 2016)
fix: SIGHUP reloading
fix: startup with insufficient file descriptors shouldn't crash
fix: longpoll-multipart failure to immediately respond
fix: longpoll-multipart abort handling
fix: Redis-store cached message timeouts
fix: Redis connection-lost handling
fix: startup with 'master_process off' (single-process mode)
feature: EventSource 'event:' line support with custom header or config
0.98 (Jan 21 2016)
feature: publish to multiple channels with one request
feature: nchan_longpoll_multipart_response config setting
fix: large message (in-file) handling for multipart/mixed and chunked subscribers
fix: 400 Bad Request error on 32-bit systems
fix: memory allocation error for >8 multi-channel subscribers
0.97 (Jan 5 2016)
fix: build issues with debian
fix: compatibility with nginx versions down to 1.0.15
fix: publishing bug introduced in 0.96
0.961 (Jan 4 2016)
fix: compiler warning
0.96 (Jan 1. 2016)
feature: websocket ping with nchan_websocket_ping_interval
fix: unsafe memory access for Redis publisher
feature: nchan_publisher_upstream_request
fix: http/2 compatibility for EventSource and multipart/mixed
fix: nchan_authorize_request for publisher location endpoints
fix: publishing long (stored in file) messages to Redis-store
0.95 (Dec. 24 2015)
feature: configurable nchan_access_control_origin_header, default to *
fix: recognize non-preflighted CORS requests
fix: Redis invalid memory access after timeout
0.94 (Dec. 22 2015)
feature: last mesage id in channel info response
feature: subscribe up to 255 channel ids using nchan_channel_id_split_delimiter
fix: tried connecting to Redis when not needed
change: "last requested" no longer has a -1 value for 'never requested'.
fix: "last requested" in channel info sometimes not updated
fix: deleting empty channels
change: more compact message ids
0.931 (Dec. 14 2015)
optimize: inter-process internal subscriber fetched too many messages
0.93 (Dec. 12 2015)
feature: optionally only use Etag for subscriber message id
feature: optionally get requested message id from variable config
0.92 (Dec. 11 2015)
feature: HTTP multipart/mixed subscriber
fix: EventSource bad memory access on disconnect
feature: HTTP chunked encoding subscriber
fix: resolved some strict compiler warnings
fix: more stringent out-of-memory detection during response output. thanks @woodyhymns
fix: less-than-optimal cache filename handling. thanks @ZhouBox
fix: incorrect EventSource charset in header. thanks @eschultz
fix: segfault when websocket publishes message and immediately disconnects
fix: Duplicate "Connection: Upgrade" header for websocket handshake. thanks @eschultz
0.904 (Dec. 7 2015)
fix: more flexible Websocket handshake for "Connection" header. thanks @eschultz
fix: out-of-memory safety check. thanks @woodyhymns
0.903 (Dec 3 2015)
fix: better Redis engine connection initializer
change: simpler message buffer settings
fix: more backwards-compatibility for pushmodule config settings
0.9 (Dec. 2 2015) - first beta pre-release tag after rebranding as Nchan
feature: meta channel events: track when subscribers connect and disconnect, and when messages are
published, with configurable event strings
feature: request authorization: send upstream request before publishing or subscribing.
works just like the auth_request module.
feature: channel multiplexing. up to 4 channels can be subscribed to from a single location
fix: channel ids were not set within if statements in the nginx config
feature: hybrid memstore + Redis storage. local caching + distributed message publishing, the best
of both worlds. (still slower than pure memstore though)
feature: pubsub locations, optional separate publisher and subscriber channel ids per location
feature: websocket publisher support
name change: we're nchan now. code renamed, and cleaned up. config options are backwards-compatible.
feature: websocket subscriber support
huge refactor: completely new in-memory storage engine. No more global lock.
Actually, no more locks at all!
feature: Redis storage engine.
0.73 (Sep. 2 2014)
fix: turning on gzip cleared Etag subscriber response header
fix: channels incorrectly deleted when overwhelmed with connections
feature: CORS support via OPTIONS request method response
fix: file descriptor leak when restarting nginx via SIGHUP
improve: concurrency for interprocess notifications
refactor: completely encapsulated message store
fix: slow memory leak introduced in 0.7
fix: memory leak when not using message buffer
0.712 (Mar. 21 2014)
fix: intermittently dropped long-polling connections on internal redirects
fix: unable to proxy long-polling subscribers. (thanks wandenberg and sanmai)
0.711 (Mar. 13 2014)
fix: incompatibility with cache manager (proxy_cache and fastcgi_cache directives)
0.71 (Mar. 1 2014)
fix: removed unused variables and functions to quiet down GCC
0.7: (Feb. 20 2014)
fix: last-in concurrency setting wasn't working reliably
refactor: partially separated message storage. add a test harness.
fix: segfault from concurrency bug while garbage-collecting channels
fix: some large messages got lost
0.692 (Feb. 3 2010)
fix: error log reported failed close() for some publisher requests with large messages
fix: occasional memory leak during message deletion
fix: worker messages intended for dead worker processes were not deleted
0.691 (Feb. 2 2010)
fix: server reload (via SIGHUP signal) was failing
fix: segfault on messages longer than client_body_buffer_size (thanks wfelipe)
change: removed push_min_message_recipients, added push_delete_oldest_received_message
0.69 (Nov. 17 2009)
fix: publisher got a 201 Created response even if the channel had no subscribers at the time (should be 202 Accepted)
fix: small memory leak after each message broadcast to a channel
feature: optional push_max_channel_subscribers setting added
fix: first-in concurrency setting wasn't responding to subscribers with a correct status code on conflict
fix: reused subscriber connections sometimes failed to receive messages
unfeature: no more nginx 0.6 support. not worth the hassle.
0.683 (Nov. 10 2009)
change: default max. reserved memory size changed form 16MB to 32 MB
change: unused node garbage collection made a little more aggressive (max. 3 unused channels per channel search instead of 1)
fix: unused nodes were deleted only on channel id hash collision (very rare)
fix: segmentation fault from allocating insufficient memory for interprocess messaging
0.681 (Nov. 6 2009)
feature: added push_message_buffer_length setting, which sets push_message_max_buffer_length and push_message_min_buffer_length at once.
fix: publisher channel info text/json response now uses double quotes instead of single.
fix: interprocess messages were not removed from shared memory correctly, causing weird errors
0.68 (Nov. 5 2009)
change: default push_subscriber_concurrency value is now "broadcast"
fix: incorrect error messages for invalid push_pubscriber and push_subscriber_concurrency settings
change: removed deprecated push_buffer_size and push_queue_messages settings
feature: rudimentary content-type negotiation for publisher channel info response.
support text/plain, text/json, text/yaml and application/xml (and mimetype equivalents)
fix: publisher GET response has HTTP status 0
0.67beta (Nov. 4 2009) and older
see git repository
|