[ 
https://issues.apache.org/jira/browse/BOOKKEEPER-896?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15179886#comment-15179886
 ] 

Enrico Olivelli commented on BOOKKEEPER-896:
--------------------------------------------

The idea is to make the Bookie listen both for network connections and for 
local connections, this way when a client discovers a Bookie on ZooKeeper can 
connect to it using the local channel if the Bookie is embedded in  the same 
JVM or using a real socket channel if the Bookie is in  another JVM.

On ZooKeeper the bookie advertises itself using the usual way, it is on the 
client side the decision to use the local channel instead of the socket channel.

I have done a prof-of-concept implementation, some notes:
- We need to change references to ClientSocketChannelFactory to the generic 
ChannelFactory. The change is minimal and we can continue to support public 
constructors/builders which used directly ClientSocketChannelFactory.
- I have added a new ServerConfiguration (enableLocalTransport) to enable local 
transport 



> VM-local transport
> ------------------
>
>                 Key: BOOKKEEPER-896
>                 URL: https://issues.apache.org/jira/browse/BOOKKEEPER-896
>             Project: Bookkeeper
>          Issue Type: New Feature
>          Components: bookkeeper-client, bookkeeper-server
>    Affects Versions: 4.4.0
>            Reporter: Enrico Olivelli
>            Priority: Minor
>
> Hi,
> I’m wondering if it is feasible to have a way to launch a Bookie and a 
> Bookkeeper client in the same JVM without using network, valid use cases are:
> 1) Unit testing 
> 2) Installations using a single Bookie 
> 1) Unit testing
> For unit testing  I’m using mock classes which reproduce the functions of 
> Bookkeeper but it makes my code more complex. 
> Running network-related libraries limits the possibility of running tests in 
> parallel and slows down the overall throughput of the tests
> 2) Single Bookie deployment
> Sometimes I need to launch software which uses Bookkeeper in a single-machine 
> deployment, in this case using an embedded Bookie will let to have only a 
> single JVM process which runs the full stack of the service.
> For instance when I’m using Bookkeeper as a commit log I need to implement a 
> commit log which uses Bookkeeper for replicated deployments, a simple “file” 
> based commit log  and a pure in-memory commit log for unit testing.
> I think it could be done using Netty LocalServerChannelFactory (and related 
> client-side classes) and some tricks about the use of hostnames, registration 
> on Zookeeper and so on
> Of course the same issue will be on Zookkeeper 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to