From 0790fbe866e0137d8b265072920d92060b23ec15 Mon Sep 17 00:00:00 2001 From: Seebs Date: Fri, 12 Feb 2021 15:12:30 -0600 Subject: [PATCH] only persist views to etcd when they're not already known Persisting views to etcd every time we check for them causes what ends up being about a factor of 60 slowdown. Let's do it a little less. --- field.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/field.go b/field.go index 34a6aa72e..0bfdede5d 100644 --- a/field.go +++ b/field.go @@ -1187,6 +1187,12 @@ func (f *Field) createViewIfNotExistsBase(cvm *CreateViewMessage) (*view, bool, f.mu.Lock() defer f.mu.Unlock() + // If we already have this view, we can probably assume etcd already + // has it. + if view := f.viewMap[cvm.View]; view != nil { + return view, false, nil + } + // Create the view in etcd as the system of record. // Don't persist views related to the existence field. if f.name != existenceFieldName { @@ -1195,9 +1201,6 @@ func (f *Field) createViewIfNotExistsBase(cvm *CreateViewMessage) (*view, bool, } } - if view := f.viewMap[cvm.View]; view != nil { - return view, false, nil - } view := f.newView(f.viewPath(cvm.View), cvm.View) if err := view.openEmpty(); err != nil {