Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: downstream http caching plugin #283

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

YassinEldeeb
Copy link
Member

@YassinEldeeb YassinEldeeb commented Jan 4, 2024

closes #206 #11

  • core cache
  • in memory cache
  • redis connector
  • CF KV connector
  • write tests
  • documentation on usage

Copy link

github-actions bot commented Jan 4, 2024

💻 Website Preview

The latest changes are available as preview in: https://5a1dab59.conductor-t2.pages.dev

Copy link

github-actions bot commented Jan 4, 2024

✅ Benchmark Results

     data_received..................: 13 MB   221 kB/s
     data_sent......................: 22 MB   363 kB/s
     http_req_blocked...............: min=922ns    avg=2.93µs   med=2.22µs   max=773.66µs p(95)=3.19µs   p(99)=11.3µs  
     http_req_connecting............: min=0s       avg=376ns    med=0s       max=727.47µs p(95)=0s       p(99)=0s      
     http_req_duration..............: min=313.1µs  avg=413.74µs med=381.22µs max=30.52ms  p(95)=488.72µs p(99)=596.87µs
       { expected_response:true }...: min=313.1µs  avg=413.74µs med=381.22µs max=30.52ms  p(95)=488.72µs p(99)=596.87µs
     ✓ { scenario:rps_1000 }........: min=313.1µs  avg=413.74µs med=381.22µs max=30.52ms  p(95)=488.72µs p(99)=596.87µs
     http_req_failed................: 0.00%   ✓ 0           ✗ 60001
     ✓ { scenario:rps_1000 }........: 0.00%   ✓ 0           ✗ 60001
     http_req_receiving.............: min=8.52µs   avg=26.55µs  med=25.87µs  max=873.53µs p(95)=35.07µs  p(99)=45.8µs  
     http_req_sending...............: min=6.56µs   avg=15.32µs  med=14.06µs  max=2.52ms   p(95)=23.91µs  p(99)=32.77µs 
     http_req_tls_handshaking.......: min=0s       avg=0s       med=0s       max=0s       p(95)=0s       p(99)=0s      
     http_req_waiting...............: min=280.28µs avg=371.86µs med=340.12µs max=30.48ms  p(95)=446.54µs p(99)=535.83µs
     http_reqs......................: 60001   1000.002921/s
     ✓ { scenario:rps_1000 }........: 60001   1000.002921/s
     iteration_duration.............: min=390.66µs avg=501.83µs med=467.38µs max=30.75ms  p(95)=578.49µs p(99)=764.36µs
     iterations.....................: 60001   1000.002921/s
     ✓ { scenario:rps_1000 }........: 60001   1000.002921/s
     valid_graphql_response.........: 100.00% ✓ 60001       ✗ 0    
     ✓ { scenario:rps_1000 }........: 100.00% ✓ 60001       ✗ 0    
     valid_http_code................: 100.00% ✓ 60001       ✗ 0    
     ✓ { scenario:rps_1000 }........: 100.00% ✓ 60001       ✗ 0    
     vus............................: 1       min=0         max=2  
     vus_max........................: 200     min=200       max=200

Copy link

github-actions bot commented Jan 22, 2024

🚨 Rust Panic Audit: 114 Potential Panic Points Detected 🚨

Crate: federation_query_planner

📊 Total Usages: 53

  • 🎁 unwrap usages: 32
  • 🚨 panic usages: 3
  • 🔢 array_index usages: 10
  • 🔎 expect usages: 8

Crate: cache

📊 Total Usages: 11

  • 🎁 unwrap usages: 9
  • 🔎 expect usages: 2

Crate: common

📊 Total Usages: 11

  • 🔢 array_index usages: 1
  • 🎁 unwrap usages: 10

Crate: telemetry

📊 Total Usages: 9

  • 🔢 array_index usages: 5
  • 🎁 unwrap usages: 4

Crate: engine

📊 Total Usages: 8

  • 🎁 unwrap usages: 6
  • 🔢 array_index usages: 1
  • 🔎 expect usages: 1

Crate: cloudflare_worker

📊 Total Usages: 8

  • 🚨 panic usages: 1
  • 🔎 expect usages: 2
  • 🎁 unwrap usages: 5

Crate: tracing

📊 Total Usages: 6

  • 🔎 expect usages: 1
  • 🎁 unwrap usages: 5

Crate: conductor

📊 Total Usages: 5

  • 🎁 unwrap usages: 1
  • 🔎 expect usages: 3
  • 🚨 panic usages: 1

Crate: config

📊 Total Usages: 3

  • 🎁 unwrap usages: 2
  • 🚨 panic usages: 1

📌 Expected Annotations

Crate: vrl

📊 Total Expected Usages: 2

expand details
  1. Reason: "if the provided VRL code in the config file can't compile, we have to exit."
  • Code: panic!("failed to compile vrl program");
  • Location: ./plugins/vrl/src/plugin.rs:129
  1. Reason: "states is a non-user provided variable"
  • Code: .expect("can't merge states when states is an empty vector!")
  • Location: ./plugins/vrl/src/plugin.rs:146

Crate: napi

📊 Total Expected Usages: 1

expand details
  1. Reason: "we need this"
  • Code: panic!("Exited process!")
  • Location: ./libs/napi/src/lib.rs:18

Crate: common

📊 Total Expected Usages: 1

expand details
  1. Reason: "we're parsing a statically defined constant, we know it works ;)"
  • Code: .unwrap()
  • Location: ./libs/common/src/graphql.rs:31

Crate: engine

📊 Total Expected Usages: 1

expand details
  1. Reason: "if we are unable to construct the endpoints and attach them onto the gateway's http server, we have to exit"
  • Code: Err(e) => panic!("failed to construct endpoint: {:?}", e),
  • Location: ./libs/engine/src/gateway.rs:167

Crate: cloudflare_worker

📊 Total Expected Usages: 4

expand details
  1. Reason: "it panics only if the header name is not valid, and we know it is."
  • Code: .unwrap()
  • Location: ./bin/cloudflare_worker/src/http_tracing.rs:20
  1. Reason: "it panics only if the URL source is not valid, and it's already validated before."
  • Code: let url = req.url().unwrap();
  • Location: ./bin/cloudflare_worker/src/http_tracing.rs:23
  1. Reason: "it only panics if we are not running in a CF context, should be safe."
  • Code: let cf_info = req.cf().unwrap();
  • Location: ./bin/cloudflare_worker/src/http_tracing.rs:27
  1. Reason: "unwraps only in special cases where "data:text" is used."
  • Code: let http_host = url.host().unwrap().to_string();
  • Location: ./bin/cloudflare_worker/src/http_tracing.rs:36

Crate: config

📊 Total Expected Usages: 9

expand details
  1. Reason: "👇"
  • Code: let raw_contents = read_to_string(file_path)
  • Location: ./libs/config/src/lib.rs:831
  1. Reason: "👇"
  • Code: panic!("Failed to interpolate config file, please resolve the above errors");
  • Location: ./libs/config/src/lib.rs:863
  1. Reason: "👇"
  • Code: parse_config_from_json(&config_string).expect("Failed to parse JSON config file")
  • Location: ./libs/config/src/lib.rs:870
  1. Reason: "👇"
  • Code: parse_config_from_yaml(&config_string).expect("Failed to parse YAML config file")
  • Location: ./libs/config/src/lib.rs:874
  1. Reason: "👇"
  • Code: _ => panic!("Unsupported config file extension"),
  • Location: ./libs/config/src/lib.rs:891
  1. Reason: "👇"
  • Code: None => panic!("Config file has no extension"),
  • Location: ./libs/config/src/lib.rs:894
  1. Reason: "statically defined regex pattern, we know it works ;)"
  • Code: .unwrap();
  • Location: ./libs/config/src/interpolate.rs:18
  1. Reason: "part of development docgen CLI"
  • Code: .expect("Failed to serialize json schema for config file!");
  • Location: ./libs/config/src/generate-json-schema.rs:50
  1. Reason: "part of development docgen CLI"
  • Code: .expect("Failed to write the json schema to the file system!");
  • Location: ./libs/config/src/generate-json-schema.rs:54

Crate: conductor

📊 Total Expected Usages: 2

expand details
  1. Reason: "we need to exit the process, if the logger can't be correctly set."
  • Code: let _guard = tracing::subscriber::set_default(subscriber);
  • Location: ./bin/conductor/src/lib.rs:41
  1. Reason: "we need to exit the process, if the provided configuration file is incorrect."
  • Code: panic!("Failed to initialize gateway: {:?}", e);
  • Location: ./bin/conductor/src/lib.rs:80

Crate: jwt_auth

📊 Total Expected Usages: 1

expand details
  1. Reason: "if initiating an http client fails, then we have to exit."
  • Code: let client = wasm_polyfills::create_http_client().build().unwrap();
  • Location: ./plugins/jwt_auth/src/jwks_provider.rs:49

Copy link

github-actions bot commented Jan 22, 2024

🐋 This PR was built and pushed to the following Docker images:

Docker Bake metadata
{
"conductor": {
  "buildx.build.ref": "builder-1c3336fa-0edb-4b1a-8f82-aa7f1ee9cd7e/builder-1c3336fa-0edb-4b1a-8f82-aa7f1ee9cd7e0/fp7cgh2x4u3qjoa31y7ij5aiz",
  "containerimage.config.digest": "sha256:84fa4dc4c20c6e1949990d2cc61f714c13bb02fea0ed3254fd9a096d04ee9728",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:ad35e8b2db3f387c4e5bd7443e3cb92039553eb36f070d5fab1636cbf6f91edf",
    "size": 902,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:ad35e8b2db3f387c4e5bd7443e3cb92039553eb36f070d5fab1636cbf6f91edf",
  "image.name": "ghcr.io/the-guild-org/conductor/conductor:e0bdfd21ea12d262a25afce357aea972e2a213a9"
}
}

unpushed files

restructuring

remove useless eviction policy usage

add cf kv

docs

post-rebase

add stuff

fix docs

http caching dotan just asked for

fixes

fixes

ok

getting there

cleanup

wip

wip

ok now it compiles

ok

ok

ok

ok
@YassinEldeeb YassinEldeeb changed the title feat: http caching plugin feat: upstream http caching plugin Mar 21, 2024
@YassinEldeeb YassinEldeeb changed the title feat: upstream http caching plugin feat: downstream http caching plugin Mar 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Cache core
1 participant