Commit Graph

1365 Commits

Author SHA1 Message Date
Eric Anderson 3059b70283 Optimize protobuf serializer for in-memory transport
In-memory transport provides back the same input stream that was
provided, so if we notice our own object simply avoid serializing.

DeferredProtoInputStream is made package-private because 1) it doesn't
seem we need it to be public and 2) the change depends on it being
package-private so the constructor can be changed.
2015-07-22 15:54:39 -07:00
Eric Anderson d11e9be127 Add in-process transport
Resolves #518
2015-07-22 15:54:37 -07:00
Eric Anderson 0df3d5e72a Add ClientInterceptors "inside" ChannelImpl
Fixes #538
2015-07-22 15:49:06 -07:00
Eric Anderson 3ce15b50b2 Reverse interceptor execution order
The previous order was unintuitive as the following would execute in the
reverse order:

Channel channel;
channel = ClientInterceptors.intercept(channel, interceptor1,
                                                interceptor2);
// vs
channel = ClientInterceptors.intercept(channel, interceptor1);
channel = ClientInterceptors.intercept(channel, interceptor2);

After this change, they have equivalent behavior. With this change,
there are no more per-invocation allocations and so calling 'next' twice
is no longer prohibited.

Resolves #570
2015-07-22 15:45:58 -07:00
Carl Mastrangelo 6ca7eb33c8 Merge pull request #625 from carl-mastrangelo/eggplant
Add basic unit tests to Abstract Stream
2015-07-22 15:34:33 -07:00
Carl Mastrangelo 977c3d1c77 Merge branch 'master' of github.com:carl-mastrangelo/grpc-java 2015-07-22 15:30:30 -07:00
Carl Mastrangelo 24a9f39e46 Added basic unit test and reorg how onready calls are made
Forgot to add this last file

updated method name

Remove unused function

Remove helper function for threshold edge detection

Remove helper function for threshold edge detection

Re make listener abstract

Added copyright

removed unused field
2015-07-22 15:28:16 -07:00
Kun Zhang 8bd8ed879f Fix protobuf plugin usage in README.md
- The version of protoc should be the same as the version of
  protobuf-java that is transitively depended by grpc
- Updated protobuf-gradle-plugin example to use version 0.5.0
2015-07-22 15:25:12 -07:00
Carl Mastrangelo 7b63909caf removed unused field 2015-07-22 15:22:01 -07:00
Carl Mastrangelo fe21e2799a Added copyright 2015-07-22 15:20:30 -07:00
Carl Mastrangelo 2eaeacafe8 Added basic unit test and reorg how onready calls are made
Forgot to add this last file

updated method name

Remove unused function

Remove helper function for threshold edge detection

Remove helper function for threshold edge detection

Re make listener abstract
2015-07-22 14:45:23 -07:00
Eric Anderson f81ed8e87b Clarify/improve transport interface requirements 2015-07-22 09:30:45 -07:00
Eric Anderson 7d22c09b2c Add Call state-checking enforcement to ChannelImpl and ServerImpl
The CallImpls in ChannelImpl and ServerImpl implement the Call
interfaces; they should be the ones ensuring that inappropriate calling
of methods is handled as the interface describes.
2015-07-22 09:30:44 -07:00
Eric Anderson dff29759a7 Fix reentrancy bug in ServerImpl during shutdown
Previously if the transport shut down immediately and during the
shutdown() call, the ServerImpl would never become terminated.
2015-07-22 09:30:42 -07:00
Eric Anderson 0eae0d9264 Make DEADLINE_EXCEEDED more reliable
The client can race with the server in cancelling due to deadline. If
server cancels we don't get DEADLINE_EXCEEDED, so double-check on
client-side to reduce the chances of losing the race.

Generally we expect the client to lose the race because of coarse timer
granularity for timer expirary. This change does little to help if the
server's clock runs noticably "fast" relative to the client.
2015-07-22 09:30:41 -07:00
Eric Anderson f48bc3b3eb Specify locale for toLowerCase in Metadata 2015-07-21 16:56:00 -07:00
Xudong Ma 5cc4e84e6e okhttp: Enable TLS by default. 2015-07-21 16:30:57 -07:00
Xudong Ma e8086b5351 Support NPN fallback for Android. 2015-07-21 16:26:15 -07:00
Louis Ryan f6121165f9 Implementation of context API to allow for propagation of a limited amount of state through the
call stack and across thread boundaries.

Strongly modeled after the Go context API https://blog.golang.org/context with support for
- cancellation propagation & cancellation listeners
- typed value binding
- timeout/deadline

The major difference with Go is that ThreadLocal is used for propagation instead of parameter
passing as this is considered more idiomatic for Java.
2015-07-21 10:22:59 -07:00
Xudong Ma f9f5b6af0a okhttp: make transport.start() async. 2015-07-21 10:13:02 -07:00
Kun Zhang a6585e36ed Replace DeferredInputStream with interface Drainable.
- Rename flushTo() to drainTo().
- Remove flushTo() from DeferredNanoProtoInputStream (which is renamed
  to NanoProtoInputStream), because the optimization is not implemented.
- Rename DeferredProtoInputStream to ProtoInputStream.

 #529
2015-07-20 17:04:49 -07:00
Kun Zhang eb92967a7e Get rid of AbstractServiceDescriptor as it is no longer useful 2015-07-17 17:03:36 -07:00
Kun Zhang b80abef13f Optimize for flow-control: only request for 2 responses in unary-response cases 2015-07-17 09:09:29 -07:00
Kun Zhang d28535bb20 Fail call if more than responses received while only one is expected 2015-07-16 18:17:07 -07:00
Kun Zhang 686dcff217 Rename unaryFutureCall to futureUnaryCall 2015-07-16 12:34:37 -07:00
Kun Zhang 690b26eb93 Sanitize ClientCalls.
- Remove blockingClientStreamingCall() which is not used, and we don't
  actually want that API.
- Rename duplexStreamingCall() to asyncDuplexStreamingCall() to align
  with other async methods.
- In unary call and client streaming call, do not request for additional
  response after the first response.
2015-07-15 17:35:36 -07:00
Kun Zhang 79f3f026f2 Migrate from PARSER to parser() as a way of getting the parser of a protobuf message.
This was done by #587 (commit af9fb6de77)
but was accidentally reverted by commit 73acc73dbf.
2015-07-15 16:55:26 -07:00
Carl Mastrangelo 0003e44886 Add simple server timeout support
Reintroduce throws

Add timeoutExecutor shutdown

Use a default future

Move timeout cancellation

Cancel the timeout in error cases
2015-07-15 09:33:16 -07:00
Xudong Ma ad7820ca9b Remove OkHttpClientTransport.DEFAULT_INITIAL_WINDOW_SIZE, use Utils.DEFAULT_WINDOW_SIZE instead. 2015-07-14 17:14:20 -07:00
Jack Coughlin 3e26b993ce Enforce request deadline
Use a ScheduledExecutorService in the ChannelImpl to terminate the
request by closing the ClientStream with status DEADLINE_EXCEEDED
2015-07-14 16:47:45 -07:00
Eric Anderson ac9db3b157 Reduce flow control window for interop tests
Many of the interop tests were designed with the default 64 KB flow
control window in mind. If we test with 1 MB then it defeats the flow
control testing.

65 KB is an arbitrary number, but I chose it to be rather small, but
still not the HTTP/2-default 64 KB because implementations have had
trouble with applying flow control changes correctly.
2015-07-14 14:42:55 -07:00
Kun Zhang 867c76d185 Separate ServerCall binding utilities per method type.
This gives us more flexibility in API changes in the future.

Unary call and server streaming call should call the flow-control method
call.request() only once. Previously it was called whenever a request
arrives, which is wrong. Now it's fixed.

Resolves #436
2015-07-14 13:36:16 -07:00
Xudong Ma 9c27540a4f Support TLS for okhttp benchmark. 2015-07-14 11:16:37 -07:00
Ben McCann 652abe2f63 Simplify the build instructions now that Netty can be fetched from Maven 2015-07-09 15:29:11 -07:00
Kun Zhang c73b75e477 Change AbstractServiceDescriptor.methods() to Collection. Resolves #573 2015-07-09 14:24:51 -07:00
Carl Mastrangelo 3ee5b5a752 Try to simplify server method definition 2015-07-09 14:06:47 -07:00
Kun Zhang 73acc73dbf Remove Method and switch its users to MethodDescriptor.
Resolves #511.

- In generated code, make CONFIG private and METHOD_* fields public.
  METHOD_* fields are MethodDescriptors now, users of the CONFIG field
  should switch to using the METHOD_* fields.
- Move MethodType into MethodDescriptor (#529).
- Unify the fully qualified method name. It is fully qualified service
  name + slash + short method name. It doesn't have the leading slash.
- HandlerRegistry switches the key from short method name to fully
  qualified method name.
2015-07-09 09:29:03 -07:00
Kun Zhang 35f77ee84b Upgrade to protobuf-gradle-plugin 0.5.0 2015-07-08 16:24:59 -07:00
nmittler a6c51e7e14 Fixing some compiler warnings. 2015-07-08 16:10:54 -07:00
nmittler 8c1d38a0d8 Adding default User-Agent for netty and okhttp. 2015-07-08 15:56:54 -07:00
nmittler efbb65522b Simplifying flow control window config for Netty.
Fixes #494
2015-07-08 15:43:03 -07:00
Eric Anderson 35ff624eb2 Metadata.Key's name is non-null; don't check for null
There is a Preconditions.checkNotNull guaranteeing name is not null.
2015-07-08 15:10:02 -07:00
Eric Anderson d27cbc8aa3 Improve docs to describe close as being last method called
This isn't changing any of the semantics we already had, but more
informing users of the guarantees we provide.
2015-07-08 15:08:26 -07:00
Kun Zhang 7fff088e19 Fix a javadoc warning 2015-07-07 16:02:47 -07:00
Kun Zhang d3c5b00827 Add CallOptions.
- Pass CallOptions to Channel.newCall() and
  ClientInterceptor.interceptCall().
- Remove timeout from AbstractStub.StubConfigBuilder and add deadline,
  which is stored in a CallOptions inside the stub.
- Deadline is in nanoseconds in the clock defined by System.nanoTime().
  It is converted to timeout before transmitting on the wire. Fail the
  call with DEADLINE_EXCEEDED if it's already expired.
2015-07-07 14:28:38 -07:00
Xudong Ma 12d57974c0 Android interop test: Use proto plugin to generate the needed code. 2015-07-07 10:11:00 -07:00
Eric Anderson 30455fd2f4 Remove unused variables 2015-07-06 16:27:22 -07:00
Eric Anderson cb15779e59 Use class name, not instance, for invoking static method 2015-07-06 16:27:21 -07:00
Eric Anderson 10578e31c0 param in JavaDoc is lower-case 2015-07-06 16:27:21 -07:00
Eric Anderson 68efade3f5 Set hard-coded deadline to just under 1 year
10 years exceeds the maximum for some systems at the moment. Change to 1
year to workaround such systems while they get changed. And since "have
the default be a large number instead of not present" is a temporary fix
anyway.
2015-07-06 12:48:26 -07:00