Giter Club home page Giter Club logo

blueboat's People

Contributors

dependabot[bot] avatar losfair avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blueboat's Issues

License

The current AGPL-3.0 license is used as a "safe default" and I'd like to move to a more permissive license.

ES module support.

Deno-style modules and imports.

Allows getting rid of webpack & code reuse.

Support WebSocket.

Need to figure out how: Pin each connection to one worker instance & renew timeout on each incoming message?

Rolling upgrade strategy

Currently services communicate through tarpc with bincode encodings, which aren't backward-compatible.

So if we just do a simple rolling upgrade on services when RPC format changes, it will break.

Tracking issue for JavaScript API

The entire TypeScript API definition is published as the blueboat-types package. This issue tracks the API surface on a high level:

Tier 1

Tier 1 APIs are stable interfaces exposed by Blueboat. Incompatible changes require a semver major.

  • Standard JavaScript features supported by V8
  • A subset of the Web platform API
    • fetch(), Request and Response objects
    • TextEncoder, TextDecoder
    • Timers
      • setTimeout, clearTimeout
      • setInterval, clearInterval
    • URL, URLSearchParams
    • crypto.getRandomValues
    • crypto.randomUUID
    • crypto.subtle (NativeCrypto can be used instead)
    • console
      • console.log()
      • console.warn()
      • console.error()
  • Request router
    • The Router object
  • Cryptography extensions
    • Ed25519 and X25519: NativeCrypto.Ed25519, NativeCrypto.X25519
    • JWT signing and verification: NativeCrypto.JWT
    • Hashing: NativeCrypto.digest
    • Constant time comparison: NativeCrypto.constantTimeEq
    • AEAD: NativeCrypto.AEAD
      • AES128-GCM-SIV: NativeCrypto.AEAD.{aes128GcmSivEncrypt,aes128GcmSivDecrypt}
    • HMAC: NativeCrypto.HMAC
      • HMAC-SHA256: NativeCrypto.HMAC.hmacSha256
  • Template API
    • Tera template rendering: Template.render()
  • Encoding and decoding
    • Codec.hexencode(), Codec.hexdecode()
    • Codec.b64encode(), Codec.b64decode()
  • Embedded datasets
    • MIME type guessing: Dataset.Mime.guessByExt()
  • Text utilities
    • YAML serialization and deserialization: TextUtil.Yaml.parse(), TextUtil.Yaml.stringify()
    • Markdown rendering: TextUtil.Markdown.renderToHtml()
  • Data compression
    • Zstd
      • Block compression: Compress.Zstd.blockCompress
      • Block decompression: Compress.Zstd.blockDecompress

Tier 2

Tier 2 APIs are experimental - incompatible changes can be made within a major version.

  • Graphics API
    • Canvas (Graphics.Canvas)
    • Layout constraint solver based on Z3 (Graphics.Layout)
  • Background tasks
    • Background.atMostOnce()
    • Background.atLeastOnce()
    • Background.delayed()
  • Data validation
    • JSON Type Definition validation: Validation.JTD
  • Native API to external services
    • MySQL client
    • Apple Push Notification Service (APNS) client
    • AWS
      • v4 request signing: ExternalService.AWS.sign
      • Presigned URL: ExternalService.AWS.getPresignedUrl
    • GitHub
  • DOM API
    • XML: TextUtil.DOM.HTML
    • HTML: TextUtil.DOM.XML
  • Distributed system primitives
    • Key-value store
      • KV.Namespace
    • Message queue
      • App.pubsub
      • Client-side API: /_blueboat/events
  • Encoding and decoding
    • multipart/form-data parser: Codec.Multipart.decode

Scalability issue with increased number of domains and apps

Currently we periodically query the KV store to check for apps/routing updates, and cache apps and domains in memory. This does not scale with higher numbers of domains and apps.

Possible solutions:

  1. Add another frontend proxy to pin request sources to proxies. This way we get some "locality".
  2. Use a message queue to notify updates.

Incorrect request routing behavior

e.g. We have two routes for / and /hello.

  1. User accesses /.
  2. Scheduler caches this only prefix.
  3. User accesses /hello.
  4. Scheduler uses the / cache without querying DB.

Retry `atLeastOnce` background tasks on timeout and exceptions.

Currently, an atLeastOnce background task will be retried if the Blueboat host process exits during execution, but will NOT be retried in the following circumstances:

  • An exception is thrown.
  • The worker process crashed.
  • The 30-second limit is reached.

Supporting retry in these cases requires re-enqueueing the task to Kafka.

OOM logic correctness

How we enforce app memory limits now:

Heap

  • Set an OOM hook on v8::Isolate
  • Before each call into JavaScript, setup a setjmp environment
  • If OOM hook is called, longjmp out
  • The caller detects it and adds a "poison" mark to the current v8::Isolate instance.
  • V8 isolates with the poison mark will be dropped and not reused.

Also, we reserve 1MB "host entry threshold memory" when a JavaScript call returns. This ensures that we always have enough memory on the host side to allocate small objects.

ArrayBuffer

It seems that V8 ArrayBuffer's are off-heap and not counted towards the total heap limit. So we manage a separate memory pool for ArrayBuffer memory.

V8 throws an exception if an ArrayBuffer allocation fails in JavaScript so it just works. On the host side we do an explicit check against the memory pool before allocating new ArrayBuffer's.

V8 snapshots

Reduces cold start time.

We now cache isolates though.

HTML Parsing

I was curious if you had considered exposing something like DOMParser, or some other HTML parsing interface. I think in edge computing people often use it for rewriting outgoing HTML, though I was hoping to use it just to extract a few HTML attributes.

It looks like rust has some decent HTML parsers (https://github.com/y21/tl) but in looking at the other blueboat interfaces exposed to v8 it seems like most are functional and don't hold any state, whereas the interface I was imagining might tokenize HTML in rust but also run queries in rust and just return the result to JS. But perhaps there's some better way to set up the interface?

GC fails in low_memory_notification and crashes process

How to reproduce

Stress-test with playground examples concurrently:

wrk -c 20 -d 3600 -t 2 --latency "http://localhost:3080/api/since?t=3600000&n=4"
wrk -c 5 -d 3600 -t 1 http://localhost:3080/mle-string-init
wrk -c 2 -d 3600 -t 1 http://localhost:3080/catastrophic-backtracking

Error

(after some time)

...
 2021-01-16T17:10:25.958Z INFO  rusty_workers_runtime::runtime  > worker instance c7097434ea2c8001feaceb697384b237 exited with error: Execution(MemoryLimitExceeded)
 2021-01-16T17:10:25.958Z ERROR rusty_workers_runtime::isolate  > isolated poisoned, dropping worker
 2021-01-16T17:10:25.969Z INFO  rusty_workers_proxy::sched > execution error: RuntimeThrowsException
 2021-01-16T17:10:25.970Z INFO  rusty_workers_proxy::sched > spawning new worker for app ccb60bf1-db67-4627-8a88-37aacec63258 on runtime 8d0f27896d72887abbff34124802f9e3 with load 0.12863355458915082
 2021-01-16T17:10:26.024Z INFO  rusty_workers_runtime::isolate  > restarting isolate worker
 2021-01-16T17:10:26.065Z INFO  rusty_workers_runtime::isolate  > restarting isolate worker
 2021-01-16T17:10:26.223Z INFO  rusty_workers_runtime::runtime  > worker a11c9f22ed394e7e07dda26270ce331e timed out

<--- Last few GCs --->

[615951:0x21b00000000]     2243 ms: Mark-sweep 43.2 (44.9) -> 26.3 (28.1) MB, 262.0 / 0.0 ms  (average mu = 0.261, current mu = 0.259) allocation failure scavenge might not succeed
[615951:0x21b00000000]     2873 ms: Mark-sweep (reduce) 64.1 (65.9) -> 38.9 (40.2) MB, 455.5 / 0.0 ms  (average mu = 0.270, current mu = 0.277) low memory notification GC in old space requested


<--- JS stacktrace --->

thread '<unnamed>' panicked at 'oom_protected_callback: unprotected OOM', rusty-workers-runtime/src/executor.rs:584:13
stack backtrace:
   0: std::panicking::begin_panic
   1: rusty_workers_runtime::executor::oom_protected_callback
   2: _ZN2v85Utils16ReportOOMFailureEPNS_8internal7IsolateEPKcb
   3: _ZN2v88internal2V823FatalProcessOutOfMemoryEPNS0_7IsolateEPKcb
   4: _ZN2v88internal4Heap23FatalProcessOutOfMemoryEPKc
   5: _ZN2v88internal4Heap14CollectGarbageENS0_15AllocationSpaceENS0_23GarbageCollectionReasonENS_15GCCallbackFlagsE
   6: CollectAllAvailableGarbage
             at ./../../../../../.cargo/git/checkouts/rusty_v8-0ed9985aaa183ccd/d39e8bf/v8/src/heap/heap.cc:1399:10
   7: _ZN2v87Isolate21LowMemoryNotificationEv
   8: rusty_workers_runtime::isolate::isolate_worker
   9: rusty_workers_runtime::isolate::IsolateThread::new::{{closure}}::{{closure}}
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Tests

There aren't any automated tests currently and I test each new feature manually in examples/pkg.

This is bad. We need to fix it.

Scheduler does not respond to runtime cluster upscaling

Reproduction steps:

  1. Start stress test on a single app.
  2. Scale the runtime cluster to add a few more instances.

The scheduler does not immediately respond to deployment changes, and still routes traffic to the previously active runtime instances.

Cause:

The scheduler decides that it's unnecessary to spawn new workers because it has already cached previously spawn-ed workers as ReadyInstance's and keeps reusing them.

Solution:

Random small dropouts on ReadyInstances.

Improve error reporting for application exceptions thrown in the initialization phase.

Currently, for exceptions thrown in the initialization phase of an application:

  1. Stack traces are not included in the error message.
  2. The error is not aggregated to Kafka.

For example I got a confusing error message:

2022-01-03T10:15:43.468764Z ERROR blueboat::ctx: native invoke error from app ***.tar] request "unknown": expected type `v8::data::Uint8Array`, got `v8::data::Value`

Due to an undefined being passed to new TextDecoder().decode().

Local development CLI

It would be nice not to start the entire blueboat_server for local development or small-scale self-hosting. Instead, have a Node/Deno-style CLI to "just run this app on this machine".

tokio-runtime-worker panics

Reproducible at commit 55452c6.

Steps:

  1. Spawn a worker:
addEventListener("fetch", async (event) => {
    event.respondWith(handleRequest(event.request));
});

async function handleRequest(req) {
    await new Promise(resolve => setTimeout(resolve, 100));
    return new Response("OK");
}
  1. Fetch the worker

  2. Spawn a worker:

addEventListener("fetch", async (event) => {
    event.respondWith(handleRequest(event.request));
});

async function handleRequest(req) {
    await new Promise(resolve => setTimeout(resolve, 35000));
    return new Response("OK");
}
  1. Fetch the worker and wait for timeout

  2. Get the panic.

Log (with valgrind):

$ RUST_LOG=debug RUST_BACKTRACE=1 valgrind ./target/release/rusty-workers-runtime --rpc-listen 127.0.0.1:1208
==1027322== Memcheck, a memory error detector
==1027322== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1027322== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==1027322== Command: ./target/release/rusty-workers-runtime --rpc-listen 127.0.0.1:1208
==1027322== 
 INFO  rusty_workers_runtime > rusty-workers-runtime starting
 INFO  rusty_workers_runtime > runtime initialized
==1027322== Warning: set address range perms: large range [0x351100000000, 0x351300000000) (noaccess)
==1027322== Warning: set address range perms: large range [0x351100000000, 0x351300000000) (noaccess)
==1027322== Warning: set address range perms: large range [0x351100000000, 0x351200000000) (noaccess)
 INFO  rusty_workers_runtime::executor > worker instance 3ca7aa389665e11ad18b3e36ebe763d9 ready
 DEBUG rusty_workers_runtime::runtime  > remaining time budget: 4.998568083s
 INFO  tarpc::rpc::server              > ClientHandler finished.
 DEBUG rusty_workers_runtime::executor > log: event type: Fetch
==1027322== Thread 33:
==1027322== Conditional jump or move depends on uninitialised value(s)
==1027322==    at 0x3BFD60: v8::internal::GlobalHandles::MoveGlobal(unsigned long**, unsigned long**) (global-handles.cc:1026)
==1027322==    by 0x315086: v8__Global__New (binding.cc:300)
==1027322==    by 0x1F66B1: new_raw<rusty_v8::data::Function> (handle.rs:140)
==1027322==    by 0x1F66B1: new<rusty_v8::data::Function,rusty_v8::handle::Local<rusty_v8::data::Function>> (handle.rs:133)
==1027322==    by 0x1F66B1: {{closure}} (executor.rs:373)
==1027322==    by 0x1F66B1: rusty_workers_runtime::engine::wrap_callback (engine.rs:88)
==1027322==    by 0x1F7D9A: call_service_callback (executor.rs:350)
==1027322==    by 0x1F7D9A: call<fn(&mut rusty_v8::scope::HandleScope<rusty_v8::data::Context>, rusty_v8::function::FunctionCallbackArguments, rusty_v8::function::ReturnValue),(&mut rusty_v8::scope::HandleScope<rusty_v8::data::Context>, rusty_v8::function::FunctionCallbackArguments, rusty_v8::function::ReturnValue)> (function.rs:70)
==1027322==    by 0x1F7D9A: {{closure}}<fn(&mut rusty_v8::scope::HandleScope<rusty_v8::data::Context>, rusty_v8::function::FunctionCallbackArguments, rusty_v8::function::ReturnValue)> (function.rs:278)
==1027322==    by 0x1F7D9A: <extern "C" fn(A0) -> R as rusty_v8::support::CFnFrom<F>>::mapping::c_fn (support.rs:722)
==1027322==    by 0x8F4B58: v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) (api-arguments-inl.h:158)
==1027322==    by 0x8F406F: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) (builtins-api.cc:111)
==1027322==    by 0x8F364A: v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) (builtins-api.cc:141)
==1027322==    by 0x7C0D57: Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit (in /home/zhy/Projects/rusty-workers/target/release/rusty-workers-runtime)
==1027322==    by 0x75AD0E: Builtins_InterpreterEntryTrampoline (in /home/zhy/Projects/rusty-workers/target/release/rusty-workers-runtime)
==1027322==    by 0x75AD0E: Builtins_InterpreterEntryTrampoline (in /home/zhy/Projects/rusty-workers/target/release/rusty-workers-runtime)
==1027322==    by 0x75AD0E: Builtins_InterpreterEntryTrampoline (in /home/zhy/Projects/rusty-workers/target/release/rusty-workers-runtime)
==1027322==    by 0x75AD0E: Builtins_InterpreterEntryTrampoline (in /home/zhy/Projects/rusty-workers/target/release/rusty-workers-runtime)
==1027322== 
 DEBUG rusty_workers_runtime::runtime  > remaining time budget: 4.999995168s
 DEBUG rusty_workers_runtime::runtime  > remaining time budget: 4.999989755s
 DEBUG rusty_workers_runtime::io       > leaving IoProcessor::run
 INFO  tarpc::rpc::server              > ClientHandler finished.
==1027322== Warning: set address range perms: large range [0x2a2200000000, 0x2a2400000000) (noaccess)
==1027322== Warning: set address range perms: large range [0x2a2200000000, 0x2a2400000000) (noaccess)
==1027322== Warning: set address range perms: large range [0x2a2200000000, 0x2a2300000000) (noaccess)
 INFO  rusty_workers_runtime::executor > worker instance 808bb25b5cd5ab17614d7ee32ad649a1 ready
 DEBUG rusty_workers_runtime::runtime  > remaining time budget: 4.999996215s
 INFO  tarpc::rpc::server              > ClientHandler finished.
 DEBUG rusty_workers_runtime::executor > log: event type: Fetch
 DEBUG rusty_workers_runtime::runtime  > remaining time budget: 4.965420188s
 DEBUG tarpc::rpc::server              > [b17ffaed9ffce2cfd8] Response did not complete before deadline of 2021-01-04T03:08:15Zs.
 INFO  tarpc::rpc::server              > ClientHandler finished.
==1027322== Warning: set address range perms: large range [0x2a2200000000, 0x2a2300000000) (noaccess)
 INFO  rusty_workers_runtime::runtime  > worker instance 808bb25b5cd5ab17614d7ee32ad649a1 exited with error: IoTimeout
 INFO  rusty_workers_runtime::runtime  > stopping monitor for worker 808bb25b5cd5ab17614d7ee32ad649a1
 DEBUG rusty_workers_runtime::io       > leaving IoProcessor::run
thread 'tokio-runtime-worker' panicked at 'assertion failed: `(left == right)`
  left: `259364176`,
 right: `0`', /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sync/mpsc/shared.rs:486:9
stack backtrace:
==1027322== Thread 10 tokio-runtime-wo:
==1027322== Syscall param statx(file_name) points to unaddressable byte(s)
==1027322==    at 0x4B059FE: statx (statx.c:29)
==1027322==    by 0xD81050: statx (weak.rs:134)
==1027322==    by 0xD81050: std::sys::unix::fs::try_statx (fs.rs:123)
==1027322==    by 0xD81A02: file_attr (fs.rs:753)
==1027322==    by 0xD81A02: metadata (fs.rs:501)
==1027322==    by 0xD81A02: mmap (gimli.rs:113)
==1027322==    by 0xD81A02: new (elf.rs:15)
==1027322==    by 0xD81A02: mapping_for_lib (gimli.rs:579)
==1027322==    by 0xD81A02: std::backtrace_rs::symbolize::gimli::resolve::{{closure}} (gimli.rs:613)
==1027322==    by 0xD817AA: with_global<closure-1> (gimli.rs:525)
==1027322==    by 0xD817AA: std::backtrace_rs::symbolize::gimli::resolve (gimli.rs:605)
==1027322==    by 0xD7BA47: resolve_frame_unsynchronized<closure-0> (mod.rs:178)
==1027322==    by 0xD7BA47: std::sys_common::backtrace::_print_fmt::{{closure}} (backtrace.rs:74)
==1027322==    by 0xD812FE: call_mut<(&std::backtrace_rs::backtrace::Frame),FnMut<(&std::backtrace_rs::backtrace::Frame)>> (function.rs:269)
==1027322==    by 0xD812FE: std::backtrace_rs::backtrace::libunwind::trace::trace_fn (libunwind.rs:102)
==1027322==    by 0x4873783: _Unwind_Backtrace (in /usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==1027322==    by 0xD7B696: trace (libunwind.rs:90)
==1027322==    by 0xD7B696: trace_unsynchronized<closure-1> (mod.rs:66)
==1027322==    by 0xD7B696: _print_fmt (backtrace.rs:67)
==1027322==    by 0xD7B696: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt (backtrace.rs:46)
==1027322==    by 0xD9971B: core::fmt::write (mod.rs:1078)
==1027322==    by 0xD766B1: std::io::Write::write_fmt (mod.rs:1519)
==1027322==    by 0xD7D824: _print (backtrace.rs:49)
==1027322==    by 0xD7D824: print (backtrace.rs:36)
==1027322==    by 0xD7D824: std::panicking::default_hook::{{closure}} (panicking.rs:208)
==1027322==    by 0xD7D379: std::panicking::default_hook (panicking.rs:225)
==1027322==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==1027322== 
==1027322== Syscall param statx(buf) points to unaddressable byte(s)
==1027322==    at 0x4B059FE: statx (statx.c:29)
==1027322==    by 0xD81050: statx (weak.rs:134)
==1027322==    by 0xD81050: std::sys::unix::fs::try_statx (fs.rs:123)
==1027322==    by 0xD81A02: file_attr (fs.rs:753)
==1027322==    by 0xD81A02: metadata (fs.rs:501)
==1027322==    by 0xD81A02: mmap (gimli.rs:113)
==1027322==    by 0xD81A02: new (elf.rs:15)
==1027322==    by 0xD81A02: mapping_for_lib (gimli.rs:579)
==1027322==    by 0xD81A02: std::backtrace_rs::symbolize::gimli::resolve::{{closure}} (gimli.rs:613)
==1027322==    by 0xD817AA: with_global<closure-1> (gimli.rs:525)
==1027322==    by 0xD817AA: std::backtrace_rs::symbolize::gimli::resolve (gimli.rs:605)
==1027322==    by 0xD7BA47: resolve_frame_unsynchronized<closure-0> (mod.rs:178)
==1027322==    by 0xD7BA47: std::sys_common::backtrace::_print_fmt::{{closure}} (backtrace.rs:74)
==1027322==    by 0xD812FE: call_mut<(&std::backtrace_rs::backtrace::Frame),FnMut<(&std::backtrace_rs::backtrace::Frame)>> (function.rs:269)
==1027322==    by 0xD812FE: std::backtrace_rs::backtrace::libunwind::trace::trace_fn (libunwind.rs:102)
==1027322==    by 0x4873783: _Unwind_Backtrace (in /usr/lib/x86_64-linux-gnu/libgcc_s.so.1)
==1027322==    by 0xD7B696: trace (libunwind.rs:90)
==1027322==    by 0xD7B696: trace_unsynchronized<closure-1> (mod.rs:66)
==1027322==    by 0xD7B696: _print_fmt (backtrace.rs:67)
==1027322==    by 0xD7B696: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt (backtrace.rs:46)
==1027322==    by 0xD9971B: core::fmt::write (mod.rs:1078)
==1027322==    by 0xD766B1: std::io::Write::write_fmt (mod.rs:1519)
==1027322==    by 0xD7D824: _print (backtrace.rs:49)
==1027322==    by 0xD7D824: print (backtrace.rs:36)
==1027322==    by 0xD7D824: std::panicking::default_hook::{{closure}} (panicking.rs:208)
==1027322==    by 0xD7D379: std::panicking::default_hook (panicking.rs:225)
==1027322==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==1027322== 
   0: rust_begin_unwind
             at /rustc/f76ecd0668fcdb289456cdc72a39ad15467cc454/library/std/src/panicking.rs:493:5
   1: core::panicking::panic_fmt
             at /rustc/f76ecd0668fcdb289456cdc72a39ad15467cc454/library/core/src/panicking.rs:92:14
   2: <std::sync::mpsc::shared::Packet<T> as core::ops::drop::Drop>::drop
   3: core::ptr::drop_in_place
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:179:1
   4: alloc::sync::Arc<T>::drop_slow
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/sync.rs:951:18
   5: core::ptr::drop_in_place
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:179:1
   6: rusty_workers_runtime::io::IoProcessor::run::{{closure}}::{{closure}}
             at ./rusty-workers-runtime/src/io.rs:119:13
   7: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/future/mod.rs:80:19
   8: tokio::runtime::task::core::Core<T,S>::poll::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/core.rs:173:17
   9: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/loom/std/unsafe_cell.rs:14:9
  10: tokio::runtime::task::core::Core<T,S>::poll
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/core.rs:158:13
  11: tokio::runtime::task::harness::Harness<T,S>::poll::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/harness.rs:107:27
  12: core::ops::function::FnOnce::call_once
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
  13: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:322:9
  14: std::panicking::try::do_call
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:379:40
  15: std::panicking::try
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:343:19
  16: std::panic::catch_unwind
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:396:14
  17: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/harness.rs:89:19
  18: tokio::runtime::task::raw::RawTask::poll
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/raw.rs:66:18
  19: tokio::runtime::task::Notified<S>::run
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/mod.rs:171:9
  20: tokio::runtime::thread_pool::worker::Context::run_task::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/thread_pool/worker.rs:370:21
  21: tokio::coop::with_budget::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/coop.rs:121:9
  22: std::thread::local::LocalKey<T>::try_with
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:272:16
  23: std::thread::local::LocalKey<T>::with
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/local.rs:248:9
  24: tokio::coop::with_budget
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/coop.rs:114:5
  25: tokio::coop::budget
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/coop.rs:98:5
  26: tokio::runtime::thread_pool::worker::Context::run_task
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/thread_pool/worker.rs:348:9
  27: tokio::runtime::thread_pool::worker::Context::run
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/thread_pool/worker.rs:318:24
  28: tokio::runtime::thread_pool::worker::run::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/thread_pool/worker.rs:303:17
  29: tokio::macros::scoped_tls::ScopedKey<T>::set
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/macros/scoped_tls.rs:61:9
  30: tokio::runtime::thread_pool::worker::run
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/thread_pool/worker.rs:300:5
  31: tokio::runtime::thread_pool::worker::Launch::launch::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/thread_pool/worker.rs:279:45
  32: <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/blocking/task.rs:42:21
  33: tokio::runtime::task::core::Core<T,S>::poll::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/core.rs:173:17
  34: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/loom/std/unsafe_cell.rs:14:9
  35: tokio::runtime::task::core::Core<T,S>::poll
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/core.rs:158:13
  36: tokio::runtime::task::harness::Harness<T,S>::poll::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/harness.rs:107:27
  37: core::ops::function::FnOnce::call_once
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
  38: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:322:9
  39: std::panicking::try::do_call
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:379:40
  40: std::panicking::try
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:343:19
  41: std::panic::catch_unwind
             at /home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panic.rs:396:14
  42: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/harness.rs:89:19
  43: tokio::runtime::task::raw::RawTask::poll
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/raw.rs:66:18
  44: tokio::runtime::task::Notified<S>::run
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/task/mod.rs:171:9
  45: tokio::runtime::blocking::pool::Inner::run
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/blocking/pool.rs:277:17
  46: tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}}
             at /home/zhy/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.0.1/src/runtime/blocking/pool.rs:257:17
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

cargo install boatctl fails

Hi, cargo install boatctl fails on

error[E0445]: private trait `Width` in public interface
   --> /home/krystofmatejka/.cargo/registry/src/github.com-1ecc6299db9ec823/tabled-0.7.0/src/width.rs:904:1
    |
904 | / impl<W> TableOption for Justify<W>
905 | | where
906 | |     W: Width,
907 | | {
...   |
917 | |     }
918 | | }
    | |_^ can't leak private trait

which is caused by https://crates.io/crates/tabled version 0.7.0 it seems fixed in 0.8.0

Environment
cargo 1.56.0
ubuntu 22.04

Log delivery issue

After migrating to tracing log delivery has some strange issues:

If an instance gets a background task channel lock in a few seconds after startup, the channel lock acquired log is sent to both syslog_kafka and the console.

But if the instance gets the lock after expiration (like 20 seconds later), the log is only sent to syslog_kafka.

The log looks like:

{"host":"devbox-ap","pid":538824,"tid":"2","ts":1639311912.4820883,"name":"event src/task.rs:297","target":"blueboat::task","level":"WARN","module_path":"blueboat::task","file":"src/task.rs","line":297,"fields":{"channel":"ch01","identity":"2c3963dd-8f2d-4204-907f-d8455acfb1a1","message":"channel lock acquired"},"span_id":""}

Analyze JS<->Rust call performance

I was benchmarking some of the crypto routines in Blueboat.

The code is:

const start = Date.now();
const n = 10000;
const key = crypto.getRandomValues(new Uint8Array(16));
const nonce = crypto.getRandomValues(new Uint8Array(12));
const data = crypto.getRandomValues(new Uint8Array(32));

for (let i = 0; i < n; i++) {
  NativeCrypto.AEAD.aes128GcmSivEncrypt({
    key,
    nonce,
    data,
  });
}
const end = Date.now();
return mkJsonResponse({
  duration: end - start,
  n,
  dataLen: data.length,
});

And... it seems that most of the time is spent in the host call itself (instead of the actual encryption):

{"duration":55,"n":10000,"dataLen":320}
{"duration":38,"n":10000,"dataLen":32}

MemoryWatermark tune operation interferes all apps.

What happened:

Sandbox not full isolated.

What you expected to happen:

If app A cost massive memory which result in availble memory less than Critical MemoryWatermark, then the runtime will tune smr param: "MAX_WORKERS_PER_APP", that's now the logic. But the tune operation will scale in the running app B , the scale in operation is triggered by app A.

That sound like not a good isolation behavior, apps interfere each other.

cargo build failed

What happened:

cargo build failed.

error: couldn't read /usr/local/include/foundationdb/fdb.options: No such file or directory (os error 2)
   --> /Users/xialingming/.cargo/registry/src/github.com-1ecc6299db9ec823/foundationdb-gen-0.6.0/src/lib.rs:353:29
    |
353 | const OPTIONS_DATA: &[u8] = include_bytes!("/usr/local/include/foundationdb/fdb.options");
    |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: this error originates in the macro `include_bytes` (in Nightly builds, run with -Z macro-backtrace for more info)

error: could not compile `foundationdb-gen` due to previous error

What you expected to happen:

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know?:

OS: macOS

rustup toolchain list                   
stable-2022-05-19-x86_64-apple-darwin
stable-x86_64-apple-darwin (default)
nightly-x86_64-apple-darwin


rustc --version                          
rustc 1.61.0 (fe5b13d68 2022-05-18)

OpenSSL linking error when compiling tikv-client and reqwest in the same crate

Error:

   Compiling rusty-workers-proxy v0.0.0 (/home/zhy/Projects/rusty-workers/rusty-workers-proxy)
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-Wl,--eh-frame-hdr" "-L" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.0.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.1.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.10.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.11.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.12.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.13.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.14.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.15.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.2.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.3.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.4.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.5.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.6.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.7.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.8.rcgu.o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.rusty_workers_proxy.5xsbx9pq-cgu.9.rcgu.o" "-o" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd" "/home/zhy/Projects/rusty-workers/target/release/deps/rusty_workers_proxy-f8ae77ae6625fbdd.1l5tt8l8zyqu87rj.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/zhy/Projects/rusty-workers/target/release/deps" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/boringssl-build/lib" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/libz-sys-11206d7ae7406f59/out/build" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/libz-sys-11206d7ae7406f59/out/lib" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/base" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/container" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/container" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/debugging" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/debugging" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/debugging" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/debugging" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/hash" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/hash" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/numeric" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/status" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/strings" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/strings" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/strings" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/strings" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/synchronization" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/synchronization" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/time" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/time" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/time" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/types" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/abseil-cpp/absl/types" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/cares/cares/lib" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build/third_party/re2" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out/build" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/grpcio-sys-170b7cb87604ca8a/out" "-L" "/home/zhy/Projects/rusty-workers/target/release/build/libz-sys-11206d7ae7406f59/out/build" "-L" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/zhy/Projects/rusty-workers/target/release/deps/libpretty_env_logger-2c5e6d78dbe57934.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libenv_logger-8a33f0799e957947.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtermcolor-979f2acc8b71d606.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhumantime-2c45dd1f7132d7b0.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libquick_error-758a0d9ec28c3c5b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libreqwest-44d87222a517efaf.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhyper_tls-2aa168cad4348073.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio_native_tls-b50e6b4c561c0b01.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtoml-05d680551d42f4e2.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhyper-9ba744dc8ef55935.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libh2-10a9c955da2b1ae1.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhttp_body-ad92a09771d86b69.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libstructopt-1404c0686d691b9d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libclap-28b19b8139a8442a.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libvec_map-906b97895659398d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtextwrap-e94736a599908e6f.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libunicode_width-1e4a9d9d37ddb387.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libstrsim-f60115ef035d543e.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libatty-72e76d37747793dd.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libansi_term-9520aa70ed881abc.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/librusty_workers-92e5c3bea786b8a6.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtikv_client-d271af0ca1c5bf74.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libprometheus-a2cf82f9f6d30392.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libprocfs-748ec0a2717d267c.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libflate2-7bac6a119a7c8353.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libminiz_oxide-1b84ecc9fcb4214b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libadler-ddf9a9ec87b5448a.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libcrc32fast-db9d1030949593dc.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libreqwest-fbcc8126ef91dfc7.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhyper_tls-498b8ba2bc21938d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libipnet-9c7038fec0a70a52.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio_tls-f0277fd2be97caf2.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libserde_urlencoded-02ce5618ccbe1b16.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libencoding_rs-ff39fd800b413443.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libbase64-dc9559f3b817e354.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libmime_guess-de2ea1b3f736ef19.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libunicase-6ca3caa516c42ff7.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libmime-d1755dbfdc0a262f.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libnative_tls-db07edb787fd75fc.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libopenssl_probe-19545ddd607a423b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libopenssl-bd933565a2550ada.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libopenssl_sys-802f5bf2446941f7.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libforeign_types-af95e674a268cfcb.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libforeign_types_shared-b078d77799d4201b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libbitflags-f9be2a87dd3aa410.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhyper-f5875d9ea07ad2a0.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhttparse-2adca81bd6fc1c7d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libwant-9b4ec1349a2fc559.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtry_lock-2fc3bf36ba6b73bd.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libh2-b145aba7b70856ab.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtracing_futures-f05931789ee0e229.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libpin_project-1eb83e4ad0c54d43.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libindexmap-cb74127e3211b6e0.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhashbrown-175e31360b6a9835.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio_util-caf527ee676346a8.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhttpdate-a8fafc91516405a4.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libsocket2-e9ee7ef287dc5fa8.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtower_service-fd0c235026b799a3.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtracing-c8ebb6d1c37cd04a.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtracing_core-accd44162770050e.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio-7c965c808eafdd2d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libmio-443b4beec9d79058.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libiovec-087c6f1c7116a7d1.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libnet2-ab5fc9b1c519c39d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libpin_project_lite-5db553ac43855aa0.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhttp_body-e4a8a42b98358d8b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/liburl-07db3e7097815aae.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libidna-0da7939e8ce87166.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libunicode_normalization-4a298b25fc3b7358.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtinyvec-ccaaa3e73db1a30b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtinyvec_macros-910762d57c5b6034.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libunicode_bidi-4dcd412e24488ca8.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libform_urlencoded-d0b050082566b34a.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libpercent_encoding-c538f90a27728ce1.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libmatches-08a2b851970fe6fe.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhttp-036b788bac8da182.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_timer-8206dd93a3e6a3fa.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtikv_client_store-90c3ffcd79650b09.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtikv_client_pd-86558cf6c185c697.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtikv_client_common-47fe4c43d79d7732.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libregex-ee1a2659559a50d9.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libthread_local-c027db2e0ef043cd.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libregex_syntax-190da877de71b201.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libaho_corasick-637bffbf8af1040e.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtikv_client_proto-64839329af15b19c.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libprotobuf-364d515e2b0a4f5b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libgrpcio-6b5cc4d4bc8ec51e.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libgrpcio_sys-90973c9f7fb82dce.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/liblazy_static-e9a76e4793a80604.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libprost-a18526d8e5b486a0.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libbytes-ff0fc23212eec0c6.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhex-a4e4f5579f901460.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libstubborn_io-19343f52c320f90b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libgit_version-0535a05e2a0f6b8f.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtarpc-4e6a92f9c4169df2.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/librand-d3cc4946a0aea879.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/librand_chacha-a5dff4cc46eb5d7f.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/librand_core-73598f60a9bef4aa.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libgetrandom-9059fb946e7f40d1.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio_util-2ac946508349f005.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio_stream-c32bee90e2d87ab7.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio_serde-86da7bc4d0b714ea.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libserde_json-adbf545148da9e10.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libryu-0d178bc97083fb74.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libitoa-9ad93b77da318bf7.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libbincode-3376321f5f616012.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libbyteorder-36d1509856b7d394.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libtokio-8b9e7c6078d05640.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libsignal_hook_registry-6846701cd9798e27.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libbytes-292078fe3cff20df.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libmio-c690d45d0bb16a34.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libpin_project_lite-060abf0a998ceae1.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libparking_lot-59931463ec102c1a.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libparking_lot_core-12d1b2570a3c5908.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libsmallvec-95a6d55ec415d64b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/liblock_api-e440d6be6c2e1a5e.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libscopeguard-09567ff0f54bb90a.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libinstant-5d5e3ec86264823e.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libcfg_if-c6a48d9876de9e38.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libhumantime-7d8cf279a9432208.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libstatic_assertions-612ae315016cf076.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfnv-1e5e88db2efe8783.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libthiserror-f88f99e1d6772892.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/librand-bddaeb14d530303b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/librand_chacha-228b0dd0e3fb2e28.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libppv_lite86-902810e01d19e4e1.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/librand_core-43449252b3c23dc1.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libgetrandom-a7cef31b05af3c6d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures-f7e5d8c352e509be.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_executor-4eb89516f3a3689d.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libnum_cpus-7e24826385c1ca0c.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/liblibc-6c39e38ff152878f.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_util-e83bf21994d290cc.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libmemchr-d88f71a8d65d9eb5.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures-c7eb5ae9141595cc.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_io-f963e224f8d553a9.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libslab-032391bfcdad2589.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_channel-471c8e0dfcacbe82.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libpin_project-d25860c1c569b66f.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_sink-7a605c229e767cc6.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_task-d49365a425ab5cef.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libonce_cell-8fed26abf95bf5f0.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libpin_utils-016a2cbc907c921b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libfutures_core-0ce5a9163d962376.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libarc_swap-c7076591d67985d2.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libanyhow-1b2738b854e3c66b.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libserde-a9495cda94f27157.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/liblog-9f592c0d303617c9.rlib" "/home/zhy/Projects/rusty-workers/target/release/deps/libcfg_if-48c0c14891c5b8c9.rlib" "-Wl,--start-group" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-25c6acf8063a3802.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_abort-a8a5b853536a625e.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-37db28e905edb56b.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-9ef2480568df55af.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-1e0f0992cdbecd66.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-6c8e02b8fedc1e5f.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-807e5ad203594490.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-083fce1bea11612a.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-1af568081add9042.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-1395b54a3b3f45bf.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-caba820045f178d5.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-512eb53291f6de7e.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-5efacc5025f9f3d8.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-9c4002b5f79ba0e1.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-90996f4879673567.rlib" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-9ea09a899c3eda46.rlib" "-Wl,--end-group" "/home/zhy/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-ef2408da76957905.rlib" "-Wl,-Bdynamic" "-lssl" "-lcrypto" "-lstdc++" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc"
  = note: /usr/bin/ld: /home/zhy/Projects/rusty-workers/target/release/deps/libopenssl_sys-802f5bf2446941f7.rlib(openssl_sys-802f5bf2446941f7.openssl_sys.7melbtyv-cgu.3.rcgu.o): in function `openssl_sys::tls1::SSL_set_tlsext_host_name':
          openssl_sys.7melbtyv-cgu.3:(.text._ZN11openssl_sys4tls124SSL_set_tlsext_host_name17h68a9e3a8e359c332E+0xc): undefined reference to `SSL_ctrl'
          /usr/bin/ld: /home/zhy/Projects/rusty-workers/target/release/deps/libopenssl_sys-802f5bf2446941f7.rlib(openssl_sys-802f5bf2446941f7.openssl_sys.7melbtyv-cgu.7.rcgu.o): in function `openssl_sys::ssl::SSL_CTX_set_mode':
          openssl_sys.7melbtyv-cgu.7:(.text._ZN11openssl_sys3ssl16SSL_CTX_set_mode17h750cd63b9012b560E+0xc): undefined reference to `SSL_CTX_ctrl'
          /usr/bin/ld: /home/zhy/Projects/rusty-workers/target/release/deps/libopenssl_sys-802f5bf2446941f7.rlib(openssl_sys-802f5bf2446941f7.openssl_sys.7melbtyv-cgu.7.rcgu.o): in function `openssl_sys::ssl::SSL_CTX_add_extra_chain_cert':
          openssl_sys.7melbtyv-cgu.7:(.text._ZN11openssl_sys3ssl28SSL_CTX_add_extra_chain_cert17h6406e8de627a6b59E+0xc): undefined reference to `SSL_CTX_ctrl'
          /usr/bin/ld: /home/zhy/Projects/rusty-workers/target/release/deps/libopenssl_sys-802f5bf2446941f7.rlib(openssl_sys-802f5bf2446941f7.openssl_sys.7melbtyv-cgu.7.rcgu.o): in function `openssl_sys::ssl::SSL_CTX_set_min_proto_version':
          openssl_sys.7melbtyv-cgu.7:(.text._ZN11openssl_sys3ssl29SSL_CTX_set_min_proto_version17h4bc8610bd8ba278aE+0xc): undefined reference to `SSL_CTX_ctrl'
          /usr/bin/ld: /home/zhy/Projects/rusty-workers/target/release/deps/libopenssl_sys-802f5bf2446941f7.rlib(openssl_sys-802f5bf2446941f7.openssl_sys.7melbtyv-cgu.7.rcgu.o): in function `openssl_sys::ssl::SSL_CTX_set_max_proto_version':
          openssl_sys.7melbtyv-cgu.7:(.text._ZN11openssl_sys3ssl29SSL_CTX_set_max_proto_version17he0fad4547c8ffc01E+0xc): undefined reference to `SSL_CTX_ctrl'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: could not compile `rusty-workers-proxy`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.