Commit Graph

6625 Commits

Author SHA1 Message Date
lryan a7d735e69b Phase 2 of converting to new Headers mechanism for side-channel.
Remove 'context' from interfaces/tests/framers/...

Next phases
- Switch the wire format (ESF needs to be done in near lock-step)
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=75164642
2015-01-08 14:42:43 -08:00
lryan e4bd1c7d69 Phase 1 of converting to new Headers mechanism for side-channel.
Introduces Header and uses it for propagating text-only header values over existing transports
Leaves Context & wire format otherwise unchanged

Next phases
- Remove context from interfaces
- Switch the wire format (ESF needs to be done in near lock-step)

Interface changes are relatively light
Headers class is functional but not optimal
All serialization is done as string until transports expose interface for binary headers
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=75050265
2015-01-08 14:42:43 -08:00
ejona 23ac15a8ba Use String instead of MethodDescriptor in ServerCallHandler.
Using MethodDescriptor before was abusive, but the alternative was not
clear.

The new gRPC protocol causes things to become more obvious. Headers,
method name, and timeout were the interesting things on the
MethodDescriptor. In the new protocol, headers are no longer going to be
treated differently from context. We are fine with passing the method
name. So that leaves just timeout, which we really will need more
methods for on the ServerCall object anyway.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74889759
2015-01-08 14:42:42 -08:00
simonma 8f3e9eede7 Remove usage of ImmutableXX collectors from calsses that GRpc Android version will care.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74880326
2015-01-08 14:42:42 -08:00
simonma 18eb63bc16 Remove dependencies on Google common internal:
1. logging.FormattingLogger, change to use java.util.logging.Logger.
2. util.concurrent.SerializingExecutor, make a copy to our code base.
3. io.ByteBuffers, not needed anymore.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74803598
2015-01-08 14:42:41 -08:00
ejona 92938d1b06 Mimic MethodDescriptor in ServerMethodDefinition when serializing messages.
There is little use in providing the Marshallers directly from the
Definition.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74790187
2015-01-08 14:42:41 -08:00
ejona 8b23526c31 Correct tense of ServerCall.Listener.onCompleted().
The rest of the methods are present tense, so onComplete() is more
appropriate than onCompleted().
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74703245
2015-01-08 14:42:41 -08:00
nathanmittler 43d2fcc664 Adding inbound flow control to Netty client and server transports.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74444530
2015-01-08 14:42:40 -08:00
zhangkun 048649e5e4 Implements the netty-based server transport.
Interface changes
- Moves halfClose() from Stream to ClientStream, because it's only valid on the
client and ServerStream already has close().

Implementation details
- Splits the cient-specific logic from AbstractStream and forms
AbstractClientStream.
- Creates AbstractServerStream for server-specific logic
- Creates NettyServerHandler which is the server counterpart of NettyClientHandler
- Refactors NettyClientHandlerTest and NettyClientStreamTest to share code with
NettyServerHandlerTest and NettyServerStreamTest
- Updated NettyServer to work with the transport.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74347890
2015-01-08 14:42:40 -08:00
ejona 4e315e0110 Fix more transport error and shutdown scenarios.
Previously, if the active transport had failed but there were still other running transports, we would claim to be shutdown before we actually were (and would end up calling notifyStopped twice).

Also, if a transport immediately failed during startup, we could end up setting activeTransport to the already-failed transport, which meant we would perpetually try to use that broken transport.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74339777
2015-01-08 14:42:39 -08:00
ejona 4a3b5d1edd Fix possible NPE when starting a transport fails before startAsync() returns.
transportFailedOrStopped() sets activeTransport to null, but
obtainActiveTransport expected it to be non-null because it just set it.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74264310
2015-01-08 14:42:39 -08:00
nathanmittler e081a2290b Updates to GRPC code resulting from Netty upgrade.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74249351
2015-01-08 14:42:39 -08:00
simonma b645b38a6a Fix a NPE, Http20Draft12 requires non-null debugData for FrameWriter.goAway().
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=74143304
2015-01-08 14:42:38 -08:00
ejona 070e308763 Have stricter dependencies and build in modules.
This is useful in making sure we don't have stray dependencies and brings us closer to compiling for platforms like Android. We can now remove unwanted dependencies one module at a time, or get individual modules to build on Android.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73849551
2015-01-08 14:42:38 -08:00
ejona 7a2d8df753 Move OAuth integration to third_party.
It should have been in third_party to begin with.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73826831
2015-01-08 14:42:38 -08:00
ejona 603959e640 Remove unused ByteBufDeframer.
It was previously replaced by the new deframer.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73750795
2015-01-08 14:42:37 -08:00
ejona 3184bb8fec Fix all the generics! (in ServerInterceptorsTest)
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73670835
2015-01-08 14:42:37 -08:00
ejona 886f40d8b7 Add missing generics for ServerMethodDefinition in ServerServiceDefinition.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73663037
2015-01-08 14:42:37 -08:00
ejona 290d657dc4 Remove unnecessary Generic parameters from ServerCall.
The client Call needs both parameters because it containts start(), but
ServerCall doesn't actually have that same need.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73662252
2015-01-08 14:42:37 -08:00
nathanmittler 42af07c64d Upgrade GRPC Java/Netty to HTTP/2 draft 14.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73648766
2015-01-08 14:42:36 -08:00
ejona 34aede347a Move inner classes out of Server.
This is only a move with appropriate code changes to use the new class
names. The only functional change was changing the visibility of
MethodDefinition's constructor to package-private so ServiceDefinition
could construct it.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73569974
2015-01-08 14:42:36 -08:00
ejona ba71ee91bf Swap Server from Builder to HandlerRegistry.
The idea is that Server would be provided a HandlerRegistry at construction time.

This has a simplistic implementation of HandlerRegistry. If we like the API, then I can implement a lock-less version as we find need.

Most classes are still under Server so that it is obvious what changes were made. Moving things out of Server would be a separate CL.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73334671
2015-01-08 14:42:36 -08:00
nathanmittler 64eae04d14 Refactoring Deframing code for Netty.
- New Decompressor interface with NettyDecompressor impl. This is responsible for unpackaging and uncompressing the GRPC compression frame.

- New class GrpcDeframer. This is a transport-agnostic class that uses a Decompressor to unpackage the compression frame, and then reads one complete GRPC frame and notifies the listener.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=73068835
2015-01-08 14:42:35 -08:00
zhangkun e1ae25c8c4 Makes the Status-generated exceptions contain the status code.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72950983
2015-01-08 14:42:35 -08:00
angusdavis 1a87ab2909 Rollforward of 72928317 with fixes to grpc_java_external.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72934580
2015-01-08 14:42:35 -08:00
simonma 1966d5b7f3 Make sure Stream.cancel() can be called multiple times.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72928049
2015-01-08 14:42:34 -08:00
simonma f2c4c8555a Update integration tests.
1. Use okhttp client transport for okhttp tests.
2. Utilize GrpcClient to construct channel according to the transport type.
3. Remove the unused middle layer abstract tests after above changes.

-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72732333
2015-01-08 14:42:34 -08:00
zhangkun c7d33bf3c8 Define threading expectation for Stream
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72590025
2015-01-08 14:42:34 -08:00
ejona 621706aa03 Add basic OAuth support to gRPC.
The primary functionality is an interceptor that authenticates calls using oauth. However, most of the changes are for an integration test to make sure the code works with ESF.

This is based on work by lryan and simonma.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72567773
2015-01-08 14:42:33 -08:00
nathanmittler 88efcaf15c Adding CompositeBuffer and a few other utilties related to Buffers.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72268003
2015-01-08 14:42:33 -08:00
nathanmittler bd56449f47 Adding new interface GrpcMessageListener and refactoring framing classes to use it.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72157668
2015-01-08 14:42:33 -08:00
ejona a9c6c088f7 Add missing generics in MethodDescriptor
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72155290
2015-01-08 14:42:33 -08:00
simonma 7bf17dc4d6 Improve okhttp client transport, handles go away and add unit test.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72155172
2015-01-08 14:42:32 -08:00
nathanmittler 5f334f7c52 Adding support for TLS negotiation to new Netty transport.
This also fixes the ESF test.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72144581
2015-01-08 14:42:32 -08:00
zhangkun ed85499d63 Renames Stream.close() to Stream.halfClose(), to be consistent with
StreamState.CLOSED and to match with Call.halfClose().

-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=72095951
2015-01-08 14:42:32 -08:00
zhangkun 712e9c1201 Adds call type to MethodDescriptor as some transports need to know whether
the call is unary or streaming when starting the call.

-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71867037
2015-01-08 14:42:31 -08:00
ejona f97eb733f7 Add Server API, a.k.a., Channel for incoming requests.
Everything is nested under a single Server class. This may not seem best, but splitting things up basically requires a lot of "Server" prefixes all over the place, even if we use a separate package. I'm expecting to defer the decision, but once we decide the organization we need to update the Channel API to match.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71838718
2015-01-08 14:42:31 -08:00
lukes edee75fa47 Migrate callers of MoreExecutors.sameThreadExecutor() to use either
MoreExecutors.directExecutor() or MoreExecutors.newDirectExecutorService()
based on whether the code requires an Executor or an ExecutorService instance.

This is being done to resolve some performance issues with the current
sameThreadExecutor() implementation, by allowing users who don’t need
ExecutorService#shutdown semantics to not pay for them, and to make the costs
more obvious for users who do need them.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71585920
2015-01-08 14:42:31 -08:00
brettmorgan 56f5ec305e Upgrading OKHTTP to v2.0
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71465711
2015-01-08 14:42:30 -08:00
simonma 77d9706bd3 Add okhttp client transport.
OkHttpSession is temporally kept for server side using.

Test:
java/com/google/net/stubby/testing/integration/grpc_java_server --port=10009 --transport=http2_okhttp

java/com/google/net/stubby/testing/integration/grpc_java_client --serverHost=localhost --serverPort=10009 --transport=http2_okhttp
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71436060
2015-01-08 14:42:30 -08:00
nathanmittler 14af1cb2e8 Extracting out the Netty negotiation logic into a separate utility class.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71357187
2015-01-08 14:42:30 -08:00
zhangkun 1e26ae1924 Fixes GRPC third_party TAP breakage due to naming changes on generated interfaces.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71347520
2015-01-08 14:42:29 -08:00
nathanmittler bf8870ba86 Update GRPC to work with latest Netty version.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71285057
2015-01-08 14:42:29 -08:00
lryan a3f0180290 Add simple context exchange mechanism by wrapping Channel.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71139615
2015-01-08 14:42:29 -08:00
lryan 34650408aa Add ability to bind HTTP style headers to stubs and have them propagate over
transports that can deliver them.

This unblocks sending OAuth2 headers natively
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=71118741
2015-01-08 14:42:29 -08:00
nathanmittler c0a06819b7 Adding simple Transport for HTTP. Also creating abstract base classes for common stream/transport code.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=70983246
2015-01-08 14:42:28 -08:00
ejona e7a43e4e38 Workaround error caused by zero-length DATA frames.
The real solution is to not assume gRPC frame/DATA frame alignment, but
that is a much larger piece of work.

The bug was exposed via talking HTTP/2 to GFE which used a separate DATA frame
for closing the stream.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=70982223
2015-01-08 14:42:28 -08:00
nathanmittler cc7cdb1ab4 Implementing Netty-based GRPC Client Transport. Server-side will be implemented in a follow-up CL.
Overview:
- NettyClientTransport - this is the entry point into the client transport. This creates streams as well as the NettyClientHandler

- NettyClientStream - client stream implementation. This sends commands to the NettyClientHandler via commands.  Callbacks on the stream are made directly from the NettyClientHandler in the channel thread context.

- NettyClientHandler - A Netty HTTP/2 handler that acts as a bridge between the NettyClientStreams and Netty's HTTP/2 processing.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=70970028
2015-01-08 14:42:28 -08:00
lryan 0359907f61 Add NPN/ALPN support via Jetty extensions
Resurrect integration tests that pass through GFE for HTTP2+Netty
Misc improvements to hexa environment

-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=70683236
2015-01-08 14:42:27 -08:00
nathanmittler ad1ee03104 Clarifying the InputStream ownership contract in Call.Listener and StreamListener.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=70334261
2015-01-08 14:42:27 -08:00