|
|
@ -243,9 +243,13 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData |
|
|
|
} |
|
|
|
} |
|
|
|
}() |
|
|
|
}() |
|
|
|
skipDeletion := false |
|
|
|
skipDeletion := false |
|
|
|
|
|
|
|
skipNotice := false |
|
|
|
if len(skipDeletionAndNotice) > 0 { |
|
|
|
if len(skipDeletionAndNotice) > 0 { |
|
|
|
skipDeletion = skipDeletionAndNotice[0] |
|
|
|
skipDeletion = skipDeletionAndNotice[0] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if len(skipDeletionAndNotice) > 1 { |
|
|
|
|
|
|
|
skipNotice = skipDeletionAndNotice[1] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// If both server and local data are empty, log and return.
|
|
|
|
// If both server and local data are empty, log and return.
|
|
|
|
if len(serverData) == 0 && len(localData) == 0 { |
|
|
|
if len(serverData) == 0 && len(localData) == 0 { |
|
|
@ -271,10 +275,12 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData |
|
|
|
log.ZError(ctx, "sync insert failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
log.ZError(ctx, "sync insert failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if !skipNotice { |
|
|
|
if err := s.onNotice(ctx, Insert, server, local, notice); err != nil { |
|
|
|
if err := s.onNotice(ctx, Insert, server, local, notice); err != nil { |
|
|
|
log.ZError(ctx, "sync notice insert failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
log.ZError(ctx, "sync notice insert failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
continue |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -283,10 +289,12 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData |
|
|
|
|
|
|
|
|
|
|
|
// If the local and server items are equal, notify and continue.
|
|
|
|
// If the local and server items are equal, notify and continue.
|
|
|
|
if s.eq(server, local) { |
|
|
|
if s.eq(server, local) { |
|
|
|
|
|
|
|
if !skipNotice { |
|
|
|
if err := s.onNotice(ctx, Unchanged, local, server, notice); err != nil { |
|
|
|
if err := s.onNotice(ctx, Unchanged, local, server, notice); err != nil { |
|
|
|
log.ZError(ctx, "sync notice unchanged failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
log.ZError(ctx, "sync notice unchanged failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
continue |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -296,11 +304,13 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData |
|
|
|
log.ZError(ctx, "sync update failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
log.ZError(ctx, "sync update failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if !skipNotice { |
|
|
|
if err := s.onNotice(ctx, Update, server, local, notice); err != nil { |
|
|
|
if err := s.onNotice(ctx, Update, server, local, notice); err != nil { |
|
|
|
log.ZError(ctx, "sync notice update failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
log.ZError(ctx, "sync notice update failed", err, "type", s.ts, "server", server, "local", local) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Check the skipDeletion flag; if set, skip deletion.
|
|
|
|
// Check the skipDeletion flag; if set, skip deletion.
|
|
|
|
if skipDeletion { |
|
|
|
if skipDeletion { |
|
|
@ -315,11 +325,13 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
var server T |
|
|
|
var server T |
|
|
|
|
|
|
|
if !skipNotice { |
|
|
|
if err := s.onNotice(ctx, Delete, server, local, notice); err != nil { |
|
|
|
if err := s.onNotice(ctx, Delete, server, local, notice); err != nil { |
|
|
|
log.ZError(ctx, "sync notice delete failed", err, "type", s.ts, "local", local) |
|
|
|
log.ZError(ctx, "sync notice delete failed", err, "type", s.ts, "local", local) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|