9
9
PartitionTransactionStatus ,
10
10
validate_transaction_status ,
11
11
)
12
+ from quixstreams .state .exceptions import StateSerializationError
12
13
from quixstreams .state .metadata import DEFAULT_PREFIX , SEPARATOR
13
14
from quixstreams .state .recovery import ChangelogProducer
14
15
from quixstreams .state .serialization import (
15
16
DumpsFunc ,
16
17
LoadsFunc ,
18
+ deserialize ,
17
19
serialize ,
18
20
)
19
21
from quixstreams .state .types import ExpiredWindowDetail , WindowDetail
@@ -360,7 +362,8 @@ def expire_all_windows(
360
362
end = end ,
361
363
prefix = prefix ,
362
364
)
363
- yield (start , end ), aggregated , collected , prefix
365
+ deserialized_prefix = self ._deserialize_prefix (prefix )
366
+ yield (start , end ), aggregated , collected , deserialized_prefix
364
367
365
368
else :
366
369
# If we don't have a saved last_expired value it means one of two cases
@@ -382,7 +385,8 @@ def expire_all_windows(
382
385
prefix = prefix ,
383
386
)
384
387
385
- yield (start , end ), aggregated , collected , prefix
388
+ deserialized_prefix = self ._deserialize_prefix (prefix )
389
+ yield (start , end ), aggregated , collected , deserialized_prefix
386
390
387
391
if delete :
388
392
for prefix , start , end in to_delete :
@@ -394,6 +398,12 @@ def expire_all_windows(
394
398
prefix = b"" , cache = self ._last_expired_timestamps , timestamp_ms = last_expired
395
399
)
396
400
401
+ def _deserialize_prefix (self , prefix : bytes ) -> Any :
402
+ try :
403
+ return deserialize (prefix , loads = self ._loads )
404
+ except StateSerializationError :
405
+ return prefix
406
+
397
407
def delete_windows (
398
408
self , max_start_time : int , delete_values : bool , prefix : bytes
399
409
) -> None :
0 commit comments