@@ -65,6 +65,60 @@ pub enum Frames {
65
65
Snapshot ( SnapshotFile ) ,
66
66
}
67
67
68
+ /// Detailed logs about bytes synced with primary
69
+ pub struct SyncUsageStats {
70
+ prefetched_bytes : u64 ,
71
+ prefetched_bytes_discarded_due_to_new_session : u64 ,
72
+ prefetched_bytes_discarded_due_to_consecutive_handshake : u64 ,
73
+ prefetched_bytes_discarded_due_to_invalid_frame_header : u64 ,
74
+ synced_bytes_discarded_due_to_invalid_frame_header : u64 ,
75
+ prefetched_bytes_used : u64 ,
76
+ synced_bytes_used : u64 ,
77
+ snapshot_bytes : u64 ,
78
+ }
79
+
80
+ impl SyncUsageStats {
81
+ /// Number of bytes prefetched while doing handshake
82
+ pub fn prefetched_bytes ( & self ) -> u64 {
83
+ self . prefetched_bytes
84
+ }
85
+
86
+ /// Number of bytes prefetched and discarded due to the change of the client session
87
+ pub fn prefetched_bytes_discarded_due_to_new_session ( & self ) -> u64 {
88
+ self . prefetched_bytes_discarded_due_to_new_session
89
+ }
90
+
91
+ /// Number of bytes prefetched and discarded due to consecutive handshake with new prefetch
92
+ pub fn prefetched_bytes_discarded_due_to_consecutive_handshake ( & self ) -> u64 {
93
+ self . prefetched_bytes_discarded_due_to_consecutive_handshake
94
+ }
95
+
96
+ /// Number of bytes prefetched and discarded due to invalid frame header in received frames
97
+ pub fn prefetched_bytes_discarded_due_to_invalid_frame_header ( & self ) -> u64 {
98
+ self . prefetched_bytes_discarded_due_to_invalid_frame_header
99
+ }
100
+
101
+ /// Number of bytes synced and discarded due to invalid frame header in received frames
102
+ pub fn synced_bytes_discarded_due_to_invalid_frame_header ( & self ) -> u64 {
103
+ self . synced_bytes_discarded_due_to_invalid_frame_header
104
+ }
105
+
106
+ /// Number of bytes prefetched and used
107
+ pub fn prefetched_bytes_used ( & self ) -> u64 {
108
+ self . prefetched_bytes_used
109
+ }
110
+
111
+ /// Number of bytes synced and used
112
+ pub fn synced_bytes_used ( & self ) -> u64 {
113
+ self . synced_bytes_used
114
+ }
115
+
116
+ /// Number of bytes downloaded as snapshots
117
+ pub fn snapshot_bytes ( & self ) -> u64 {
118
+ self . snapshot_bytes
119
+ }
120
+ }
121
+
68
122
#[ derive( Clone ) ]
69
123
pub ( crate ) struct Writer {
70
124
pub ( crate ) client : client:: Client ,
@@ -210,6 +264,35 @@ impl EmbeddedReplicator {
210
264
} )
211
265
}
212
266
267
+ pub async fn get_sync_usage_stats ( & self ) -> Result < SyncUsageStats > {
268
+ let mut replicator = self . replicator . lock ( ) . await ;
269
+ match replicator. client_mut ( ) {
270
+ Either :: Right ( _) => {
271
+ Err ( crate :: errors:: Error :: Misuse (
272
+ "Trying to get sync usage stats, but this is a local replicator" . into ( ) ,
273
+ ) )
274
+ }
275
+ Either :: Left ( c) => {
276
+ let stats = c. sync_stats ( ) ;
277
+ Ok ( SyncUsageStats {
278
+ prefetched_bytes : stats. prefetched_bytes . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
279
+ prefetched_bytes_discarded_due_to_new_session : stats
280
+ . prefetched_bytes_discarded_due_to_new_session . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
281
+ prefetched_bytes_discarded_due_to_consecutive_handshake : stats
282
+ . prefetched_bytes_discarded_due_to_consecutive_handshake . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
283
+ prefetched_bytes_discarded_due_to_invalid_frame_header : stats
284
+ . prefetched_bytes_discarded_due_to_invalid_frame_header . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
285
+ synced_bytes_discarded_due_to_invalid_frame_header : stats
286
+ . synced_bytes_discarded_due_to_invalid_frame_header . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
287
+ prefetched_bytes_used : stats. prefetched_bytes_used . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
288
+ synced_bytes_used : stats. synced_bytes_used . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
289
+ snapshot_bytes : stats. snapshot_bytes . load ( std:: sync:: atomic:: Ordering :: SeqCst ) ,
290
+ } )
291
+ }
292
+ }
293
+
294
+ }
295
+
213
296
pub async fn sync_oneshot ( & self ) -> Result < Replicated > {
214
297
use libsql_replication:: replicator:: ReplicatorClient ;
215
298
0 commit comments