mirror of
https://github.com/pomerium/pomerium.git
synced 2025-05-20 20:47:16 +02:00
replace GetAllPages with InitialSync, improve merge performance (#1624)
* replace GetAllPages with InitialSync, improve merge performance * fmt proto * add test for base64 function * add sync test * go mod tidy Co-authored-by: Bobby DeSimone <bobbydesimone@gmail.com>
This commit is contained in:
parent
ba55fec67c
commit
aad8ac2e61
10 changed files with 298 additions and 214 deletions
|
@ -309,9 +309,6 @@ func (srv *Server) doSync(ctx context.Context,
|
|||
if len(updated) == 0 {
|
||||
return nil
|
||||
}
|
||||
sort.Slice(updated, func(i, j int) bool {
|
||||
return updated[i].Version < updated[j].Version
|
||||
})
|
||||
*recordVersion = updated[len(updated)-1].Version
|
||||
for i := 0; i < len(updated); i += syncBatchSize {
|
||||
j := i + syncBatchSize
|
||||
|
@ -346,6 +343,7 @@ func (srv *Server) Sync(req *databroker.SyncRequest, stream databroker.DataBroke
|
|||
recordVersion := req.GetRecordVersion()
|
||||
// reset record version if the server versions don't match
|
||||
if req.GetServerVersion() != serverVersion {
|
||||
serverVersion = req.GetServerVersion()
|
||||
recordVersion = ""
|
||||
// send the new server version to the client
|
||||
err := stream.Send(&databroker.SyncResponse{
|
||||
|
@ -357,13 +355,23 @@ func (srv *Server) Sync(req *databroker.SyncRequest, stream databroker.DataBroke
|
|||
}
|
||||
|
||||
ctx := stream.Context()
|
||||
ch := db.Watch(ctx)
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
|
||||
// Do first sync, so we won't missed anything.
|
||||
var ch <-chan struct{}
|
||||
if !req.GetNoWait() {
|
||||
ch = db.Watch(ctx)
|
||||
}
|
||||
|
||||
// Do first sync, so we won't miss anything.
|
||||
if err := srv.doSync(ctx, serverVersion, &recordVersion, db, stream); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if req.GetNoWait() {
|
||||
return nil
|
||||
}
|
||||
|
||||
for range ch {
|
||||
if err := srv.doSync(ctx, serverVersion, &recordVersion, db, stream); err != nil {
|
||||
return err
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue