summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Vatamaniuc <vatamane@apache.org>2022-09-15 00:26:10 -0400
committerNick Vatamaniuc <nickva@users.noreply.github.com>2022-09-15 11:41:56 -0400
commitcb176a69ab6f9a6631826db7df3a133ab1fee3b4 (patch)
tree6e5f825d02c185a9e7952918025e8f6f9a0acf81
parent9fab3868de298b44b931a51d791b1d54bdc3c2ed (diff)
downloadcouchdb-cb176a69ab6f9a6631826db7df3a133ab1fee3b4.tar.gz
Fix eventsource change feed
At some point when the `stop` callback arg got a 3rd `Pending` element, we forgot to update the eventsource callback. As a result, we ended up in a catch-all clause and we appended an unmatched ']' and a json `"last_seq"` element. While at it, clean up of the similar upgrade clauses in other callback instances.
-rw-r--r--src/chttpd/src/chttpd_db.erl2
-rw-r--r--src/global_changes/src/global_changes_httpd.erl8
2 files changed, 2 insertions, 8 deletions
diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 14049bd78..29a9a4157 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -207,7 +207,7 @@ changes_callback(timeout, #cacc{feed = eventsource} = Acc) ->
Chunk = "event: heartbeat\ndata: \n\n",
{ok, Resp1} = chttpd:send_delayed_chunk(Resp, Chunk),
{ok, Acc#cacc{mochi = Resp1, chunks_sent = ChunksSet + 1}};
-changes_callback({stop, _EndSeq}, #cacc{feed = eventsource} = Acc) ->
+changes_callback({stop, _EndSeq, _Pending}, #cacc{feed = eventsource} = Acc) ->
#cacc{mochi = Resp, buffer = Buf} = Acc,
{ok, Resp1} = chttpd:send_delayed_chunk(Resp, Buf),
chttpd:end_delayed_json_response(Resp1);
diff --git a/src/global_changes/src/global_changes_httpd.erl b/src/global_changes/src/global_changes_httpd.erl
index cb4016b63..a71403e7b 100644
--- a/src/global_changes/src/global_changes_httpd.erl
+++ b/src/global_changes/src/global_changes_httpd.erl
@@ -122,9 +122,6 @@ changes_callback({change, Change0}, #acc{feed = "continuous"} = Acc) ->
},
maybe_finish(Acc1)
end;
-changes_callback({stop, EndSeq}, #acc{feed = "continuous"} = Acc) ->
- % Temporary upgrade clause - Case 24236
- changes_callback({stop, EndSeq, null}, Acc);
changes_callback({stop, EndSeq, _Pending}, #acc{feed = "continuous"} = Acc) ->
#acc{resp = Resp} = Acc,
{ok, Resp1} = chttpd:send_delayed_chunk(
@@ -158,7 +155,7 @@ changes_callback(timeout, #acc{feed = "eventsource"} = Acc) ->
Chunk = "event: heartbeat\ndata: \n\n",
{ok, Resp1} = chttpd:send_delayed_chunk(Resp, Chunk),
{ok, {"eventsource", Resp1}};
-changes_callback({stop, _EndSeq}, #acc{feed = "eventsource"} = Acc) ->
+changes_callback({stop, _EndSeq, _Pending}, #acc{feed = "eventsource"} = Acc) ->
#acc{resp = Resp} = Acc,
% {ok, Resp1} = chttpd:send_delayed_chunk(Resp, Buf),
chttpd:end_delayed_json_response(Resp);
@@ -200,9 +197,6 @@ changes_callback({change, Change0}, Acc) ->
},
maybe_finish(Acc1)
end;
-changes_callback({stop, EndSeq}, Acc) ->
- % Temporary upgrade clause - Case 24236
- changes_callback({stop, EndSeq, null}, Acc);
changes_callback({stop, EndSeq, _Pending}, Acc) ->
#acc{resp = Resp} = Acc,
{ok, Resp1} = chttpd:send_delayed_chunk(