[
https://issues.apache.org/jira/browse/THRIFT-3397?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14976263#comment-14976263
]
Jonathan Heard edited comment on THRIFT-3397 at 10/27/15 11:47 AM:
-------------------------------------------------------------------
Please can I have some advice about how you like to do things in the Thrift
team... I'm close to submitting my pull request but would like to check a few
things.
My local branch for this issue has the following commits:
7bca7ff THRIFT-3397 Implemented \-\-server-type flag or C# TestServer in line
with test/README.md examples. Added '\-\-processor' flag to enable selection of
new TPrototypeProcessorFactory (--prototype OR --processor=prototype)
333b77d THRIFT-3397 Remove testStop() method. It's not in the ThriftTest.thrift
spec and when using TPrototypeFactory it becomes tricky to allow a handler the
ability to stop its own server.
a9dced0 THRIFT-3397 Set windows console height to maximum and enlarge
scrollback buffer
c52ced6 THRIFT-3397 Added clientID counter and logging delegate to
TestClient.cs, refactored Console.Writeline in tests to Invoke the delegate
with an implementation which automatically adds the clientID to the output.
965bfc8 THRIFT-3397 TestClient was calling Open then Close on every new
Transport (i.e. Client thread '-t n') instance before passing it back to the
caller. Modified so it now does this only once
95ee034 THRIFT-3397 Created TProcessorFactory interface, implemented at
TSingletonProcessorFactory and TPrototypeProcessorFactory and updated TServer +
implementations to use the singleton factory by default
I have tried to ensure that each commit is limited to a particular change to
aide traceability, however it looks like most of the existing history contains
a single commit per JIRA ticket.
What granularity is preferred for change control? e.g. Should I be logging
separate JIRA tickets for Library code vs Test code?
This is my first contribution to the project so I want to ensure that I get it
right.
was (Author: jonathanh):
Please can I have some advice about how you like to do things in the Thrift
team... I'm close to submitting my pull request but would like to check a few
things.
My local branch for this issue has the following commits:
7bca7ff THRIFT-3397 Implemented --server-type flag or C# TestServer in line
with test/README.md examples. Added '--processor' flag to enable selection of
new TPrototypeProcessorFactory (--prototype OR --processor=prototype)
333b77d THRIFT-3397 Remove testStop() method. It's not in the ThriftTest.thrift
spec and when using TPrototypeFactory it becomes tricky to allow a handler the
ability to stop its own server.
a9dced0 THRIFT-3397 Set windows console height to maximum and enlarge
scrollback buffer
c52ced6 THRIFT-3397 Added clientID counter and logging delegate to
TestClient.cs, refactored Console.Writeline in tests to Invoke the delegate
with an implementation which automatically adds the clientID to the output.
965bfc8 THRIFT-3397 TestClient was calling Open then Close on every new
Transport (i.e. Client thread '-t n') instance before passing it back to the
caller. Modified so it now does this only once
95ee034 THRIFT-3397 Created TProcessorFactory interface, implemented at
TSingletonProcessorFactory and TPrototypeProcessorFactory and updated TServer +
implementations to use the singleton factory by default
I have tried to ensure that each commit is limited to a particular change to
aide traceability, however it looks like most of the existing history contains
a single commit per JIRA ticket.
What granularity is preferred for change control? e.g. Should I be logging
separate JIRA tickets for Library code vs Test code?
This is my first contribution to the project so I want to ensure that I get it
right.
> Implement TProcessorFactory in C# to enable per-client processors
> -----------------------------------------------------------------
>
> Key: THRIFT-3397
> URL: https://issues.apache.org/jira/browse/THRIFT-3397
> Project: Thrift
> Issue Type: New Feature
> Components: C# - Library
> Affects Versions: 0.9.3
> Reporter: Jonathan Heard
> Priority: Minor
> Labels: performance, thread-safety
> Original Estimate: 168h
> Remaining Estimate: 168h
>
> The current TServer implementations in C# take a single instance of a
> TProcessor to be used for all client connections. This is not guaranteed to
> be thread-safe and can become a significant bottleneck.
> I am implementing a TProcessorFactory interface for C# which is similar to
> the ones already implemented in Java and C++. I'll generate a pull request
> for review soon.
> The existing solutions implement TProcessorFactory as a class which takes a
> TProcessor and just returns that instance to all clients. I'm aiming to
> improve on that by creating a TProcessorFactory interface and then
> implementing it in two core classes:
> 1) TSingletonProcessorFactory - this behaves the same as the Java
> 'TProcessorFactory' class.
> 2) TPrototypeProcessorFactory<Processor,Handler> - this effectively returns a
> 'new Processor(Handler)' giving every new client its own processor.
> In order to avoid breaking the existing API (and in-keeping with the Java
> implementation), I have changed TServer so that it uses a TProcessorFactory
> instead of TProcessor and updated all relevant constructors so they call the
> TSingletonProcessorFactory for constructors using TProcessor. New
> constructors have been added to enable calling with TProcessorFactory. This
> approach should avoid breaking the established API and not break any existing
> code.
> I've also updated the TestServer.cs to support these changes.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)