Any breaking changes to the topology.yaml
or shotover
rust API should be documented here.
This assists us in knowing when to make the next release a breaking release and assists users with making upgrades to new breaking releases.
Transform::transform
now takes&mut Wrapper
instead ofWrapper
.Wrapper
is renamed to ChainState.
- A new mandatory configuration
check_shotover_peers_delay_ms
is added forKafkaSinkCluster
. See transform.md for details on this configuration. - The
address
field for each shotover node inKafkaSinkCluster
is replaced withaddress_for_clients
andaddress_for_peers
. See transform.md for details on these fields.
TransformBuilderAndMetrics
, TransformChainBuilder
, the TransformBuilder
trait, as well as many Transform
structs and TransformBuilder
structs no longer implement Derive
or Clone
.
The transform invariants have been changed significantly. A system of message IDs is now used to match responses to requests instead of relying on the message order. For full details refer to the documentation of the invariants.
The transform_pushed
method has been removed.
The messages that were previously sent through that method will now go through the regular transform
method.
Mandatory methods TransformConfig::up_chain_protocol
and TransformConfig::down_chain_protocol
are added.
Implement these to define what protocols your transform requires and outputs.
TransformBuilder::build
now returns Box<dyn Transform>
instead of Transforms
.
This means that custom transforms should implement the builder as:
impl TransformBuilder for CustomBuilder {
fn build(&self) -> Box<dyn Transform> {
Box::new(CustomTransform::new())
}
}
Instead of:
impl TransformBuilder for CustomBuilder {
fn build(&self) -> Transforms {
Transforms::Custom(CustomTransform::new())
}
}
The prometheus metrics were renamed to better follow the official recommended naming scheme: https://prometheus.io/docs/practices/naming/
This included ensuring all metrics were prefixed with shotover_
and all metrics were suffixed with an appropriate _unit
.
This includes:
shotover_transform_total
->shotover_transform_total_count
shotover_transform_failures
->shotover_transform_failures_count
shotover_transform_latency
->shotover_transform_latency_seconds
shotover_chain_total
->shotover_chain_total_count
shotover_chain_failures
->shotover_chain_failures_count
shotover_chain_latency
->shotover_chain_latency_seconds
shotover_available_connections
->shotover_available_connections_count
shotover_chain_failures
->shotover_chain_failures_count
out_of_rack_requests
->shotover_out_of_rack_requests_count
client_protocol_version
->shotover_client_protocol_version_count
failed_requests
->shotover_failed_requests_count
query_count
->shotover_query_count
The root level of the topology.yaml is completely overhauled. We have not observed the source_to_chain_mapping ever being used, so to simplify the topology.yaml format root level chains have been inlined sources.
For example, a topology.yaml that looked like this:
---
sources:
redis_prod:
Redis:
listen_addr: "127.0.0.1:6379"
chain_config:
redis_chain:
- RedisSinkSingle:
remote_address: "127.0.0.1:1111"
connect_timeout_ms: 3000
source_to_chain_mapping:
redis_prod: redis_chain
Should now be rewritten like this:
---
sources:
- Redis:
name: "redis_prod"
listen_addr: "127.0.0.1:6379"
chain:
- RedisSinkSingle:
remote_address: "127.0.0.1:1111"
connect_timeout_ms: 3000
The usage of the Filter transform has been changed to use either an allow list or deny list instead of just a deny list previously.
- QueryTypeFilter:
# old config:
# filter: Read
# new config:
DenyList: [Read]
shotover::message_value
is nowshotover::frame::value
shotover::message_value::MessageValue
is nowshotover::frame::value::GenericValue
- source TLS configurations will now enable client authentication when the
certificate_authority_path
field is present.- Previously this field existed and was mandatory but had no affect on the TLS connection and client authentication was never enabled.
- If you are getting TLS failures after upgrading remove the
certificate_authority_path
field.- Alternatively if you wish to use client authentication you can keep the field and setup your client to properly use client authentication.
- untracked