#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

---

name: "heron-sliding-window-topology"
type: "heron"

components:
  - id: "windowLength"
    className: "org.apache.heron.api.bolt.BaseWindowedBolt$Count"
    constructorArgs:
      - 5
  - id: "slidingInterval"
    className: "org.apache.heron.api.bolt.BaseWindowedBolt$Count"
    constructorArgs:
      - 3

config:
  topology.workers: 1

# spout definitions
spouts:
  - id: "spout-1"
    className: "org.apache.heron.examples.eco.TestNameSpout"
    parallelism: 1

# bolt definitions
bolts:
  - id: "bolt-1"
    className: "org.apache.heron.examples.eco.TestWindowBolt"
    configMethods:
      - name: "withWindow"
        args: [ref: "windowLength", ref: "slidingInterval"]
    parallelism: 1
  - id: "bolt-2"
    className: "org.apache.heron.examples.eco.TestPrintBolt"
    parallelism: 1


#stream definitions
# stream definitions define connections between spouts and bolts.
# note that such connections can be cyclical
streams:

  - from: "spout-1"
    to: "bolt-1"
    grouping:
      type: FIELDS
      args: ["word"]

  - from: "bolt-1"
    to: "bolt-2"
    grouping:
      type: SHUFFLE
