You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Scott Carey (JIRA)" <ji...@apache.org> on 2011/06/03 23:17:48 UTC

[jira] [Issue Comment Edited] (AVRO-539) Allow asynchronous clients to specify a callback to be run when server processing completes

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

Scott Carey edited comment on AVRO-539 at 6/3/11 9:17 PM:
----------------------------------------------------------

One other option, don't return a future.  Instead a user can make one.  This is more verbose however:

{code}
 public void add(int arg1, int arg2, Callback<Integer> cb) throws IOException; 
{code}

Use a future:

{code}
  Future<Integer> f = new ProtocolFuture<Integer>();
  add(1, 2, f);
  Integer result = f.get();
{code}

ProtocolFuture<T> is relatively simple, with pseudo-code like:

{code}
public class ProtocolFuture<T> implements Future<T>, Callback<T> {
  private T result = null;
  private CountDownLatch latch = new CountDownLatch(1);

  @Override
  public final void handleResult(T result) {
    this.result = result;
    latch.countDown();
  }

  @Override
  public void T get() throws InterruptedException {
    latch.await();
    return result;
  }
}
{code}

Although the above class isn't so useful for Jetty, it could potentially be for other protocol implementations.

For very high throughput, creating an unused Future with each call might be a small problem too.

I'm not convinced I like this solution better, it is an interesting alternative though.


      was (Author: scott_carey):
    One other option, don't return a future.  Instead a user can make one.  This is more verbose however:

{code}
 public void add(int arg1, int arg2, Callback<Integer> cb) throws IOException; 
{code}

Use a future:

{code}
 Future<Integer> f = new ProtocolFuture<Integer>();
 add(1, 2, f);
 Integer result = f.get();
{code}

ProtocolFuture<T> is relatively simple, with pseudo-code like:

{code}
public class ProtocolFuture<T> implements Future<T>, Callback<T> {
  private T result = null;
  private CountDownLatch latch = new CountDownLatch(1);

  @Override
  public void handleResult(T result) {
    this.result = result;
    latch.countDown();
  }

  @Override
  public void T get() throws InterruptedException {
    latch.await();
    return result;
  }
}
{code}

Although the above class isn't so useful for Jetty, it could potentially be for other protocol implementations.

For very high throughput, creating an unused Future with each call might be a small problem too.

I'm not convinced I like this solution better, it is an interesting alternative though.

  
> Allow asynchronous clients to specify a callback to be run when server processing completes
> -------------------------------------------------------------------------------------------
>
>                 Key: AVRO-539
>                 URL: https://issues.apache.org/jira/browse/AVRO-539
>             Project: Avro
>          Issue Type: New Feature
>            Reporter: Jeff Hammerbacher
>         Attachments: AVRO-539.patch
>
>


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira