Stream: beginners

Topic: Cannot make a local http request


view this post on Zulip Karakatiza (Dec 29 2023 at 11:18):

The following program that should send an HTTP request crashes with an error:

app "hello"
  packages {
      pf: "https://github.com/roc-lang/basic-cli/releases/download/0.7.0/bkGby8jb0tmZYsy2hg1E_B2QrCgcSTxdUlHtETwm5m4.tar.br",
  }
  imports [pf.Task.{ Task, await }, pf.Http, pf.Stdout]
  provides [main] to pf

url = "http://localhost:8080"
main =
  _ <-
    { Http.defaultRequest &
        url: Str.concat url "/config/authentication",
        timeout: TimeoutMilliseconds 5000
    }
    |> Http.send
    |> Task.attempt
  Stdout.line "Completed ping request."
thread '<unnamed>' panicked at 'there is no reactor running, must be called from the context of a Tokio 1.x runtime', src/lib.rs:678:42
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
fatal runtime error: failed to initiate panic, error 5
Aborted (core dumped)

Running in Ubuntu 22, non-WSL, not inside Docker
strace (trimmed beginning to fit into the message limit):

execve("/usr/bin/test", ["test"], 0x7ffdb1de0940 /* 91 vars */) = 0
...
read(3, "# Locale name alias data base.\n#"..., 4096) = 2996
read(3, "", 4096)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=373, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 373, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee62c000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=27002, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 27002, PROT_READ, MAP_SHARED, 3, 0) = 0x7f19ee5ec000
close(3)                                = 0
futex(0x7f19ee41aa6c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=23, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 23, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5eb000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=56, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 56, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5ea000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=158, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 158, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5e9000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_NAME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_NAME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_NAME", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=77, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 77, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5e8000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_PAPER", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_PAPER", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_PAPER", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=34, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 34, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5e7000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_US.UTF-8/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_US.utf8/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=38, ...}, AT_EMPTY_PATH) = 0
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=57, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 57, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5e6000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_MONETARY", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_MONETARY", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_MONETARY", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=290, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 290, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5e5000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_US.UTF-8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_US.utf8/LC_COLLATE", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2586930, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 2586930, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19edf88000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_TIME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_TIME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_TIME", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=3332, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 3332, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5e4000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.UTF-8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_GB.UTF-8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_GB.utf8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=54, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 54, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee5e3000
close(3)                                = 0
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_US.UTF-8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/en_US.UTF-8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/code/148/usr/lib/locale/en_US.utf8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=340640, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 340640, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f19ee58b000
close(3)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

Does this have anything to do with a misconfigured system locale?

view this post on Zulip Anton (Dec 29 2023 at 12:50):

I'll try to reproduce and investigate

view this post on Zulip Anton (Dec 29 2023 at 13:20):

The custom timeout is the trigger, NoTimeout works and TimeoutMilliseconds 5000 does not. I'll get started on a fix.

view this post on Zulip Anton (Dec 29 2023 at 13:24):

Tracking in issue 146.

view this post on Zulip Anton (Dec 29 2023 at 16:27):

I have a fix on this branch. I'll probably have a 0.7.2 pre-release up today.

view this post on Zulip Karakatiza (Dec 29 2023 at 16:30):

Awesome!

view this post on Zulip Anton (Dec 29 2023 at 17:40):

CI tests revealed segmentation faults in several other examples that are triggered by this fix. These segmentation faults most likely originate from a bug in the roc compiler and can take a while to fix unfortunately. So it may take a while until I can put up basic-cli 0.7.2 with this fix.

view this post on Zulip Karakatiza (Jan 04 2024 at 14:28):

Is there a way to use basic-cli check if an endpoint is available? I hoped to use timeout for this

view this post on Zulip Anton (Jan 05 2024 at 10:24):

You can use curl -I --connect-timeout 5 YOUR_URL with Cmd.status. Cmd.status will return a successful Task ({}) if the exit code of the curl command was 0 and an Error if not.


Last updated: Jul 05 2025 at 12:14 UTC