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

Falcon not working properly locally on MacOS (m1) in forked mode #225

Open
k1r8r0wn opened this issue Mar 1, 2024 · 18 comments
Open

Falcon not working properly locally on MacOS (m1) in forked mode #225

k1r8r0wn opened this issue Mar 1, 2024 · 18 comments

Comments

@k1r8r0wn
Copy link

k1r8r0wn commented Mar 1, 2024

Hello!

When I run be falcon host & make a simple health check request I got this in .rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/pg-1.5.4/lib/pg/connection.rb:690:

Снимок экрана 2024-03-01 в 19 30 05

And then have a server restart.

When I use be falcon serve -b http:/localhost:3000, get this endless forked loop:

Снимок экрана 2024-03-01 в 19 34 31

be falcon serve -b --threaded http:/localhost:3000 works fine. No problems inside Docker even with forked mode.

ruby 3.2.2 (2023-03-30 revision e51014f9c0) [arm64-darwin22]
falcon (0.42.3)

Any thoughts, suggestions? How to correctly run the forked mode in MacOS (m1)?

Much appreciated in advance!

@k1r8r0wn k1r8r0wn changed the title Falcon not working properly locally on M1 on forked mode Falcon not working properly locally on M1 in forked mode Mar 1, 2024
@k1r8r0wn k1r8r0wn changed the title Falcon not working properly locally on M1 in forked mode Falcon not working properly locally on m1 in forked mode Mar 1, 2024
@k1r8r0wn k1r8r0wn changed the title Falcon not working properly locally on m1 in forked mode Falcon not working properly locally on MacOS (m1) in forked mode Mar 1, 2024
@ioquatix
Copy link
Member

ioquatix commented Mar 1, 2024

This can happen with some native extensions which load Objective-C. If you share the full backtrace we might be able to identify it.

Otherwise, for the sake of potentially avoiding this problem and definitely avoiding memory usage, try adding all your core gems to the preload group:

# gems.rb or Gemfile:

group :preload do
  # e.g.
  gem 'rails'
end

@k1r8r0wn
Copy link
Author

k1r8r0wn commented Mar 2, 2024

Thanks, @ioquatix for the quick reply! I've attached the example of the full trace.
trace.txt

Also tried to use group :preload - didn't help.

@ioquatix
Copy link
Member

ioquatix commented Mar 2, 2024

Make sure the pg gem is in the preload group. Can you share what your preload group contains?

@k1r8r0wn
Copy link
Author

k1r8r0wn commented Mar 2, 2024

Local core-lib gem has pg inside (also the main stack - rails, etc.), but I've also tried to install the fresh one...

Снимок экрана 2024-03-02 в 03 38 13

@k1r8r0wn
Copy link
Author

k1r8r0wn commented Mar 2, 2024

By the way - I have my db inside docker container (only the app is running locally for this case), maybe this is a reason?!

@ioquatix
Copy link
Member

ioquatix commented Mar 2, 2024

Okay, thanks, I'll try to reproduce this.

@k1r8r0wn
Copy link
Author

k1r8r0wn commented Mar 2, 2024

Thank you!

@schovi
Copy link

schovi commented Apr 16, 2024

For postgres related seg fault, sometimes following helps:

export PGGSSENCMODE="disable"

@jf
Copy link

jf commented May 16, 2024

I'm encountering the same report from falcon, except my issue has to do with rdkafka, rather than with pg.

  0.0s     info: Falcon::Command::Serve [oid=0x85c] [ec=0x870] [pid=94063] [2024-05-16 23:49:44 +0800]
               | Falcon v0.47.6 taking flight! Using Async::Container::Forked {:count=>12, :restart=>true}.
               | - Binding to: #<Falcon::Endpoint https://localhost:9292/ {}>
               | - To terminate: Ctrl-C or kill 94063
               | - To reload configuration: kill -HUP 94063
 0.04s     info: Falcon::Service::Server [oid=0x8fc] [ec=0x870] [pid=94063] [2024-05-16 23:49:44 +0800]
               | Starting server on #<Falcon::Endpoint https://localhost:9292/ {}>
objc[94074]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
objc[94074]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
 3.65s    error: Async::Container::Forked [oid=0xaf0] [ec=0xb04] [pid=94063] [2024-05-16 23:49:47 +0800]
               | pid 94074 SIGABRT (signal 6)

I am basically using https://github.com/socketry/roda-websockets/blob/main/examples/interactive_browser/config.ru, but adding this block within r.websocket to create a consumer for kafka:

          consumer = Rdkafka::Config.new(KAFKA_CONFIG).consumer
          consumer.subscribe('test-topic')

          consumer.each do |mesg|
            p msg
          end

And that's all it takes to get this error for Falcon. I wish I could resolve this easily myself... but I'm stuck

@ioquatix
Copy link
Member

I'll take a look today.

@ioquatix
Copy link
Member

ioquatix commented May 17, 2024

Do you mind telling me what version of macOS you are using?

I was not able to reproduce the issue on:

> sw_vers
ProductName:		macOS
ProductVersion:		14.4.1
BuildVersion:		23E224

@ioquatix
Copy link
Member

I created a branch with an example, can either of you check if it fails on darwin22? I'm on darwin23.

https://github.com/socketry/falcon/tree/pg-segfault

@jf
Copy link

jf commented May 18, 2024

I'm guessing I would be on darwin23 as well:

ProductName:		macOS
ProductVersion:		14.3.1
BuildVersion:		23D60

@k1r8r0wn
Copy link
Author

k1r8r0wn commented May 18, 2024

export PGGSSENCMODE="disable"

It really helped , @schovi, much appreciated!

@ioquatix
Copy link
Member

@jf are you either able to (1) upgrade the latest macOS to check if the issue goes away or (2) check the branch I gave and see if it reproduces the problem?

I'm also on a M1 MacBook Pro but I can't reproduce the issue.

@jf
Copy link

jf commented May 20, 2024

sorry, to be clear, my issue is not with pg (I havent had to use that just yet). My issue is with using rdkafka with falcon (#225 (comment)

@jf
Copy link

jf commented May 20, 2024

one suggestion if I may: you want to make it as easy as possible for folks to run your sample code.

It took a while for me to try to run the example:

  1. first up, I had to get the PG.connect parameters right (I think dbname: 'postgres' is probably a better assumption for folks' setup than dbname: 'test'?)
  2. having not much experience with falcon (really I came to falcon by way of roda-websockets, as mentioned), it took a while for me to figure out that I should be doing falcon host /path/to/example/pgfault/falcon.rb (as opposed to simply ruby /path/to/...)

It does not look like I have any issue with pg (but again, my issue is using rdkafka with falcon):

  0.0s     info: Falcon::Command::Host [oid=0x7d0] [ec=0x7e4] [pid=73820] [2024-05-20 21:12:16 +0800]
               | Falcon Host v0.47.6 taking flight!
               | - Configuration: /Users/jf/PROJS/falcon/examples/pgfault/falcon.rb
               | - To terminate: Ctrl-C or kill 73820
               | - To reload: kill -HUP 73820
#<PG::Connection:0x000000012071d6a0 host=127.0.0.1 port=5432 user=postgres>
 0.18s     info: Falcon::Service::Server [oid=0xb90] [ec=0x7e4] [pid=73820] [2024-05-20 21:12:16 +0800]
               | Starting hello.localhost on #<Falcon::ProxyEndpoint endpoint=#<IO::Endpoint::UNIXEndpoint "/Users/jf/PROJS/falcon/examples/pgfault/application.ipc">>

@schonert
Copy link

schonert commented Aug 1, 2024

@jf try setting OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES this worked for me.

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

No branches or pull requests

5 participants