From 607d77a607225005d007400961e39d6dfcd2b3ea Mon Sep 17 00:00:00 2001 From: Patrick Pacher Date: Fri, 30 Oct 2020 17:01:36 +0100 Subject: [PATCH] Add support for database subscription to layered profile provider --- profile/profile-layered-provider.go | 16 ++++++++++++---- profile/profile-layered.go | 8 ++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/profile/profile-layered-provider.go b/profile/profile-layered-provider.go index 1793cb9c..9a5b6e77 100644 --- a/profile/profile-layered-provider.go +++ b/profile/profile-layered-provider.go @@ -14,16 +14,24 @@ const ( ) var ( - errProfileNotActive = errors.New("profile not active") - errNoLayeredProfile = errors.New("profile has no layered profile") + errProfileNotActive = errors.New("profile not active") + errNoLayeredProfile = errors.New("profile has no layered profile") + pushLayeredProfile runtime.PushFunc = func(...record.Record) {} ) func registerRevisionProvider() error { - _, err := runtime.Register( + push, err := runtime.Register( revisionProviderPrefix, runtime.SimpleValueGetterFunc(getRevisions), ) - return err + + if err != nil { + return err + } + + pushLayeredProfile = push + + return nil } func getRevisions(key string) ([]record.Record, error) { diff --git a/profile/profile-layered.go b/profile/profile-layered.go index 057c6b97..65191796 100644 --- a/profile/profile-layered.go +++ b/profile/profile-layered.go @@ -127,6 +127,12 @@ func NewLayeredProfile(localProfile *Profile) *LayeredProfile { new.CreateMeta() new.SetKey(runtime.DefaultRegistry.DatabaseName() + ":" + revisionProviderPrefix + localProfile.ID) + // Inform database subscribers about the new layered profile. + new.Lock() + defer new.Unlock() + + pushLayeredProfile(new) + return new } @@ -231,6 +237,8 @@ func (lp *LayeredProfile) Update() (revisionCounter uint64) { // bump revision counter lp.RevisionCounter++ + + pushLayeredProfile(lp) } return lp.RevisionCounter