Advertisement
Guest User

Untitled

a guest
Apr 18th, 2012
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.69 KB | None | 0 0
  1. ListenableFuture<Long> nextFsyncTask =
  2.      new ListenableFutureTask<Long>(
  3.        
  4.           new Callable<Long>() {
  5.                @Override
  6.                public Long call() throws Exception {
  7.                    nextFsyncTask = //Create next fsync task for new writes
  8.                    fsync();
  9.                    return System.currentTimeMillis();
  10.                }
  11.           }
  12.  
  13. ListenableFuture<PutResult> put(final byte key[], final byte value[]) {
  14.      final long start = System.currentTimeMillis();
  15.      final ListenableFuture<byte[]> compressionTask = //submit to compression thread pool
  16.      final SettableFuture<PutResult> retval = new SettableFuture<PutResult>();
  17.  
  18.      compressionTask.addListener(
  19.           @Override
  20.           new Runnable() {
  21.                public void run() {
  22.                     m_writeThread.execute( new Runnable() {
  23.                          @Override
  24.                          public void run() {
  25.                               byte compressedValue[];
  26.                               try {
  27.                                   compressedValue = compressionTask.get();
  28.                               } catch (ExcecutionException e) {
  29.                                   retval.setException(e);
  30.                                   return;
  31.                               }
  32.                               final int compressedLength = compressedValue.length;
  33.                               try {
  34.                                   write(value, compressedValue);
  35.                               } catch (Exception e) {
  36.                                   retval.setException(e);
  37.                                   return;
  38.                               }
  39.                               final ListenableFuture fsyncTask = nextFsyncTask;
  40.                               fsyncTask.addListener(
  41.                                    new Runnable() {
  42.                                         @Override
  43.                                         public void run() {
  44.                                              try {
  45.                                                 final long latency = start - fsyncTask.get();
  46.                                                 retval.set(new PutResult(latency, value.length, compressedLength);
  47.                                              } catch (Exception e) {
  48.                                                  retval.setException(e);
  49.                                                  return;
  50.                                              }
  51.                                         }
  52.                                    });
  53.                          }
  54.                     });
  55.                }
  56.           },
  57.           MoreExecutors.sameThreadExecutor());
  58.  
  59.      return retval;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement