Commit Graph

1605 Commits

Author SHA1 Message Date
Reed Allman
339cf2c9f1 Merge pull request #289 from fnproject/update-deps
remove ccirrelo/supervisor, update
2017-09-05 11:53:34 -07:00
Reed Allman
27e43c5d94 remove ccirrelo/supervisor, update
everything seems to work even though sirupsen is upper case?

:cyfap:
2017-09-05 11:36:47 -07:00
CI
78ba35fb23 fnlb: 0.0.52 release [skip ci] fnlb-0.0.52 2017-09-05 17:44:15 +00:00
CI
96979a69ed functions: 0.3.83 release [skip ci] 0.3.83 2017-09-05 17:43:02 +00:00
Reed Allman
71a88a991c hang the runner, agent=new sheriff (#270)
* fix docker build

this is trivially incorrect since glide doesn't actually provide reproducible
builds. the idea is to build with the deps that we have checked into git, so
that we actually know what code is executing so that we might debug it...

all for multi stage build instead of what we had, but adding the glide step is
wrong. i added a loud warning so as to discourage this behavior in the future.

* hang the runner, agent=new sheriff

tl;dr agent is now runner, with a hopefully saner api

the general idea is get rid of all the various 'task' structs now, change our
terminology to only be 'calls' now, push a lot of the http construction of a
call into the agent, allow calls to mutate their state around their execution
easily and to simplify the number of code paths, channels and context timeouts
in something [hopefully] easy to understand.

this introduces the idea of 'slots' which are either hot or cold and are
separate from reserving memory (memory is denominated in 'tokens' now).
a 'slot' is essentially a container that is ready for execution of a call, be
it hot or cold (it just means different things based on hotness). taking a
look into Submit should make these relatively easy to grok.

sorry, things were pretty broken especially wrt timings. I tried to keep good
notes (maybe too good), to highlight stuff so that we don't make the same
mistakes again (history repeating itself blah blah quote). even now, there is
lots of work to do :)

I encourage just reading the agent.go code, Submit is really simple and
there's a description of how the whole thing works at the head of the file
(after TODOs). call.go contains code for constructing calls, as well as Start
/ End (small atm). I did some amount of code massaging to try to make things
simple / straightforward / fit reasonable mental model, but as always am open
to critique (the more negative the better) as I'm just one guy and wth do i
know...

-----------------------------------------------------------------------------

below enumerates a number of changes as briefly as possible (heh..):

models.Call all the things

removes models.Task as models.Call is now what it previously was.
models.FnCall is now rid of in favor of models.Call, despite the datastore
only storing a few fields of it [for now]. we should probably store entire
calls in the db, since app & route configurations can change at any given
moment, it would be nice to see the parameters of each call (costs db space,
obviously).

this removes the endpoints for getting & deleting messages, we were just
looping back to localhost to call the MQ (wtf? this was for iron integration i
think) and just calls the MQ.

changes the name of the FnLog to LogStore, confusing cause there's also a
`FuncLogger` which uses the Logstore (punting). removes other `Fn` prefixed
structs (redundant naming convention).

removes some unused and/or weird structs (IDStatus, CompleteTime)

updates the swagger

makes the db methods consistent to use 'Call' nomenclature.

remove runner nuisances:

* push down registry stuff to docker driver
* remove Environment / Stats stuff of yore
* remove unused writers (now in FuncLogger)
* remove 2 of the task types, old hot stuff, runner, etc

fixes ram available calculation on startup to not always be 300GB (helps a lot
on a laptop!)

format for DOCKER_AUTH env now is not a list but a map (there are no docs,
would prefer to get rid of this altogether anyway). the ~/.docker/cfg expected
format is unchanged.

removes arbitrary task queue, if a machine is out of ram we can probably just
time out without queueing... (can open separate discussion) in any case the
old one didn't really account well for hot tasks, it just lined everyone up in
the task queue if there wasn't a place to run hot and then timed them out
[even if a slot became free].

removes HEADER_ prefixing on any headers in the request to a invoke a call.
(this was inconsistent with cli for test anyway)

removes TASK_ID header sent in to hot only (this is a dupe of FN_CALL_ID,
which has not been removed)

now user functions can reply directly to the client. this means that for
cold containers if they write to stdout it will send a 200 + headers. for
hot containers, the user can reply directly to the client from the container,
i.e. with its preferred status code / headers (vs. always getting a 200).
the dispatch itself is a little http specific atm, i think we can add an
interchange format but the current version is easily extended to add json for
now, separate discussion. this eliminates a lot of the request/response
rewriting and buffering we were doing (yey). now Dispatch ONLY does input and
output, vs. managing the call timeout and having access to a call's fields.

cache is pushed down into agent now instead of in the front end, would like to
push it down to the datastore actually but it's here for now anyway. cache
delete functions removed (b/c fn is distributed anyway?). added app caching,
should help with latency.

in general, a lot of server/runner.go got pushed down into the agent. i think
it will be useful in testing to be able to construct calls without having to
invoke http handlers + async also needs to construct calls without a handler.

safe shutdown actually works now for everything (leaked / didn't wait on
certain things before)

now we're waiting for hot slots to open up while we're attempting to get ram
to launch a container if we didn't find any hot slots to run the call in
immediately. we can change this policy really easily now (no more channel
jungle; still some channels). also looking for somewhere else to go while the
container is launching now. slots now get sent _out_ of a container, vs.
a container receiving calls, which makes this kind of policy easier to
implement. this fixes a number of bugs around things like trying to execute
calls against containers that have not and may never start and trying to
launch a bazillion containers when there are no free containers. the driver api
underwent some changes to make this possible (relatively minimal, added Wait).
the easiest way to think about this is that allocating ram has moved 'up'
instead of just wrapping launching containers, so that we can select on a
channel trying to find ram.

not dispatching hot calls to containers that died anymore either...

the timeout is now started at the beginning of Submit, rather than Dispatch or
the container itself having to manage the call timeout, which was an
inaccurate way of doing things since finding a slot / allocating ram / pulling
image can all take a non-trivial (timeout amount, even!) amount of time. this
makes for much more reasonable response times from fn under load, there's
still a little TODO about handling cold+timeout container removal response
times but it's much improved.

if call.Start is called with < call.timeout/2 time left, then the call will
not be executed and return a timeout. we can discuss. this makes async play
_a lot_ nicer, specifically. for large timeouts / 2 makes less sense.

env is no longer getting upper cased (admittedly, this can look a little weird
now). our whole route.Config/app.Config/env/headers stuff probably deserves a
whole discussion...

sync output no longer has the call id in json if there's an error / timeout.
we could add this back to signify that it's _us_ writing these but this was
out of place. FN_CALL_ID is still shipped out to get the id for sync calls,
and async [server] output remains unchanged.

async logs are now an entire raw http request (so that a user can write a 400
or something from their hot async container)

async hot now 'just works'

cold sync calls can now reply to the client before container removal, which
shaves a lot of latency off of those (still eat start). still need to figure
out async removal if timeout or something.

-----------------------------------------------------------------------------

i've located a number of bugs that were generally inherited, and also added
a number of TODOs in the head of the agent.go file according to robustness we
probably need to add. this is at least at parity with the previous
implementation, to my knowledge (hopefully/likely a good bit ahead). I can
memorialize these to github quickly enough, not that anybody searches before
adding bugs anyway (sigh).

the big thing to work on next imo is async being a lot more robust,
specifically to survive fn server failures / network issues.

thanks for review (gulp)
2017-09-05 20:32:51 +03:00
CI
1b1b64436f fnlb: 0.0.51 release [skip ci] fnlb-0.0.51 2017-09-01 23:03:13 +00:00
CI
5092d4344b functions: 0.3.82 release [skip ci] 0.3.82 2017-09-01 23:01:56 +00:00
Chad Arimura
bc950c2cbd Merge pull request #273 from fnproject/docker-rt
add 'docker' runtime to doc function-file.md
2017-09-01 15:50:08 -07:00
amykang2020
9a58970551 wording edit 2017-09-01 15:22:33 -07:00
amykang2020
96c7278b61 spacing edit 2017-09-01 14:51:16 -07:00
amykang2020
e9ee6aa6dd minor adjustment in wording 2017-09-01 14:19:51 -07:00
amykang2020
1df569be1a doc update 2017-09-01 14:16:49 -07:00
amykang2020
a566a958ca adjust wording 2017-09-01 12:05:23 -07:00
amykang2020
991fb1b1a2 doc minor edit 2017-09-01 12:01:21 -07:00
amykang2020
ca6cf1c7d5 add 'docker' runtime to doc 2017-09-01 11:57:43 -07:00
CI
1e56838a4d fnlb: 0.0.50 release [skip ci] fnlb-0.0.50 2017-08-31 21:29:40 +00:00
CI
52e7a8694e functions: 0.3.81 release [skip ci] 0.3.81 2017-08-31 21:28:30 +00:00
Travis Reeder
4de59c63ad WIP: Updating docs (#233)
* Fixed bad link

* Update README.md
2017-08-31 14:17:20 -07:00
CI
6e8916400b fnlb: 0.0.49 release [skip ci] fnlb-0.0.49 2017-08-31 18:19:09 +00:00
CI
7cba1c0dca functions: 0.3.80 release [skip ci] 0.3.80 2017-08-31 18:17:55 +00:00
Reed Allman
75ae5e5e5c sort env var keys before making a key. doh (#269) 2017-08-31 11:06:05 -07:00
CI
fca0d21731 fnlb: 0.0.48 release [skip ci] fnlb-0.0.48 2017-08-30 19:58:44 +00:00
CI
2a3041a6ca functions: 0.3.79 release [skip ci] 0.3.79 2017-08-30 19:57:26 +00:00
Travis Reeder
2040209a90 Updated to api version 0.1.30 0.1.30 2017-08-30 12:45:48 -07:00
CI
ac87f52c1b fnlb: 0.0.47 release [skip ci] fnlb-0.0.47 2017-08-29 16:16:40 +00:00
CI
83ced67310 functions: 0.3.78 release [skip ci] 0.3.78 2017-08-29 16:15:16 +00:00
CI
4b6f58f075 fnlb: 0.0.46 release [skip ci] fnlb-0.0.46 2017-08-29 16:13:24 +00:00
CI
22abe0dbe5 functions: 0.3.77 release [skip ci] 0.3.77 2017-08-29 16:12:05 +00:00
Travis Reeder
eeec746ca2 Dropped the docker owner from function name. 2017-08-29 09:02:02 -07:00
David Delabassee
b6bcb9cb01 Set runtime to 'java' to have the pom.xml created (#217)
When the runtime is ['assumed'](11b5c4ce67/cli/init.go (L182-L188)) (i.e. not explicitly set to 'java'), the [pom.xml isn't created(85ae711447/cli/langs/java.go (L38-L45)) 
and [init fail](85ae711447/cli/langs/java.go (L99-L101)).
2017-08-29 08:59:53 -07:00
CI
9e24f8227e fnlb: 0.0.45 release [skip ci] fnlb-0.0.45 2017-08-25 22:40:41 +00:00
CI
c8679d5e46 functions: 0.3.76 release [skip ci] 0.3.76 2017-08-25 22:39:21 +00:00
Chad Arimura
9e6ee618b8 see if commits mirroring 2017-08-25 15:27:12 -07:00
CI
6d71803929 fnlb: 0.0.44 release [skip ci] fnlb-0.0.44 2017-08-24 22:56:52 +00:00
CI
32858c2649 functions: 0.3.75 release [skip ci] 0.3.75 2017-08-24 22:55:32 +00:00
CI
cd1eb03f3d fnlb: 0.0.43 release [skip ci] fnlb-0.0.43 2017-08-24 22:36:53 +00:00
CI
23650da74e functions: 0.3.74 release [skip ci] 0.3.74 2017-08-24 22:35:32 +00:00
Travis Reeder
caa18ea1cb Fix fnlb image name 2017-08-24 15:23:15 -07:00
CI
602232a64d fnlb: 0.0.42 release [skip ci] fnlb-0.0.42 2017-08-24 22:03:15 +00:00
CI
3f069b3041 functions: 0.3.73 release [skip ci] 0.3.73 2017-08-24 22:01:54 +00:00
CI
6c27efe02d functions: 0.3.72 release [skip ci] 0.3.72 2017-08-24 21:43:00 +00:00
James Jeffrey
a149a8e5ef Merge pull request #252 from fnproject/dep-derp2
Big dependency update, all lowercase sirupsen's for all dependencies.
2017-08-24 14:30:45 -07:00
Travis Reeder
6549da6039 Trying to get rid of conflicts for huge merge 2017-08-24 13:54:38 -07:00
CI
64bba960bf functions: 0.3.71 release [skip ci] 0.3.71 2017-08-24 20:23:12 +00:00
Travis Reeder
6eca280892 Get version past tags on github 2017-08-24 13:14:02 -07:00
CI
981eb8c90d functions: 0.3.66 release [skip ci] 2017-08-24 18:48:28 +00:00
CI
49fd7b631d functions: 0.3.65 release [skip ci] 2017-08-24 18:36:12 +00:00
James Jeffrey
6c5d4c8b8f Merge pull request #254 from fnproject/remove-cli
Remove cli dir
2017-08-24 11:26:56 -07:00
James Jeffrey
9572311070 Merge pull request #249 from fnproject/slack
Added slack link
2017-08-24 11:25:52 -07:00
Travis Reeder
d597e4815e Remove cli dir 2017-08-24 07:45:46 -07:00