diff --git a/controllers/v1/evalHandler.go b/controllers/v1/evalHandler.go index 627190f..8964583 100644 --- a/controllers/v1/evalHandler.go +++ b/controllers/v1/evalHandler.go @@ -148,7 +148,7 @@ func EvalHandler() gin.HandlerFunc { fmt.Fprint(c.Writer, "Error on json decode") return } - log.Debugln(t) + log.Traceln(t) ctx := types.NewContextFromMap(t) ctx.RawContext = c.Request.Context() @@ -162,8 +162,8 @@ func EvalHandler() gin.HandlerFunc { return } - log.Debug("Context:\n\t", ctx.GetEntries(), "\n\n") - log.Debug("Features:\n\t", result.GetFeatures(), "\n\n") + log.Trace("Context:\n\t", ctx.GetEntries(), "\n\n") + log.Trace("Features:\n\t", result.GetFeatures(), "\n\n") responseCode := http.StatusOK diff --git a/services/rulles.go b/services/rulles.go index e42eafd..3b69527 100644 --- a/services/rulles.go +++ b/services/rulles.go @@ -91,6 +91,10 @@ var evalMutex sync.Mutex var getMutex sync.Mutex +var loadWg sync.WaitGroup + +var evalWg sync.WaitGroup + // IEval interface defines methods for loading and evaluating knowledge bases in Go. // // Property @@ -179,9 +183,15 @@ func (s Eval) GetKnowledgeBase(knowledgeBaseName string, version string) (*ast.K return base, nil } + loadWg.Add(1) + defer loadWg.Done() + + log.Trace("Waiting: [evalWg]") + evalWg.Wait() + log.Trace("Pass: [evalWg]") + // If the version is expired, we must invalidate its rules if expired { - log.Trace("GetKnowledgeBase: [expired]") for key := range base.RuleEntries { s.knowledgeLibrary.RemoveRuleEntry(key, knowledgeBaseName, version) } @@ -210,10 +220,18 @@ func (s Eval) GetKnowledgeBase(knowledgeBaseName string, version string) (*ast.K // Eval ... func (s Eval) Eval(ctx *types.Context, knowledgeBase *ast.KnowledgeBase) (result *types.Result, err error) { + // FIXME Remove synchronization on eval evalMutex.Lock() defer evalMutex.Unlock() + log.Trace("Waiting: [loadWg]") + loadWg.Wait() + log.Trace("Pass: [loadWg]") + + evalWg.Add(1) + defer evalWg.Done() + defer func() { if r := recover(); r != nil { err = fmt.Errorf("recovered from panic: %v", r) @@ -259,8 +277,8 @@ func (s Eval) Eval(ctx *types.Context, knowledgeBase *ast.KnowledgeBase) (result result.Put("requiredParamErrors", ctx.GetMap("requiredParamErrors").GetEntries()) } - log.Debug("Context:\n\t", ctx.GetEntries(), "\n\n") - log.Debug("Features:\n\t", result.GetFeatures(), "\n\n") + log.Trace("Context:\n\t", ctx.GetEntries(), "\n\n") + log.Trace("Features:\n\t", result.GetFeatures(), "\n\n") return }