88// the Business Source License, use of this software will be governed
99// by the Apache License, Version 2.0.
1010
11- use std:: io:: Cursor ;
1211use std:: ops:: ControlFlow ;
1312
1413use bytestring:: ByteString ;
@@ -46,7 +45,7 @@ fn peek_inbox<S: StorageAccess>(
4645 storage : & mut S ,
4746 service_id : & ServiceId ,
4847) -> Result < Option < SequenceNumberInboxEntry > > {
49- let key = InboxKey :: default ( )
48+ let key = InboxKey :: builder ( )
5049 . partition_key ( service_id. partition_key ( ) )
5150 . service_name ( service_id. service_name . clone ( ) )
5251 . service_key ( service_id. key . clone ( ) ) ;
@@ -67,7 +66,7 @@ fn inbox<S: StorageAccess>(
6766 storage : & mut S ,
6867 service_id : & ServiceId ,
6968) -> Result < impl Stream < Item = Result < SequenceNumberInboxEntry > > + Send > {
70- let key = InboxKey :: default ( )
69+ let key = InboxKey :: builder ( )
7170 . partition_key ( service_id. partition_key ( ) )
7271 . service_name ( service_id. service_name . clone ( ) )
7372 . service_key ( service_id. key . clone ( ) ) ;
@@ -113,10 +112,13 @@ impl ScanInboxTable for PartitionStore {
113112 TableScan :: FullScanPartitionKeyRange :: < InboxKey > ( range) ,
114113 move |( mut key, mut value) | {
115114 let key = break_on_err ( InboxKey :: deserialize_from ( & mut key) ) ?;
116- let sequence_number = * break_on_err ( key. sequence_number_ok_or ( ) ) ?;
117115 let inbox_entry = break_on_err ( InboxEntry :: decode ( & mut value) ) ?;
118116
119- f ( SequenceNumberInboxEntry :: new ( sequence_number, inbox_entry) ) . map_break ( Ok )
117+ f ( SequenceNumberInboxEntry :: new (
118+ key. sequence_number ,
119+ inbox_entry,
120+ ) )
121+ . map_break ( Ok )
120122 } ,
121123 )
122124 . map_err ( |_| StorageError :: OperationalError )
@@ -150,11 +152,12 @@ impl WriteInboxTable for PartitionStoreTransaction<'_> {
150152 let service_id = inbox_entry. service_id ( ) ;
151153 self . assert_partition_key ( service_id) ?;
152154
153- let key = InboxKey :: default ( )
154- . partition_key ( service_id. partition_key ( ) )
155- . service_name ( service_id. service_name . clone ( ) )
156- . service_key ( service_id. key . clone ( ) )
157- . sequence_number ( inbox_sequence_number) ;
155+ let key = InboxKey {
156+ partition_key : service_id. partition_key ( ) ,
157+ service_name : service_id. service_name . clone ( ) ,
158+ service_key : service_id. key . clone ( ) ,
159+ sequence_number : inbox_sequence_number,
160+ } ;
158161
159162 self . put_kv_proto ( key, inbox_entry)
160163 }
@@ -185,50 +188,48 @@ fn delete_inbox_entry(
185188 service_id : & ServiceId ,
186189 sequence_number : u64 ,
187190) -> Result < ( ) > {
188- let key = InboxKey :: default ( )
189- . partition_key ( service_id. partition_key ( ) )
190- . service_name ( service_id. service_name . clone ( ) )
191- . service_key ( service_id. key . clone ( ) )
192- . sequence_number ( sequence_number) ;
191+ let key = InboxKey {
192+ partition_key : service_id. partition_key ( ) ,
193+ service_name : service_id. service_name . clone ( ) ,
194+ service_key : service_id. key . clone ( ) ,
195+ sequence_number,
196+ } ;
193197
194198 txn. delete_key ( & key)
195199}
196200
197- fn decode_inbox_key_value ( k : & [ u8 ] , mut v : & [ u8 ] ) -> Result < SequenceNumberInboxEntry > {
198- let key = InboxKey :: deserialize_from ( & mut Cursor :: new ( k) ) ?;
199- let sequence_number = * key. sequence_number_ok_or ( ) ?;
200-
201+ fn decode_inbox_key_value ( mut k : & [ u8 ] , mut v : & [ u8 ] ) -> Result < SequenceNumberInboxEntry > {
202+ let key = InboxKey :: deserialize_from ( & mut k) ?;
201203 let inbox_entry = InboxEntry :: decode ( & mut v) ?;
202204
203- Ok ( SequenceNumberInboxEntry :: new ( sequence_number, inbox_entry) )
205+ Ok ( SequenceNumberInboxEntry :: new (
206+ key. sequence_number ,
207+ inbox_entry,
208+ ) )
204209}
205210
206211#[ cfg( test) ]
207212mod tests {
208213 use crate :: inbox_table:: InboxKey ;
209- use crate :: keys:: TableKey ;
210- use bytes:: { Bytes , BytesMut } ;
214+ use crate :: keys:: TableKeyPrefix ;
215+ use bytes:: Bytes ;
211216 use restate_types:: identifiers:: { ServiceId , WithPartitionKey } ;
212217
213218 fn message_key ( service_id : & ServiceId , sequence_number : u64 ) -> Bytes {
214219 let key = InboxKey {
215- partition_key : Some ( service_id. partition_key ( ) ) ,
216- service_name : Some ( service_id. service_name . clone ( ) ) ,
217- service_key : Some ( service_id. key . clone ( ) ) ,
218- sequence_number : Some ( sequence_number ) ,
220+ partition_key : service_id. partition_key ( ) ,
221+ service_name : service_id. service_name . clone ( ) ,
222+ service_key : service_id. key . clone ( ) ,
223+ sequence_number,
219224 } ;
220- let mut buf = BytesMut :: new ( ) ;
221- key. serialize_to ( & mut buf) ;
222- buf. freeze ( )
225+ key. serialize ( ) . freeze ( )
223226 }
224227
225228 fn inbox_key ( service_id : & ServiceId ) -> Bytes {
226- let key = InboxKey {
227- partition_key : Some ( service_id. partition_key ( ) ) ,
228- service_name : Some ( service_id. service_name . clone ( ) ) ,
229- service_key : Some ( service_id. key . clone ( ) ) ,
230- sequence_number : None ,
231- } ;
229+ let key = InboxKey :: builder ( )
230+ . partition_key ( service_id. partition_key ( ) )
231+ . service_name ( service_id. service_name . clone ( ) )
232+ . service_key ( service_id. key . clone ( ) ) ;
232233
233234 key. serialize ( ) . freeze ( )
234235 }
0 commit comments