Code Monkey home page Code Monkey logo

Comments (12)

alexellis avatar alexellis commented on May 31, 2024

Hi thanks for the question. You get a graceful shutdown period built-in. This gives any HTTP requests a grace period to shut down (you should be able to read about this in the readme)

The period is connected to write_timeout which I see you may not be specifying correctly at present. A Golang duration is needed i.e. 20s.

from of-watchdog.

alexellis avatar alexellis commented on May 31, 2024

Derek add label: question

from of-watchdog.

hejfelix avatar hejfelix commented on May 31, 2024

What I'm thinking about is a hook whenever a container is taken out of commission (e.g. scale to 0, function removed, etc.). Having a warm JVM means that collecting/releasing resources on each invocation seems a bit silly, so it would be nice to know when the resources MUST be released.

from of-watchdog.

hejfelix avatar hejfelix commented on May 31, 2024

Are you saying it does indeed forward SIGTERM to the fprocess?

from of-watchdog.

alexellis avatar alexellis commented on May 31, 2024

Hi @hejfelix I would be curious as to what Lambda, Google Functions or Azure Functions do in this scenario. If they do pass on SIGTERM then we should investigate it.

Alex

from of-watchdog.

alexellis avatar alexellis commented on May 31, 2024

Kubernetes has a rather complicated shutdown procedure regarding health-checks which does not make things easy. cc @LucasRoesler @stefanprodan

from of-watchdog.

hejfelix avatar hejfelix commented on May 31, 2024

My experience with AWS Lambda was that there was no shutdown hook. This essentially meant that I wasted a lot of time acquiring and releasing resources on every invocation. This defeats the purpose of having a warm function.

from of-watchdog.

LucasRoesler avatar LucasRoesler commented on May 31, 2024

There are a couple of things that happen during shutdown in a k8s pod

  1. the Pod is marked as terminated/deleted, this also removes it from various Endpoints and Services in k8s
  2. the preStopHook is executed, this allows the Pod to respond to and customize the stop behavior. But ... this is not something we support configuration of
  3. SIGTERM is sent to the Pod
  4. when the grace period expires, SIGKILL is sent. The grace period defaults to 30 seconds and can be customized on the Pod spec via terminationGracePeriodSeconds

By far the simplest thing we could do is to listen for and send the SIGTERM to the child process. Which should already be happening (this is the relevant chunk of code that sends the TERM to the fprocess in http mode)

In short, a quick review of the code looks like it is trying to send the TERM signal to the fprocess, in this case the JVM.

from of-watchdog.

hejfelix avatar hejfelix commented on May 31, 2024

Interesting -- I am running on docker swarm in all my tests so far. Is that supposed to behave the same way? I guess I'm struggling to find a way to verify that my shutdown hook is run since nothing appears in docker service logs after node is taken down. Any ideas?

from of-watchdog.

LucasRoesler avatar LucasRoesler commented on May 31, 2024

Probably the simplest way to verify it is to send a message somewhere, e.g. to RequestBin . If you are certain that your shutdown hook runs on SIGTERM and If you don't get a message, then that means you didn't get a SIGTERM

from of-watchdog.

hejfelix avatar hejfelix commented on May 31, 2024

Right, so I'm not getting any shutdown hook. This is my scala code:

  Runtime.getRuntime().addShutdownHook(new Thread(){
    override def run(): Unit = Source.fromURL(s"http://requestbin.fullcontact.com/wrh63owr/SHUTDOWN_HOOK_SUCK_IT_LAMBDA_${Random.nextInt}").toList
  } )

If I run this line e.g. in the REPL, it works:

Source.fromURL(s"http://requestbin.fullcontact.com/wrh63owr/SHUTDOWN_HOOK_SUCK_IT_LAMBDA_${Random.nextInt}").toList

from of-watchdog.

hejfelix avatar hejfelix commented on May 31, 2024

Im starting to believe the problem occurs because my web framework is not reacting to sigterm. Will investigate now and return.

from of-watchdog.

Related Issues (20)

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.