@@ -17,6 +17,7 @@ use tracing::Instrument;
1717
1818use crate :: actor:: context:: ActorContext ;
1919use crate :: actor:: keys:: { LAST_PUSHED_ALARM_KEY , PERSIST_DATA_KEY , make_connection_key} ;
20+ use crate :: actor:: kv:: APPLY_BATCH_CHUNK_SIZE ;
2021use crate :: actor:: messages:: StateDelta ;
2122use crate :: actor:: persist:: {
2223 decode_latest_with_embedded_version, encode_latest_with_embedded_version,
@@ -339,11 +340,21 @@ impl ActorContext {
339340 ( puts, deletes, next_state, revision, self . begin_write ( ) )
340341 } ;
341342
342- self . 0
343- . kv
344- . apply_batch ( & puts, & deletes)
345- . await
346- . context ( "persist actor state deltas to kv" ) ?;
343+ // TODO: make this atomic; store in sqlite
344+ let mut put_chunks = puts. chunks ( APPLY_BATCH_CHUNK_SIZE ) ;
345+ let mut delete_chunks = deletes. chunks ( APPLY_BATCH_CHUNK_SIZE ) ;
346+ loop {
347+ let put_chunk = put_chunks. next ( ) . unwrap_or ( & [ ] ) ;
348+ let delete_chunk = delete_chunks. next ( ) . unwrap_or ( & [ ] ) ;
349+ if put_chunk. is_empty ( ) && delete_chunk. is_empty ( ) {
350+ break ;
351+ }
352+ self . 0
353+ . kv
354+ . apply_batch ( put_chunk, delete_chunk)
355+ . await
356+ . context ( "persist actor state deltas to kv" ) ?;
357+ }
347358
348359 if let Some ( state) = next_state {
349360 * self . 0 . current_state . write ( ) = state;
0 commit comments