- Clojure 1.10 fix.
- Rerelease due to build pipeline failures.
- Fix issue with import on clojure 1.10.
- Allow job snapshot coordinates to be looked up by job-name AND tenancy-id (#877)
- Skip input recovery when resume mode is :initialize. (#872)
- Add onyx.peer/storage.s3.prefix configuration option (#874)
- Implement claim-spare-peers for greedy scheduler (#878)
- Release to upgrade build system to Circleci 2.
- Release to upgrade build system to Circleci 2.
- Release to upgrade build system to Circleci 2.
- Fixed bug in watermarks mechanism that would not reset the pipeline watermark on peer failure.
- Added onyx.api/clear-job-data for use in clearing stale job data from ZooKeeper. Most easily combined with onyx.api/job-ids-history.
- Added onyx.api/clear-tenancy for use in clearing a whole tenancy log, and all jobs underneath it from ZooKeeper.
- BREAKING FIX:
:trigger/init-locals
did not work as documented. Map returned by :trigger/init-locals
is now correctly merged into trigger map rather than the backing trigger record. - Upgraded curator from version 2 to version 4, enabling SSL [ZooKeeper support] (https://github.com/onyx-platform/onyx/issues/854)
- Onyx seq documentation moved into onyx proper.
- Fix flow/to validation and error messages. #855, thanks to quimrstorres.
- The plugin template onyx-plugin has been updated for 0.10+. Many thanks to quimrstorres.
- Improve lifecycle validation for the core async plugin.
- Improve documentation.
- Properly close input stream resources on onyx.storage.s3 recovery.
Very minor release.
- Bump aws-java-sdk-s3, aeron, core.async dependencies.
- Fix core.async major version.
- Fixed case where Onyx peer group may fail to continue reading the cluster log when connection loss occurs.
- Fixed issue where exceptions from output task onyx/fn would not be rethrown.
- Fix increased cpu consumption introduced by batch-timeout logic introduced in 0.12.3.
- Fix issue where coordinator booted peer, and leave-cluster log entry did not validate against the log entry schema.
- Fix two bugs where peer-group would fall out of its duty cycle due to errors.
- Fix case where coordinator write failed and messenger was not correctly shutdown.
- Fix max-segments-per-barrier functionality.
- Reduce cpu consumption of function / output tasks by correctly idling for onyx/batch-timeout ms per batch.
- Fix for tagged constraints using onyx/n-peers 837. Thanks Thingographist.
- Fix build issue in 0.12.1.
- Fixed an bug in the new
:checkpointed
windowed state event type, where incorrect barrier number may be supplied after a peer crash. - Added a new
:job-config
key to the job map. :job-config
option allows :onyx.peer/coordinator-barrier-period-ms
to be supplied per job.
0.11 and 0.12 bring a number of small breaking changes that were necessary to fix some flaws in Onyx's usability. After 0.12 the pace of these breaking changes will be reduced.
- New api function
onyx.api/job-ids-history
. Allows reverse lookup of a :job-name job-key, to its corresponding history of job-id and tenancy-ids. This makes supporting long running migrateable jobs much easier. - New api function
onyx.api/job-state
. Plays back the log for a given tenancy-id and job-id and returns the current state of the job. - New
:onyx/type :reduce
. :reduce
tasks do not emit segments transformed by :onyx/fn
, and must use one or more windows. When used as an terminal task, :onyx/plugin
is optional. When used as an intermediate task, a trigger with :trigger/emit
must be supplied. onyx.api/job-snapshot-coordinates
was improved by use of onyx.api/job-ids-history
, and will now walk backwards through the job history until it finds an available snapshot.- onyx-http has been restored to functionality. Thanks Alexander Solovyov
- BREAKING CHANGE Flow condition handling of exceptions has been altered.
:flow/to
tasks that receive exception messages will no longer receive non-exceptional messages, ensuring that simple error handling flows are possible. - BREAKING CHANGE Event map key
:onyx.core/results
has been removed. It has been replaced by :onyx.core/transformed
, :onyx.core/triggered
, and :onyx.core/write-batch
, with :onyx.core/write-batch
being the new source of segments for output plugin write-batch calls. - BREAKING CHANGE Default messenger term buffer size has been reduced. This will decrease the default maximum size from 2MB to 262144 bytes. This change will reduce default memory consumption at a possible cost to throughput. The prior default behaviour can be returned by setting
:onyx.messaging/term-buffer-size.segment
to 16777216. - Fixed colocated task scheduler [onyx#823].
- Fixed class cast exception in onyx-seq filereader task [onyx#813]. Thanks halcyon!
- BREAKING CHANGE Checkpointing to ZooKeeper will no longer allow windows to be stored unless :onyx.peer/storage.zk.insanely-allow-windowing?.
- Embedded aeron media driver will no longer delete its dirs by default, as it was too easy to accidentally start up multiple media drivers that would step on each other. Old behaviour can be returned via :onyx.messaging.aeron/embedded-media-driver-delete-dirs-on-start?, however this should be done with the understanding that it may be papering over issues.
- Fixed colocated task scheduler [onyx#823].
- Fixed class cast exception in onyx-seq filereader task [onyx#813]. Thanks halcyon!
Added peer-config options:
- Event and processing time watermark support, which provides a much more rigorous way to apply watermark triggers to you windowed state, allowing input sources to be offset in time, while still correctly triggering.
- Enabled input and output plugin
checkpointed!
call which is called after a barrier epoch is fully checkpointed. - Large performance improvements to task windows.
- BREAKING CHANGE Checkpoint schema format has changed, which will invalidate existing checkpoints. Please rebuild these from durable storage. Future schema checkpoints will be migrateable.
- BREAKING CHANGE
:onyx.refinements/discarding
and :onyx.refinements/accumulating
have been removed. Use :trigger/post-evictor :all
to achieve discarding behaviour, and delete the refinement to achieve accumulating behaviour as the accumulating refinement did nothing. - BREAKING CHANGE
:aggregation/create-state-update
fn signature has changed from (window, state, segment) to (window, segment). :trigger/post-evictor
has been added, which improves window cleanup for flushed window extents.:window/storage-strategy
feature has been added to allow full window entries to be stored and materialized at any time. Defaults to previous behaviour, which is :incremental
.:trigger/state-context
feature has been added to allow users to use triggers without any trigger state. Defaults to :trigger-state
which is the previous behaviour.- Experimental LMDB state backend has been added.
- Improved performance.
Please see the cheat sheet for a full list of added and removed features in 0.10.0.
Easier to use plugin interfaces handle more of the work around checkpointing.
Plugin authors previously needed to checkpointing code that wrote to ZooKeeper. This
is now handled by simply implementing the checkpoint protocol function.
Resume points are a new feature that make
it simple to resume state from jobs in new jobs. This allows for simplified
deployment / upgrades of long running streaming jobs, simpler refactoring of
jobs (e.g. split one job into two jobs, but keep the state for each respective
part), and more.
Onyx Windows now perform exactly once data processing (not side effects!),
without needing deduplication and an :onyx/uniqueness-key
to be set.
Triggers can now emit aggregates to downstream tasks :trigger/emit
.
Breaking Change Triggers must now include a trigger/id
that is unique over the windows that it applies to.
:done
messages are no longer supported on core async input channels. Simply close the channel instead of putting on a done.
In addition, :done
messages are no longer written to output channels. Insead
use onyx.api/await-job-completion
or onyx.test-helper/feedback-exception!
to wait for the job to end, and then drain the output channels until no more
messages can be read.
Note, the core async plugin now requires a buffer to temporarily hold unacked segments
(def in-chan (atom nil))
(def in-buffer (atom {}))
(defn inject-in-ch [event lifecycle]
{:core.async/buffer in-buffer
:core.async/chan @in-chan})
;; to add to your task lifecycles
(conj lifecyles {:lifecycle/task :in
:lifecycle/calls ::in-calls})
ABS requires performant checkpointing to durable storage. The default
checkpointing implementation checkpoints to ZooKeeper, which is much slower
than the alternatives (S3/HDFS/etc), and has a 1MB maximum node size. Please
configure s3 checkpointing via the peer-config
.
Most jobs will need to remove the :onyx/max-pending
option from their input
tasks to become compatible with 0.10.x. Some jobs will also need to remove the
:onyx/pending-timeout
. Aggregation jobs will likely need to remove both
:onyx/uniqueness-key
and :onyx/deduplicate?
from their aggregation tasks.
- Final release of 0.10.0.
- BREAKING CHANGE resume points will not allow restoration of window state from prior to 0.10.0 final.
- Plugin interface updated to supply remaining batch-timeout to input interface. poll! now supplies the remaining ms for the batch.
- Added a new plugin, onyx-amazon-kinesis.
- Improved peer liveness detection.
- Added new metrics: peer-group.scheduler-lag, peer-group.peers-shutting-down.
- Fix bug in short circuiting.
- BREAKING CHANGE Fixed issue where namespaced tasks with same name would collide. This will break the ability to use old resume points for namespaced tasks.
- Big performance improvements, re-enable local to local short circuiting.
- Fix bug in
:trigger/emit
. - Upgrade aeron back to 1.2.5.
- Report
:job-name
from job :metadata
in metrics tags. - Support routing of exceptions from flow conditions predicates.
- Back out Aeron dependency upgraded in beta13 as it broke media driver health checks. This will be upgraded after resolving the health check issue.
- Fix error with punctuation triggers which prevented checkpointing to S3.
:window/id
and :trigger/id
can now be uuids as well as keywords.- Add peer group heartbeat metric, reported to "peer-group.since-heartbeat" in JMX.
- Fix an issue where a replica invariant assertion would be tripped though the replica state was correct.
- Report JMX metrics to org.onyxplatform namespace.
- Support dynamic write batch sizes which will not overflow Aeron buffers. Under a default term buffer configuration, Aeron allows messages of up to 2MB. Onyx's batching mechanism means that a batch can be at maximum 2MB, which means that an individual segment had to be well under 2MB. Onyx will now split segments into multiple batches once the buffer has been filled.
- Revert change in heartbeating logic that was causing heartbeat channels to become stuck.
- Improve flow conditions validation errors.
- Adjust metrics to include slot-id in metrics tags.
- Add metric "offset" so that input plugins can report their medium's offset (e.g. kafka topic offset for a given slot-id / partition).
- Increase default subscriber / publisher timeout to 20000ms.
- Decrease heartbeat period from 5000ms to 1000ms.
- Fix bug in status updates that reduces latency of barrier status reporting.
- Fix bug in session windows which would cause it to lag one message behind.
- Add gen-class to aeron media driver to allow for main entry point when AOTd
- Fix timer trigger fires
- Fix documentation for trigger/emit.
- Fixes boundary expansion for Session windows.
- Bug fix: Fixed exception type check for the CLJS reader.
- Feature: new
:lifecycle/after-apply-fn
lifecycle has been added. This lifecycle is called after :onyx/fn
is applied, but before the batch is written. - Reduced number of dependencies.
- Increase default publication creation timeout to 5000ms
- Dependency change: Upgraded Aeron to 1.0.4
- onyx-peer-http-query added important health checks for Aeron media driver status
- Increase default
:onyx.messaging/inbound-buffer-size
to 100000. - Reduced default core.async thread pool size to 16.
- Reduced use of
clojure.core.async/alts!!
to improve performance and reduce thread sharing.
- Bug fix: Fix issue where subscriber would time out and would not be re-created onyx#681.
- Increase default core.async thread pool size to 32 to decrease blocking issues under certain conditions. This can be overridden via the java property "clojure.core.async.pool-size"
- Bug fix: Fix cross talk between jobs where the jobs contained tasks with the same name.
- Bug fix: Change hashing algorithm for repeatable job IDs. The previous implementation was not consistent across JVMs.
- Bug fix: batch-fn did not respect lifecycle/handle-exception behaviour.
- Bug fix: core.async plugin did not use channel size lifecycle parameter.
- Breaking change The onyx log is now versioned by Onyx version, and will throw an exception if you do not supply a new
:onyx/tenancy-id
when upgrading or downgrading. This was best practice, and is now being enforced to prevent errors. :onyx.core/scheduler-event
is now added to the event map before :lifecycle/after-task-stop
is called. Peers can thus now wdetermine whether they are being shutdown because the job is completed or killed.- Feature:
:onyx/batch-fn?
allows :onyx/fn
to be supplied with a whole batch of segments. This can be a useful optimisation, especially when batching async requests. More details. Some useful libraries to help with batch resolution include claro and urania. - Deprecated:
:onyx/bulk?
. Use :onyx/batch-fn?
by returning the segments that were passed in instead. - Fixed 627 where serialized exception could not be deserialized again by dashboard
- Dependency change: Upgraded to
[com.taoensso/timbre "4.7.4"]
, and [com.taoensso/nippy "2.12.2"]
.
- Bug fix: Fix ex-info arity error in BookKeeper Component.
- Improvement: onyx.api/submit-job errors are now printed to stderr
- Improvement: BookKeeper cookie is now cleaned up, which will help with repl reload issues. #612
- Bug fix: Fix flow conditions where flow/from and flow/to is :all. #617
- Bug fix: Fixed suppressed exceptions on
with-test-env
start up sequence. - Bug fix: Fixed schema merging for task bundles.
- Bug fix: Suppress Aeron MediaDriver NoSuchFileException when Aeron cleans up the directory before we do.
- Bug fix: Fixed ZooKeeper thread leak bug. #600
- Bug fix: Fixed logging statement echoing the number of processed segments.
- Bug fix: Only allow peer to write one exhausted input log entry per task. #493
- Bug fix: Fixed bug in percentage scheduler that failed to use all available peers due to a rounding error.
- Documentation fix: Fixed lifecycles exception description.
- Documentation fix: Fixed trigger predicate signature description. #586
- Documentation: Added more content to the FAQ section.
- Dependency change: Upgraded
org.btrplace/scheduler-api
to 0.46
. - Dependency change: Upgraded
org.btrplace/scheduler-choco
to 0.46
. - Dependency change: Excluded ClojureScript from clj-fuzzy dependencies.
- Design change: Implemented peer-group ZooKeeper connection sharing. This reduces the number of ZooKeeper connections required per machine, and improves scheduler performance.
- Enhancement: Tasks now time out when being stopped, allowing a peer to be rescheduled in cases where the task is stuck. This is configured via the peer-config
:onyx.peer/stop-task-timeout-ms
. - Enhancement: A message is now emitted to the logs when a job is submitted, but does not start because of the scheduler gave it no peers.
- Enhancement: remove stray printlns.
- New feature: Advanced static analysis. Semantic errors are detected upon job submission, and significantly better error messages are written to standard out, rather than throwing an exception.
- Enhancement: updated Onyx Schema's to restrict namespace level keys on all job data structures, rather than only the catalog.
- Bug fix: exhaust-input events should not change replica if job is finished
- Bug fix: Loosened Event schema bad release in 0.9.2
- Bug fix: Loosened Event schema when checked for stateful tasks. #568
- New aggregation: added
onyx.windowing.aggregation/collect-by-key
aggregation. - Bug fix: Exceptions were being swallowed by Curator's logging configuration. #563
- Bug fix: Some exceptions that kill jobs were failing to be serialized to ZooKeeper by Nippy. #564
- API breaking change:
onyx/id
in peer-config and env-config was renamed to :onyx/tenancy-id
- API breaking change:
:aggregation/fn
was renamed to :aggregation/create-state-update. - API breaking change: changed the signatures of: :aggregation/init, :aggregation/create-state-update, :aggregation/apply-state-update, and :aggregation/super-aggregation-fn. All now take the window as the first argument.
- API breaking change: internal messaging functions no longer take the event map as an argument. Note, this will break any plugins that manually manage the ack count, such as plugins using async callbacks.
- API breaking change: triggers and refinements functions are now resolved to vars via namespace lookup e.g.
Trigger example:
:trigger/on :segment
-> :trigger/on :onyx.triggers/segment
,
Refinement example: :trigger/refinement :accumulating
-> :trigger/refinement :onyx.refinements/accumulating
, - Breaking change in onyx-metrics: :metrics/workflow-name was deprecated in favor of metadata map. See onyx-metrics changes
- Bug fix: fixed exceptions losing their main
.getCause
message when thrown inside a lifecycle - New feature: Jobs now support metadata by including a metadata map with job submission data e.g.
{:workflow ... :catalog ... :metadata {:name "myjobname"}}
. This makes it easier to correlate information about jobs, query the cluster for jobs, etc. - Design change: Implemented trigger refinements in terms of state updates. In order to implement a refinement, one must now implement a refinement calls map, analagous to the aggregation calls map. This takes the form
{:refinement/create-state-update (fn [trigger state state-event]) :refinement/apply-state-update (fn [trigger state entry])}
- Enhancement: Lifecycles can now catch flow condition exceptions through
:lifeycycle/handle-exception
from the :lifecycle/execute-flow-conditions
and :lifecycle/apply-fn
phases. - Enhancement: loosened the peer configuration schema needed for log subscription
- Dependency change: Upgraded
org.clojure/clojure
to 1.8.0
- Bug fix: Fix list of disallowed joining peers. Previous patch did not account for the single-peer, single machine cluster state.
- Bug fix: fix peer join issue which occurs when cluster is in a stuck state, and dead peers need to be evicted.
- Breaking change: Removed
:onyx/restart-pred-fn
feature, which has been deprecated in favor of the new :lifecycle/handle-exception
feature. - New feature: Task Constraints are a new feature that allow peers to tag themselves indicating user-defined capabilities. Onyx's scheduler will only allocate peers with tags that match a task to be executed. This composes with all existing scheduler features.
- Bug fix: Fixed a bug where a job would continue running even if it didn't have enough peers to cover all the tasks.
- Fixed a problem with a file in Onyx's test suite that was causing problems for the release process. No functional changes in this release.
- Breaking change: No longer AOT compile onyx.interop. This will be done in onyx-java for use by other languages.
- Bug fix: Fix bug where shutdown resulted in NPE when trying to delete a non-existent Aeron directory when not using the embedded driver.
- Bug fix: Fix issues in handle-exception lifecycle where it wouldn't handle exceptions in read-batch/write-batch/assign-windows #505
- Enhancement: trigger notification :task-complete has been renamed to :task-lifecycle-stopped, as it occurs whenever a task lifecycle is stopped, not necessarily when the task has been completed
- Enhancement: reduce unnecessary peer reallocation in Onyx's scheduler #503
- Dependency change: Revert back to Clojure 1.7.0, as 1.8.0 was causing issues with Onyx users on 1.7.0
- MAJOR bug fix: fixed bug causing slot-ids to be misallocated, which will affect recovery for state/windowed tasks #504
- MAJOR bug fix: fixed bug causing peers to stop checkpointing to state/windowed log #390.
- MAJOR bug fix: fixed a number of peer join bugs found by onyx-jepsen #453, #462, #437.
- Bug fix: Fixed bug introduced by a breaking change in Aeron 0.2.2 where we would retry a send to a closed publication.
- Enhancement: Improved performance, especially for windowed tasks #500
- Enhancement: Switch embedded aeron media driver to use SHARED mode by default, which is more robust on small peers.
- Enhancement: Embedded media driver now cleans up its directory to resolve version incompatibilities encountered by users on upgrading.
- Dependency change: Upgraded to Clojure 1.8.0
- Dependency change: Upgraded to Aeron 0.9
- Breaking change: Changed the signature of trigger sync function.
- New feature: Added support for handling lifecycle exceptions with
:lifecycle/handle-exception
- New feature: Added the Colocation Task scheduler
- Bug fix: Fixed a bug where
:flow/from
-> :all
didn't match compilation step. #464 - Bug fix: Fixed an issue where peers didn't restart properly on failure under certain conditions
- Enhancement: Switched to 3rd party scheduling library - BtrPlace.
- Enhancement: Added parameters for BookKeeper disk threshold error and warnings
- Dependency change: Upgraded
uk.co.real-logic/aeron-all
to 0.2.3
- Breaking change: Removed
:onyx.messaging.aeron/inter-service-timeout-ns
peer config setting. Client liveness timeout is now completely set via java property: aeron.client.liveness.timeout
- New feature: Serialize the exception that kills a job to ZooKeeper
- New monitoring metrics:
zookeeper-write-exception
and zookeeper-read-exception
- New peer configuration parameter:
onyx.zookeeper/prepare-failure-detection-interval
- Bug fix: Fixed method dispatch bug for punctuation triggers
- Bug fix: Fixed
:trigger/pred
not being in the validation schema - Bug fix: Fixed
:trigger/watermark-percentage
not being in the validation schema - Bug fix: Fixed issue where peers would not reconnect after losing connection to ZooKeeper.
- Bug fix: Fixed race condition where ephemeral node would not release in time, deadlocking peers on start up.
- Enhancement: Added extra schema validation to the
onyx.api
public functions - Enhancement: Added
:added
keys to the information model - Dependency change: Upgraded
org.apache.bookkeeper/bookkeeper-server
to 4.3.2
- Dependency change: Upgraded
uk.co.real-logic/aeron-all
to 0.2.2
- Changed job specification returned by onyx.api/submit-job. task-ids are now keyed by task name.
- Turned on nippy compression for ZooKeeper writes and messaging writes
- Fix badly named 0.8.1 release version caused by release scripts.
- Changed job specification returned by onyx.api/submit-job. task-ids are now keyed by task name
- Turned on nippy compression for ZooKeeper writes and messaging writes
onyx.helper-env
has been removed, which is superseded by onyx.test-helper
's functions and components
- Breaking change
:onyx.messaging/peer-port-range
and :onyx.messaging/peer-ports
are deprecated in favour of a single :onyx.messaging/peer-port
port. The Aeron layer multiplexed all communication over a single port so multiple port selection is longer required. - Important change: default task batch timeout was reduced from 1000ms to 50ms.
- New major feature: Windowing and Triggers.
- New feature: Fixed windows
- New feature: Sliding windows
- New feature: Session windows
- New feature: Global windows
- New feature: Timer triggers
- New feature: Segment-based triggers
- New feature: Watermark triggers
- New feature: Percentile Watermark triggers
- New feature: Punctuation triggers
- New feature: Accumulating refinement mode
- New feature: Discarding refinement mode
- New feature: BookKeeper & embedded RocksDB automatic "exactly once" filtering.
- New feature: friendlier error messages. Added custom schema error handlers to print out documentation and required types in a more customized format.
- New flux policy: Recover
- New lifecycle: after-read-batch
- New metric: peer-send-bytes
- Bug fix: fixed an issue where the percentage job scheduler would misallocate.
- Bug fix: fixed
:data
key being removed from exception messages in the logs.
- Bug fix: Fixed a case where a peer would complete multiple jobs in response to a sealing event, rather than the only completing the one job that it was supposed to.
- No functional changes in this release. Fixing build issue.
- No functional changes in this release. Fixing build issue.
- Fixes transitive AOT compilation problem of interop namespace. #339.
- No functional changes in this release. Fixing build issue.
- No functional changes in this release. Fixing build issue.
- No functional changes in this release. Fixing build issue.
- Improve fault tolerance aeron connection reaping (GC)
- Fixed performance regression caused by reflection in Aeron messaging layer.
- No functional changes in this release. We had a build problem that wasn't worth fixing across all 0.7.4 releases. Fixed build and trying again under alias 0.7.5
- Operations: Onyx now requires Java 8.
- API breaking change: update signature of
onyx.api/await-job-completion
to take an opts map. - API breaking change: removed Netty and core.async messaging implementations.
- API: New catalog entry option
:onyx/n-peers
to automatically expand to make :onyx/min-peers
and :onyx/max-peers
peers the same value. #282 - API: Allow functions in leaf position of a workflow. #198
- Bug fix: flow-conditions retry default action should emit segments #262
- Bug fix: cleaned up publications on write failure
- Bug fix: Kill-job no longer throws a malformed exception with bad parameters.
- Bug fix: Fixed arity in garbage collection to seek the next origin.
- Documentation: Fixed Aeron docstring for port allocation
- Added schema type-checking to all replica updates in the log.
- Allow Aeron to use short virtual peer ID when hashing. #250
- Exposed all schemas used for internal validation through
onyx.schema
namespace, meant for use in 3rd party tooling. - Allow plugins to write task-metadata to the replica, which will be cleaned up when jobs are completed or killed #287
- Fixed issue where cluster jammed when all peers left and joined #273
- Allow
:all
in task lifecycle names to match all tasks. #209
- :onyx.core/params is initialised as a vector
- Greatly improved lifecyle and keyword validation
- await-job-completion additionally returns when a job is killed. Return code now denotes whether the job completed successfully (true) or was killed (false).
- Throw exceptions from tasks, even if Nippy can serialize them.
- Fix typo'ed monitoring calls.
- API: :onyx/ident has been renamed :onyx/plugin, and now takes a keyword path to a fn that instantiates the plugin e.g. :onyx.plugin.core-async/input. (Breaking change)
- API: plugins are now implemented by the Pipeline and PipelineInput protocols. (Breaking change)
- API: output plugins may now find leaf segments in (:leaves (:tree (:onyx.core/results event))) instead of (:leaves (:onyx.core/results event)) (Breaking change)
- API: New lifecycle functions "after-ack-message" and "after-retry-message" are now available.
- API:
:onyx/group-by-key
can now group can now take a vector of keywords, or just a keyword. - API:
:onyx/restart-pred-fn
catalog entry points to a boolean function that permits a task to hot restart on an exception. - API: Peer configuration can now be instructed to short-circuit and skip network I/O if downstream peers are on the same machine.
- New feature: Jobs will now enter an automatic backpressure mode when internal peer buffers fill up past a high water mark, and will be turned off after reaching a low water mark. See Backpressure for more details.
- New documentation: Use GitBook for documentation. #119
- New feature: Onyx Monitoring. Onyx emits a vast amount of metrics about its internal health.
- New feature: Aeron messaging transport layer. Requires Java 8. Use the
:aeron
key for :onyx.messaging/impl
. - New feature: Messaging short circuiting. When virtual peers are co-located on the same peer, the network and serialization will be bypassed completely. Note, this feature is currently only available when using Aeron messaging.
- New feature: Connection multiplexing. Onyx's scalability has been improved by multiplexing connections. Note, this feature is currently only available when using Aeron messaging.
- New feature: Java integration via catalog entry
:onyx/language
set to :java
. - Bug fix: Several log / replica edge cases were fixed.
- Bug fix: Peers not picking up new job after current job was killed.
- Bug fix: Bulk functions are no longer invoked when the batch is empty. #260
- Dropped feature: support for
:sequential
tasks - Dropped feature: support for
onyx.task-scheduler/greedy
- Dropped feature: support for HornetQ messaging
- Dropped feature: internal HornetQ messaging plugin
- Dropped feature: multimethod lifecycles
- New messaging transport: Netty TCP
- New messaging transport: Aeron
- New messaging transport: core.async
- New feature: Percentage-based, elastically scalable acknowledgement configuration
- New feature: Input, output, and specific task name exemption from acting as an acker node
- New feature: Functions can take an entire batch of segments as their input with catalog key
:onyx/bulk?
true - New feature: Flow conditions handle exceptions as predicates
- New feature: Flow conditions may post-transform exception values into new segments
- New feature: Flow conditions support a new
:action
key with :retry
to reprocess a segment from its root value - New feature: Custom compression and decompression functions through Peer configuration
- New feature: Data driven lifecycles
- New feature: Internal core.async plugin
- New feature: Flux policies
- New feature:
:onyx/min-peers
can be set on grouping tasks to create a lower bound on the number of peers required to start a task - New documentation: Event context map information model
- New documentation: Default configuration & timeout values
- API: Added metadata to all public API functions indicating which Onyx version they were added in
- API:
onyx.api/start-peers!
API renamed to onyx.api/start-peers
- API:
onyx.api/shutdown-peers
is now idempotent - API: Return type of public API function submit-job has changed. It now returns a map containing job-id, and task-ids keys.
- API: Renamed "Round Robin" schedulers to "Balanced"
- API: The last task in a workflow no longer needs to be an
output
task - API: Plugin lifecycle extensions now dispatch off of identity, rather than type and name.
- API: Peers now launch inside of a "peer group" to share network resources.
- New feature: Flow Conditions. Flow Conditions let you manage predicates that route segments across tasks in your workflow.
- Fixed extraneous ZooKeeper error messages.
- Development environment doesn't required that the job scheduler be known ahead of time. It's now discovered dynamically.
- Adds ctime to log entries. Useful for things like the dashboard and other log subscribers.
- Design change: the Coordinator has been abolished. Onyx is now a fully masterless system. The supporting environment now only requires Zookeeper, HornetQ, and a shared Onyx ID across cluster members.
- New feature: Realtime event subscription service. All coordination events can be observed in a push-based API backed with core.async.
- New feature: Job schedulers are now available to control how many peers get assigned to particular jobs. Supports
:onyx.job-scheduler/greedy
, :onyx.job-scheduler/round-robin
, and :onyx.job-scheduler/percentage
. - New feature: Task schedulers are now available to control how many peers get assigned to particular tasks within a single job. Supports
:onyx.task-scheduler/greedy
, :onyx.task-scheduler/round-robin
, and :onyx.task-scheduler/percentage
. - New feature:
:onyx/max-peers
may optionally be specified on any catalog entry to create an upper bound on the number of peers executing a particular task. Only applicable under a Round Robin Task Scheduler. - New feature:
:onyx/params
may be specified on any catalog entry. It takes a vector of keywords. These keywords are resolved to other keys in the same catalog entry, and the corresponding values are passing as arguments to the function that implements that catalog entry. - New feature:
:onyx.peer/join-failure-back-off
option in the peer config specifies a cooldown period to wait to try and join the cluster after previously aborting - New feature:
:onyx.peer/inbox-capacity
option in the peer config specifies the max number of inbound messages a peer will buffer in memory. - New feature:
:onyx.peer/outbox-capacity
option in the peer config specifies the max number of outbound messages a peer will buffer in memory. - New feature:
kill-job
API function. - New feature:
subscribe-to-log
API function. - New feature:
shutdown-peer
API function. - New feature:
shutdown-env
API function. Shuts down a development environment (ZK/HQ in memory). - New feature:
gc
API function. Garbage collects all peer replicas and deletes old log entries from ZooKeeper. - Enhancement: peers now automatically kill their currently running job if it throws an exception other than a Zookeeper or HornetQ connection failure. The latter cases still cause the peer to automatically reboot.
- Fixes aggregate ignoring
:onyx/batch-timeout
. #33 - Adds log rotation to default Onyx logging configuration. #35
- Peer options available in pipeline event map under key
:onyx.core/peer-opts
- Grouper and Aggregate functions removed, replaced by catalog-level grouping and implicit aggregation. #20
- Support for directed, acylic graphs as workflows. #26
- Fix for peer live lock on task completion. #23
- Fixed bug where job submission silently fails due to malformed workflow #24
submit-job
throws exceptions on a malformed catalog submission. #3- Fix HornetQ ipv6 multicast socket bind issue when running on hosts with ipv6 interfaces.
- Adds
:onyx/batch-timeout
option to all catalog entries. #29
- Fixes a scenario where a virtual peer can deadlock on task completion. #18
- Made peer shutdown function synchronous.
- Performance improvement by eliminating superfluous decompression.
- Coordinator can be made highly available via stand-by coordinators
- HornetQ connection via UDP multicast for clustering
- HornetQ connection via JGroups for clustering
- HornetQ embedded mode for development with an HQ cluster
- HornetQ VM mode for development with an in-JVM HQ instance
- ZooKeeper in-memory mode for for development without an external ZooKeeper running
- Concurrent tasks executed by a single v-peer no longer implies sequential message processing
- Rename internal API extensions to use "node" instead of "place".
- Throw an explicit error on function resolution failure.
- Add state audits into test suite.
- Remove Datomic log component, replace with ZooKeeper.
- Return job ID on submission.
- Expose API function for blocking on job completion.
- Allow overriding of peer lifecycle methods, merge results back together.
- Add aggregate operation.
- Add grouping operation.
- Change lifecycle API functions.
- Log all Onyx output to file system.