Greg-McKeon
07/22/2021, 4:02 PMWallacy
07/22/2021, 7:12 PMjohn.spurlock
07/23/2021, 4:36 PMjohn.spurlock
07/23/2021, 4:40 PMstate.blockConcurrencyWhile() take a void-returning async closure? I'm assuming it holds pending subsequent requests in order until it completes? If the closure throws, what happens to the pending requests?kenton
07/23/2021, 8:37 PMblockConcurrencyWhile() itself. Everything else going on in the object is paused while the callback runs (including while the callback awaits things) -- so no new requests will be delivered, but also any subrequest responses will be paused too (unless those subrequests were made by the callback itself), etc. If it throws an exception, then we assume the durable object has been left in a bad state and we reset it.kenton
07/23/2021, 8:39 PMkenton
07/23/2021, 8:42 PMkenton
07/23/2021, 8:43 PMjohn.spurlock
07/23/2021, 8:46 PMkenton
07/23/2021, 9:11 PMkenton
07/23/2021, 9:22 PMjohn.spurlock
07/23/2021, 9:54 PMjohn.spurlock
07/23/2021, 10:21 PMlist calls never return, and deadlock the DO instance for all subsequent storage ops. if get is called prior to list, it will succeed - but if after, it hangsjohn.spurlock
07/23/2021, 10:24 PMlimit to list seems to have no effect - same problemjohn.spurlock
07/23/2021, 10:49 PMkenton
07/23/2021, 11:22 PMjohn.spurlock
07/23/2021, 11:31 PMget, then a list with a prefix. If the list limit is not provided (I was not providing one), or too large, the list will never return, and will lock out all subsequent storage operations for that instance from any caller. The list call is at most 4096 items. Would it be possible to throw in this case instead of hanging? It is basically unrecoverable. I will retry using multiple small list calls and see if that works around it so I'm not completely dead in the water.kenton
07/23/2021, 11:54 PMjohn.spurlock
07/24/2021, 12:10 AMkenton
07/24/2021, 12:13 AMkenton
07/24/2021, 12:14 AMWallacy
07/24/2021, 12:15 AMjohn.spurlock
07/24/2021, 1:03 AMkenton
07/24/2021, 1:21 AMkenton
07/24/2021, 1:29 AMfetch() calls that are interrupted by the reset... you aren't seeing anything thrown on the stateless worker side?john.spurlock
07/24/2021, 2:36 PMjohn.spurlock
07/24/2021, 3:02 PMkenton
07/24/2021, 6:15 PMjohn.spurlock
07/24/2021, 6:52 PMlist and summed up the byte size - doesn't seem to be a large amount of data to store in a memory structure. It was working just fine with this amount of data prior to the big storage change. Maybe list itself creates unreclaimable memory? I'm now doing multiple list calls with a limit of 512 to workaround that hanging-list-of-death issue.