コード例 #1
0
        public IEnumerable <DependencyGraphNode> GetGraph(Schedule schedule)
        {
            if (_dictionary.ContainsKey(schedule))
            {
                return(_dictionary[schedule]);
            }

            var graph = _builder.GetGraph(schedule);

            _dictionary[schedule] = graph;

            return(graph);
        }
コード例 #2
0
        public bool IsConflictSerializable(Schedule schedule)
        {
            var graph = _builder.GetGraph(schedule);

            foreach (var node in graph)
            {
                if (_cycleChecker.HasCycles(node))
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #3
0
        public Schedule GetSerialSchedule(Schedule originalSchedule)
        {
            if (!_analyzer.IsConflictSerializable(originalSchedule))
            {
                //throw new InvalidOperationException("Cannot generate a serial schedule for a non-conflict serializable graph.");
                MessageBox.Show("Cannot generate a serial schedule for a non-conflict serializable graph.");
            }

            var graph = _builder.GetGraph(originalSchedule);

            // walk through the graph until a node is found that has no
            // dependencies, or all dependencies that we've already satisfied.
            // Continue until we're done.

            var processedNodes = new List <DependencyGraphNode>();
            var steps          = new List <TransactionStep>();

            foreach (var node in graph)
            {
                if (!node.Dependencies.Any())
                {
                    GenerateSchedule(node, processedNodes, steps);
                }
            }
            while (originalSchedule.Steps.Length > steps.Count)
            {
                foreach (var node in graph)
                {
                    GenerateSchedule(node, processedNodes, steps);
                }
            }
            return(new Schedule()
            {
                Steps = steps.ToArray()
            });
        }