public QueryRunResult Run(QueryPlanFull planFull, Page page) { const int maxTryCount = 5; int tryCounter = maxTryCount; for (;;) { try { var s = Stopwatch.StartNew(); _logger.InfoFormat("Try to execute query '{0}' ", planFull.Query.Full); QueryRunResult result = DoRun(planFull, page); _logger.InfoFormat("Query was executed successfully '{0}' in {1} ms", planFull.Query.Full, s.Elapsed.TotalMilliseconds); return(result); } catch (DocumentIndexConcurrentAccessException) { _logger.InfoFormat("Try to execute query '{0}' failed", planFull.Query.Full); if (--tryCounter == 0) { _logger.InfoFormat("Cannot execute query '{0}' after {1} tries", planFull.Query.Full, maxTryCount); throw; } } } }
private QueryRunResult DoRun(QueryPlanFull planFull, Page page) { Maybe <QueryPlanResult> entityPlan = Maybe.Nothing; Maybe <QueryPlanResult> testStepPlan = Maybe.Nothing; Maybe <QueryPlanResult> commentPlan = Maybe.Nothing; Parallel.Invoke( () => entityPlan = planFull.EntityPlan.Select(p => p.Eval()), () => testStepPlan = planFull.TestStepPlan.Select(p => p.Eval()), () => commentPlan = planFull.CommentPlan.Select(p => p.Eval())); int entitiesTotalCount; int testStepsTotalCount; int commentsTotalCount; var entityDocuments = FindEntities(entityPlan, page, out entitiesTotalCount); int documentCount = entityDocuments.Documents.Count(); var testStepDocuments = FindTestSteps(testStepPlan, page, documentCount, entitiesTotalCount, out testStepsTotalCount); documentCount += testStepDocuments.Documents.Count(); var commentDocuments = FindComments(commentPlan, page, documentCount, entitiesTotalCount + testStepsTotalCount, out commentsTotalCount); return(new QueryRunResult { Entities = entityDocuments.Documents, Comments = commentDocuments.Documents, TestSteps = testStepDocuments.Documents, EntitiesTotalCount = entitiesTotalCount, CommentsTotalCount = commentsTotalCount, TestStepsTotalCount = testStepsTotalCount, LastIndexedEntityId = entityDocuments.LastIndexedId, LastIndexedCommentId = commentDocuments.LastIndexedId, LastIndexedTestStepId = testStepDocuments.LastIndexedId }); }
public QueryResult Run(QueryData data) { if (string.IsNullOrEmpty(data.Query)) { return(new QueryResult()); } var parsedQuery = _queryParser.Parse(data.Query); QueryPlanFull queryPlanFull = _queryPlanBuilder.Build(data, parsedQuery); QueryRunResult result = _queryEngine.Run(queryPlanFull, Map(data.Page)); return(CreateResult(result, data)); }
private QueryRunResult DoRun(QueryPlanFull planFull, Page page) { Maybe <QueryPlanResult> entityPlan = Maybe.Nothing; Maybe <QueryPlanResult> commentPlan = Maybe.Nothing; Parallel.Invoke(() => entityPlan = planFull.EntityPlan.Bind(p => p.Eval()), () => commentPlan = planFull.CommentPlan.Bind(p => p.Eval())); int entitiesTotalCount; int commentsTotalCount; var entityDocuments = FindEntities(entityPlan, page, out entitiesTotalCount); var commentDocuments = FindComments(commentPlan, page, entityDocuments.Documents.Count(), entitiesTotalCount, out commentsTotalCount); return(new QueryRunResult { Entities = entityDocuments.Documents, Comments = commentDocuments.Documents, EntitiesTotalCount = entitiesTotalCount, CommentsTotalCount = commentsTotalCount, LastIndexedEntityId = entityDocuments.LastIndexedId, LastIndexedCommentId = commentDocuments.LastIndexedId }); }