Shotover: L7 data-layer proxy

Overview

Shotover logo

Rust dependency status

Documentation

For full documentation please go to https://docs.shotover.io/

Building

Shotover is supported on Linux and macOS. To build Shotover from source please refer to the contributing documentation

What is Shotover?

Shotover is a high performance, configurable and extensible L7 data-layer proxy for controlling, managing and modifying the flow of database requests in transit. It can be used to solve many different operational and interoperability challenges by transparently intercepting and transforming queries. It is transparent in the sense that it can be plugged into your architecture without requiring application change.

Shotover currently supports intercepting requests for the following technologies (sources):

  • Cassandra (CQL4)
  • Redis (RESP2)

It currently supports writing output to the following technologies (sinks):

  • Cassandra
  • Redis
  • Kafka

What problems does Shotover solve?

Concrete examples where Shotover has been applied include:

More broadly, Shotover is designed to be used for a very wide ranging class of problems where it is useful to transparently intercept a database call and redirect it. This allows you to change the behaviour of running applications at the infrastructure level without change to the application code itself. Some examples where we envisage Shotover could be deployed include:

  • Moving very large or very hot tenants/customers/keys (that can cause unbalanced partition problems in some systems) to a separate data store by intercepting and redirecting queries for those particular keys
  • Dual writing and/or query translation to allow the underlying storage technology to be changed (for example, from DynamoDB to Apache Cassandra)
  • As an alternative to Change Data Capture technology to send writes to a message stream such as Apache Kafka in addition to the primary database
  • Adding auditing, encryption or other security measures

Of course, Shotover is designed to be configurable and extensible so use your imagination and let us know what uses you find!

Deploying Shotover

Shotover can be deployed in several different ways based on the problem you are trying to solve, but they all fall into three categories:

  • As an application sidecar - Shotover is pretty lightweight, so feel free to deploy it as a sidecar to each of your application instances.
  • As a stand-alone proxy - If you are building a Service/DBaaS/Common data layer, you can deploy Shotover on standalone hardware and really let it fly.
  • As a sidecar to your database - You can also stick Shotover on the same instance/server as your database is running on; we do it, so we won't judge you.

Roadmap

  • Support relevant xDS APIs (so Shotover can play nicely with service mesh implementations)
  • Support hot-reloads and a dynamic configuration API.
  • Performance metrics.
  • Additional sources (DynamoDB and PostgreSQL are good first candidates).
  • Add support for rate limiting, explicit back-pressure mechanisms, etc.
  • Additional distributed algorithm transform primitives (e.g RAFT, 2PC, etc)
  • Additional sink transforms (these generally get implemented alongside sources).
  • Support user-defined / generated sources (e.g. thrift or a gRPC service from a proto definition).
  • Simulation testing once tokio-rs/simulation reaches compatibility with tokio-2.0.
  • Zero-copy pass-through transforms and in-place query editing (performance).

Name

Shotover refers to the Shotover (Kimi-ākau) river in Otago, New Zealand - close to Queenstown and eventually flowing into Lake Wakatipu via the Kawarau River, it's famous for white water rafting, bungy-jumping, fast rapids and jet boating.

Comments
  • Validate topology.yaml

    Validate topology.yaml

    • [x] every transform chain ends in a terminating transform
    • [x] a terminating transform is not followed by a non-terminating transform transforms are compatible with each other e.g. RedisTimestampTagger -> CassandraDestination will make a follow up PR for this as this one is large enough
    opened by conorbros 22
  • Implement TLS support for incoming redis connections

    Implement TLS support for incoming redis connections

    Design

    The plan is to specify paths to keys and certs like this:

    sources:
      redis_prod:
        Redis:
          batch_size_hint: 1
          listen_addr: "127.0.0.1:6379"
          tls:
            certificate_path: "examples/redis-tls/tls_keys/redis.crt"
            private_key_path: "examples/redis-tls/tls_keys/redis.key"
    chain_config:
      redis_chain:
        - RedisDestination:
            remote_address: "127.0.0.1:1111"
            tls:
              certificate_path: "examples/redis-tls/tls_keys/redis.crt"
              private_key_path: "examples/redis-tls/tls_keys/redis.key"
    named_topics:
      testtopic: 5
    source_to_chain_mapping:
      redis_prod: redis_chain
    

    I think repeating the same paths when we are just doing a simple pass through like this is fine. It keeps the configuration format simple and allows flexibility of seperate keys between incoming and outgoing connections and even between different sources and outgoing endpoints. Open to other ideas though.

    This PR

    But the scope of this PR is to just implement redis support for incoming TLS connections. After this PR I will do two more PRs for:

    1. redis outgoing
    2. cassandra ingoing and outgoing

    Questions

    I have used the key/certificate formats as described here https://redis.io/topics/encryption Are there any other specific key/certificate formats I should/need to support and test with?

    TODO

    Currently the redis-tls/redis-cli.sh script can be used to create a connection when shotover is configured to use redis tls. But I still need to do the following:

    • [x] add integration test
    • [x] address TODO comments
    • [x] trim out unneeded keys from examples/redis-tls/tls_keys, not sure if we need any of these for different test cases.
    opened by rukai 21
  • Update metrics and pktparse

    Update metrics and pktparse

    The timing macro in the latest version of metrics has been replaced with histogram.

    pktparse needed the feature flag to be set to serde instead of derive.

    opened by conorbros 18
  • Rust doc core traits

    Rust doc core traits

    I've started the process of documenting some of the core traits and other important bits of shotover. This is still a WIP, but please sound off in the comments for any areas I haven't covered as far as cargo doc goes.

    opened by benbromhead 14
  • Cassandra source closes socket

    Cassandra source closes socket

    In writing a set of integration tests. Cassandra-rs will fail to connect to shotover configured with a Cassandra source, while cqlsh will connect succesfully.

    After a quick look at wireshark, it appears that the cassandra-rs driver (a wrapper around the c/c++ datastax one) tries a few unsupported protocol version, which fail or get downgraded. Cassandra itself wont shutdown the tcp connection, whereas shotover will causeing the driver to error out.

    Given Cassandra supports this behaviour (as broken as it seems), shotover needs to support this. Protocol version errors shouldn't cause us to drop the connection.

    good first issue 
    opened by benbromhead 14
  • Remove Cassandra cluster tests

    Remove Cassandra cluster tests

    - Always run Shotover on 9043 and Cassandra on it's default port of 9042 so it's easier to reason about what you are connecting to - Remove the cluster test as it does not properly test cluster functionality. Currently the driver makes the first connection to Shotover and then establishes the rest of the connections directly to Cassandra
    opened by conorbros 12
  • Redis cluster ports rewrite

    Redis cluster ports rewrite

    • rename RedisClusterSlotsRewrite to RedisClusterTopologyRewrite done in #282
    • have it catch "CLUSTER SLOTS", "CLUSTER REPLICAS", and "CLUSTER NODES" messages and rewrite the ports

    Other Redis commands that also return ports:

    • https://redis.io/commands/cluster-replicas
    • https://redis.io/commands/cluster-slaves (replaced by cluster replicas in version 5, do we need to handle this one still?)
    opened by conorbros 12
  • Tee transform breaks auth isolation because BufferedChains are shared

    Tee transform breaks auth isolation because BufferedChains are shared

    Describe the bug

    This is another auth isolation bug that is very similar to #204. Authentication support in RedisSinkCluster assumes that each instance of itself is dedicated per client connection to Shotover. Transforms like Tee (and the since-removed PoolConnections) stores state in shared references (Arc) in a way that violates this assumption.

    To Reproduce

    Steps to reproduce the behavior:

    1. Add auth support to the redis-cluster-dr example.
    2. Connect to primary cluster using redis-cli without authentication.
    3. Connect to primary cluster using redis-cli with authentication.
    4. Connect to secondary cluster using redis-cli with authentication.
    5. Attempt to write something using (2), which should fail with a NOAUTH.
    6. Check that the write did not go through using (4)... and this is is the problem. The write went through.

    The successful authentication from (3) also authenticates the shared DR chain, which is also used by (2).

    Expected behaviour

    • Unauthenticated connections must be prevented from writing to the secondary (DR) cluster.
    • Authenticated contexts must be kept isolated between connections.
    • BufferedChains possibly shouldn't be shared by default?

    Systems and Version:

    • Shotover Version 0.1.0
    bug redis 
    opened by XA21X 11
  • Cassandra flags

    Cassandra flags

    Pre-reqs:

    • https://github.com/Metaswitch/cassandra-rs/pull/147 Enables setting the tracing flag in cassandra-cpp
    • https://github.com/krojew/cdrs-tokio/pull/118 Fixes parsing of flags in cassandra-protocol

    At the moment Shotover is just stripping flags from messages. This PR implements support for flags. Currently this PR just tests we can send flags without error, but the followup: #854 uses this support to get tracing information from queries sent through Shotover.

    • [ ] switch to shotover fork of cassandra-cpp
    opened by conorbros 10
  • Create custom cassandra image for single instance integration tests

    Create custom cassandra image for single instance integration tests

    On my machine it now takes 5s to startup the cassandra container instead of 80s. I have not touched multi-instance integration tests because I dont think the same speedups are possible there.

    I discovered the magic speedups here: https://github.com/saidbouras/cassandra-docker-unit/blob/master/scripts/setup-config.sh Disabling gossiping is fine because its only a single instance. Disabling virtual nodes is more iffy, but I figure its fine because the multi-instance clusters are still running with a proper virtual node setup.

    It might still be worth investigating if there is anything we can do to speedup or skip gossiping on multi-instance clusters as every node starts with a complete list of seeds. But we would want to be very careful that it doesnt alter post-setup functionality from what a production cassandra cluster would be like.

    The cassandra.yaml is from here: https://github.com/apache/cassandra/blob/cassandra-4.0/conf/cassandra.yaml The only changes I made is to set enable_user_defined_functions and enable_scripted_user_defined_functions.

    opened by rukai 10
  • Switch Cassandra Docker image to bitnami

    Switch Cassandra Docker image to bitnami

    Switch all our usages of Cassandra docker images to bitnami because:

    • The maintainers are more open to PRs and have merged my PR's adding new features that we needed.
    • Removes the need for the cassandra-docker-entrypoint.sh hack because the environment variables have been added.
    opened by conorbros 10
  • Expose a metric that would measure the time taken from receiving a message and sending it back

    Expose a metric that would measure the time taken from receiving a message and sending it back

    Currently the metric shotover_chain_latency does not take into account the time it takes to encode each message, it would be better if we can include that time as well.

    opened by yuzhouchen-instaclustr 0
  • TokioBinProcess - stray processes are sometimes left around

    TokioBinProcess - stray processes are sometimes left around

    I suspect the solution may look like registering a sigint handler so that we ensure the child process is killed before terminating.

    Note that we are already making use of this: https://docs.rs/tokio/latest/tokio/process/struct.Command.html#method.kill_on_drop

    opened by rukai 0
  • Avoid cloning prepared metadata fields

    Avoid cloning prepared metadata fields

    PreparedMetadata contains a bunch of allocating fields we dont actually use like col_specs and global_table_spec.table_name. So I created a cut down version of PreparedMetadata to save 2 clones of these unused allocations. This saves ~0.5% in the flamegraph but this would have an even larger affect when the col_specs field has more complicated values in it.

    opened by rukai 0
  • Optimize cassandra metadata

    Optimize cassandra metadata

    RawCassandraFrame copies the entire body into a newly allocated vec. We dont use that at all in metadata so we can get a nice win by just reading the bytes we need directly off the buffer. Before this change, metadata shows up as taking 0.8% on the flamegraph afterwards its just 0.1%

    Previously we included tracing in our metadata however:

    • All the use cases of it were actually incorrect, if a client requests tracing and we return an error then the best we can do is just return no tracing.
    • tracing is part of the body which can be compressed, so implementing reading of tracing robustly would be very costly.

    So I removed it

    opened by rukai 0
  • Fix empty shotover_chain_latency metric

    Fix empty shotover_chain_latency metric

    Because the registered shotover_chain_latency metric cant specify the client ip it ends up as a separate metric that is always 0 which is quite confusing. e.g.

    # TYPE shotover_chain_latency summary
    shotover_chain_latency{chain="example_chain",quantile="0"} 0
    shotover_chain_latency{chain="example_chain",quantile="0.5"} 0
    shotover_chain_latency{chain="example_chain",quantile="0.9"} 0
    shotover_chain_latency{chain="example_chain",quantile="0.95"} 0
    shotover_chain_latency{chain="example_chain",quantile="0.99"} 0
    shotover_chain_latency{chain="example_chain",quantile="0.999"} 0
    shotover_chain_latency{chain="example_chain",quantile="1"} 0
    shotover_chain_latency_sum{chain="example_chain"} 0
    shotover_chain_latency_count{chain="example_chain"} 0
    shotover_chain_latency{chain="example_chain",client_details="127.0.0.1",quantile="0"} 0.000205255
    shotover_chain_latency{chain="example_chain",client_details="127.0.0.1",quantile="0.5"} 0.00023099834016288915
    shotover_chain_latency{chain="example_chain",client_details="127.0.0.1",quantile="0.9"} 0.00023099834016288915
    shotover_chain_latency{chain="example_chain",client_details="127.0.0.1",quantile="0.95"} 0.00023099834016288915
    shotover_chain_latency{chain="example_chain",client_details="127.0.0.1",quantile="0.99"} 0.00023099834016288915
    shotover_chain_latency{chain="example_chain",client_details="127.0.0.1",quantile="0.999"} 0.00023099834016288915
    shotover_chain_latency{chain="example_chain",client_details="127.0.0.1",quantile="1"} 0.000245891
    shotover_chain_latency_sum{chain="example_chain",client_details="127.0.0.1"} 0.000682139
    shotover_chain_latency_count{chain="example_chain",client_details="127.0.0.1"} 3
    

    So instead lets just remove the register to avoid that.

    Additionally process_request_rev was failing to specify the client_details which would have also been recorded in a separate metric.

    An alternate approach would be to just remove the client_details from the metric but I assume that splitting the metrics up by client is useful?

    opened by rukai 0
Releases(v0.1.8)
  • v0.1.8(Dec 20, 2022)

    Commits

    • a3dfabd: remove docker-compose healthcheck from int tests (#883) (Lucas Kent) #883
    • 1188a8a: Add more context to error logs (#879) (Lucas Kent) #879
    • 33c59c9: Fix source docs: cassandra TLS (#876) (Lucas Kent) #876
    • Document desired error handling (#875) #875 (Lucas Kent)
    • 33a958d: improve DockerCompose::wait_for_log (#880) (Lucas Kent) #880
    • 53e8b5e: Remove test_ prefix from integration tests (#882) (Lucas Kent) #882
    • 33f0c2d: include the name of driver in parametrized test results (#885) (Lucas Kent) #885
    • 3dcdda6: missed logger init (#889) (Lucas Kent) #889
    • 5959371: cleanup in node_pool & token_map (#890) (Conor) #890
    • bc3ce73: improved source/tls error reporting (#888) (Lucas Kent) #888
    • 23f0a00: control connection creation error handling (#887) (Lucas Kent) #887
    • 5a833bc: fix router tests (#893) (Conor) #893
    • a11207f: Fix new lints in upcoming release (#892) (Lucas Kent) #892
    • 0b6f7c3: Map upstream tls errors into a better format (#891) (Lucas Kent) #891
    • da88aca: Add verify_hostname tls flag (#896) (Lucas Kent) #896
    • dc8cbd1: Replica choice bug fix (#894) (Conor) #894
    • add node lost test case (#886) #886 (Lucas Kent)
    • 25f2621: Update to rust 1.65 (#897) (Lucas Kent) #897
    • 6976fef: fix redis error reporting (#898) (Lucas Kent) #898
    • 3fb9772: Refactor TCP connection logic (#900) (Lucas Kent) #900
    • 3bd9bc6: Scylla Driver Tests (#902) (Conor) #902
    • 6c0b5ab: Remove invalid line from int test config (#904) (Lucas Kent) #904
    • f977b74: Make connect timeout configurable (#901) (Lucas Kent) #901
    • Use destination as hostname instead of hardcoded localhost (#899) #899 (Lucas Kent)
    • 5e2c153: Use keyspace info for replication factor (#895) (Conor) #895
    • 22e53e6: Update deps (#907) (Lucas Kent) #907
    • b281823: refactor prepared_statements helper (#903) (Lucas Kent) #903
    • 5a1558b: cassandra ResultValue store values in more accurate types (#908) (Lucas Kent) #908
    • f1c3610: bench_run.yaml disable write to cache (still reads from cache) (#906) (Lucas Kent) #906
    • a469a28: Add warning to rewritten queries with WHERE (#909) (Lucas Kent) #909
    • bd47d33: topology task info! on init complete (#910) (Lucas Kent) #910
    • b09f849: cassandra_int_tests cover all data types in prepared statements (#911) (Lucas Kent) #911
    • 65066c2: Cassandra connection avoid cloning entire message (#913) (Lucas Kent) #913
    • 9d54492: Remove docker-api dep + simplify DockerCompose impl (#915) (Lucas Kent) #915
    • 79302e5: Splitup cassandra-cluster config folder into v3 and v4 folders (#916) (Lucas Kent) #916
    • 0f599ee: Cassandra connections bubble up errors (#914) (Lucas Kent) #914
    • ea500f8: update deps (#919) (Conor) #919
    • e31cd45: Cleanup redis docker image name (#920) (Lucas Kent) #920
    • 17f08ff: Include destination in cassandra connection errors (#926) (Lucas Kent) #926
    • f1cf87b: cassandra_int_tests test node up (#921) (Lucas Kent) #921
    • 49217b4: misc cleanup (#934) (Lucas Kent) #934
    • b432919: More routing tests and bug fix (#932) (Conor) #932
    • e2f670d: Timestamp tests (#938) (Conor) #938
    • 38698c3: Implement proper NO_METADATA support for cassandra protocol (#928) (Lucas Kent) #928
    • d0a4e7b: fix prepared results bug (#945) (Conor) #945
    • 7957a46: Make ShotoverProcess API a bit more similar to ShotoverManager (#947) (Lucas Kent) #947
    • 04c6cb6: Fix propagating tracing spans into subchains (#936) (Lucas Kent) #936
    • make it easier to understand failures (#939) #939 (Lucas Kent)
    • fix prepared_statements_simple::use_statement (#946) #946 (Lucas Kent)
    • wait logic inspect yaml (#917) #917 (Lucas Kent)
    • Refactor CassandraConnection execute methods (#943) #943 (Lucas Kent)
    • f4d014b: Fix connection shutdown logic (#933) (Lucas Kent) #933
    • 8e24912: Fix connections with no messages sent during node outage (#940) (Lucas Kent) #940
    • 5fa9075: Run cassandra_int_test tls tests against scylla driver (#944) (Lucas Kent) #944
    • 071a6e2: Add --log-format json (#948) (Lucas Kent) #948
    • 613c794: Remove unneeded cfg(not(feature...)) (#952) (Lucas Kent) #952
    • ca9eadb: Update deps (#953) (Lucas Kent) #953
    • a54a256: move redis_connection methods out of ShotoverManager (#957) (Lucas Kent) #957
    • 75f4938: Split transforms into Transform and TransformBuilder stages (#935) (Lucas Kent) #935
    • 176d12c: Pass flush flag through sub chains (#937) (Lucas Kent) #937
    • 8db5a4c: Send panic info over json when json logging enabled (#954) (Lucas Kent) #954
    • e3aca2d: Do not clone transforms when running chain in reverse (#960) (Lucas Kent) #960
    • ab7aaba: cassandra-stress fix (#956) (Conor) #956
    • 84d14e7: update to rust 1.66 (#964) (Lucas Kent) #964
    • caa84aa: Remove Clone from Transforms enum (#961) (Lucas Kent) #961
    • 7802450: Fix intermittent failure when using cdrs driver (#963) (Lucas Kent) #963
    • 145465e: Give ShotoverProcess powerful event assertions by parsing JSON events (#950) (Lucas Kent) #950
    • cc650b2: Release shotover 0.1.8 (#966) (Lucas Kent) #966
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.8.tar.gz(4.61 MB)
  • v0.1.7(Oct 26, 2022)

    Commits

    • Replace generic codec with direct usage of CassandraCodec (#766) #766 (Lucas Kent)
    • 9ac2931: Log cassandra connection errors (#765) (Lucas Kent) #765
    • 3ca93e7: CassandraSinkCluster fix connecting to non-local clusters (#770) (Lucas Kent) #770
    • fix protocol negotiation with clients that support protocol v5 (#771) #771 (Lucas Kent)
    • eb2d8b3: Only show filter warning once (#761) (Conor) #761
    • 3a86fcd: Build aarch64 in CI (#764) (Lucas Kent) #764
    • f2227f6: Cleanup cassandra protocol negotiation (#772) (Lucas Kent) #772
    • fe5b4d0: add timeout to new tcp connections (#774) (Conor) #774
    • Control connection always connects to configured dc/rack (#777) #777 (Lucas Kent)
    • split into v3 and v4 variants (#780) #780 (Lucas Kent)
    • 02cf509: move topology to mod (#782) (Conor) #782
    • 0bbea6d: use socket addr for nodes (#781) (Conor) #781
    • 778d7de: Fix system.peers v2 rewriting (#783) (Lucas Kent) #783
    • 04a744e: Upgrade remaining cassandra int tests to cassandra 4.0.6 (#785) (Lucas Kent) #785
    • 1c31882: remove MessageValue::Rows (#787) (Lucas Kent) #787
    • 10174bf: use docker anchors (#791) (Conor) #791
    • 9e1187c: Update deps (#793) (Lucas Kent) #793
    • e2b8032: Add cassandra codec benches (#789) (Lucas Kent) #789
    • af2fa3a: Remove unused MessageValue variants (#788) (Lucas Kent) #788
    • 16853ae: Cut CI bench compile time by a few minutes (#797) (Lucas Kent) #797
    • 9ff268b: Add null and Tuple values to int test ResultValue (#792) (Lucas Kent) #792
    • 9d87c29: Dynamic port (#786) (Conor) #786
    • 13034bc: Log control connection address (#800) (Lucas Kent) #800
    • f1c4751: Improve span naming (#794) (Lucas Kent) #794
    • 2c2b6b6: Split cassandra_int_tests into its own CI job (#796) (Lucas Kent) #796
    • 14ea9e9: CassandraSinkCluster fix routing for system keyspaces (#799) (Lucas Kent) #799
    • b3df35d: Cassandra_int_test refactor connection creation (#798) (Lucas Kent) #798
    • 43865b7: store tokens as murmur3 instead of string (#801) (Conor) #801
    • 8716f69: Parse Cassandra execute statements (#802) (Conor) #802
    • 475e7f4: unused -> dead_code (#805) (Lucas Kent) #805
    • 2b938cc: Fix cassandra protocol null handling (#784) (Lucas Kent) #784
    • a46fefa: cdrs-tokio test suite integration (#741) (Conor) #741
    • specify every node in CASSANDRA_SEEDS (#809) #809 (Lucas Kent)
    • filter out Topology and Status events (#807) #807 (Lucas Kent)
    • add standard_test_suite helper (#810) #810 (Lucas Kent)
    • 56f3ef3: Parse cassandra register messages (#813) (Lucas Kent) #813
    • 724ae49: Use statement integration tests (#803) (Lucas Kent) #803
    • 3d4d361: Update GA actions (#815) (Lucas Kent) #815
    • 6588bcc: update deps (#816) (Conor) #816
    • df03487: add host_id field to CassandraNode (#818) (Conor) #818
    • 9d5b50c: Improve DebugPrinter (#817) (Lucas Kent) #817
    • 486ca44: Bench CI speedups (#814) (Lucas Kent) #814
    • 2985349: CassandraSinkCluster keyspace based routing - handle use statements (#806) (Lucas Kent) #806
    • topology task now processes events (#812) #812 (Lucas Kent)
    • 3e100eb: Faster DockerCompose drop (#821) (Lucas Kent) #821
    • 9778c87: improve error messages (#822) (Conor) #822
    • 79b9ebc: Improve cassandra startup time by a few seconds (#820) (Lucas Kent) #820
    • 8e53ce5: update to rust 1.64 (#823) (Lucas Kent) #823
    • 36f7adb: Remove manual redis volumes from docker-compose.yml (#827) (Lucas Kent) #827
    • 7a962a6: Fix misnamed redis variables (#828) (Lucas Kent) #828
    • e62628f: Create custom cassandra image for single instance integration tests (#825) (Lucas Kent) #825
    • f97df89: Remove 1s sleep in DockerCompose::drop (#829) (Lucas Kent) #829
    • 9aa0cd2: Update deps (#819) (Lucas Kent) #819
    • ab63447: docker-compose: Store cassandra db in tmpfs (#830) (Lucas Kent) #830
    • 3583a92: CassandraNode new method (#832) (Conor) #832
    • 9c03153: update cql3 parser (#833) (Conor) #833
    • 3955be9: cassandra_int_tests add case that forces cassandra message encoding (#804) (Lucas Kent) #804
    • 6a9c307: Update clap to 4.0 (#835) (Lucas Kent) #835
    • Fix system.peers rpc_address (#837) #837 (Lucas Kent)
    • ccbb3c1: cassandra prepared statement benches (#834) (Conor) #834
    • 9386f81: Token aware routing (#824) (Conor) #824
    • Keep node list up to date via a tokio::watcher (#831) #831 (Lucas Kent)
    • Disallow inserting/removing the nodes list from outside of NodePool (#843) #843 (Lucas Kent)
    • 7b6509d: fix test (#845) (Conor) #845
    • e99c638: Remove tracing_log dep (#848) (Lucas Kent) #848
    • c83d978: Improve Cassandra new connection errors (#847) (Lucas Kent) #847
    • 95e2090: Cassandra clusters specify initial token for large startup speedup (#844) (Lucas Kent) #844
    • cross connection prepared statements (#836) #836 (Lucas Kent)
    • c7c9f49: Create custom image for cassandra 3.11.0 (#852) (Lucas Kent) #852
    • Do not log error on TCP RST (#850) #850 (Lucas Kent)
    • b8feea7: Create custom image for tls cassandra (#851) (Lucas Kent) #851
    • 17ab717: share prepared metadata between connections (#841) (Conor) #841
    • a2ce64e: Fix BenchResources drop order (#856) (Lucas Kent) #856
    • a6ebd95: Create new connections concurrently for prepared statements (#842) (Conor) #842
    • 10acaa6: Fix cassandra_cpp rpc_address warning (#860) (Lucas Kent) #860
    • add test_node_going_down (#858) #858 (Lucas Kent)
    • dcf76d4: Round Robin load balancing for CassandraSinkCluster (#846) (Conor) #846
    • cf87466: Upgrade CI to min ubuntu 20.04 (#839) (Lucas Kent) #839
    • cleanly shutdown topology task (#861) #861 (Lucas Kent)
    • 39ac5f8: Fix Ubuntu 22.04 builds (#864) (Lucas Kent) #864
    • rewrite rpc_address (#859) #859 (Lucas Kent)
    • reduce total table count (#862) #862 (Lucas Kent)
    • 6b613d3: Update deps (#863) (Lucas Kent) #863
    • 0e83fec: Set correct flags when encoding cassandra frame (#869) (Lucas Kent) #869
    • b6edc8f: document cassandra connection rx_process task (#867) (Lucas Kent) #867
    • 1d34bbb: Use cassandra_cpp async api (#865) (Lucas Kent) #865
    • 983e699: Move stop_service into DockerCompose (#866) (Lucas Kent) #866
    • d9c0a43: Cassandra flags (#853) (Conor) #853
    • f4b5a7f: Update deps + restore cassandra-cpp to upstream (#878) (Lucas Kent) #878
    • 5b7ef5e: rename init_handshake_connection -> control_connection (#874) (Lucas Kent) #874
    • fccf27c: Fix and test token aware routing (#854) (Conor) #854
    • 331a09e: Route cassandra_cpp logs -> log -> tracing (#849) (Lucas Kent) #849
    • 91a52ce: existing connections handle down node (#873) (Lucas Kent) #873
    • fcc5de6: Rename all *.yml -> *.yaml (#881) (Lucas Kent) #881
    • f6de0ca: re-enable tests (#871) (Conor) #871
    • 128aed8: release 0.1.7 (#884) (Conor) #884
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.7.tar.gz(4.42 MB)
  • v0.1.6(Aug 29, 2022)

    Commits

    • 17060be: redis pubsub (#645) (Lucas Kent) #645
    • c49a38b: Implement cassandra int test driver selection (#725) (Lucas Kent) #725
    • 6224a67: Move cassandra sink receive logic into connection::receive (#727) (Lucas Kent) #727
    • b672548: Int test function propogation (#731) (Lucas Kent) #731
    • ee70553: Implement basic cassandra cluster routing (#723) (Lucas Kent) #723
    • ec83b7c: Fix another intermittent cluster failure (#734) (Lucas Kent) #734
    • 5d2e8d5: refactor redis_int_tests. (#732) (Lucas Kent) #732
    • 193e239: Update deps (#724) (Lucas Kent) #724
    • 1a117cb: Update to rust 1.63 (#742) (Lucas Kent) #742
    • f4d4878: Fix intermittent failure (final I swear) (#738) (Lucas Kent) #738
    • a57c01c: Fix a (different) intermittent failure (#743) (Lucas Kent) #743
    • 8447702: Use nodes list when making initial handshake connection (#736) (Lucas Kent) #736
    • 2d6206e: CassandraSinkCluster implement USE routing (#739) (Lucas Kent) #739
    • f911f49: Improve redis int test assert messages (#746) (Lucas Kent) #746
    • d19e190: CassandraSinkCluster query system.local for local node info (#735) (Lucas Kent) #735
    • make handshake logic robust (#747) #747 (Lucas Kent)
    • 832b836: use future-rs latest (#698) (Conor) #698
    • d2ca77d: Fix intermittent redis failure (#745) (Lucas Kent) #745
    • d9d306e: Update deps (#748) (Lucas Kent) #748
    • 79c181f: Splitup sink_cluster.rs (#752) (Lucas Kent) #752
    • a5d94e3: Fix debug cassandra message dump (#751) (Lucas Kent) #751
    • 2645e25: test test_topology_task in TLS mode (#754) (Lucas Kent) #754
    • c5b4d6e: CassandraSinkCluster rewrite system.local (#744) (Lucas Kent) #744
    • 6c81054: Rename add_pushed_messages_tx -> set_pushed_messages_tx (#759) (Lucas Kent) #759
    • 97d30e7: Add test_cluster_multi_rack (#757) (Lucas Kent) #757
    • d88886f: CassandraSinkCluster system.peers rewrite (#756) (Lucas Kent) #756
    • 3fe6caa: drop docker logs to trace level (#763) (Conor) #763
    • 6b4ee3a: ConnectionFactory (#755) (Conor) #755
    • 3c8aef2: remove drop function test (#760) (Conor) #760
    • 4d6303f: Move CassandraSinkCluster into beta status (#753) (Lucas Kent) #753
    • 12a9f4e: Release shotover v0.1.6 (#762) (Lucas Kent) #762
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.6.tar.gz(4.38 MB)
  • v0.1.5(Aug 5, 2022)

    Commits

    • b4fce95: protect docs (#700) (Conor) #700
    • 3453115: Update deps (#710) (Lucas Kent) #710
    • fb5d5a9: Split test_cassandra_peers_rewrite into two tests (#709) (Lucas Kent) #709
    • a42da2c: Close connection on transform error (#707) (Lucas Kent) #707
    • fe1dfde: Tiny cleanup in redis int test (#714) (Lucas Kent) #714
    • 85539c4: Replace pushed_messages_tx if let with exhaustive match (#715) (Lucas Kent) #715
    • 7394ad1: Fix transform TLS docs (#711) (Lucas Kent) #711
    • f10252d: Add CassandraSinkCluster (#717) (Lucas Kent) #717
    • 2916f2f: Remove loop from CassandraSinkSingle (#716) (Lucas Kent) #716
    • 090bd46: small cleanup in CassandraSinkSingle (#718) (Lucas Kent) #718
    • ad1e4fe: cassandra-cluster-tls int test (#722) (Conor) #722
    • 4dc4b90: Make private key optional in TlsConnectorConfig (#720) (Conor) #720
    • ea318be: Release shotover 0.1.5 (#728) (Lucas Kent) #728
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.5.tar.gz(4.30 MB)
  • v0.1.4(Jul 18, 2022)

    Commits

    • 8cbef21: redis connection pool cleanup+improvement (#653) (Lucas Kent) #653
    • e751663: Update rust + deps version. (#654) (Lucas Kent) #654
    • 830ed00: Add RequestThrottling docs to the Cassandra example (#647) (Conor) #647
    • 1289c3d: Rename connection_error -> reason_for_no_nodes (#651) (Lucas Kent) #651
    • 7b362d4: enable cert check (#655) (Conor) #655
    • e070956: remove unused example (#649) (Conor) #649
    • 2b8d6de: Remove topics & Mpsc source (#652) (Conor) #652
    • cf17971: Move ChannelMessage to chain.rs and rename (#657) (Conor) #657
    • 6893fbf: RedisSinkCluster handle attempts to use RESP3 (#659) (Lucas Kent) #659
    • b7f1dca: store response as single Message instead of Vec (#660) (Lucas Kent) #660
    • 73b1187: Improve cassandra_connection panic message (#663) (Lucas Kent) #663
    • 6520a39: Remove ChannelResult and refactor short_circuit (#658) (Lucas Kent) #658
    • d4317b3: minor redis cleanup (#667) (Lucas Kent) #667
    • 6b7ab5c: Refactor Protect transform (#664) (Lucas Kent) #664
    • 7cb854b: remove unused from_topology_file_without_observability (#672) (Lucas Kent) #672
    • 759fd9f: fix naming of cassandra peers example (#670) (Conor) #670
    • fe0d70c: cassandra events (#668) (Conor) #668
    • 352dcd5: remove depends_on (#669) (Conor) #669
    • e94f3e7: Remove Cassandra certs from repo (#616) (Conor) #616
    • ff1a52c: Move cassandra_int_tests modules into separate files (#673) (Lucas Kent) #673
    • 1bf9c34: Update deps (#671) (Lucas Kent) #671
    • 53c831c: cassandra peers rewrite - rewrite all native_ports (#678) (Lucas Kent) #678
    • 1e101b3: remove sodium oxide (#677) (Conor) #677
    • eb780b3: change port to u16 (#682) (Conor) #682
    • f4a5dd7: rename (#683) (Conor) #683
    • 1216d85: Update deps, lots of cassandra-protocol breaking changes (#680) (Lucas Kent) #680
    • f7c571e: Reorder CassandraOperation enum (#679) (Lucas Kent) #679
    • 799fc70: RedisSinkCluster Hiding/Handling modes (#642) (Lucas Kent) #642
    • d2583b9: CQL parser rewrite (#661) (Lucas Kent) #661
    • 0efa1c0: Fix intermittent failure in test_cluster_dr_redis (#681) (Lucas Kent) #681
    • b882b97: CassandraOperation::queries returns batch queries (#595) (Lucas Kent) #595
    • e95b04c: Convert batch QUERYs into BATCHs (#684) (Lucas Kent) #684
    • 6b72cf8: Add benches for protect transform (#687) (Lucas Kent) #687
    • 6fea1c0: compose versions (#686) (Conor) #686
    • 44526a6: Small chain.rs cleanup (#688) (Lucas Kent) #688
    • 5f0049c: new rust version (#690) (Conor) #690
    • 6727a57: Pushed messages (#662) (Conor) #662
    • f0683a1: Remove unneeded Result from source return type (#689) (Lucas Kent) #689
    • c970222: Detect panics in tests (#691) (Lucas Kent) #691
    • b3ff6cb: Remove allocation in simple redis command checks (#694) (Lucas Kent) #694
    • 30e15d7: store encrypted as blob (#685) (Conor) #685
    • e2b8fc1: Remove byteorder dep (#692) (Lucas Kent) #692
    • 2ba92a0: redis bulkstring handling fixes (#693) (Lucas Kent) #693
    • a332ad3: use version specified in cassandra frame during encode/decode (#695) (Lucas Kent) #695
    • fd5115c: update deps (#697) (Conor) #697
    • 272d59e: Minor improvements (#699) (Lucas Kent) #699
    • e14cd8a: Add redis hexdump debug logs (#701) (Lucas Kent) #701
    • c4af416: Release shotover 0.1.4 (#705) (Lucas Kent) #705
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.4.tar.gz(4.29 MB)
  • v0.1.3(May 19, 2022)

    Commits

    • 590b255: check in cargo lock (#571) (Conor) #571
    • 3ea7fbb: update deps (#568) (Conor) #568
    • 1346fa3: Rename transform config get_source -> get_transform (#569) (Lucas Kent) #569
    • e3e509f: Add check for untracked/uncommitted files in CI (#572) (Lucas Kent) #572
    • bc8b34a: Cassandra Request Throttling Benches (#565) (Conor) #565
    • 4ab3aaa: Cassandra request throttling non-integration bench (#566) (Lucas Kent) #566
    • 29efc31: Count BATCH queries for request throttling (#562) (Conor) #562
    • ba84b33: RequestThrottling docs (#573) (Conor) #573
    • 513486f: Minimum value for Request Throttling config (#567) (Conor) #567
    • 7ca6ef6: Parse cassandra batch messages (#576) (Lucas Kent) #576
    • d04564b: Fail to start shotover when configured port already taken (#580) (Lucas Kent) #580
    • 4b0be7b: bump up threshold (#579) (Conor) #579
    • b08d33a: split up message methods (#577) (Conor) #577
    • 1c97be1: fix docs (#582) (Conor) #582
    • 373b611: Add DebugForceParse transform (#583) (Lucas Kent) #583
    • ae4526e: move cassandra test helpers to helpers module (#584) (Conor) #584
    • 5e15f37: Add cassandra_bench example (#549) (Lucas Kent) #549
    • 97f6ac0: Add CassandraOperation::queries method to abstract over QUERY and BATCH (#570) (Lucas Kent) #570
    • d5f90a7: Batch query counting bug fix (#574) (Conor) #574
    • a57c879: batch over query tests (#586) (Conor) #586
    • 23ef672: Cleanup and improve assertions of ShotoverProcess (#585) (Lucas Kent) #585
    • 469d3f5: Accept base64 string instead of individual bytes in protect transform config (#587) (Conor) #587
    • 52a80ad: rename .cargo/config to .cargo/config.toml (#591) (Lucas Kent) #591
    • 74a0622: Improve ShotoverProcess error reporting (#590) (Lucas Kent) #590
    • 01dde88: Generate redis TLS certs at test time (#588) (Lucas Kent) #588
    • 65439e7: store single cql statement instead of a vec (#589) (Lucas Kent) #589
    • d2dd274: Switch over to published Docker image on Cassandra example (#578) (Conor) #578
    • 3856b98: Rename redis-tls/tls_keys -> redis-tls/certs (to match cassandra naming) (#593) (Lucas Kent) #593
    • eabb0bf: Add read timeout to redis_connection_async_tls. (#592) (Lucas Kent) #592
    • 189e15a: Store Wrapper.transforms as an IterMut instead of a cloned Vec (#596) (Lucas Kent) #596
    • d64e898: Remove entry from deny.toml & cargo update (#599) (Conor) #599
    • 37f3645: Reenable parallelization of packet parsing in packet tests. (#600) (Lucas Kent) #600
    • 1a0f731: Improve cassandra bench compare API (#601) (Lucas Kent) #601
    • 4d99105: Bench logging changes (#604) (Conor) #604
    • bf806ab: Don't re-register counter on cassandra sink clone (#609) (Conor) #609
    • c56f5b5: Simplify eval routing (#610) (Lucas Kent) #610
    • 1da06a2: Fix invalid command routes (#611) (Lucas Kent) #611
    • eb42bcc: Update to rust 1.60 (#603) (Lucas Kent) #603
    • 3ea1cd9: Rewrite redis_int_tests to assert on write only responses (#612) (Lucas Kent) #612
    • 5bc2133: rustfmt.toml change (#614) (Conor) #614
    • 82442a2: Fix RedisSinkCluster returning an array of responses instead of a single response (#608) (Lucas Kent) #608
    • 2c18758: Improve metrics docs (#615) (Conor) #615
    • ec694ab: move cassandra raw frame methods to a module (#613) (Conor) #613
    • 64610aa: Avoid triggering a message parse in the Null transform (#622) (Lucas Kent) #622
    • 1a1fdec: Update deps (#617) (Lucas Kent) #617
    • bec6410: Implement redis cluster sink ResponseJoin abstraction (#618) (Lucas Kent) #618
    • f8ba7f2: Fix RedisClusterPortsRewrite noauth handling (#624) (Lucas Kent) #624
    • a630a1c: Improve CassandraPeersRewrite int tests (#628) (Lucas Kent) #628
    • 185a3bf: Move redis-cluster-auth config (#626) (Lucas Kent) #626
    • e6e852b: Only parse the opcode when checking for errors in Cassandra sink (#627) (Conor) #627
    • 2f54531: read multiple cassandra frames (#633) (Conor) #633
    • 4af74c3: new benches (#635) (Conor) #635
    • 824c0f5: Use anyhow .context() instead of manually constructing error messages (#625) (Lucas Kent) #625
    • e16253c: rework redis cluster command mapping (#623) (Lucas Kent) #623
    • 7427336: use check_frame instead of from_buffer (#637) (Conor) #637
    • fd94949: CassandraPeersRewrite bugfix (#640) (Conor) #640
    • bbcff5e: Redis benchmarks test both set and get commands (#638) (Lucas Kent) #638
    • 68438e6: RoutingInfo::Random is actually random (#636) (Lucas Kent) #636
    • 7b497b1: Remove RedisClusterSink Command enum (#641) (Lucas Kent) #641
    • b7ca913: Remove MessageValue::None (#643) (Lucas Kent) #643
    • fd47e70: temp ci fix (#648) (Conor) #648
    • c912a2d: Change timeout in TcpCodecListener (#644) (Conor) #644
    • 9710bc1: Release shotover 0.1.3 (#650) (Lucas Kent) #650
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.3.tar.gz(4.27 MB)
  • v0.1.2(Mar 15, 2022)

    Commits

    • 677e270: Debug transform docs (#371) (Conor) #371
    • 61a7e22: Always pass chain name into Wrapper (#374) (Conor) #374
    • a0ecbcf: Tee int tests (#359) (Conor) #359
    • 3e6974a: Cassandra protocol version negotiation (#331) (Claude Warren) #331
    • a2706a5: Minor cassandra cleanup (#380) (Lucas Kent) #380
    • 85b543d: Reuse wait for socket implementation across cassandra and redis (#379) (Lucas Kent) #379
    • ce3cb63: Fix broken doc links and enforce via mdbook-linkcheck plugin (#373) (Lucas Kent) #373
    • d7ccfb3: cleanup (#375) (Conor) #375
    • 5bc3c4a: Fix docs build (#383) (Lucas Kent) #383
    • 48ab30f: Cassandra integration test improvements (#382) (Lucas Kent) #382
    • b6c5c4b: Easy win in test runtime (#384) (Lucas Kent) #384
    • 5f77824: Fix docker_compose wait_for panic message (#386) (Lucas Kent) #386
    • 4bfe7db: Random cleanup (#387) (Lucas Kent) #387
    • fe0c68f: Update to new rust release (#390) (Lucas Kent) #390
    • 10f33b5: Use upstream cassandra-protocol (#356) (Lucas Kent) #356
    • 8d657cb: Join on source task (#388) (Lucas Kent) #388
    • 2a216b4: Rename CassandraProtocol2 to CassandraCodec (#393) (Conor) #393
    • 159d648: Cassandra keyspace int tests (#394) (Conor) #394
    • 0242019: Fix hang in RedisSinkSingle when wrapper.messages.is_empty() (#398) (Lucas Kent) #398
    • f0c9026: Cassandra table int tests (#395) (Conor) #395
    • 71bbdcd: Allow Cassandra passthrough to be configured in docker-compose.yml (#397) (Conor) #397
    • 15e58f4: update deps (#400) (Conor) #400
    • 68c1f21: Update to rust 1.57 (#401) (Lucas Kent) #401
    • 8fda707: clean up bufferedchain API (#402) (Conor) #402
    • 8364846: Add Wrapper::flush flag (#389) (Lucas Kent) #389
    • 70e03f8: cassandra type int tests (#396) (Conor) #396
    • 288afe5: Remove all TODOs from docs (#408) (Lucas Kent) #408
    • 6801c53: Cassandra functions int tests (#399) (Conor) #399
    • 1e23524: Fix QueryTypeFilter on main chain (#405) (Lucas Kent) #405
    • d1849b7: Cleanup load balance (#411) (Lucas Kent) #411
    • 590ef5e: Fix redis auth issue (#406) (Lucas Kent) #406
    • c9e52e6: remove CoalesceBehaviour (#418) (Lucas Kent) #418
    • 14b3a72: Implement test_cassandra_redis_cache integration test (#417) (Lucas Kent) #417
    • 16e928d: Get the query type for a message by a common get_query_type method (#416) (Lucas Kent) #416
    • e780579: cleanup (#423) (Conor) #423
    • a6460aa: Various fixes to transform docs (#421) (Lucas Kent) #421
    • 1bd248b: Improve cassandra int test execute_query error (#425) (Lucas Kent) #425
    • 5bf9ae3: Update cassandra-protocol (#415) (Lucas Kent) #415
    • 15d8583: Update deps (#422) (Lucas Kent) #422
    • 92480ef: Improve cassandra redis cache int test + tracing (#426) (Lucas Kent) #426
    • be3ddb6: add metrics to redis single (#410) (Conor) #410
    • 5926318: Cassandra metrics (#414) (Conor) #414
    • 8a1ed7e: Various redis cache cleanup (#428) (Lucas Kent) #428
    • e44e3a4: Redis cluster with a cluster aware client docs (#346) (Conor) #346
    • 49f13b3: Remove unused fields from destructures (#431) (Lucas Kent) #431
    • 02471a2: Update deps (#434) (Lucas Kent) #434
    • 7b07c10: Update to clap 3.0.0 (#439) (Lucas Kent) #439
    • fc69ed6: Cleanup borrows (#432) (Lucas Kent) #432
    • de4b8ee: Fix stray shotover processes (#440) (Lucas Kent) #440
    • 9a0649d: Add new value variants (#433) (Conor) #433
    • 1dd4347: Redis cache doesnt blow up when the cache path is taken (#430) (Lucas Kent) #430
    • 20783b8: Redis cache cleanup (#441) (Lucas Kent) #441
    • 06c4442: RedisTimestampTagger cleanup (#443) (Lucas Kent) #443
    • 8398674: redis cache new int test case (#446) (Lucas Kent) #446
    • 2775e99: Value support for Cassandra types (#409) (Conor) #409
    • 858e085: Update to Rust 1.58 (#449) (Conor) #449
    • 2da414b: Optimise loop (#450) (Conor) #450
    • 1ceb040: Use new f string style format macro (#451) (Lucas Kent) #451
    • 5eaeedb: Cassandra native types tests (#404) (Conor) #404
    • 44826b0: Cassandra set tests (#452) (Conor) #452
    • deca90c: Cassandra map tests (#456) (Conor) #456
    • 39be75b: Replace imports of Cassandra and Redis Frames (#455) (Claude Warren) #455
    • 0dd485a: Rename Frame -> RedisFrame (#463) (Lucas Kent) #463
    • ee4ff4f: update deps (#457) (Conor) #457
    • 4012eee: redis_timestamp_tagger bench uses better test data to avoid skipping return value processing (#460) (Lucas Kent) #460
    • 699a974: Fix QueryTypeFilter unit test (#461) (Lucas Kent) #461
    • 3d79add: fix error messages (#471) (Conor) #471
    • c8b4297: add #[must_use] to methods returning self (#470) (Conor) #470
    • 8c372e0: remove get_demo_config (#465) (Lucas Kent) #465
    • f0d8a1d: Fix CI benchmark alert comments (#467) (Lucas Kent) #467
    • 7dff553: Tee FailOnMismatch returns the correct number of messages (#468) (Lucas Kent) #468
    • 6154ab3: Implement From between Value and SQLValue (#464) (Lucas Kent) #464
    • 5f15d9a: Update deps (#442) (Lucas Kent) #442
    • 64fd8d6: Use metrics handles in transforms (#469) (Conor) #469
    • bd3bd12: Remove new no state method from TransformChain (#477) (Conor) #477
    • 45bbbb7: Fix formatting on bench comments (#478) (Lucas Kent) #478
    • 215e902: Set QueryType correctly in CassandraCodec (#448) (Claude Warren) #448
    • 82f656f: Rename RawFrame -> Frame (#480) (Lucas Kent) #480
    • df8dc36: Re-enable test_protect_kms_transform (#484) (Claude Warren) #484
    • 926cf30: small Protect transform cleanup (#489) (Lucas Kent) #489
    • 04aa463: Move MessageDetails::ReturnToSender to a field on Message (#485) (Conor) #485
    • 3b664ef: ConnectionPool -> CassandraConnection (#483) (Conor) #483
    • e665309: Rename Value -> MessageValue (#482) (Lucas Kent) #482
    • f1c5720: Add noise threshold for chain_benches.rs (#488) (Lucas Kent) #488
    • 77ecf9e: Loopback transform directly returns the message (#487) (Conor) #487
    • 59800fa: Fix CI failures when a new benchmark is added (#403) (Lucas Kent) #403
    • 6d30792: Remove dead test (#490) (Lucas Kent) #490
    • dc07697: Cleanup RedisCodec (#479) (Lucas Kent) #479
    • 4452188: No metadata cassandra codec fix (#493) (Conor) #493
    • efbc677: Initial protect test cleanup (#492) (Lucas Kent) #492
    • 7656d5f: rename (#496) (Conor) #496
    • 5be6778: Cassandra prepared statements int tests (#486) (Conor) #486
    • d2f031f: CassandraConnection cleanup (#497) (Conor) #497
    • c6e7afe: Fix ShotoverProcess timeout (#502) (Lucas Kent) #502
    • 097b803: Split protocols module into frame + codec modules (#506) (Lucas Kent) #506
    • f0cf376: Replace instances of Message::new with Message::from_frame (#504) (Lucas Kent) #504
    • 92c4351: Remove incorrect coalesce dummy message (#503) (Lucas Kent) #503
    • 5460c77: Implement Protect integration tests (#494) (Lucas Kent) #494
    • dfea291: small doc fixes (#515) (Conor) #515
    • 8afcbfd: Add empty cassandra_benches file (#513) (Conor) #513
    • 98d6c40: remove duplicated docker-entrypoint script (#511) (Conor) #511
    • 2dfca49: Fix redis benchmark initialization (#514) (Lucas Kent) #514
    • ed7baff: Replace cassandra_protocol::frame::Frame with a more strongly typed CassandraFrame (#508) (Lucas Kent) #508
    • 3f987dc: Add benchmark for filter transform (#518) (Lucas Kent) #518
    • 672e236: Update deps (#519) (Lucas Kent) #519
    • c761d2b: Cassandra benchmark (#512) (Conor) #512
    • 58bc3c6: Add debug traces to hex dump cassandra messages (#509) (Lucas Kent) #509
    • 62a98c1: Rewrite TimestampTagger and ConsistentScatter to use message.original (#501) (Conor) #501
    • 9a1f9a4: Cassandra peers (#507) (Conor) #507
    • 14cbfd7: fix compilation (#523) (Conor) #523
    • c2411cc: rewrite redis cache to use message.original (#516) (Lucas Kent) #516
    • 1c07a4f: Remove actions-rs/toolchain (#524) (Lucas Kent) #524
    • 822d5cf: Misc message details progress (#525) (Lucas Kent) #525
    • a282fb6: Add some more cassandra integration benches (#521) (Lucas Kent) #521
    • f316ec8: rewrite protect to use message.original (#526) (Lucas Kent) #526
    • 531c0e1: Rewrite QueryCounter to use message.original (#527) (Lucas Kent) #527
    • b9b427a: Delete KafkaSink (#531) (Lucas Kent) #531
    • e19c884: Improve RedisTimestampTagger logic for deciding whether to wrap or not (#536) (Lucas Kent) #536
    • 78ca01f: Cassandra TLS (#437) (Conor) #437
    • b2a87a9: remove cassandra cluster (#528) (Conor) #528
    • 1e72c2b: Benchmark logs grep includes 6 previous lines instead of 5 (#534) (Lucas Kent) #534
    • e158c79: tls benches (#539) (Conor) #539
    • 7275289: Cassandra Peers Rewrite docs and example (#530) (Conor) #530
    • 9e50031: Replace message.message_details with message.frame() (#532) (Lucas Kent) #532
    • ffc93b4: Rename examples -> example-configs, test-topologies -> test-configs (#548) (Lucas Kent) #548
    • e4fb470: Update deps (#551) (Lucas Kent) #551
    • 7a1e526: Automate DockerCompose wait logic (#552) (Lucas Kent) #552
    • da1e1d0: Move ShotoverProcess into test-helpers (#550) (Lucas Kent) #550
    • ef6f1bb: remove unneeded trait (#555) (Conor) #555
    • 441316b: Switch Cassandra Docker image to bitnami (#540) (Conor) #540
    • 33dcd25: Update deps (#560) (Lucas Kent) #560
    • 68970f2: Cassandra request throttling (#547) (Conor) #547
    • c757f1f: Improve bench time by minimizing docker container creation (#558) (Lucas Kent) #558
    • c4b85df: bump up threshold (#561) (Conor) #561
    • 41cca1d: Rename cassandra tls example/test to match redis (#564) (Lucas Kent) #564
    • af72580: release 0.1.2 (#556) (Conor) #556
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.2.tar.gz(4.19 MB)
  • v0.1.1(Nov 11, 2021)

    What's Changed

    • Bench CI improvements by @rukai in https://github.com/shotover/shotover-proxy/pull/340
    • Test infrastructure uses debug! instead of info! by @rukai in https://github.com/shotover/shotover-proxy/pull/341
    • Fix config/topology.yaml links by @rukai in https://github.com/shotover/shotover-proxy/pull/342
    • Swap to mdbook by @rukai in https://github.com/shotover/shotover-proxy/pull/343
    • Remove MessageDetails::Bypass by @rukai in https://github.com/shotover/shotover-proxy/pull/338
    • Update deps by @conorbros in https://github.com/shotover/shotover-proxy/pull/345
    • Update sqlparser by @conorbros in https://github.com/shotover/shotover-proxy/pull/344
    • Fix doc headings by @conorbros in https://github.com/shotover/shotover-proxy/pull/350
    • Rewrite redis clustering example docs by @rukai in https://github.com/shotover/shotover-proxy/pull/347
    • Fix testing on ubuntu 18.04 by @rukai in https://github.com/shotover/shotover-proxy/pull/351
    • cassandra_protocol2.rs cleanup by @rukai in https://github.com/shotover/shotover-proxy/pull/349
    • remove use of feature specific to cassandra-proto fork by @rukai in https://github.com/shotover/shotover-proxy/pull/352
    • force netlify to always deploy by @rukai in https://github.com/shotover/shotover-proxy/pull/358
    • Tee subchain fixes by @conorbros in https://github.com/shotover/shotover-proxy/pull/355
    • Debug returner transform fixes by @conorbros in https://github.com/shotover/shotover-proxy/pull/362
    • Instrument async code with tracing spans by @rukai in https://github.com/shotover/shotover-proxy/pull/363
    • Remove another cassandra-proto fork feature by @rukai in https://github.com/shotover/shotover-proxy/pull/357
    • Dockerfile for Shotover by @conorbros in https://github.com/shotover/shotover-proxy/pull/364
    • cassandra unittests assert decoded value by @rukai in https://github.com/shotover/shotover-proxy/pull/354
    • Bump version to v0.1.1 by @conorbros in https://github.com/shotover/shotover-proxy/pull/366
    • Add must_use attribute to test helpers by @rukai in https://github.com/shotover/shotover-proxy/pull/367
    • dependency install script and testing release workflow by @conorbros in https://github.com/shotover/shotover-proxy/pull/368

    Full Changelog: https://github.com/shotover/shotover-proxy/compare/v0.1.0...v0.1.1

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Nov 2, 2021)

    Commits

    • dfefaeb: remove a BulkString -> utf8 conversion (#236) (Lucas Kent) #236
    • 872e74f: Create a CODE_OF_CONDUCT.md file (#238) (Ben Bromhead) #238
    • b481eeb: Improve contributing documentation (#241) (Lucas Kent) #241
    • 5d3dfd9: Add non-ascii bulk string test case to redis int tests (#235) (Lucas Kent) #235
    • 821096a: Fix redis lowercase command handling (#242) (Lucas Kent) #242
    • eed9087: Spelling fixes (#243) (Lucas Kent) #243
    • d7ed72d: Cleanup duplicated redis codec logic (#245) (Lucas Kent) #245
    • ac445b7: Setup cargo deny to enforce apache compatible licenses (#239) (Lucas Kent) #239
    • 99c15fe: Skip container setup when skipping benchmark (#252) (Lucas Kent) #252
    • 661a466: Add Differences to Redis section for RedisCluster docs (#247) (Lucas Kent) #247
    • 0de2a8b: Cleanup unneeded clones in redis codec (#250) (Lucas Kent) #250
    • b6df71d: Use upstream redis-proto (#249) (Lucas Kent) #249
    • 81c4a85: Add benchmark reporting (#251) (Lucas Kent) #251
    • f61b083: Add new transform benchmark and improve null transform benchmark (#253) (Lucas Kent) #253
    • 130e69e: give a nice panic message when there is no terminating transform (#255) (Lucas Kent) #255
    • f6dd706: Fix chain_benches (#258) (Lucas Kent) #258
    • 4b4d15c: Rename Destination transforms (#259) (Conor) #259
    • 3aec7cd: Remove unused file (#261) (Conor) #261
    • d798324: Fix benchmark CI (#260) (Lucas Kent) #260
    • 72777ba: Update issue templates (#257) (Conor) #257
    • 9759533: Real fix for bench CI (#265) (Lucas Kent) #265
    • a305741: Create NOTICE (#266) (Justin Mclean) #266
    • e7dc5a1: Rename destination to sink (#267) (Lucas Kent) #267
    • 48b8654: Remove decode_as_response flag from redis codec (#264) (Lucas Kent) #264
    • b24527a: Fix bench reporting (#280) (Lucas Kent) #280
    • 19e0274: Fix ConsistencyBehaviour::LOG handling (#277) (Lucas Kent) #277
    • c4352fa: Rename to RedisClusterPortsRewrite (#282) (Conor) #282
    • 75ca259: Add nice ToC to transforms.md (#274) (Lucas Kent) #274
    • ada5ddf: Refactor wrapper message (#279) (Lucas Kent) #279
    • 5190a38: Benchmark for Redis cluster ports rewrite (#283) (Conor) #283
    • aa0123e: Rust doc core traits (#276) (Ben Bromhead) #276
    • 947d321: Allow dead code for is_empty (#284) (Conor) #284
    • b49d80a: split null transform into null and loopback (#286) (Lucas Kent) #286
    • 6235a07: Remove TransformsFromConfig trait (#278) (Lucas Kent) #278
    • 761c18a: Redis cluster ports rewrite (#275) (Conor) #275
    • 9b55876: rust 2021 (#288) (Lucas Kent) #288
    • d9c6da8: Remove needless clones (#287) (Lucas Kent) #287
    • 532db19: Remove unwraps from cluster ports rewrite & clippy fixes (#292) (Conor) #292
    • 51bbbfe: Update deps (#289) (Conor) #289
    • b61f5a4: Rename transforms (#293) (Lucas Kent) #293
    • 4cca9e3: add to all workflows (#299) (Conor) #299
    • 4640df5: Fix naming (#296) (Conor) #296
    • 42d903f: Rewrite transform docs (#297) (Lucas Kent) #297
    • 03b3f68: Update license info (#303) (Ben Bromhead) #303
    • c389daf: Make concepts.md more high level (#290) (Ben Bromhead) #290
    • 2d72436: Validate topology.yaml (#263) (Conor) #263
    • bd25ffa: Add logo (#304) (Lucas Kent) #304
    • 1404183: Document and improve API of tee transform (#305) (Lucas Kent) #305
    • a540728: Remove forwarder transform (#307) (Lucas Kent) #307
    • 391caa2: Fix transform documentation yaml snippets (#308) (Lucas Kent) #308
    • 5bb5a23: Cassandra heap size (#309) (Conor) #309
    • 146ff73: Remove batch size hint (#311) (Conor) #311
    • 0ab802e: Add redis replication integration test (#310) (Lucas Kent) #310
    • 312f17f: Remove redis-cluster-pipeline (#312) (Conor) #312
    • d7aa0b3: more doc fixes (#313) (Lucas Kent) #313
    • 90b7d2e: Remove dependency on github secrets (#315) (Lucas Kent) #315
    • 7dc1b35: Update deps and add deps.rs badge to readme (#314) (Lucas Kent) #314
    • 1d0ce72: test examples (#318) (Conor) #318
    • 3857c6e: Docs cleanup (#319) (Conor) #319
    • a9b8861: Release workflow (#317) (Conor) #317
    • 8e0b781: Refactor getting started docs (#320) (Lucas Kent) #320
    • ddd8458: Refactor TcpCodecListener (#322) (Conor) #322
    • 00c8a18: Clean up (#324) (Conor) #324
    • 03c53e3: Add source-types documentation page and improve config/topology.md example (#321) (Lucas Kent) #321
    • ff1dfe8: Fix example links in readme (#327) (Joe Schmetzer) #327
    • c87d977: Remove Value::Timestamp (#325) (Lucas Kent) #325
    • 7a72628: Minor markdown / grammar fixes (#329) (Robert Treat) #329
    • 4935523: Cassandra cluster compose (#332) (Lucas Kent) #332
    • 6d77515: various fixes to improve CI (#334) (Lucas Kent) #334
    • 32ea744: rewrite CI fixing caching and failing on warnings (#333) (Lucas Kent) #333
    • b624a35: Fix transform source names (#336) (Conor) #336
    • 8dfcc81: Register metrics on startup (#328) (Conor) #328
    • e6c0456: Fix (#339) (Conor) #339
    • 06bc1c5: Bump version to v0.1.0 (#300) (Kuangda He) #300
    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.1.0.tar.gz(4.57 MB)
  • v0.0.23(Oct 5, 2021)

    What's Changed

    • INS-12991: Pre-cleanup by @XA21X in https://github.com/shotover/shotover-proxy/pull/102
    • Automatic benchmarking by @benbromhead in https://github.com/shotover/shotover-proxy/pull/103
    • Adding Apache Licence by @t-insta in https://github.com/shotover/shotover-proxy/pull/99
    • PR to try and fix test stall on github actions by @benbromhead in https://github.com/shotover/shotover-proxy/pull/104
    • update some docs by @benbromhead in https://github.com/shotover/shotover-proxy/pull/105
    • Clean up Transform method sig by @benbromhead in https://github.com/shotover/shotover-proxy/pull/106
    • Fix warnings by @rukai in https://github.com/shotover/shotover-proxy/pull/115
    • Tests relying on aws are ignored by @rukai in https://github.com/shotover/shotover-proxy/pull/116
    • Improve error logging by @rukai in https://github.com/shotover/shotover-proxy/pull/117
    • Replace Result::Err with panic in tests by @rukai in https://github.com/shotover/shotover-proxy/pull/121
    • Tests are marked as serial per test by @rukai in https://github.com/shotover/shotover-proxy/pull/118
    • create and use DockerCompose abstraction by @rukai in https://github.com/shotover/shotover-proxy/pull/119
    • Cleanup returns into implicitly returning expressions where appropriate by @rukai in https://github.com/shotover/shotover-proxy/pull/122
    • Refactor shotover-proxy crate into a crate within a workspace by @rukai in https://github.com/shotover/shotover-proxy/pull/124
    • Cleanup example config files by @rukai in https://github.com/shotover/shotover-proxy/pull/123
    • share setup code between tests and benchmarks by @rukai in https://github.com/shotover/shotover-proxy/pull/125
    • Cleanup shotover init by @rukai in https://github.com/shotover/shotover-proxy/pull/126
    • Cleanup unused and non crates.io deps by @rukai in https://github.com/shotover/shotover-proxy/pull/128
    • Run rustfmt on the codebase and enforce rustfmt via github actions by @rukai in https://github.com/shotover/shotover-proxy/pull/132
    • Misc cleanup around sources by @rukai in https://github.com/shotover/shotover-proxy/pull/140
    • Tests trigger shotover shutdown and then unwrap the result of the join handle by @rukai in https://github.com/shotover/shotover-proxy/pull/139
    • Remove TestContext and improve test connection handling by @rukai in https://github.com/shotover/shotover-proxy/pull/143
    • Documentation spelling/formatting fixes by @conorbros in https://github.com/shotover/shotover-proxy/pull/149
    • Update dependencies by @conorbros in https://github.com/shotover/shotover-proxy/pull/150
    • Add log level override via RUST_LOG environment variable by @XA21X in https://github.com/shotover/shotover-proxy/pull/145
    • Use task-local to pass chain name into transforms by @XA21X in https://github.com/shotover/shotover-proxy/pull/144
    • Refactor SlotMap for future support of replicas by @XA21X in https://github.com/shotover/shotover-proxy/pull/147
    • Fix detection of closed connections in cluster connection pools by @XA21X in https://github.com/shotover/shotover-proxy/pull/146
    • Improve slot map creation error handling by @rukai in https://github.com/shotover/shotover-proxy/pull/152
    • Update metrics and pktparse by @conorbros in https://github.com/shotover/shotover-proxy/pull/151
    • Added Cargo.lock and pinned clap version by @Claude-at-Instaclustr in https://github.com/shotover/shotover-proxy/pull/164
    • properly pin to latest release of clap by @rukai in https://github.com/shotover/shotover-proxy/pull/165
    • Runner changes: will use existing tokio::runtime or create one for itself and race condition fix by @conorbros in https://github.com/shotover/shotover-proxy/pull/162
    • Clippy fixes by @conorbros in https://github.com/shotover/shotover-proxy/pull/171
    • Remove lua support by @conorbros in https://github.com/shotover/shotover-proxy/pull/172
    • Remove unsafe usages by @conorbros in https://github.com/shotover/shotover-proxy/pull/173
    • Remove unused deps and update pktparse version by @rukai in https://github.com/shotover/shotover-proxy/pull/176
    • Implement TLS support for incoming redis connections by @rukai in https://github.com/shotover/shotover-proxy/pull/141
    • Readme improvements by @rukai in https://github.com/shotover/shotover-proxy/pull/181
    • Refactor for base authentication support by @XA21X in https://github.com/shotover/shotover-proxy/pull/166
    • Fix tracing setup in unittests by @rukai in https://github.com/shotover/shotover-proxy/pull/184
    • CI benchmarks compilation fixes by @rukai in https://github.com/shotover/shotover-proxy/pull/186
    • Clippy fixes by @conorbros in https://github.com/shotover/shotover-proxy/pull/188
    • Provide a useful error when docker-compose is not installed by @rukai in https://github.com/shotover/shotover-proxy/pull/189
    • Handle SIGTERM signal appropriately by @conorbros in https://github.com/shotover/shotover-proxy/pull/178
    • Remove redis serial key from unit tests by @rukai in https://github.com/shotover/shotover-proxy/pull/193
    • WIP: Test timing fixes by @Claude-at-Instaclustr in https://github.com/shotover/shotover-proxy/pull/192
    • INS-12991: Redis authentication support by @XA21X in https://github.com/shotover/shotover-proxy/pull/101
    • Improve bind failure handling by @rukai in https://github.com/shotover/shotover-proxy/pull/197
    • Cleanup TunableConsistencyScatter by @rukai in https://github.com/shotover/shotover-proxy/pull/200
    • add read timeout to test connections by @rukai in https://github.com/shotover/shotover-proxy/pull/195
    • Fix test_active_active_redis by removing unsupported pipeline test case by @rukai in https://github.com/shotover/shotover-proxy/pull/202
    • delete test_shotover_panics_in_single_thread_runtime by @rukai in https://github.com/shotover/shotover-proxy/pull/203
    • Remove and/or combine redundant redis integration test code by @rukai in https://github.com/shotover/shotover-proxy/pull/205
    • Fix redis auth test docker wait logic by @rukai in https://github.com/shotover/shotover-proxy/pull/206
    • run tests in both debug and release on CI by @rukai in https://github.com/shotover/shotover-proxy/pull/199
    • CLUSTER SLOTS rewrite by @conorbros in https://github.com/shotover/shotover-proxy/pull/196
    • Various refactors by @rukai in https://github.com/shotover/shotover-proxy/pull/207
    • Rename CodecDestination to CassandraCodecDestination by @conorbros in https://github.com/shotover/shotover-proxy/pull/210
    • Cleanup transform names by @rukai in https://github.com/shotover/shotover-proxy/pull/214
    • Implement outgoing redis TLS by @rukai in https://github.com/shotover/shotover-proxy/pull/212
    • Update dependencies by @conorbros in https://github.com/shotover/shotover-proxy/pull/215
    • Cluster rewrite docs by @conorbros in https://github.com/shotover/shotover-proxy/pull/217
    • Implement TLS for RedisCluster transform by @rukai in https://github.com/shotover/shotover-proxy/pull/218
    • Fix clippy lints by @rukai in https://github.com/shotover/shotover-proxy/pull/219
    • store redis credentials as Bytes instead of String by @rukai in https://github.com/shotover/shotover-proxy/pull/222
    • rewrite integration tests to use async by @rukai in https://github.com/shotover/shotover-proxy/pull/185
    • Update deps by @conorbros in https://github.com/shotover/shotover-proxy/pull/227
    • Clippy lints by @conorbros in https://github.com/shotover/shotover-proxy/pull/226
    • fix test_cluster_tls by @rukai in https://github.com/shotover/shotover-proxy/pull/229
    • Cleanup #derives by @rukai in https://github.com/shotover/shotover-proxy/pull/230
    • Cleanup redis int tests by @rukai in https://github.com/shotover/shotover-proxy/pull/231
    • Implement TLS benchmark by @rukai in https://github.com/shotover/shotover-proxy/pull/221
    • Fix silent failure in server encoder by @rukai in https://github.com/shotover/shotover-proxy/pull/234
    • fix shotover panicking when the trigger_shutdown_tx is dropped without first sending a shutdown message by @rukai in https://github.com/shotover/shotover-proxy/pull/233
    • Update redis-proto dependency to be closer to master by @rukai in https://github.com/shotover/shotover-proxy/pull/232

    New Contributors

    • @XA21X made their first contribution in https://github.com/shotover/shotover-proxy/pull/102
    • @t-insta made their first contribution in https://github.com/shotover/shotover-proxy/pull/99
    • @rukai made their first contribution in https://github.com/shotover/shotover-proxy/pull/115
    • @conorbros made their first contribution in https://github.com/shotover/shotover-proxy/pull/149
    • @Claude-at-Instaclustr made their first contribution in https://github.com/shotover/shotover-proxy/pull/164

    Full Changelog: https://github.com/shotover/shotover-proxy/compare/v0.0.22...v0.0.23

    Source code(tar.gz)
    Source code(zip)
  • v0.0.21(Feb 3, 2021)

  • v0.0.20(Feb 2, 2021)

    This release contains the following fixes and features:

    #83 - Fixes log level issue. #84 - Move to Tokio 1.0. #85 - Reworked Redis cluster implementation with full duplex TCP and automatic pipelining.

    Source code(tar.gz)
    Source code(zip)
  • v0.0.19(Dec 22, 2020)

    This release contains the following fixes and features:

    #82 - Ability to enforce hard limits

    Introduces a new optional configuration variable for the redis and cassandra source, hard_connection_limit.

    By default it's set to false or set to false if not included in the configuration file. When set to false behavior is the same as previous versions of shotover (when the number of allowed connections are exceeded, shotover will only accept them once other connections drop, however the underlying tcp connection will just sit in the tcp accept pool).

    When set to true, shotover will stop listening on the cassandra or redis port when the connection limit has been exceeded. This will result in a E_CONNECTIONREFUSED error to the client. This is usefull when forcing misbehaving clients to not connect.

    Source code(tar.gz)
    Source code(zip)
  • v0.0.18(Dec 20, 2020)

    This release contains the following fixes and features:

    #81 - Some minor changes to the way Redis timestamp tagging works, also includes dropping tcp connections that are idle for longer than 30seconds #80 - AST/Metadat processing is now opt-in. This results in a significantly faster shotover experience when using transforms that don't require enriched metadata. #79 - Better handling of Redis topology changes. We can now have shotover try and automatically retry requests, or error out to the client and let the client retry.

    Source code(tar.gz)
    Source code(zip)
  • v0.0.17.1(Dec 6, 2020)

    This release contains the following fixes and features:

    #78 - Fixes the query type for some misclassified redis operations. Also introduces the QueryCounter transform which records metrics around query types being processed on a given chain.

    Note: tag contains a minor revision number due to a publishing goof up.

    Source code(tar.gz)
    Source code(zip)
  • v0.0.16(Dec 4, 2020)

    This release contains the following fixes and features:

    #77

    • changes the way MPSC uses topics, it will now have its own chain and will create a new channel for each connection, rather than putting everything into the one channel
    • this means buffer sizes are per connection (less likely to fill up, if they do, only impacts one client)
    • example config will now block on pushing to the MPSC tee (this is configurable), with the timeout being enforced downstream
    • this (small) amount of back pressure results in way less messages being dropped, for a tradeoff in throughput, but way more reliable

    #76

    • The Redis codec could get in a weird situation where it wouldn't grab as many frames as it could, for a pipelined request. (the frame was being fetched in the next processing loop though).
    Source code(tar.gz)
    Source code(zip)
  • v0.0.15(Dec 1, 2020)

    This release contains the following fixes and features:

    #75 - Adds two new transforms, filter (for filtering out specific types of queries) and coalesce (for batching individual commands). This also introduces an automatic coalescing for MPSC based sources that don't need a response. This patch also now includes an example configuration for Redis DR topologies

    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.0.15.tar.gz(4.99 MB)
    shotover-proxy-static_linux_amd64-0.0.15.tar.gz(5.18 MB)
  • v0.0.14(Nov 24, 2020)

    This release contains the following fixes and features:

    #72 - Fixes for the CI system to no longer use unsafe GitHub action commands #73 - A significant rework of the redis cluster transform that includes: concurrent pipeline execution across masters, internal MOVE/ASK logic, better inlining hints. #74 - Performance optimisations for MPSC Tee behavior, a TEE configured to use IGNORE behavior will now drop messages if the queue is full

    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.0.14.tar.gz(4.97 MB)
    shotover-proxy-static_linux_amd64-0.0.14.tar.gz(5.16 MB)
  • v0.0.13(Nov 23, 2020)

  • v0.0.12(Nov 10, 2020)

  • v0.0.11(Nov 9, 2020)

  • v0.0.10(Nov 4, 2020)

  • v0.0.9(Oct 30, 2020)

  • v0.0.8(Oct 13, 2020)

  • v0.0.7(Sep 24, 2020)

  • v0.0.6(Sep 22, 2020)

    This release contains the following fixes and features:

    #50 - Support buffered communication between transforms if needed. #50 - Support sync/async responses across channels. #50 - Removed the internal message clock which was fragile and leaked implementation details across transforms. #50 - Transforms that ignore results from a connection are now responsible for draining the late/ignored response. See Tuneable Consistency Scatter for an example on how to do this. #51 - Improves on #50 by providing common messaging logic for chains. #52 - Some test improvements and resiliency - tests were starting to become kinda flaky. #52 - Fixed some bugs from #50 and #51 #54 - Connection limits for Redis and Cassandra sources are now configurable via a connection_limit flag. This is set to 512 by default. #54 - Shotover can now be built by rust stable. #54 - MPSC source can now return a response via oneshot channels.

    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.0.6.tar.gz(5.06 MB)
    shotover-proxy-osx_amd64-0.0.6.tar.gz(4.57 MB)
    shotover-proxy-static_linux_amd64-0.0.6.tar.gz(5.21 MB)
  • v0.0.5(Sep 14, 2020)

    This release contains the following fixes and features:

    #47 - Pipelining support for Redis Clusters - You can now pipeline requests when using the RedisCluster transform. This supports pipeline rewriting to route requests in a pipeline to the correct master. #45 - Dynamoc logging control - You can now change log levels and log filters without needing to restart shotover. #44 and #41 - Internal refactor that cleaned up a bunch of stuff internally and allowed us to remove most Mutexs from most Transforms. #49 - Support for Redis 6 style auth with RedisCluster Transform.

    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.0.5.tar.gz(5.02 MB)
    shotover-proxy-osx_amd64-0.0.5.tar.gz(4.53 MB)
    shotover-proxy-static_linux_amd64-0.0.5.tar.gz(5.17 MB)
  • v0.0.4(Aug 26, 2020)

    Overview

    This release contains the following fixes and features:

    • #36 - Pipelining support for Redis - Supports arbitary pipeline sizes, with the ability to hint at the size of an expected pipeline for better performance.
    • #25 - Better logging control - You can now change the levels logged and its all pretty low impact.
    • #26 - Metrics - Shotover now provides a little more detail around end to end proxy performance and individual performance. Plus its all prometheus compatible.

    Breaking changes:

    Configuration has now been split into two files, config and topology. Topology defines how shotover routes requests. Config defines shotover internal behaviour.

    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.0.4.tar.gz(4.46 MB)
    shotover-proxy-static_linux_amd64-0.0.4.tar.gz(4.75 MB)
  • v0.0.3(Aug 20, 2020)

  • v0.0.2(Aug 18, 2020)

    This release largely fixes performance issues the Redis-cluster transform. Previously redis-cluster was implemented using a blocking/synchonous cluster aware client. A port to using async for redis-rs was written and is now being used.

    Operations per second to a redis cluster should generally see a boost in throughput of between 15 - 50% and a significant reduction in p99 latency.

    Source code(tar.gz)
    Source code(zip)
    shotover-proxy-linux_amd64-0.0.2.tar.gz(3.71 MB)
Simple and fast layer 4 proxy in Rust

Fourth 这一波在第四层。 English Fourth是一个Rust实现的Layer 4代理,用于监听指定端口TCP流量,并根据规则转发到指定目标。 功能 监听指定端口代理到本地或远端指定端口 监听指定端口,通过TLS ClientHello消息中的SNI进行分流 安装方法 为了确保获得您架构

Rui Li 17 Nov 8, 2022
Proxy sentry request to a sentry server using a tunnel/proxy endpoint

Sentry Tunnel This is a proxy that forwards tunneled sentry requests to the real sentry server. The implementation is based on the explanation provide

Paul FLORENCE 14 Dec 20, 2022
UDP proxy with Proxy Protocol and mmproxy support

udppp UDP proxy with Proxy Protocol and mmproxy support. Features Async Support Proxy Protocol V2 SOCKET preserve client IP addresses in L7 proxies(mm

b23r0 10 Dec 18, 2022
Lightweight proxy that allows redirect HTTP(S) traffic through a proxy.

Proxyswarm Proxyswarm is a lightweight proxy that allows redirect HTTP(S) traffic through a proxy. WARNING: This app isn't recomended for download lar

Jorge Alejandro Jimenez Luna 4 Apr 16, 2022
Web3-proxy: a fast caching and load balancing proxy for web3 (Ethereum or similar) JsonRPC servers.

web3-proxy Web3-proxy is a fast caching and load balancing proxy for web3 (Ethereum or similar) JsonRPC servers. Signed transactions (eth_sendRawTrans

null 55 Jan 8, 2023
A TCP proxy using HTTP - Reach SSH behind a Nginx reverse proxy

?? TCP over HTTP ?? The Questions ?? What does it do? You can proxy TCP traffic over HTTP. A basic setup would be: [Your TCP target] <--TCP-- [Exit No

Julian 185 Dec 15, 2022
A tcp proxy server/client which exchange the data in temp files

ftcp A tcp proxy server/client which exchange the data in temp files 通过在临时文件中交换数据来进行TCP代理的一个服务端/客户端 学校内网中有针对教学楼的防火墙导致教室电脑难以上网( 但学校内建有公共ftp服务器,因此就有了这个借

Daile Liu 2 Feb 17, 2022
An End-to-End Privacy Computing Protocol on Layer 2

Eigen Network Eigen Network is an end-to-end privacy computation network for a better digital economy based on hybrid privacy computation protocols an

Eigen Lab 24 Oct 13, 2022
Layer 4 load balancer with dynamic configuration loading

Convey Layer 4 load balancer with dynamic configuration loading featuring proxy, passthrough and direct server return modes Features Stats page (at /s

Ben Parli 289 Jan 1, 2023
Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Siger Yang 2 Jun 7, 2022
Aggressively reliable delivery layer. Above UDP. Nothing else.

Aggressively reliable delivery layer. Above UDP. Nothing else.

IchHabeKeineNamen 2 Jun 5, 2022
Easy per application transparent proxy built on cgroup.

cproxy can redirect TCP and UDP traffic made by a program to a proxy, without requiring the program supporting a proxy. Compared to many existi

Xiangru Lian 263 Dec 20, 2022
server security proxy write by Rust

server-security-proxy server security proxy write by Rust how to use config toml file

baoyachi. Aka Rust Hairy crabs 3 May 24, 2021
A tcp over http2 + tls proxy

mtunnel A tcp over http2 + tls proxy. Usage 1. get certificates, by following steps. 2. make your config client config: { "local_addr": "127.0.0.1

cssivision 9 Sep 5, 2022
A versatile and efficient proxy framework with nice features suitable for various use cases.

A versatile and efficient proxy framework with nice features suitable for various use cases.

null 1.7k Jan 9, 2023
Hudsucker is a MITM HTTP/S proxy written in Rust.

hudsucker Hudsucker is a MITM HTTP/S proxy written in Rust. Features Modify HTTP/S requests Modify HTTP/S responses Modify websocket messages Usage Fo

null 86 Dec 25, 2022
Drop-in proxy for Discord gateway connections and sessions allowing for zero downtime deploys

gateway-proxy This is a very hacky project, so it might stop working if Discord changes their API core. This is unlikely, but keep that in mind while

Jens Reidel 39 Nov 26, 2022
Minecraft proxy

mc-proxy This is a fully functional proxy for online and offline-mode Minecraft servers. It is based on an optimized, custom-made packet parser for Mi

null 21 Oct 7, 2022
A remote shell, TCP tunnel and HTTP proxy for Replit.

Autobahn A remote shell, TCP tunnel and HTTP proxy for Replit. Hybrid SSH/HTTP server for Replit. Based on leon332157/replish. Autobahn runs a WebSock

Patrick Winters 12 Sep 24, 2022