Commit Graph

1537 Commits

Author SHA1 Message Date
Trustin Lee
f00fadb9fd Simplify the construction of multi-threaded selector event loop
- Hide InternalLogger from users
2012-05-15 13:11:47 +09:00
Trustin Lee
311f17f6ef Replace Bootstrap with ChannelBuilder and ServerChannelBuilder
- Added ChannelInitializer which is supposed to be used with the
  builders
- Echo examples use ChannelBuilder and ServerChannelBuilder now
- Replace ChannelFuture.rethrowIfFailed() with sync*()
- Bug fixes
2012-05-14 23:57:23 +09:00
Trustin Lee
05f955ee10 Clean up echo example / Fix a bug where closeFuture is not notified 2012-05-14 14:17:40 +09:00
Trustin Lee
6a0040a14e Fix compilation errors 2012-05-13 18:45:57 +09:00
Trustin Lee
3642879d98 Move up write spinning from SelectorEventLoop to AbstractChannel 2012-05-13 05:09:05 +09:00
Trustin Lee
6d14fac99c Revive Channel.closeFuture
- ChannelPipeline now rejects an unsafe ChannelFuture, so there's no
  need to hide/remove closeFuture.
2012-05-13 01:37:16 +09:00
Trustin Lee
175acb7899 Prevent unsafe ChannelFutures from being passed to a pipeline 2012-05-13 01:35:43 +09:00
Trustin Lee
08137e2c49 Implement flush-future properly / Make channel options type-safe
- AbstractChannel keeps the expected number of written bytes so that
  the ChannelFuture of a flush() operation is notified on right timing.
  - Added ChannelBufferHolder.size() to make this possible
- Added AbstractChannel.isCompatible() so that only compatible EventLoop
  is accepted by a channel on registration
- Added ChannelOption to make channel options type-safe
- Moved writeSpinCount property to ChannelConfig and removed Nio*Config
- Miscellaneous cleanup

introducing
ChannelOption
2012-05-13 00:40:28 +09:00
Trustin Lee
c57d7dd098 Add EventLoopFactory and make MultithreadEventLoop use it
- based on the feed back from @normanmaurer
2012-05-11 21:47:07 +09:00
Trustin Lee
97c07708a2 Remove unused class 2012-05-11 21:36:47 +09:00
Trustin Lee
1db0cd60c4 Do not attempt to flush when waiting for OP_WRITE 2012-05-11 21:26:54 +09:00
Trustin Lee
4b673c4ebb Fix infinite loop while handling a client socket / Retrofit EchoClient 2012-05-11 21:19:19 +09:00
Trustin Lee
b4610acda1 Implement connect timeout
- Merged ClientChannelConfig back to ChannelConfig
- AbstractChannel handles connect timeout making use of
  EventLoop.schedule()
2012-05-11 20:44:00 +09:00
Trustin Lee
83026f29a4 Make EventLoop a ScheduledExecutorService
- SingleThreadEventLoop now implements ScheduledExecutorService
  - Scheduled tasks are automatically fetched into taskQueue by
    pollTask() and takeTask()
- Removed MapBackedSet because Java 6 provides it
2012-05-11 20:19:57 +09:00
Trustin Lee
a4678a6030 Close all channels when SelectorEventLoop shuts down
- Also removed a FIXME which was fixed already
2012-05-11 11:01:44 +09:00
Trustin Lee
f6d6d1282c Simplify AbstractChannel.toString() 2012-05-11 10:47:45 +09:00
Trustin Lee
2134848111 Ensure the specified future has the correct channel / Cleanup 2012-05-11 09:00:35 +09:00
Trustin Lee
cb718a07c8 Move ChannelFutureFactory.newVoidFuture() to Channel.Unsafe() / Cleanup 2012-05-11 00:57:42 +09:00
Trustin Lee
da9ecadfc0 Introduce bypass buffer and use it in LoggingHandler
- Added ChannelBufferHolders.(inbound|outbound)BypassBuffer()
  - The holder returned by these methods returns the next handler's
    buffer.  When a handler's new(Inbound|Outbound)Buffer returns
    a bypass holder, your inboundBufferUpdated() and flush()
    implementation should check if the buffer is a bypass and should not
    modify the content of the buffer.
- Channel(Inbound|Outbound)?HandlerAdapter is now abstract.
  - A user has to specify the exact inbound/outbound buffer type
  - It's because there's no way to determine the best buffer type
- Implemented LoggingHandler using the new API.
  - It doesn't dump received or sent messages yet.
- Fixed a bug where DefaultUnsafe.close() does not trigger deregister()
- Fixed a bug where NioSocketChannel.isActive() does not return false
  when closed
2012-05-10 23:19:59 +09:00
Trustin Lee
532672deae Fix unnecessary application of Math.abs() 2012-05-10 21:56:10 +09:00
Trustin Lee
b4764f6164 Fix infinity loop and timing issues
- Made sure unnecessary interestOps are not OR'd
- Fixed a bug where DefaultChannelFuture.rethrowIfFailed() returns
  silently if the future is not done yet - there's no ways to tell
  the differences between failure and incompleteness.
2012-05-09 23:42:01 +09:00
Trustin Lee
129a2af86a Initial working version of the echo server example
- Optimized AbstractChannelBuffer.discardReadBytes()
- Split ChannelHandlerInvoker into ChannelInboundInvoker and
  ChannelOutboundInvoker
  - Channel implements ChannelOutboundInvoker
  - ChannelOutboundInvoker.nextOut() is now out()
  - ChannelOutboundHandlerContext.out() is now prevOut()
  - Added the outbound operations without future
    parameter to ChannelOutboundInvoker for user convenience
- All async operations which requires a ChannelFuture as a parameter
  now returns ChannelFuture for user convenience
- Added ChannelFutureFactory.newVoidFuture() to allow a user specify
  a dummy future that is of no use
  - I'm unsure if it is actually a good idea to introduce it. It might
    go away later.
- Made the contract of AbstractChannel.doXXX() much simpler and moved
  all common code up to AbstractChannel.DefaultUnsafe
- Added Channel.isOpen()
- Fixed a bug where MultithreadEventLoop always shut down its child
  event loops on construction
- Maybe more changes I don't remember :-)
2012-05-09 22:09:06 +09:00
Trustin Lee
607d784e5e Retrofit/overhaul the NIO transport with the new API
- Remove large portion of code thanks to the new API
- SocketChannel implementations are instantiated without factories
- Retrofit the existing code with the new API
2012-05-02 21:05:53 +09:00
Trustin Lee
9e6f8b46df Retrofit the NIO transport with the new API / improve the new API
- Remove the classes and properties that are not necessary anymore
- Remove SingleThreadEventLoop.newRegistrationTask() and let
  Channel.Unsafe handle registration by itself
- Channel.Unsafe.localAddress() and remoteAddress()
  - JdkChannel is replaced by Channel.Unsafe.
2012-05-02 15:01:58 +09:00
Trustin Lee
5dda9d1840 Retrofit the socket channel API with the new API 2012-05-02 14:07:50 +09:00
Trustin Lee
e65e496fc0 Clear Channel.eventLoop on deregistration 2012-05-01 23:19:31 +09:00
Trustin Lee
1356a0b61e Replace Channel.Unsafe.setEventLoop() with register()
- Added AbstractChannel.doRegister()
2012-05-01 23:18:29 +09:00
Trustin Lee
a83b9704fa Make sure ChannelFutureListeners are invoked from an event loop thread 2012-05-01 18:31:17 +09:00
Trustin Lee
0682421ce1 Remove unused classes
- ChannelPipelineFactory will be replaced with sometime else when I
  refactory the bootstrap package
- FileRegion is going away.  A user can deregister a channel and perform
  such operations by him/herself.  If this turns out to be too
  difficult, I'll introduce a new 'sendfile' operation to the outbound
  handler.
2012-05-01 18:23:59 +09:00
Trustin Lee
1b5960a1a8 Add ClientChannelConfig and move connectTimeoutMillis there 2012-05-01 18:17:12 +09:00
Trustin Lee
f4423ac555 Remove unused configuration properties and their related classes 2012-05-01 17:53:38 +09:00
Trustin Lee
c34d63d159 Fix compilation errors in ChannelGroup and its related types
- Also removed the operations not valid anymore
2012-05-01 17:49:41 +09:00
Trustin Lee
825d7964c9 Add ChannelFutureFactory & removeClosureListener()
- Channel and ChannelHandlerContext extends ChannelFutureFactory.
- Added Channel.removeClosureListener()
2012-05-01 17:48:24 +09:00
Trustin Lee
368156f5d0 Another round of the new API design
- Channel now creates a ChannelPipeline by itself

  I find no reason to allow a user to use one's own pipeline
  implementation since I saw nobody does except for the cases where a
  user wants to add a user attribute to a channel, which is now covered
  by AttributeMap.

- Removed ChannelEvent and its subtypes because they are replaced by
  direct method invocation.
- Replaced ChannelSink with Channel.unsafe()
- Various getter renaming (e.g. Channel.getId() -> Channel.id())
- Added ChannelHandlerInvoker interface
- Implemented AbstractChannel and AbstractServerChannel
- Some other changes I don't remember
2012-05-01 17:19:41 +09:00
Trustin Lee
f57ef3d414 Add ChannelBufferHolder.toString() 2012-04-29 21:51:12 +09:00
Trustin Lee
3804f3cbbb Remove ChannelLocal (deprecated) 2012-04-29 20:40:58 +09:00
Trustin Lee
447545bb19 Remove the methods related with half-close 2012-04-29 18:49:44 +09:00
Trustin Lee
470e7da5d7 Add MultithreadEventLoop
- Add EventLoopException to wrap the exceptions while an event loop does
something
- Make EventLoop.register() return EventLoop so that the caller knows
the actual EventLoop that will handle the Channel even if the caller
called register() from MultithreadEventLoop
2012-04-29 18:40:55 +09:00
Trustin Lee
e76e2aeac8 Add missing @Override annotation 2012-04-29 17:59:42 +09:00
Trustin Lee
cdd1ba93f0 Second round of new channel handler API design
- Rename ChannelReader to ChannelInboundHandler
- Rename ChannelWriter to ChannelOutboundHandler
- Introduce ChannelBufferHolder instead of adding the common super type
  of message buffers and byte buffers
  - This is more type-safe and natural.
- Remove the notification methods for buffer closure (might add back
  later when revisiting half-closed connection support)
2012-04-29 17:53:50 +09:00
Trustin Lee
22a815eaf8 Revamp channel handler API
- Merged LifeCycleAwareChannelHandler into ChannelHandler
- Replaced ChannelUpstreamHandler and ChannelDownstreamHandler with
  ChannelReader and ChannelWriter
  - These two new interfaces are much more type-safe than its ancestor.
- Simplified channel state model as described in #68
- Handler creates send/receive buffer.
  - Previously, Netty created them, but it led to more memory copies and
    inflexibility.  I'm going to allow a handler to create a bounded
    queue for example.
  - It currently uses Queue<T> but I'll define a new interface and make
    ChannelBuffer implement it (e.g. Queue<Byte>)
- Introduced AttributeMap which replaces attachments in Channel and
  ChannelHandlerContext and ChannelLocal
2012-04-12 17:39:01 +09:00
norman
97561315fd Add final keyword 2012-04-11 10:54:53 +02:00
norman
16c625cfd0 Allow to share a WorkerPool for boss and worker threads but also allow to have them separate. See #240 2012-04-11 10:54:41 +02:00
norman
f88cd3120d Fix a bug which lead to only use two threads for all tasks all the time, even if the WorkerPool contained more. See #240 2012-04-11 10:54:27 +02:00
norman
d0f432b4d4 Accept all ready sockets for the SelectionKey. See #240 2012-04-10 11:20:23 +02:00
Norman Maurer
07ff3d76cd Await for close of the channels. See #235 2012-04-10 08:17:38 +02:00
Norman Maurer
019d942a28 Correct javadoc. See #235 2012-04-10 08:17:21 +02:00
Norman Maurer
7eaf635059 Take care of releasing the local channel when releaseExternalResources() is called. See #235 2012-04-10 08:16:58 +02:00
Norman Maurer
a847ec1d88 Add test case to show that issue #235 is due some incorrect usage 2012-04-10 08:16:40 +02:00
Norman Maurer
33c085b9b9 Make sure Future get notified before event is fired. See #254 2012-04-07 22:03:58 +02:00
norman
db87c6ea37 Make sure Channel connected event is not fired on connect failure. See #249 2012-04-04 07:41:38 +02:00
Trustin Lee
049fb35bc1 Add Channel.deregister() 2012-04-03 22:29:26 +09:00
Trustin Lee
5a63cc4e1a Allow specifying a non-default SelectorProvider 2012-04-03 22:25:01 +09:00
Trustin Lee
a8647d6dc8 AbstractNioWorker -> SelectorEventLoop 2012-04-03 22:21:11 +09:00
Trustin Lee
0d8afa7a4c attach -> register 2012-04-03 22:19:35 +09:00
Trustin Lee
116054a364 Initial incomplete checkin of the event loop API 2012-04-03 22:03:04 +09:00
norman
805270c5d9 Finish support for UDP Multicast in UDP. See #216 2012-04-03 12:04:33 +02:00
Norman Maurer
9c1f3c6fe8 Fix UDP nio impl and add simple tests 2012-04-02 21:02:41 +02:00
Norman Maurer
dd6069c681 Fix broken UDP support. This got broken in 3.4.0.Alpha1 2012-04-02 19:37:28 +02:00
norman
023227917f cleanup 2012-04-02 15:27:40 +02:00
norman
221a77409a Only use the source address to join a multicast group if it was specified. See #216 2012-04-02 15:25:40 +02:00
norman
7f8408065b Fix UDP Multicast writes. See #237 2012-04-02 14:22:13 +02:00
norman
b350e8d289 Fix UDP Multicast writes. See #237 2012-04-02 14:20:40 +02:00
norman
9b90e3191a Finish support of NIO UDP multicast. This also change the methods to
return a ChannelFuture. See #216
2012-04-02 11:57:32 +02:00
norman
72f9f502bb Add support for UDP multicast in NIO. See #216
Add some javadocs. See #216

Use the correct key to lookup MembershipKey. See #216
2012-04-02 11:14:31 +02:00
norman
373c356067 Merge branch 'sctp_refactoring'
Conflicts:
	transport/src/main/java/io/netty/channel/socket/nio/NioWorker.java
2012-04-02 11:02:54 +02:00
Norman Maurer
c02d38a728 :Correctly handle interestedOps changes 2012-03-30 21:56:46 +02:00
Norman Maurer
f154c480e0 :Correctly handle interestedOps changes 2012-03-30 21:15:43 +02:00
Norman Maurer
732b11e7d5 Fix race 2012-03-30 16:23:10 +03:00
norman
4afd038fc0 Fix race 2012-03-30 15:21:26 +02:00
norman
c3e51af849 Check before casting 2012-03-30 14:29:26 +02:00
norman
a85f22e173 Code cleanup 2012-03-30 11:21:26 +02:00
norman
a60eecaa0c Refactor sctp to share code with nio 2012-03-30 11:07:43 +02:00
Trustin Lee
fd0b0a4e2b Code cleanup 2012-03-30 12:48:28 +09:00
Norman Maurer
b98516536e Introduce the JdkChannel interface and implementation. This will allow
us to also share all our nio code in the SCTP implementation.
2012-03-29 17:07:19 +02:00
norman
b145a8a0d4 add some todo and comment a failing test on windows. This test also
fails in master branch. See #240
2012-03-29 13:51:40 +02:00
norman
dded63b22c Make sure we use the same Worker in the client during its lifetime. See
#240
2012-03-29 12:02:29 +02:00
Norman Maurer
60d9364604 First round of remove the boss-thread. See #240 2012-03-28 20:19:39 +02:00
norman
0c3a33f83b Add no-args constructor for simple use-cases 2012-03-27 09:29:43 +02:00
norman
d68b104969 Make sure AbstractNioWorker.setInterestOps(..) will notify the future
and the handlers in all cases. See #238
2012-03-20 15:18:33 +01:00
Norman Maurer
6e68577d54 Merge pull request #225 from netty/workerpool
Support of sharing a WorkerPool between Factories
2012-03-20 01:44:28 -07:00
norman
fd3d98cf62 Fix UDP Multicast writes. See #237 2012-03-20 09:43:00 +01:00
Norman Maurer
59ff76bd66 add javadocs 2012-03-07 17:55:37 +01:00
Norman Maurer
875d5ce513 Allow to force the execution of the Runnable in a async fashion even if
the IO-Thread is the current Thread
2012-03-07 17:52:49 +01:00
norman
e207af30a3 Make sure AbstractNioWorker gets started if needed 2012-03-07 15:37:33 +01:00
norman
6375b84c9d Change Worker.executeInIoThread() to not need a Channel as paramater 2012-03-07 14:13:48 +01:00
norman
e8c64ea593 Make classes public 2012-03-07 13:30:45 +01:00
norman
0b0edea6bc Make classes public 2012-03-07 13:29:55 +01:00
Norman Maurer
fd7e165fb6 Commit missing file 2012-03-06 20:06:29 +01:00
Norman Maurer
caff7c941b Checkstyle fixes 2012-03-06 19:31:47 +01:00
Norman Maurer
bc47850bbe Allow to obtain the Worker that was used to serve the IO of a Channel 2012-03-06 19:26:32 +01:00
Norman Maurer
e0e87ce2bc Allow to share Workers by using a WorkerPool. 2012-03-06 19:26:10 +01:00
Norman Maurer
66f8de91b1 Make it more clear in the javadocs that you should use *Later methods to
send upstream events from a ChannelDownstreamHandler
2012-03-03 19:14:36 +01:00
Trustin Lee
9e8f8ac08c Fix NPE in AbstractNioWorker / Uncomment setUseClientMode() 2012-03-01 14:27:32 -08:00
Trustin Lee
4158152b24 Trigger exceptionCaught event from the middle of the pipline (#210)
.. because the previous handlers have no interest in the exceptions
raised by the next handlers.
2012-02-29 14:02:12 -08:00
Trustin Lee
40e7a5d948 Clean up and Add missing JavaDoc 2012-02-29 13:53:26 -08:00
Trustin Lee
c62b47228e Fix build failure 2012-02-29 13:26:35 -08:00
Norman Maurer
1589dadcce Better handling of canceling. See #210 and #209 2012-02-29 21:37:26 +01:00
Norman Maurer
a545157f4b Respect canceled tasks. See #209 and #210 2012-02-29 21:23:31 +01:00
Norman Maurer
8579f09c59 Merge pull request #210 from netty/threading_fix
Merge in fix for threading (related to #140 and #187). This also includes the new feature that allow to submit a Runnable that gets executed later in the io thread.
2012-02-29 12:11:46 -08:00
Norman Maurer
5f465da38d Add final keyword 2012-02-29 21:08:18 +01:00
Norman Maurer
4df3c61233 Allow to submit a Runnable that get execute in the io-thread. This is
also used to workout flaws in the thread-model. See #209 #140 #187
2012-02-29 21:07:02 +01:00
Norman Maurer
0d66a36a14 Merge branch 'master' of ssh://github.com/netty/netty 2012-02-28 16:53:28 +01:00
Norman Maurer
40771f6faf add empty line 2012-02-28 14:21:47 +01:00
Norman Maurer
19358ee246 Workaround for JDK NIO bug. See #203 2012-02-28 14:19:29 +01:00
Trustin Lee
2984f26f97 Decreased all selector timeout from 500 ms to 10 ms
See #204
2012-02-27 13:02:42 -08:00
Trustin Lee
4612568687 Fix #204 - Increate the granularity of connect timeout in NIO
* Changed the Selector timeout from 500 to 10 so that the timeout is checked every 10 milliseconds
2012-02-27 12:56:18 -08:00
Norman Maurer
0beaa107b4 Fix assert usage. Thanks Trustin for review 2012-02-27 20:45:46 +01:00
Norman Maurer
cfe7b49594 Cleaner impl of AbstractNioChannelSink and AbstractOioChannelSink. See
#140 and #187
2012-02-25 17:11:14 +01:00
Norman Maurer
f2d1f1e8ad Also fix the exception handling if a ChannelHandler throws an Exception
based of if its a io thread or not. See #187 and #140
2012-02-25 15:54:33 +01:00
Norman Maurer
ef64e8c332 oio and nio transport now make sure that a upstream event get only
executed from an io thread. See #140 and #187
2012-02-25 15:12:58 +01:00
Norman Maurer
c4a437e16b Fix later sending of exceptionCaught events. See #187 and #140 2012-02-25 14:30:10 +01:00
Norman Maurer
04a6ff92af Add static helper methods to fire upstream events later. See #187 and
#140
2012-02-25 14:28:43 +01:00
Norman Maurer
301a17c029 Rename method to better reflect its usage and update some javadocs. See
#187 and #140
2012-02-25 14:19:11 +01:00
Norman Maurer
c2bc463d61 Optimize the handling of fireEventLater if the current thread is the
worker thread. See #187 and #140
2012-02-24 22:03:32 +01:00
Norman Maurer
5fdd2dea12 Make it possible to schedule upstream events to get fired later in the
io-thread. This is the first part of #140 and #187
2012-02-24 20:26:50 +01:00
norman
2e36932097 Merge branch 'master' into remove_duplication
Conflicts:
	transport/src/main/java/io/netty/channel/socket/nio/NioDatagramWorker.java
	transport/src/main/java/io/netty/channel/socket/nio/NioWorker.java
2012-02-21 08:25:59 +01:00
Norman Maurer
eafd8343eb Remove some casting. See #186 2012-02-19 13:59:09 +01:00
Jestan Nirojan
7dbb8d2b8f fixed checkstyle build failures 2012-02-19 12:38:39 +05:30
Jestan Nirojan
20d7379c53 merge upstream master 2012-02-19 12:37:50 +05:30
Norman Maurer
812a9026b8 Start to refactor nio transport to share more code. See #186 2012-02-18 23:02:56 +01:00
Norman Maurer
65be9ebd44 Start to refactor oio transport to share more code. See #186 2012-02-17 20:33:18 +01:00
norman
479def20bd Check if logging level is enabled before log. See #192 2012-02-17 10:37:41 +01:00
Jestan Nirojan
97a38872f5 added separate bind method in client bootstrap, to support multi homing in sctp 2012-02-17 01:47:24 +05:30
norman
1b099acde0 Introduce a new interface that specify methods for ChannelConfig that
are used in the scope of NIO. This allows to share some code and make it
easier later to cast. See #186
2012-02-16 15:40:32 +01:00
Norman Maurer
28a8bb8b2e Remove StaticChannelPipeline. See #168 2012-01-31 15:50:35 +01:00
Norman Maurer
fda1524953 Remove unused import 2012-01-31 15:45:42 +01:00
Norman Maurer
8c6820be64 Fix possible NPE which will be thrown if the Buffer was set to null and after that Exception was thrown. See #166 2012-01-31 11:10:32 +01:00
Norman Maurer
6c68773ad4 Remove not-needed call of ByteBuffer.clear(). See #161 2012-01-24 20:47:30 +01:00
Trustin Lee
40ef4d2ccf Fix #153: Add ChannelFuture.rethrowIfFailed() 2012-01-19 13:33:37 +09:00
zhen9ao
2fff088480 fix for issue #149 2012-01-16 12:52:08 +08:00
Trustin Lee
a3efcaf043 Add missing package-info.java 2012-01-15 00:44:16 +09:00
Trustin Lee
d40bd5e7f2 Rename IOStream example / Code cleanup 2012-01-15 00:43:28 +09:00
Trustin Lee
303c1b5f79 Overall cleanup / Add lost old jzlib headers 2012-01-13 17:41:18 +09:00
norman
e714ec12b8 Remove close(..) call which gave us troubles with
ClosedChannelException. See #142 and #138
2012-01-11 16:56:31 +01:00
Trustin Lee
ebfc4513e0 Apply checkstyle to the build
Please note that the build will fail at the moment due to various checkstyle
violations which should be fixed soon
2012-01-11 20:16:14 +09:00
Trustin Lee
8663716d38 Issue #60: Make the project multi-module
Split the project into the following modules:
* common
* buffer
* codec
* codec-http
* transport
* transport-*
* handler
* example
* testsuite (integration tests that involve 2+ modules)
* all (does nothing yet, but will make it generate netty.jar)

This commit also fixes the compilation errors with transport-sctp on
non-Linux systems.  It will at least compile without complaints.
2011-12-28 19:44:04 +09:00