[ 
https://issues.apache.org/jira/browse/PHOENIX-3083?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Loknath Priyatham Teja Singamsetty  resolved PHOENIX-3083.
----------------------------------------------------------
    Resolution: Invalid

It is always safe and better to have concurrency control at the TimerTask 
run(), instead of relying on ScheduledThreadPoolExecutor. 

> Avoid additional handling of concurrency control inside timertask of 
> BuildIndexScheduleTask when ScheduledThreadPoolExecutor executeAtFixedRate 
> does it internally
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-3083
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3083
>             Project: Phoenix
>          Issue Type: Improvement
>    Affects Versions: 4.8.0, 4.8.1
>            Reporter: Loknath Priyatham Teja Singamsetty 
>            Assignee: Loknath Priyatham Teja Singamsetty 
>            Priority: Trivial
>
> MetaDataRegionObserver codesnippet where inprogress AtomicInteger is used for 
> concurrency control:
> -----------------------------------------------------------------
>     /**
>      * Task runs periodically to build indexes whose 
> INDEX_NEED_PARTIALLY_REBUILD is set true
>      *
>      */
>     public static class BuildIndexScheduleTask extends TimerTask {
>         // inProgress is to prevent timer from invoking a new task while 
> previous one is still
>         // running
>         private final static AtomicInteger inProgress = new AtomicInteger(0);
>         RegionCoprocessorEnvironment env;
>         public BuildIndexScheduleTask(RegionCoprocessorEnvironment env) {
>             this.env = env;
>         }
>         @Override
>         public void run() {
>             // FIXME: we should replay the data table Put, as doing a partial 
> index build would only add
>             // the new rows and not delete the previous index value. Also, we 
> should restrict the scan
>             // to only data within this region (as otherwise *every* region 
> will be running this code
>             // separately, all updating the same data.
>             RegionScanner scanner = null;
>             PhoenixConnection conn = null;
>             if (inProgress.get() > 0) {
>                 LOG.debug("New ScheduledBuildIndexTask skipped as there is 
> already one running");
>                 return;
>             }
>             try {
>                 inProgress.incrementAndGet();
> ----------------------------------------------------
> JAVADOC:
> -------------- 
> public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
>                                      long initialDelay,
>                                      long period,
>                                      TimeUnit unit)
> Description copied from interface: ScheduledExecutorService
> Creates and executes a periodic action that becomes enabled first after the 
> given initial delay, and subsequently with the given period; that is 
> executions will commence after initialDelay then initialDelay+period, then 
> initialDelay + 2 * period, and so on. If any execution of the task encounters 
> an exception, subsequent executions are suppressed. Otherwise, the task will 
> only terminate via cancellation or termination of the executor. If any 
> execution of this task takes longer than its period, then subsequent 
> executions may start late, but will not concurrently execute.



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

Reply via email to