Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ All notable changes to this project will be documented in this file.
- Internal operator refactoring: introduce dereference() and validate() steps in the reconciler ([#935]).
- Default `nifi.cluster.flow.election.max.wait.time` to NiFi's upstream value (`5 mins`) instead of the operator's previous `1 mins`. The operator no longer sets this property explicitly; the previous shorter value was left over from a TODO marked as "for testing" and may have caused flow election to settle on incomplete vote sets in cold-start scenarios ([#936]).
- Set `nifi.content.repository.archive.max.retention.period` to `3 days` (previously empty, which NiFi interprets as `Long.MAX_VALUE` and effectively disables time-based archive purge). Without a time-based ceiling, the content archive can grow to half the content PVC and accumulate millions of files, which makes the synchronous startup directory scan in `FileSystemRepository.initializeRepository` very slow. Users requiring a longer content-replay window can extend via `configOverrides`. The provenance audit trail is independent of this setting and unaffected ([#936]).
- test: Bump vector-aggregator to 0.55.0, replace /graphql call with gRPC call ([#940]).

### Fixed

Expand All @@ -32,6 +33,7 @@ All notable changes to this project will be documented in this file.
[#928]: https://github.com/stackabletech/nifi-operator/pull/928
[#935]: https://github.com/stackabletech/nifi-operator/pull/935
[#936]: https://github.com/stackabletech/nifi-operator/pull/936
[#940]: https://github.com/stackabletech/nifi-operator/pull/940

## [26.3.0] - 2026-03-16

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ commands:
- script: >-
helm install nifi-vector-aggregator vector
--namespace $NAMESPACE
--version 0.49.0
--version 0.52.0 `# app version 0.55.0`
--repo https://helm.vector.dev
--values nifi-vector-aggregator-values.yaml
---
Expand Down
66 changes: 31 additions & 35 deletions tests/templates/kuttl/logging/test_log_aggregation.py
Original file line number Diff line number Diff line change
@@ -1,48 +1,44 @@
#!/usr/bin/env python3
import requests
import json
import subprocess


def check_sent_events():
response = requests.post(
'http://nifi-vector-aggregator:8686/graphql',
json={
'query': """
{
transforms(first:100) {
nodes {
componentId
metrics {
sentEventsTotal {
sentEventsTotal
}
}
}
}
}
"""
}
response = subprocess.run(
[
"grpcurl",
"-plaintext",
"-d",
'{"limit": 100}',
"nifi-vector-aggregator:8686",
"vector.observability.v1.ObservabilityService/GetComponents",
],
capture_output=True,
text=True,
check=True, # Raise a CalledProcessError if non-zero return
timeout=20, # seconds
)
result = json.loads(response.stdout)
components = result.get("components", [])
transforms = [
c for c in components if c.get("componentType") == "COMPONENT_TYPE_TRANSFORM"
]

assert response.status_code == 200, \
'Cannot access the API of the vector aggregator.'
assert len(transforms) > 0, "No transform components found"

result = response.json()

transforms = result['data']['transforms']['nodes']
for transform in transforms:
sentEvents = transform['metrics']['sentEventsTotal']
componentId = transform['componentId']
sentEvents = transform["metrics"]["sentEventsTotal"]
componentId = transform["componentId"]

if componentId == 'filteredInvalidEvents':
assert sentEvents is None or \
sentEvents['sentEventsTotal'] == 0, \
'Invalid log events were sent.'
if componentId == "filteredInvalidEvents":
assert sentEvents is None or int(sentEvents) == 0, (
"Invalid log events were sent."
)
else:
assert sentEvents is not None and \
sentEvents['sentEventsTotal'] > 0, \
assert sentEvents is not None and int(sentEvents) > 0, (
f'No events were sent in "{componentId}".'
)


if __name__ == '__main__':
if __name__ == "__main__":
check_sent_events()
print('Test successful!')
print("Test successful!")
Loading