# 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.
MiNiFi Config Version: 3
Flow Controller:
  name: MiNiFi2
  comment: ''
Core Properties:
  flow controller graceful shutdown period: 10 sec
  flow service write delay interval: 500 ms
  administrative yield duration: 30 sec
  bored yield duration: 10 millis
  max concurrent threads: 1
  variable registry properties: ''
FlowFile Repository:
  partitions: 256
  checkpoint interval: 2 mins
  always sync: false
  Swap:
    threshold: 20000
    in period: 5 sec
    in threads: 1
    out period: 5 sec
    out threads: 4
Content Repository:
  content claim max appendable size: 10 MB
  content claim max flow files: 100
  always sync: false
  content repository archive max retention period: 12 hours
  content repository archive max usage percentage: 50%
  content repository archive enabled: false
Provenance Repository:
  provenance rollover time: 1 min
  implementation: org.apache.nifi.provenance.MiNiFiPersistentProvenanceRepository
  provenance max storage time: 24 hours
  provenance max storage size: 1 GB
  provenance index shard size: 500 MB
  provenance buffer size: 10000
Component Status Repository:
  buffer size: 1440
  snapshot frequency: 1 min
Security Properties:
  keystore: ''
  keystore type: ''
  keystore password: ''
  key password: ''
  truststore: ''
  truststore type: ''
  truststore password: ''
  ssl protocol: ''
  Sensitive Props:
    key:
    algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
    provider: BC
Processors: []
Controller Services: []
Process Groups:
  - id: e544a343-e2f0-3112-0000-000000000000
    name: MiNiFi
    Processors:
      - id: 246f7d78-f8e1-3c88-0000-000000000000
        name: TailFile
        class: org.apache.nifi.processors.standard.TailFile
        max concurrent tasks: 1
        scheduling strategy: TIMER_DRIVEN
        scheduling period: 0 sec
        penalization period: 30 sec
        yield period: 1 sec
        run duration nanos: 0
        auto-terminated relationships list: []
        Properties:
          File Location: Local
          File to Tail: /opt/minifi/minifi_test_dir
          Initial Start Position: Beginning of File
          Rolling Filename Pattern:
          tail-base-directory:
          tail-mode: Single file
          tailfile-lookup-frequency: 10 minutes
          tailfile-maximum-age: 24 hours
          tailfile-recursive-lookup: 'false'
    Controller Services: []
    Process Groups: []
    Input Ports: []
    Output Ports: []
    Funnels: []
    Connections:
      - id: 10de7342-41ef-37a5-0000-000000000000
        name: TailFile/success/dadd7f29-016e-1000-3c91-89495c813674
        source id: 246f7d78-f8e1-3c88-0000-000000000000
        source relationship names:
          - success
        destination id: dadd7f29-016e-1000-3c91-89495c813674
        max work queue size: 10000
        max work queue data size: 1 GB
        flowfile expiration: 0 sec
        queue prioritizer class: ''
    Remote Process Groups:
      - id: 1e18bdb9-7df3-3fba-0000-000000000000
        name: ''
        url: http://nifi-server:8080/nifi
        comment: ''
        timeout: 30 sec
        yield period: 10 sec
        transport protocol: RAW
        proxy host: ''
        proxy port: ''
        proxy user: ''
        proxy password: ''
        local network interface: ''
        Input Ports:
          - id: dadd7f29-016e-1000-3c91-89495c813674
            name: input_minifi
            comment: ''
            max concurrent tasks: 1
            use compression: false
        Output Ports: []
Input Ports: []
Output Ports: []
Funnels: []
Connections: []
Remote Process Groups: []
NiFi Properties Overrides: {}