Commit graph

165 commits

Author SHA1 Message Date
Travis Athougies
26dc36dc64 GADT-based high level interface 2016-11-17 16:00:07 -08:00
Phil Freeman
507edf803f Merge pull request #74 from awakenetworks/phil/host-option
Add host option to high-level API
2016-10-27 13:53:04 -07:00
Phil Freeman
950f4cdefa Add host option to high-level API 2016-10-26 14:43:11 -07:00
Connor Clark
a12e5ae8a0 update bounds for GHC 8 (#73) 2016-10-24 14:25:08 -07:00
Connor Clark
d18d3251e8 fix up benchmarks to run with latest changes (#72) 2016-08-26 10:21:59 -07:00
Connor Clark
01fac2d5a6 add option to set logging function (#71)
* add option to set logging function

* Add documentation to ServerOptions
2016-08-17 14:12:22 -07:00
Connor Clark
3366dde7ab Connor/security (#68)
* begin security bindings

* secure channel creation

* SSL credentials support

* add client-side ssl support

* ssl test

* read file before passing to channel credentials, free credentials when done creating

* use localhost key/cert for test

* WIP sketch of callbacks for metadata plugins

* conversion from Haskell auth processor to C

* add test for custom server metadata auth processor

* wip auth failure test

* rebase tweak

* working test of custom auth metadata server processor

* improve security docs, clean up

* add unsafe layer client-side auth metadata plugin functionality

* add client config option for custom auth metadata

* WIP client-side metadata auth plugin. Crashing when calling C callback.

* get initial version of client-side metadata plugins working

* replace String with ByteString in a few places, add function for getting AuthProperty

* AuthContext utilities and more documentation

* end-to-end test of client and server auth plugins

* remove redundant tests

* function for parents in unary calls, add deactivated failing test for auth metadata propagation from parent to child

* some cleanup

* tweaks

* more tweaks

* remove unused file

* docs tweak

* consolidate exports

* update protobuf-wire commit
2016-08-17 09:55:06 -07:00
Connor Clark
b9b548d8eb Fix metadata marshalling bug, add QuickCheck properties (#63)
* make metadatamap a newtype of multimap

* update tests for new MetadataMap

* remove multimap dependency, reproduce needed functionality instead

* add repeated key to payload test

* QuickCheck properties for C bindings, fix bug in metadata FFI wrappers

* add quickcheck bound

* fix merge
2016-08-17 09:54:46 -07:00
Connor Clark
d6fb5df411 Update README.md
Add homebrew instructions
2016-08-15 17:24:00 -07:00
Joel Stanley
096d399b30 MONAPP-1035: Fix errant hang on metadata exchange in Haskell client-side bidirectional streaming (#70)
* (wip) Change ClientRWHandler to use an IO action for metadata acqui

* Demonstrate placement of WaitForInitialMetadata() in hellos_client

* Make hellos cpp server always send metadata first, for now

* Show getMD placement in haskell hellos-client

* Add prelim bidi metadata exchange behavior tweaks to line up with C++ API conventions
2016-08-15 12:55:40 -05:00
Joel Stanley
a5614befe3 More reuse between unregistered and registered LL server functions (#67) 2016-08-10 16:38:58 -05:00
Joel Stanley
d7b00ac054 Fix race condition while tracking outstanding handler threads (#66)
* Demonstrate shutdown concurrency bug via unregistered server streaming test

* Comments, cleanup

* Remove extraneous liftIOs from low level tests
2016-08-10 16:14:41 -05:00
Phil Freeman
d618b90481 Merge pull request #65 from awakenetworks/0.15.1-instructions
Update GRPC instructions for 0.15.1
2016-08-09 11:12:23 -07:00
Phil Freeman
f2fa230294 0.15.* 2016-08-09 11:03:19 -07:00
Phil Freeman
bd0e56af94 Update GRPC instructions for 0.15.1 2016-08-09 11:02:46 -07:00
Joel Stanley
9408745254 Streaming interface tweaks (i.e., StreamSend/Recv ops in IO) (#58)
* Add clientRW', StreamRecv', StreamSend' placeholders for IO-based stream ops (instead of Streaming); concurrent hellos Haskell client; hellos client cleanup

* Fix typo

* Rename clientRW' => clientRW; fix unreg bidi testcase

* Replace serverRW operation with one that uses the IO-based stream ops instead of the Pipes.Proxy.Client ops; modify examples accordingly

* Misc formatting, minor restructuring wibbles

* Replace remaining stream send/recv operations with IO-based ops instead of
Pipes.Proxy.Client; DCR; minor style consistency tweaks.
2016-08-09 11:30:47 -05:00
Connor Clark
d66a4f98b3 Update to gRPC 0.15 (#61)
* update channel arg names, add compression level arg support, add compression level arg test

* switch to temp test demonstrating bug in grpc 0.15.0

* memset op array to 0

* switch examples back

* Switch to newer `grpc` and enable tests in `release.nix`

* Split out `simple-server` test into separate shell script

* Fix bash invocation

* Add intermediate `./default-tests.nix` build

* Add `tests.patch` to version control

* Split `python` command into separate script

* Provide `python` via `nix`
2016-08-05 09:29:20 -07:00
Gabriel Gonzalez
f9f59f2362 Fix gRPC-haskell Jenkins build (#64)
We now have Jenkins enabled for `gRPC-haskell` which verifies that
`nix-build release.nix` passes for each pull request.

`master` currently doesn't build, and this is the first pull request to fix the
build by adding the recently introduced `sorted-list` dependency to the `nix`
build.  This was done by running `cabal2nix . > default.nix` and also adding a
newer version of `sorted-list` to the `release.nix` file.  `nixos-16.03`
uses an older version of `sorted-list` which doesn't have an `IsList` instance for
`SortedList`.
2016-08-03 11:47:52 -07:00
Connor Clark
f3ecb06194 Update README.md 2016-08-02 14:37:56 -07:00
Connor Clark
f8bbe3abd2 Connor/metadata improvements (#52)
* make metadatamap a newtype of multimap

* update tests for new MetadataMap

* remove multimap dependency, reproduce needed functionality instead

* add repeated key to payload test

* bump LTS version for sorted-list, use SortedList for MetadataMap

* remove unneeded conversion

* MetadataMap documentation

* minor fixes
2016-08-01 12:38:35 -07:00
Gabriel Gonzalez
50ece70720 Add release.nix build instructions (#60)
The purpose of this is two-fold:

* To demonstrate an example of how to build the repository (which is non-trivial
  due to the `grpc` dependency)
* To eventually be used within CI (via `nix-build release.nix`)
2016-08-01 10:02:23 -07:00
Connor Clark
bd2c4092de use c99 (#62) 2016-07-29 14:54:03 -07:00
Connor Clark
bf4166e618 remove duplicated threadDelaySecs function (#56) 2016-07-29 13:18:08 -07:00
Phil Freeman
d1bc87daa6 Merge pull request #57 from awakenetworks/nix
Add cabal2nix derivation
2016-07-27 17:23:46 -07:00
Connor Clark
5a23c9ae90 make serverLoop blocking again (#59) 2016-07-27 16:50:48 -07:00
Phil Freeman
7be33c2792 Relax bounds 2016-07-27 15:41:50 -07:00
Phil Freeman
770dd735f3 Add cabal2nix derivation 2016-07-27 14:01:57 -07:00
Connor Clark
0d70a6c960 Criterion benchmarks (#50)
* begin bench executable

* tweak benchmark, fork serverLoop for interruptibility

* client streaming benchmarks

* add server streaming handler

* server streaming benchmark

* bidi streaming benchmark

* cleanup, create benchmark html

* improve error messages

* benchmarks: add bounds, remove -g, add -O2

* eliminate explicit sleep at shutdown

* bump protobuf-wire version

* remove superfluous parens, remove benchmarks.html
2016-07-26 15:48:25 -07:00
Joel Stanley
c1fa7956c7 "Hellos" C++/Haskell programs for exercising interop for streaming modes (#49)
* Hellos example: skeleton and server-streaming mode use

* Catch IO exceptions in dispatchLoop

* Distinguish decoding errors from other errors; convert error calls to explicit throws of GRPCIOErrors

* instance Exception GRPCIOError

* Add error checks and error messages to hellos cpp client

* Change fixed32 to uint32

* Add prelim hellos-client, hellos-server executables

* Hellos cpp example: add client-streaming mode use

* In unregistered high-level server, aggressively catch all exceptions raised in
handlers and promote then to a new GRPCIOError constructor.

* Hellos hs example: add client-streaming mode use

* Hellos cpp example: add simple bidi mode use

* Hellos hs example: add simple bidi mode use

* wibbles

* Add GRPCIOErrorEq newtype wrapper w/ Eq instance for testing purposes

* Refactoring wibbles

* README wibbles

* DCR

* Fix rebase derp

* Remove libdl dep, update protobuf github link in hellos cpp Makefile.

* Use Data.Coerce.coerce for GRPCIOErrorEq; remove warnings

* Report expected/got errors in Haskell hellos client/server

* Report expected/got errors in cpp hellos client/server

* Add some instructions for running the hellos client/server

* Fix warnings

* Rename logShow to logMsg and use stderr for logging

* Tweak compliation parameters for hellos hs executables; increase constant workload

* Remove unnecessary type annotation

* Simplify handleError in dispatchLoop

* Remove GRPCIOErrorEq and coerce use; change GRPCIOHandlerException type
2016-07-26 15:21:35 -07:00
Connor Clark
b3d0b8a4a7 high-level server: add initial metadata to options (#53) 2016-07-26 13:16:44 -07:00
Phil Freeman
334e78de27 Merge pull request #55 from awakenetworks/grpc-notes
Add GRPC build instructions to readme
2016-07-26 12:36:08 -07:00
Phil Freeman
1eda308a05 Add GRPC build instructions to readme 2016-07-26 12:05:56 -07:00
travis
89aa17b5e6 Added tests for grpc server generation 2016-07-26 11:22:42 -07:00
Travis Athougies
1d7526da70 Added tests for grpc server generation 2016-07-25 16:39:25 -07:00
Connor Clark
86bad965ce fix ifdef indentation (#51) 2016-07-22 14:29:05 -07:00
Connor Clark
ab4dea344d Server performance and stability improvements (#48)
* concurrent echo client for stress testing

* update examples for benchmarking, tweak cabal file

* mark frequently-used call as unsafe for performance boost

* add unsafe annotation to non-blocking C calls on critical path

* more unsafe annotations -- server performance almost doubled now

* one CQ for all call ops

* unsafe annotation on start_batch

* wait for all client threads, replace error with fail

* add -O2
2016-07-21 12:55:16 -07:00
Connor Clark
7409263957 update protobuf lib versions (#44) 2016-07-21 11:11:49 -07:00
Connor Clark
a34107b740 add new module to exposed-modules (#47) 2016-07-20 11:34:39 -07:00
Connor Clark
cc5d30acd2 Travis/service generation (#46)
* higher bound on clock versions

* Added helper module for generated service code
2016-07-20 11:26:53 -07:00
Connor Clark
65026eb79c Fix async race causing crash on server shutdown (#43)
* clean up forked threads before shutting down server

* get rid of sleep, wait until all forked threads are dead to shutdown server

* add todo
2016-07-18 11:04:01 -05:00
Connor Clark
99e6f0652d fix up handler type, tweak ServerCall record names (#42)
* fix up handler type, tweak ServerCall record names

* remove ' from handler types, use LL suffix for low-level handlers

* fix all build warnings
2016-07-14 16:33:56 -07:00
Connor Clark
e4a28e9e4b High-level unregistered concurrent interface (#41)
* remove parent ptr from unregistered calls -- unneeded

* begin unregistered high level server loop

* undo changes to highlevel server, add mkConfig for unregistered server

* move call CQ create/destroy into call create/destroy

* async normal call function

* preliminary unregistered server loop for non-streaming methods

* working unregistered highlevel example

* loop counters for benchmarking

* changes for benchmarking, add ruby example server for benchmarking

* async version of withCall, refactor unregistered server loop to handle all method types

* unregistered client streaming

* add remaining streaming modes

* unregistered server streaming test

* unregistered streaming tests

* add error logging

* fix bug in add example

* remove old TODOs

* fix bug: don't assume slices are null-terminated

* add TODO re: unregistered client streaming functions
2016-07-14 09:53:28 -07:00
Connor Clark
9113e416e7 Joel/highlevelv2 (#40)
* Tweak runOps param order, inline common op sequences, clean up serverHandleNormalCall

* More ops sequence inlining for clarity, experimenting with Managed

* Checkpoint: preliminary support for all streaming modes; much cleanup/refactoring and api design still needed

* Use mempty for default StatusDetails; tweak bad status matching mechanism

* Preliminary user-facing, server-streaming, low-level api and test

* renaming wibbles

* Preliminary user-facing, client-streaming, low-level api and test

* Move sendMsgs comb to Network.GRPC.LowLevel.Op; misc cleanup/DCR

* Modify bidi streaming to omit request payload

* Add transformers dep

* Preliminary user-facing low-level bidirectional streaming api and test

* Fix missing peek import

* Remove TimeoutSeconds params on streaming mode functions

* Fix serverHandleNormalCall rebase wart

* Fix rebase warts; minor hlint fixes and wibbles

* Post-rebase tweaks to optional payload use in serverRequestCall (i.e., now respects payloadHandling again)

* Cleanup/refactor serverRequestCall

* Fix comment

* Change ServerRWHandler type so that handler does not have to invoke a finalizer

* Change ServerReaderHandler type so that handler does not have to invoke a finalizer

* Simplify serverWriter interface and ServerWriterHandler structure

* Simplify serverRW (get rid of exec param), improve bidi streaming tests

* Use ExceptT in serverRW impl

* Change ServerRWHandler type to pass recv/send operations.

* Renaming

* Define ClientRWHandler, pass recv/send ops

* wibbles

* Use ExceptT in clientRW impl

* Add DataKinded phantom typing to RegisteredMethod; misc cleanup

* Simplify sendMsgs interface; add SingleSend type and related helpers

* Rename SingleSend to SendSingle, use ExceptT to clean up {client,server}Writer and sendMsgs

* More ExceptT cleanup in clientWriter

* Factor out reusable bits of clientWriter

* Shrink ServerReaderHandler

* Delete stale comments

* begin high-level server interface

* update to datakind representation

* clean up

* move method type info to type level, parametrize ServerCall by payload

* convert for writer handler

* start switching over to Message-based handlers

* begin work on highlevel example

* comment out old code

* parametrize StreamSend

* parametrize StreamRecv

* conversion for ServerReaderHandler

* finish handler conversions

* Add high level version and payload checking to echo-client

* Decouple server CQs from call-bound CQs (registered methods); use more consistent naming conventions

* Decouple server/call-bound CQs for unregistered methods; refactor U.serverRequestCall; misc cleanup

* Make convertRecv total; formatting wibbles
2016-07-12 11:28:21 -07:00
Joel Stanley
2c2c817ad8 Fix botched merge 2016-07-11 15:20:00 -05:00
Joel Stanley
84dc076a64 Merge branch 'joel/bugfix/server-request-registered-call-pluck-permission' 2016-07-11 15:13:55 -05:00
Joel Stanley
d24f69176b Merge branch 'master' into joel/bugfix/server-request-registered-call-pluck-permission
Conflicts:
	src/Network/GRPC/LowLevel/CompletionQueue.hs
2016-07-11 15:13:34 -05:00
Connor Clark
b7a02a63e7 Fix Linux tests (#38)
* fix debug mode

* handle deadline differently depending on OS

* remove unneeded tests
2016-07-11 11:20:13 -07:00
Joel Stanley
4ae3936ac9 Apply same pluck permission region fix to unregistered serverRequestCall 2016-07-11 12:53:19 -05:00
Joel Stanley
ca1d5a7205 minor tweaks to withPermission 2016-07-10 17:28:10 -05:00
Joel Stanley
a0a14dd7d8 debug wibbles 2016-07-10 17:19:35 -05:00