Ejemplo n.º 1
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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
            });
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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
            });
        }