@@ -280,6 +280,27 @@ impl InstanceMetaRepository {
280280 Ok ( ( ) )
281281 }
282282
283+ pub async fn batch_update_metadata (
284+ & mut self ,
285+ records_map : HashMap < ServiceKey , Vec < InstanceMetaDto > > ,
286+ ) -> anyhow:: Result < ( ) > {
287+ let mut file_map_changed = false ;
288+ for ( service_key, records) in records_map {
289+ if let Some ( file_name) = self . file_map . get ( & service_key) {
290+ self . write_records_to_file ( file_name, & records) . await ?;
291+ } else {
292+ let file_name = Uuid :: new_v4 ( ) . simple ( ) . to_string ( ) ;
293+ self . write_records_to_file ( & file_name, & records) . await ?;
294+ self . file_map . insert ( service_key, file_name) ;
295+ file_map_changed = true ;
296+ }
297+ }
298+ if file_map_changed {
299+ self . save_file_map ( ) . await ?;
300+ }
301+ Ok ( ( ) )
302+ }
303+
283304 pub async fn remove_metadata ( & mut self , service_keys : & [ ServiceKey ] ) -> anyhow:: Result < ( ) > {
284305 for service_key in service_keys {
285306 if let Some ( file_name) = self . file_map . remove ( service_key) {
@@ -303,7 +324,10 @@ impl InstanceMetaRepository {
303324 ) -> anyhow:: Result < Vec < InstanceMetaDto > > {
304325 match self . file_map . get ( service_key) {
305326 Some ( file_name) => {
306- let records = self . read_records_from_file ( file_name) . await ?;
327+ let records = self
328+ . read_records_from_file ( file_name)
329+ . await
330+ . unwrap_or_default ( ) ;
307331 Ok ( records. into_iter ( ) . map ( |r| r. into ( ) ) . collect ( ) )
308332 }
309333 None => Ok ( Vec :: new ( ) ) ,
@@ -315,7 +339,10 @@ impl InstanceMetaRepository {
315339 ) -> anyhow:: Result < Vec < ( ServiceKey , Vec < InstanceMetaDto > ) > > {
316340 let mut result = Vec :: new ( ) ;
317341 for ( service_key, file_name) in & self . file_map {
318- let records = self . read_records_from_file ( file_name) . await ?;
342+ let records = self
343+ . read_records_from_file ( file_name)
344+ . await
345+ . unwrap_or_default ( ) ;
319346 let metas = records. into_iter ( ) . map ( |r| r. into ( ) ) . collect ( ) ;
320347 result. push ( ( service_key. clone ( ) , metas) )
321348 }
@@ -363,6 +390,9 @@ impl InstanceMetaRepository {
363390 InstanceMetaRepositoryReq :: UpdateMetadata ( service_key, metas) => {
364391 self . update_metadata ( & service_key, metas) . await ?
365392 }
393+ InstanceMetaRepositoryReq :: UpdateBatch ( records_map) => {
394+ self . batch_update_metadata ( records_map) . await ?
395+ }
366396 InstanceMetaRepositoryReq :: RemoveMetadata ( keys) => self . remove_metadata ( & keys) . await ?,
367397 InstanceMetaRepositoryReq :: GetServiceList => {
368398 let keys = self . list_services ( ) ;
@@ -401,6 +431,7 @@ impl Actor for InstanceMetaRepository {
401431#[ rtype( result = "anyhow::Result<InstanceMetaRepositoryResult>" ) ]
402432pub enum InstanceMetaRepositoryReq {
403433 UpdateMetadata ( ServiceKey , Vec < InstanceMetaDto > ) ,
434+ UpdateBatch ( HashMap < ServiceKey , Vec < InstanceMetaDto > > ) ,
404435 RemoveMetadata ( Vec < ServiceKey > ) ,
405436 Clear ,
406437 GetServiceList ,
0 commit comments