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.
- Removed websocket support
Redis has been renamed to Valkey. This affects the rust API, the topology.yaml and all documentation.
- All modules and types containing redis have been renamed to refer to valkey instead.
- transforms renamed:
RedisSinkCluster->ValkeySinkCluster,RedisSinkSingle->ValkeySinkSingle - sources renamed:
Redis->Valkey
Transform::transformnow takes&mut Wrapperinstead ofWrapper.Wrapperis renamed to ChainState.
- A new mandatory configuration
check_shotover_peers_delay_msis added forKafkaSinkCluster. See transform.md for details on this configuration. - The
addressfield for each shotover node inKafkaSinkClusteris replaced withaddress_for_clientsandaddress_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_countshotover_transform_failures->shotover_transform_failures_countshotover_transform_latency->shotover_transform_latency_secondsshotover_chain_total->shotover_chain_total_countshotover_chain_failures->shotover_chain_failures_countshotover_chain_latency->shotover_chain_latency_secondsshotover_available_connections->shotover_available_connections_countshotover_chain_failures->shotover_chain_failures_countout_of_rack_requests->shotover_out_of_rack_requests_countclient_protocol_version->shotover_client_protocol_version_countfailed_requests->shotover_failed_requests_countquery_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_chainShould 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: 3000The 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_valueis nowshotover::frame::valueshotover::message_value::MessageValueis nowshotover::frame::value::GenericValue
- source TLS configurations will now enable client authentication when the
certificate_authority_pathfield 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_pathfield.- Alternatively if you wish to use client authentication you can keep the field and setup your client to properly use client authentication.
- untracked