Changelog
1.19
Highlights
End-user
Administrator
1.19.0 (Not released yet)
- #7181 StickyNotes feature
- sticky notes are designed to store information inside scenario/fragment, they are separate from graph nodes and do not take part in scenario logic
- new API available under
processes/{scenarioName}/stickyNotes
- configuration
stickyNotesSettings
allowing to hide/show stickyNotes, set sticky notes max content length or its max number on a graph
- #7145 Lift TypingResult information for dictionaries
- #7116 Improve missing Flink Kafka Source / Sink TypeInformation
- #7123 Fix deployments for scenarios with dict editors after model reload
- #7162 Component API enhancement: ability to access information about expression parts used in SpEL template
- async-http-client and Netty dependency cleanups
- #7257
components-api
module: Replaced wide dependency toasync-http-client-backend-future
by the narrowest possible dependency to sttp's core - #7259
flink-executor
andlite-runtime
modules: Added compile-time dependency tohttp-utils
(which depends onasync-http-client-backend-future
and indirectly on Netty)
- #7257
- #7066 Kafka source and sink can now operate with schemaless topics. They accept any json. Data will not be validated with schema.
- #7165 Added PerformSingleExecution scenario action
- Added support for PerformSingleExecution action in DeploymentManager and in GUI
- Improved scenario state management to include information about current and deployed versions and allow more customization
- #7184 Improve Nu Designer API notifications endpoint, to include events related to currently displayed scenario
- #7323 Improve Periodic DeploymentManager db queries
- #7332 Handle scenario names with spaces when performing migration tests, they were ignored
- #7346 OpenAPI enricher: ability to configure common secret for any security scheme
- #7307 Added StddevPop, StddevSamp, VarPop and VarSamp aggregators
- #7341 Added possibility to choose presets and define lists for Integer typed parameter inputs in fragments.
- #7356 Integers converted to BigDecimals have scale 18, this fixes issue with unexpected low scale when performing division on BigDecimals which were created in such conversion.
- #7379 Removed CustomAction mechanism.
- Changes to
periodic
component (renamed toevent-generator
):- #7502 Component rename:
periodic
toevent-generator
- #7502 Parameter rename:
period
toschedule
- #7373 Improvements to
schedule
editor - #7376 Previously, when count was > 1, the value was evaluated once and emitted times count. For example: if the value was evaluated to be a random UUID and count was 5, one UUID was generated and emitted 5 times. Now in one count batch each value is evaluated separately.
- #7502 Component rename:
- #7386 Improve Periodic DeploymentManager db queries, continuation of #7323
- #7360 Added Median aggregator
- #7388 Ability to configure a required permission for component links
- #7387 Creator panel is automatically reloaded after configuration reload - page refresh is not needed now
- #7400 Deploy and cancel buttons are not shown for fragments
- #7354 Reduce response payload size when fetching scenarios for scenarios tab by removing unused fields and
null
attributes. - #7404 Fix SpEL evaluation error when using conversion extensions methods or array.get extension method
- #7420 Add toInteger and toIntegerOrNull conversions. Also add canBeInteger extension
- #7438 Map int32 integer format in OpenAPI schema to the
Integer
type - #7446 Small changes regarding node errors in fragments used in scenarios:
- Fragment error node tips in scenarios are now clickable and open problematic node edit window in a new tab.
- Fragment nodes are now highlighted when they contain nodes with errors.
- #7364 PeriodicDeploymentManger is no longer a separate DM, but instead is an optional functionality and decorator for all DMs
- in order to use it, DM must implement interface
schedulingSupported
, that handles deployments on a specific engine - implementation provided for Flink DM
- in order to use it, DM must implement interface
- #7443 Indexing on record is more similar to indexing on map. The change lets us access record values dynamically. For example now spel expression "{a: 5, b: 10}[#input.field]" compiles and has type "Integer" inferred from types of values of the record. This lets us access record value based on user input, for instance if user passes "{"field": "b"}" to scenario we will get value "10", whereas input {"field": "c"} would result in "null". Expression "{a: 5}["b"]" still does not compile because it is known at compile time that record does not have property "b".
- #7324 Fix: Passing Flink Job Global Params
- #7335 introduced
managersDirs
config to configure deployment managers directory paths (you can useMANAGERS_DIR
env in case of docker-based deployments). The default is./managers
. - #7481 Ignore jobs in CANCELLING status when checking for duplicate jobs on Flink
- #7483 It's possible to configure kafka source to work without schema registry. To do that you should not provide property "schema.registry.url" in kafkaProperties config.
- #7458 Flink scenario testing mechanism and scenario state verification mechanism: mini cluster created once and reused each time
- #7498 Support many migrations loaded using SPI. Loaded migration numbers cannot overlap, if they do, an exception is thrown.
- #7504 Return scenario validation error when an incompatible change was introduced in a fragment or component parameter definition.
- #7468 Configurable namespace separator (was fixed to
_
), added namespace tag to Lite engine metrics and fixed namespacing of Kafka consumer groups. - #7508 Fixes for window components:
- Can now pass more than 31 days as
windowLength
and it won't be reduced to remainder of 31 - Introduced some default values:
- For all - default
windowLength
is 1 hour - For
aggregate-session
- defaultendSessionCondition
is now false
- For all - default
- Can now pass more than 31 days as
- Improved scenario visualization loading time
- #7516 Scenario testing endpoints no longer perform full scenario compilation and validation
1.18
Highlights
End-user
- New Activities panel, replacing Versions, Comments and Attachments panels. Now you can browse all scenario activities on one chronological list.
- Added scenario labels. You can now organize your scenarios and find different groups of scenarios more easily.
- SpEL: added navigation through fields inside variables typed as Unknown. You can now access the data inside a variable, even if Nussknacker doesn't know its exact type during scenario authoring.
- SpEL: added conversion methods to cast or convert between data types (e.g.
String
toInteger
). - SpEL: various enhancements, like
#CONV.toJson
and#CONV.toJsonString
methods, new#BASE64
helper, possibility to treat arrays as lists, and more. - Various UX improvements, including new UI for aggregation definitions and better validation handling in ad-hoc tests.
Administrator
- Flink upgrade to 1.19.1. Note: it is possible to use Nussknacker with older versions of Flink, but it requires some extra steps. See Migration guide for details.
- Performance optimisations of the serialisation of events passing through Flink's
DataStream
s.
1.18.1 (9 December 2024)
- #7207 Fixed minor clipboard, keyboard and focus related bugs
- #7237 Fix: ToJsonEncoder keeps order fields during encoding map
- #7240 Fixed race condition problem during SpEL expression evaluation
- #7269 Fixed focus scrolling in expression editor
- #7270 Savepoint deserialization fixup - some taken savepoints (e.g. for scenarios with async enrichers) were not deserializable which led to errors during redeployments on Flink
- #7279 Fixed Flink TaskManager and Designer containers restarts in installation example
- #7283 Fix deployment status indicator for periodic scenarios type
- #7254 Fix “Maximum update depth exceeded” issue when node details window is open and size of the window changed
- #7254 Fix manual window size change
- #7290 Update swagger-parser (2.1.22 -> 2.1.24) to fix shading issue (https://github.com/swagger-api/swagger-parser/issues/2126)
- #7299 Cursor rendering optimization
1.18.0 (22 November 2024)
- #6944 #7166 Changes around adhoc testing feature
test-with-form
button was renamed toadhoc-testing
- Improved form validators inside adhoc tests (validation was moved to backend)
- Moved
testInfo/*
endpoints toscenarioTesting/
path and rewrite then using Tapir - Fix method
assignUserFriendlyEditor
not to change all String parameter editors to simpleStringParameterEditor
- Batch processing mode related improvements:
- #6692 Kryo serializers for
UnmodifiableCollection
,scala.Product
etc. are registered based on class of Serializer instead of instance of Serializer. Thanks to this change, it is possible to useRAW<>
data type in Table API components - #6552 Added aggregation functions to Batch aggregation component
(
Average
,Count
,Max
,Min
,Population standard deviation
,Sample standard deviation
,Population variance
,Sample variance
) - #6734 Tables from external catalogs are now refreshed automatically
when entering into node form. Please be aware that changes in
tableDefinition.sql
are not refreshed. To do this, use/app/processingtype/reload
API - #6741 #6886 Added
catalogConfiguration
configuration option allowing to set up catalog directly in config instead of bytableDefinition.sql
- #6741 (Breaking change) Fully qualified table paths are used instead of table names
in table source and sink components in
Table
parameter - #6950 Fix for testing mechanism for table sources: using full, model classpath instead of only flinkTable.jar
- #6692 Kryo serializers for
- #6716 Fix type hints for #COLLECTION.merge function.
- #6695 #7032 From now on, arrays on UI are visible as lists but on a background they are stored as it is.
- #6750 Add varargs to
#COLLECTION.concat
and#COLLECTION.merge
. - #6778 SpeL: check for methods if a property for a given name does not exist.
- #6769 Added possibility to choose presets and define lists for Long typed parameter inputs in fragments.
- #6995 Add
toJson
andtoJsonString
conversions (in the#CONV
helper) - #6995 Add
#BASE64
helper to decode/encode Base64 values - #6826 Security fix: added validation of expression used inside
indexer for Maps and Lists (for example
{1,2,3}[#otherList.remove(1) == null ? 0 : 0]
). This allowed executing some types of not allowed expressions. - #6880 Performance optimization of generating Avro messages with unions
- shorter message in logs
- #6766 Scenario labels support - you can assign labels to scenarios and use them to filter the scenario list
- #6176
#6996
#7012
#7014
#7113
Update most dependencies to latest versions, most important ones:
- Flink 1.18.1 -> 1.19.1
- Jackson 2.15.4 -> 2.17.2
- Cats 2.10 -> 2.12
- Avro 1.11.3 -> 1.11.4
- swagger-parser 2.1.15 -> 2.1.22
- Tapir -> 1.11.7
- openapi-circe-yaml -> 0.11.3
- Scala 2.13 to 2.13.15
- Scenario activities mechanism replacing old process actions:
- #6925 Fix situation when preset labels were presented as
null
when node didn't pass the validation. - #6935 Spel: Scenario labels added to meta variable -
#meta.scenarioLabels
- #6952 Improvement: TypeInformation support for scala.Option
- #6974 Add SpeL suggestions for cast methods parameter.
- #6958 Add message size limit in the "Kafka" exceptionHandler
- #6988 Remove unused API classes:
MultiMap
,TimestampedEvictableStateFunction
- #7000 Show all possible options for dictionary editor on open.
- #6979 Introduces an activities panel that provides information about all system activities.
- Performance optimization:
- #7021 Definitions service can return definition without UI config
- #7010 Dynamic access allowed via indexer operator (
[]
) on expressions typed asUnknown
- #7063 Introduce conversion extension methods in SpeL:
- canBe(className)/to(className)/toOrNull(className)
- canBeBoolean/toBoolean/toBooleanOrNull
- canBeLong/toLong/toLongOrNull
- canBeDouble/toDouble/toDoubleOrNull
- canBeBigDecimal/toBigDecimal/toBigDecimalOrNull
- canBeList/toList/toListOrNull
- canBeMap/toMap/toMapOrNull - the list of key-value pairs or unknown map can be converted to a map.
- #7106 Fix an issue where pressing the “Esc” key did not remove focus from input fields in dialogs, which prevented the dialog window from closing
- #7002 Resolve an issue with union nodes output expression when nodes were copied and pasted
- #6994 Fix styling issues for form checkboxes in Firefox
- #6721 Provide a popover to display additional information about count
- #7099 Provide an option to embedded video to the markdown
- #7102 Introduce a new UI to defining aggregations within nodes
- #7147 Fix redundant "ParameterName(...)" wrapper string in exported PDFs in nodes details
- #7182 Provide an unique validation message to the scenario labels
- #7178 Remove autocompletion from markdown editors
- #7159 Fix running scenario tests with provided fragment input validation
- #7193 Provide tooltips to the scenarios list and scenario details elements
- #7187 Fix "Failed to get node validation" when using literal lists that mixes different types of elements
- #7183 Hide categories from a scenarios list and more scenario details when only one category is available
- #7192 Fix "Failed to get node validation" when opening node details referencing non-existing component
- #7190 Fix "Failed to get node validation" when opening fragment node details for referencing non-existing fragment
- #7215 Change typing text to spinner during validation and provide delayed adding on enter until validation finishes in a scenario labels and fragment input
1.17
Highlights
End-user
- Flink Catalogs integration. Thanks to Catalogs, Nu can be used to act on data stored in Data Lakehouses.
- Improvements in batch mode, including joins, testing (dry runs) and general usability.
- Live counts. You can now watch counts of events as they flow through a scenario, with user defined update interval.
- Autocompletion now works better in invalid expressions. When working on an expression you don't have to keep it valid all the time for autocompletion to work.
- SpEL collections usability improvements. Arrays and Lists are now unified (no need for conversions) and we also added more collection manipulation functions.
Administrator
- Performance optimizations around Avro processing that reduce CPU utilization significantly.
- Components configuration reloading without Designer restart. You can now reload Components configuration on demand, using an endpoint, without restarting the whole application.
1.17.1 (Not released yet)
-
#6880 Performance optimization of generating Avro messages with unions
- shorter message in logs
-
#6877 Fix application crash on edit node details window open
1.17.0 (12 September 2024)
- #6658 Bump up circe-yaml lib to 0.15.2
- #6398 Added possibility to define hint texts for scenario properties in config.
- #6282 From now on, the existence of Kafka topics used in Sources and/or
Sinks will always be validated. (
topicsExistenceValidationConfig.enabled
default was changed fromfalse
totrue
) - #6384 Value of Realm
can be customized using env
AUTHENTICATION_REALM
(its default value "nussknacker" remains un changed) - #6363 Improvement on SpEL suggestions mechanism, now we are able to provide suggestions even if the whole expression does not evaluate to proper SpEL expression.
- #6388 Fix issue with suggestion expression mode and any value with suggestion in fragmentInput component, now supporting SpEL expressions.
- #6418 Improvement: Pass implicit nodeId to
EagerServiceWithStaticParameters.returnType
- #6333 Test data generation: more meaningful error message when no data to generate
- #6386 Security fix for situation where array constructor could be
used to execute unallowed expressions by exploiting the lack of full validation inside array dimensions.
- Array constructor expressions are now illegal.
- #6432 The default
topicsExistenceValidationConfig.validatorConfig.adminClientTimeout
increased from500ms
to10s
to avoid scenario starting problems - #6217 Improvement: Make flink-metrics-dropwizard as provided dependency at flink-components-utils
- #6353 Performance improvement: simple types such as numbers, boolean, string, date types and arrays are serialized/deserialized more optimal in aggregates
- #6437 Removed deprecated operation to create a scenario:
POST
/api/processes/{name}/{category}
. POST/api/processes
should be used instead. - #6415 Added "Component group" field to fragment properties, which allows selection of the group of components in the Creator Panel in which the fragment will be available
- #6462 Improvement of Component's API:
canHaveManyInputs
property is now determined automatically, developer doesn't need to provide it by his/her own - #6445 #6499 Add support to seconds in a duration editor
- #6436 Typed SpEL list expressions will now infer their compile-time known values, instead of only the supertype of its elements. These values can be used in custom components or validators.
- NOTE: selection (
.?
), projection (.!
) or operations from the#COLLECTIONS
helper cause the typed list to lose its elements' values
- NOTE: selection (
- #6570 Generic parameters of collection types are better typed now: e.g.
List[Integer]
can be passed toList[Number]
but not the other way - Batch processing mode related improvements:
- #6353 #6467 Added
join
component - #6503 Records are produced by Table Source as
Row
s instead ofMap
s. Thanks to that, more scenario constructions work correctly with table components such asjoin
. - #6195 #6340 #6506 Added test data generation and testing for Table Source:
- Added test data generation with 2 modes:
- Live (default) - creates records by pulling data from the currently configured data source
- Random - creates randomized records
- Data generation mode can be configured through the
testDataGenerationMode
in the table components configuration with"live"
or"random"
setting - The test data can be generated into a file through the
generate file
button - Added ability to run tests on data from file or generated on the spot (the
generated
button)
- Added test data generation with 2 modes:
- #6518 Added user friendly editor for Table Sink output value
- The editor can be easily switched backed to 'raw' version similarly to the current Kafka Sink
- #6545 Non-physical columns are properly handled in Table Sink now
- User need to provide only persisted column values now - values for computed columns and virtual columns are not required anymore
- #6559 Extension: Move previousValue and delay components from unbounded to base Flink components
- #6546 #6619 Types alignment and support for advanced data types: ARRAY, MAP, MULTISET, nested types (like ROW with ROW as a field or ARRAY
)
- #6546 Error handling during saving data to table sink
- #6567 Flink's execution mode
can now be set for Flink-based scenario types under
modelConfig.executionMode
.
- #6353 #6467 Added
- #6615 Add encode/decode support for typed SpEL values of types:
java.time.LocalDateTime
,java.time.LocalDate
,java.time.LocalTime
,java.time.Duration
,java.time.Period
- #6591 The whole model can be reloaded with
POST /api/app/processingtype/reload
now - you can use this endpoint to reconfigure Nu processing types without need to restart the app - #6623 Added
sortedAscBy
andreverse
functions to#COLLECTION
helper - #6650 Added a workaround for situations when an updated scenario with Kafka source started reading from the earliest offsets
- #6586 For now on, the SQL enricher automatically converts types as shown below:
- java.sql.Array -> java.util.List
- java.sql.Time -> java.time.LocalTime
- java.sql.Date -> java.time.LocalDate
- java.sql.Timestamp -> java.time.Instant
- java.sql.Clob -> java.lang.String
- #6656
- Remove not working MODEL_CLASS_PATH environment variable
- Add default DB connection name
- #6614 Array in SpeL improvements:
- From now on it is possible to pass an array as a parameter of type List - e.g.
T(java.lang.String).join(',', #array)
. - Fix result type of projection (
.!
) - e.g.#array.![#this]
returns a type array instead of a type List.
- From now on it is possible to pass an array as a parameter of type List - e.g.
- #6685 Fixed an issue with dictionary parameter editor language being set to spel when no default value was present.
- #6797 #6815 Performance optimization of Avro processing
- #6578 Introduced support for displaying a docsUrl with an icon in scenario properties. This feature is based on the processingType and is configurable via the model.conf file.
- #6725 Resolved an issue where properties were not saving when a fragment was in a different group than other fragments.
- #6697 Fix unhandled error when open survey
- #6389 Added an option to define in the properties settings the refresh interval for automatic counts updates
- #6393 Added an option to show node description directly on the graph node and scenario description directly on the scenario with an option to show it on scenario open
1.16
Highlights
Administrator
- Added Exactly-Once semantics for event processing in streaming mode.
- Added impersonate mechanism. When an external system calls the Nussknacker API with a technical user, the impersonated user can be passed and the performed action will be carried on behalf of the impersonated user.
- Nussknacker Quickstart has been refurbished and is now based on installation example. Using Nussknacker Quickstart is now even clearer and easier.
1.16.3 (8 August 2024)
- #6527 Typed SpEL list expressions will now infer their compile-time known values, instead of only the supertype of its elements. These values can be used in custom components or validators.
- NOTE: selection (
.?
), projection (.!
) or operations from the#COLLECTIONS
helper cause the typed list to lose its elements' values
- NOTE: selection (
- #6517 Allow using same variable names in a fragment and outside a fragment. Fix bleeding context from outside scenario into the fragment output node.
1.16.2 (18 July 2024)
- #6388 Fix issue with suggestion expression mode and any value with suggestion in fragmentInput component, now supporting SpEL expressions.
- #6398 Added possibility to define hint texts for scenario properties in config.
- #6438 Fragment icon can be changed in the fragment properties
1.16.1 (16 July 2024)
- #6382 Avoid timeout on model reload by stopping DeploymentActor and RescheduleFinishedActor non-gracefully. Instead, retry until success while creating new actors.
1.16.0 (11 July 2024)
- #6184 Removed
Remote[]
string part from forwarded username for scenario creation and updates. - #6053 Added impersonation mechanism support in Nu API for BasicAuth security module.
- #6008 Add embedded QuestDB as database for FE statistics.
- #5982 #6155 #6172 #6221 Batch processing mode related improvements:
- Deployments API returns correct status of deployment instead of returning always the last deployment's status
- Deployments API returns more information about status of a deployment: problem description and status modification time
- Status of a deployment is cached on the Designer side - in case of retention of finished job on Flink, status is still returned as FINISHED
- Overlapping deployment metrics/counts workaround: Ensure that only one deployment is performed for each scenario at a time
- Blocking of deployment of a fragment
- Blocking of deployment of an archived scenario
- #6121 Add functionality to reorder columns within the table editor.
- #6136 Add possibility to configure kafka exactly-once delivery for flink.
- #6185 Improvement: Make UniversalKafkaSinkFactory available at BoundedStream
- #6208 Fix issue with node window positioning after closing a full-screen window node.
- #6225 Resolved an issue with fragment input parameters where the initial value was defined and the input mode changed from any value to a fixed list.
- #6245 Parameter validations defined in AdditionalUIConfigProvider now properly impact dynamic components.
- #6264 Fix for DatabaseLookupEnricher mixing fields values when it is connected to ignite db
- #6270 Resolved an issue with comparing remote versions
- #6337 Fixes memory leak in test mechanism introduced in 1.13 version (#4901)
- #6322 Fix search nodes: usage of ctrl-f was limited to nodes search only.
1.15
Highlights
End-user
- Experimental support for the batch processing mode, based on Flink’s Table API and Catalogs. It allows processing data at rest and opens up new features such as integration with Lakehouses
- New color theme, more consistent, readable, and more violet!
- Added node search in the scenario editor - you can now easily find specific nodes based on their properties
Administrator
- Support for Flink 1.18
- Added support for scenario migration between different Nussknacker versions. From now on, it will be possible to migrate scenarios using the migration API
- New one-command Docker installation script for setting up an example Nussknacker environment on-premise. This example can be a good reference for your own on-premises production setup, as well as for exploration and testing
1.15.4 (10 July 2024)
- #6319 Fix migration between environments.
- #6322 Fix search nodes: usage of ctrl-f was limited to nodes search only.
1.15.3 (24 June 2024)
- #6191 Fixes caching of Flink's jobs config. Was cached empty config in some cases.
- #6225 Resolved an issue with fragment input parameters where the initial value was defined and the input mode changed from any value to a fixed list.
- #6230 Avoid potential race condition by preventing the marking of freshly deployed jobs as finished when synchronizing deployment states.
- #6204 #6055 Fixup to lifecycle of ExecutionContext used in Asynchronous IO Mode which could lead to RejectedExecutionException after scenario restart on Flink.
1.15.2 (7 June 2024)
- #6134 Fixes in determining
lastStateActionData
andlastDeployedActionData
for Scenario.- Deployed version of scenario is now shown properly even if other actions followed deploy.
- Scenario state is now not impacted by actions that don't actually change it.
1.15.1 (5 June 2024)
- #6126 Fix statistics configuration.
- #6127 Ad-hoc tests available in scenarios without
flink-dropwizard-metrics-deps
in classPath
1.15.0 (17 May 2024)
- #5620 Nodes Api OpenApi-based documentation (e.g.
https://demo.nussknacker.io/api/docs
) - #5760 #5599 #3922 Libraries bump:
- Cats 2.9.0 -> 2.10.0
- Cats Effect: 3.5.2 -> 3.5.4
- Flink: 1.17.2 -> 1.18.1
- Kafka client: 3.6.1 -> 3.6.2
- Netty 4.1.93 -> 4.1.109
- openapi-circe-yaml: 0.6.0 -> 0.7.4
- Tapir: 1.7.4 -> 1.9.11
- #5438 #5495 Improvement in DeploymentManager API:
- Alignment in the api of primary (deploy/cancel) actions and the experimental api of custom actions.
- #5798 Improvements in DeploymentService:
- Custom actions are handled in the same way as deploy and cancel: action and comment are registered in NU database
- #5783 Added information about component's allowed processing modes to Component API
- #5831 Fragment input parameters presets support
- #5780 Fixed Scala case classes serialization when a class has additional fields in its body
- #5848 Change colors across an entire user interface
- #5853 Add processing mode information and filtering to the components table
- #5843 Added new endpoint to provide statistics URL
- #5873 Handle list of the anonymous statistic URLs, and send them in the interval
- #5889 Decision Table component parameters validation improvement
- #5898 Fixed Nu runtime memory leak
- #5887 Fix toolbar icon styles when multiline text
- #5779 Add API versioning for migration between environments
- #6016 Add RANDOM helper
- #5595 #5618 #5627 #5734 #5653 #5744 #5757 #5777 #5825 #5896 Experimental Batch processing mode support
- #6031 Fixed duplicated components on the Components tab
- #6010 Fix ad hoc tests with schemas containing nested fields
- #6044 Fixed json refs handling: If first parsed record was an empty record, every subsequent record was treated as an empty record
- #5813 Fixed "More than one processing type ..." error during scenario creation when user has limited access to categories.
1.14
Highlights
End-user
- New Decision table component, that allows expressing multi-condition decisions in a straightforward way
- Scenario processing modes - streaming, request-response, or batch (in the next release!) - made a first-class citizen in Designer, to help users choose how to process the data
- Multiple scenario and fragment validation improvements
Administrator
- Added support for different topic naming conventions in Azure Schema Registries
- Bumped Flink to 1.17
Component developer
- Changes and improvements in Component API for custom component development
1.14.0 (21 Mar 2024)
- #4287 #5257 #5432 #5552 #5645 Libraries bump:
- Flink: 1.16.2 -> 1.17.2
- Cats Effect: 2.5.5 -> 3.5.2
- Kafka client: 3.3.2 -> 3.6.1
- Confluent Schema Registry client: 7.3.2 -> 7.5.1
- Avro: 1.11.1 -> 1.11.3
- Skuber: 3.0.6 -> 3.2
- #5253 Removed the option to configure fragments via config. Due to the recent expansion of FragmentParameter, the option has become largely redundant. Removed to decrease unnecessary complexity.
- #5271 Changed
AdditionalUIConfigProvider.getAllForProcessingType
API to be more in line with FragmentParameter - #5278 Recreate assembled model JAR for Flink if it got removed (e.g. by systemd-tmpfiles)
- #5280 Security improvement: Checking if user has access rights to fragment's Category for fragments served by definitions API
- #5303 Added
skipNodeResults
parameter to API endpoints that return scenario validation results - #5323 Removed support for the legacy categories configuration format
- #5266 Security improvement: removed accessing class internals of records in expressions
- #5361 Parameter's label can be specified not only via configuration, but also inside Component's implementation now
- #5368 A hidden features allowing to change
icon
anddocsUrl
inside properties modal by usingcomponentsUiConfig.$proprties
configuration option, was turned off - #5356 Pushed configs provided by AdditionalUIConfigProvider deeper into domain (at the stage of component definition extraction), allowing it to impact validation. However, changes now require model reload.
- #5413 Generic types (Records, Lists and other collections) now uses generic parameters in their method's return type e.g.
{foo: 1, bar: 2}.get('foo')
returnsInteger
instead ofUnknown
- #5413 Avro Records now has additional
get(String)
method allowing to access fields dynamically - #5419 Remove system properties from merged model config
- #5363 Improvements and fixes related to scenario level errors:
- Fixed bug where scenario level error related to node flashed when opening a node
- Fixed highlighting of fragment nodes causing errors
- Display fragment level validation errors when editing fragment
- Improved error messages
- #5364 Fixed wrong expression suggestions and validation errors in disabled nodes
- #5447 Fixed
java.lang.reflect.InaccessibleObjectException: Unable to make public java.lang.Object
exception by downgrade of JRE from 17 to 11 in lite runner image for scala 2.13 - #5465 Fix: Sometimes
Bad expression type, expected: X found X
error was reported when comparing matching Records. It happened for records that had fields with mixed different types of fields e.g. simple classes with nested records - #5465 Fix: Ternary operator (
expression ? x : y
) returned sometimesEmptyUnion
type which couldn't be passed anywhere. - #5465 Fix: Wasn't possible to compare a Record with a Map.
- #5457 Fix: Array types wasn't serialized correctly which caused deserialization error during node validation.
- #5475 SpEL expressions checking improvement: The equals operator used with two Lists with different element types is reported as an error
- #5389 Scenario activity API OpenAPI-based documentation (e.g.
https://demo.nussknacker.io/api/docs
) - #5509 Security improvement:
- Added authorization check for listing activities and downloading attachments in scenario activity API
- Fixed the ability to download an unrelated attachment from a given scenario
- #5522, #5519 Scenario status caching more often
- #5505 #5710 Fix: anonymous user handling regression
- #5371 Added new parameter editor type: DictParameterEditor.
- #5373 API changes related to components development
- #5566 #5550
#5515 #5474 Processing mode and engine available in the GUI.
⚠️ for the helm chart deployment, you need to manually migrate scenarios in db to one of possible processing types: either
streaming
orrequest-response
. See MigrationGuide for details - #5566
DEFAULT_SCENARIO_TYPE
environment variable is not supported anymore - #5272 #5145 Added: Decision Table component
- #5641 Fix: fetching/parsing batch periodic json only when needed (stop parsing during status check)
- #5656 Added: Decision Table component - detailed validation
- #5657 Improved heuristic for eventhub to Azure's schema name mapping.
- #5754 Fix for broken encoding mechanism in tests from file with Avro format, revert [0d9b600][https://github.com/TouK/nussknacker/commit/0d9b600]
- #5558 Added: an info about
Processing mode
to the scenario and dividedStatus
toolbar toScenario actions
andScenario details
1.13
Highlights
End-user
- Fixed exporting scenario to PDF
- Fixed SpEL suggestions not appearing in some cases
- Fixed fragment migration to another environment
- Added ability to drag and drop map fields
- Fixed non-unique test case IDs when testing scenarios with union
- Removed output "dot" on fragments that don't have any outputs
- Fixed
NodeAdditionalInfo
style - Added ability to access fields in records using indexing, for example
{jan:300, alex:400}['alex']
returns 400
- Added
CountWhen
andAverage
aggregations - Expanded FragmentParameter with new fields:
hintText
,initialValue
,required
,inputMode
- Added ability to perform insert/update queries on the db by adding the
Updates count
strategy to the db-query service
Administrator
- Clarified K8s configuration in docs
- Redesigned categories configuration
- Improved error logging in case of Nu Designer API errors
- Made processing type to category mapping 1-to-1 instead of 1-to-many
Component developer
- Fixed Nussknacker ARM64 Docker images
- Improved
TestScenarioRunner
- Parametrised metrics configuration in
dev-application.conf
- Decoupled the
listener-api
module from therestmodel
module - Changed the
Validator.isValid
method, which now takes an expression and optional evaluated value, instead of just an expression - Bumped Cats Effect 3
1.13.3 (28 June 2024)
⚠️ Warning: This fix was introduced in 1.16.0 version and has only been backported to this version.
- #6285 Fix for DatabaseLookupEnricher mixing fields values when it is connected to ignite db
1.13.2 (7 Mar 2024)
- #5447 Fixed
java.lang.reflect.InaccessibleObjectException: Unable to make public java.lang.Object
exception by downgrade of JRE from 17 to 11 in lite runner image for scala 2.13
1.13.1 (7 Mar 2024)
[this version was skipped, please use 1.13.2 instead]
1.13.0 (12 Jan 2024)
- #5051 Allow users to perform inserts/updates on db by adding
Updates count
strategy to db-query service - #4988 Refactor: Allow to use custom authentication methods in user-defined Authentication Providers
- #4711 #4862 Added AdditionalUIConfigProviderFactory API that allows changing components' configs and scenario properties' UI configs without model reload
- #4860 Rename
additionalProperties
toscenarioProperties
- #4828 Improvement: Allow passing timestampAssigner at FlinkTestScenarioRunner
- #4839 Fixed: Fragment migration to secondary env is again available
- #4901 Improvements TestScenarioRunner:
- Run runner with proper prepared invocation collector for test mode
- Fix passing global variables on LiteTestScenarioRunner and RequestResponseTestScenarioRunner
- Add missing tests for passing global variables
- Fix bug with passing components on RequestResponseTestScenarioRunner
- Fix bug building source test context on LiteTestScenarioRunner
- #4854#5059 Categories configuration redesign
- #4919 Improvement: Support for handling runtime exceptions at FlinkTestScenarioRunner
- #4923 Fix non-unique test case ids when testing scenario with union
- #4745 Improvement: Stricter Node and scenario id validation
- #4928 #5028 Breaking change:
Validator.isValid
method now takes expression and optional evaluated value, instead of just expression. Also:LiteralRegExpParameterValidator
is renamed toRegExpParameterValidator
,LiteralNumberValidator
is removed,LiteralIntegerValidator
is considered deprecated and will be removed in the future.- new validator:
CompileTimeEvaluableValueValidator
that checks if value is valid at compile time and it should be used instead of literal validators - annotation
pl.touk.nussknacker.engine.api.validation.Literal
was renamed topl.touk.nussknacker.engine.api.validation.CompileTimeEvaluableValue
- #5033 Updated Scala 2.13 to 2.13.12
- #4887 New parameter validator -
ValidationExpressionParameterValidator
that allows to use SpEL (or any other) expression to validate parameters - #5077 Add an option to set schema on connections in SQL enricher
- #5059 #5100 #5103 Breaking change: Scenario type to Category mapping become 1-to-1 instead of 1-to-many.
- #4978 #5241 Expand
FragmentParameter
with new fields:hintText
- shown next to the parameter when using the fragmentinitialValue
- initial value of the parameter (before user changes it)required
- whether the parameter is mandatoryvalueCompileTimeValidation
- allows configuration ofValidationExpressionParameterValidator
for this parameter
- #4953 Improved node validation
- #5141 Security improvement: API endpoints check if user has access rights to Category associated with Processing Type provided in API
- #5182 #5203 #5250 Component, User and Notification API OpenAPI-based documentation (e.g.
https://demo.nussknacker.io/api/docs
) - #5171 Breaking change: some components changed identifier - url's and identifiers in node errors are changed
- #5171 Component
mapVariable
was renamed torecord-variable
- #5223 Legacy low level kafka components were removed
- #5233 Fix: Not expected type: Null runtime error for non-nullable, optional json fields that were not provided by user in sink
- #5233 Added support for schema evolution in kafka using json schema and response sink
- #5197 Improved accessing fields in records in expressions - fields can now be statically accessed using indexing
- #5312 Collect component clears context variables
- #5313 Added CountWhen and Average aggregations
1.12
Highlights
End-user
- new: Ad-hoc testing for Fragments
- improvement: better Nu Designer stability
- improvement: SpEL-related improvements
- fix: Minor UI-related bug fixes
Administrator
- improvement: OIDC authentication enhancements
Component developer
- new: Introduced OpenAPI documentation for Nu API (partially)
- improvement: Utils modules enhancements