@@ -3,17 +3,21 @@ use std::sync::Arc;
33use common:: errors:: MegaError ;
44use git_internal:: {
55 hash:: ObjectHash ,
6- internal:: object:: { commit:: Commit , tree:: Tree } ,
6+ internal:: object:: {
7+ commit:: { ArchivedCommit , Commit } ,
8+ tree:: { ArchivedTree , Tree } ,
9+ } ,
710} ;
811use redis:: { AsyncCommands , aio:: ConnectionManager } ;
12+ use rkyv:: rancor:: Error ;
913
1014#[ derive( Clone ) ]
1115pub struct GitObjectCache {
1216 pub connection : ConnectionManager ,
1317 pub prefix : String ,
1418}
1519
16- const DEFAULT_EXPIRY_SECONDS : u64 = 60 * 60 * 24 * 7 ; // 7 days
20+ const DEFAULT_EXPIRY_SECONDS : u64 = 60 * 60 * 24 ; // 1 days
1721
1822impl GitObjectCache {
1923 pub async fn get_tree < F , Fut > (
@@ -30,16 +34,24 @@ impl GitObjectCache {
3034
3135 if let Ok ( data) = conn. get :: < _ , Vec < u8 > > ( & key) . await
3236 && !data. is_empty ( )
33- && let Ok ( ( tree, _) ) = bincode:: decode_from_slice ( & data, bincode:: config:: standard ( ) )
3437 {
35- return Ok ( Arc :: new ( tree) ) ;
38+ match rkyv:: access :: < ArchivedTree , Error > ( & data) {
39+ Ok ( archived) => {
40+ let tree = rkyv:: deserialize :: < Tree , Error > ( archived) ?;
41+ return Ok ( Arc :: new ( tree) ) ;
42+ }
43+ Err ( err) => {
44+ tracing:: error!( "deserialize failed with fetch key: {:?}, err{:?}" , key, err) ;
45+ }
46+ }
3647 }
3748
3849 let tree_raw = fetch_tree ( oid) . await ?;
50+ let serialized = rkyv:: to_bytes :: < Error > ( & tree_raw) ?;
3951 let tree = Arc :: new ( tree_raw) ;
40-
41- let serialized = bincode :: encode_to_vec ( tree . as_ref ( ) , bincode :: config :: standard ( ) ) ? ;
42- let _ : ( ) = conn . set_ex ( key , serialized , DEFAULT_EXPIRY_SECONDS ) . await ?;
52+ let _ : ( ) = conn
53+ . set_ex ( key , serialized . as_slice ( ) , DEFAULT_EXPIRY_SECONDS )
54+ . await ?;
4355
4456 Ok ( tree)
4557 }
@@ -58,16 +70,24 @@ impl GitObjectCache {
5870
5971 if let Ok ( data) = conn. get :: < _ , Vec < u8 > > ( & key) . await
6072 && !data. is_empty ( )
61- && let Ok ( ( commit, _) ) = bincode:: decode_from_slice ( & data, bincode:: config:: standard ( ) )
6273 {
63- return Ok ( Arc :: new ( commit) ) ;
74+ match rkyv:: access :: < ArchivedCommit , Error > ( & data) {
75+ Ok ( archived) => {
76+ let commit = rkyv:: deserialize :: < Commit , Error > ( archived) ?;
77+ return Ok ( Arc :: new ( commit) ) ;
78+ }
79+ Err ( err) => {
80+ tracing:: error!( "deserialize failed with fetch key: {:?} err{:?}" , key, err) ;
81+ }
82+ }
6483 }
6584
6685 let commit_raw = fetch_commit ( oid) . await ?;
86+ let serialized = rkyv:: to_bytes :: < Error > ( & commit_raw) ?;
6787 let commit = Arc :: new ( commit_raw) ;
68-
69- let serialized = bincode :: encode_to_vec ( commit . as_ref ( ) , bincode :: config :: standard ( ) ) ? ;
70- let _ : ( ) = conn . set_ex ( key , serialized , DEFAULT_EXPIRY_SECONDS ) . await ?;
88+ let _ : ( ) = conn
89+ . set_ex ( key , serialized . as_slice ( ) , DEFAULT_EXPIRY_SECONDS )
90+ . await ?;
7191
7292 Ok ( commit)
7393 }
0 commit comments