@@ -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,
@@ -349,11 +350,21 @@ impl ActorContext {
349350 ( puts, deletes, next_state, revision, self . begin_write ( ) )
350351 } ;
351352
352- self . 0
353- . kv
354- . apply_batch ( & puts, & deletes)
355- . await
356- . context ( "persist actor state deltas to kv" ) ?;
353+ // TODO: make this atomic; store in sqlite
354+ let mut put_chunks = puts. chunks ( APPLY_BATCH_CHUNK_SIZE ) ;
355+ let mut delete_chunks = deletes. chunks ( APPLY_BATCH_CHUNK_SIZE ) ;
356+ loop {
357+ let put_chunk = put_chunks. next ( ) . unwrap_or ( & [ ] ) ;
358+ let delete_chunk = delete_chunks. next ( ) . unwrap_or ( & [ ] ) ;
359+ if put_chunk. is_empty ( ) && delete_chunk. is_empty ( ) {
360+ break ;
361+ }
362+ self . 0
363+ . kv
364+ . apply_batch ( put_chunk, delete_chunk)
365+ . await
366+ . context ( "persist actor state deltas to kv" ) ?;
367+ }
357368
358369 if let Some ( state) = next_state {
359370 * self . 0 . current_state . write ( ) = state;
0 commit comments