Double Buffering with Cloudflare Queues
bellone.com
bellone.com
I don't see how you are building the batches, but there's a lot of complexity around batch sizes, acknowledging that the messages were consumed, etc. Having a single dataset.json.gz per hour feels like a hint this isn't done safely. I'd double check that carefully to avoid losing data.
One tip about compression, I've been really pleased with zstd compression of json/jsonl data.
Ugly code though.
// env
QUEUES = [EVEN_QUEUE, ODD_QUEUE]
// producers
env.QUEUES[hour % 2].send …
// consumer
env.QUEUES[1 + hour % 2]// results in index 1 or 2 as js has precedence for */% over +-
So something like the following, for your desired visual succinctness? ...
env.QUEUES[hour % 2 ^ 1]
// results in desired js index 0 or 1
I wonder if any of you using AI code assistance regularly might tell an old hack like me if your code review tools would have caught such a bug?
I couldn’t tell you if AI code assistants would write this, or catch it - ironically enough, “the perils of programming in plain text” is one of my stated reasons for eschewing AI assistance.
Given that the succinctness just bit me, I’m inclined to sacrifice it and go with
// over the range 0..23, +1 gives the same result%2 as -1, and also handles edge case of 0
const lastHour = new Date().getUTCHours() + 1
…
env.QUEUES[lastHour % 2]
Fundamentally I guess I was just objecting to doing arithmetic in the time domain to achieve negating a boolean.