tephra-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (TEPHRA-215) Share PruneUpperBoundWriter across all TransactionProcessors on the same region server
Date Thu, 09 Feb 2017 00:07:42 GMT

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

ASF GitHub Bot commented on TEPHRA-215:
---------------------------------------

Github user poornachandra commented on a diff in the pull request:

    https://github.com/apache/incubator-tephra/pull/32#discussion_r100202843
  
    --- Diff: tephra-hbase-compat-1.1-base/src/test/java/org/apache/tephra/hbase/txprune/PruneUpperBoundWriterSupplierTest.java
---
    @@ -0,0 +1,105 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *   http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing,
    + * software distributed under the License is distributed on an
    + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + * KIND, either express or implied.  See the License for the
    + * specific language governing permissions and limitations
    + * under the License.
    + */
    +
    +package org.apache.tephra.hbase.txprune;
    +
    +import org.junit.Assert;
    +import org.junit.Test;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +import java.util.Random;
    +import java.util.concurrent.Callable;
    +import java.util.concurrent.ExecutorService;
    +import java.util.concurrent.Executors;
    +import java.util.concurrent.Future;
    +import java.util.concurrent.TimeUnit;
    +import java.util.concurrent.atomic.AtomicInteger;
    +
    +/**
    + * Tests to verify the behavior of {@link PruneUpperBoundWriterSupplier}.
    + */
    +public class PruneUpperBoundWriterSupplierTest {
    +  private static final int NUM_OPS = 10;
    +
    +  @Test
    +  public void testSupplier() throws Exception {
    +    final PruneUpperBoundWriterSupplier supplier = new PruneUpperBoundWriterSupplier(null,
null, 10L);
    +    final PruneUpperBoundWriter writer = supplier.get();
    +    final AtomicInteger numOps = new AtomicInteger(NUM_OPS);
    +    final Random random = new Random(System.currentTimeMillis());
    +
    +    // Start threads that will 'get' PruneUpperBoundWriters
    +    ExecutorService executor = Executors.newFixedThreadPool(3);
    +    List<Future> futureList = new ArrayList<>();
    +    for (int i = 0; i < 3; i++) {
    +      futureList.add(executor.submit(new Callable<Void>() {
    +
    +        @Override
    +        public Void call() throws Exception {
    +          // Since we already got one PruneUpperBoundWriter, we need to get NUM_OPS -
1
    +          while (numOps.decrementAndGet() > 0) {
    +            PruneUpperBoundWriter newWriter = supplier.get();
    +            Assert.assertTrue(newWriter == writer);
    +            int waitTime = random.nextInt(10);
    +            TimeUnit.MICROSECONDS.sleep(waitTime);
    +          }
    +          return null;
    +        }
    +      }));
    +    }
    +
    +    for (Future future : futureList) {
    +      future.get(5, TimeUnit.SECONDS);
    +    }
    +    executor.shutdown();
    +    executor.awaitTermination(2, TimeUnit.SECONDS);
    +
    +    futureList.clear();
    +    numOps.set(NUM_OPS);
    +    // Start thread that release PruneUpperBoundWriters
    +    executor = Executors.newFixedThreadPool(3);
    +    for (int i = 0; i < 3; i++) {
    +      futureList.add(executor.submit(new Callable<Void>() {
    --- End diff --
    
    Same here about using `Runnable`


> Share PruneUpperBoundWriter across all TransactionProcessors on the same region server
> --------------------------------------------------------------------------------------
>
>                 Key: TEPHRA-215
>                 URL: https://issues.apache.org/jira/browse/TEPHRA-215
>             Project: Tephra
>          Issue Type: Improvement
>    Affects Versions: 0.11.0-incubating
>            Reporter: Gokul Gunasekaran
>            Assignee: Gokul Gunasekaran
>             Fix For: 0.11.0-incubating
>
>
> Currently we start one prune upperbound writer thread per TransactionProcessor coprocessor.
Instead we should be able to share only one thread that flushes writes to the prune state
table periodically.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message