コード例 #1
0
        internal void AddSinkOperator<K, V>(ITopicNameExtractor<K, V> topicNameExtractor, string nameNode, Produced<K, V> produced, params string[] previousProcessorNames)
        {
            if (nodeFactories.ContainsKey(nameNode))
                throw new TopologyException($"Sink processor {nameNode} is already added.");

            nodeFactories.Add(nameNode,
                new SinkNodeFactory<K, V>(nameNode, previousProcessorNames, topicNameExtractor, produced.KeySerdes, produced.ValueSerdes));
            nodeGrouper.Add(nameNode);
            nodeGrouper.Unite(nameNode, previousProcessorNames);
            nodeGroups = null;
        }
コード例 #2
0
        internal void ConnectProcessorAndStateStore(string processorName, params string[] stateStoreNames)
        {
            foreach (var stateStoreName in stateStoreNames)
            {
                if (globalStateBuilders.ContainsKey(stateStoreName))
                {
                    throw new TopologyException($"Global StateStore {stateStoreName} can be used by a " +
                                                $"Processor without being specified; it should not be explicitly passed.");
                }
                if (!stateFactories.ContainsKey(stateStoreName))
                {
                    throw new TopologyException("StateStore " + stateStoreName + " is not added yet.");
                }
                if (!nodeFactories.ContainsKey(processorName))
                {
                    throw new TopologyException("Processor " + processorName + " is not added yet.");
                }

                var stateFactory = stateFactories[stateStoreName];
                foreach (var u in stateFactory.users)
                {
                    nodeGrouper.Unite(u, processorName);
                }
                stateFactory.users.Add(processorName);


                var nodeFactory = nodeFactories[processorName];

                if (nodeFactory is IProcessorNodeFactory)
                {
                    ((IProcessorNodeFactory)nodeFactory).AddStateStore(stateStoreName);
                }
                else
                {
                    throw new TopologyException($"Cannot connect a state store {stateStoreName} to a source node or a sink node.");
                }
            }
        }