accumulo-notifications 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] (ACCUMULO-3509) Scanner lock cause Tablet lock, hence preventing idle scans from being swept, hence blocking SimpleTimer thread
Date Mon, 04 Jan 2016 20:52:40 GMT

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

ASF GitHub Bot commented on ACCUMULO-3509:
------------------------------------------

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

    https://github.com/apache/accumulo/pull/62#discussion_r48779554
  
    --- Diff: test/src/test/java/org/apache/accumulo/test/functional/SessionBlockVerifyIT.java
---
    @@ -0,0 +1,181 @@
    +/*
    + * 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.accumulo.test.functional;
    +
    +import static java.nio.charset.StandardCharsets.UTF_8;
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +import java.util.ArrayList;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Map.Entry;
    +import java.util.concurrent.Callable;
    +import java.util.concurrent.ExecutorService;
    +import java.util.concurrent.Executors;
    +import java.util.concurrent.Future;
    +
    +import org.apache.accumulo.core.client.BatchWriter;
    +import org.apache.accumulo.core.client.BatchWriterConfig;
    +import org.apache.accumulo.core.client.Connector;
    +import org.apache.accumulo.core.client.IteratorSetting;
    +import org.apache.accumulo.core.client.Scanner;
    +import org.apache.accumulo.core.client.admin.ActiveScan;
    +import org.apache.accumulo.core.client.admin.InstanceOperations;
    +import org.apache.accumulo.core.conf.AccumuloConfiguration;
    +import org.apache.accumulo.core.conf.Property;
    +import org.apache.accumulo.core.data.Key;
    +import org.apache.accumulo.core.data.Mutation;
    +import org.apache.accumulo.core.data.Range;
    +import org.apache.accumulo.core.data.Value;
    +import org.apache.accumulo.core.security.Authorizations;
    +import org.apache.accumulo.harness.AccumuloClusterIT;
    +import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
    +import org.apache.hadoop.conf.Configuration;
    +import org.apache.hadoop.io.Text;
    +import org.junit.Before;
    +import org.junit.Test;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
    +
    +/**
    + * Verify that we have resolved blocking issue by ensuring that we have not lost scan
sessions which we know to currently be running
    + */
    +public class SessionBlockVerifyIT extends AccumuloClusterIT {
    +  private static final Logger log = LoggerFactory.getLogger(SessionBlockVerifyIT.class);
    +
    +  @Override
    +  public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite)
{
    +    Map<String,String> siteConfig = cfg.getSiteConfig();
    +    cfg.setNumTservers(1);
    +    siteConfig.put(Property.TSERV_SESSION_MAXIDLE.getKey(), "1s");
    +    siteConfig.put(Property.TSERV_READ_AHEAD_MAXCONCURRENT.getKey(), "11");
    +    cfg.setSiteConfig(siteConfig);
    +  }
    +
    +  @Override
    +  protected int defaultTimeoutSeconds() {
    +    return 60;
    +  }
    +
    +  private String sessionIdle = null;
    +
    +  @Before
    +  public void reduceSessionIdle() throws Exception {
    +
    +    InstanceOperations ops = getConnector().instanceOperations();
    +    sessionIdle = ops.getSystemConfiguration().get(Property.TSERV_SESSION_MAXIDLE.getKey());
    +    ops.setProperty(Property.TSERV_SESSION_MAXIDLE.getKey(), "1s");
    +    log.info("Waiting for existing session idle time to expire");
    +    Thread.sleep(AccumuloConfiguration.getTimeInMillis(sessionIdle));
    +    log.info("Finished waiting");
    +  }
    +
    +  ExecutorService service = Executors.newFixedThreadPool(10);
    --- End diff --
    
    Create this inside the test case? Or in a `@BeforeClass`? Something that we can make sure
it is cleaned up after the test completes.


> Scanner lock cause Tablet lock, hence preventing idle scans from being swept, hence blocking
SimpleTimer thread 
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: ACCUMULO-3509
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-3509
>             Project: Accumulo
>          Issue Type: Bug
>          Components: tserver
>    Affects Versions: 1.6.0
>            Reporter: marco polo
>            Assignee: marco polo
>             Fix For: 1.6.5, 1.7.1, 1.8.0
>
>
> Synchronization with Tablet$Scanner via a read() will block close() being called via
the sweep method in TabletServer. As a result, the SimpleTimer thread does not continue, and
idle threads grow until the scan completes. 
> My patch, which is forthcoming, converts synchronized methods to use a fair lock. If
the lock is held by a read call, the close call will attempt to obtain it, time out, and return
indicating a close was not successful. The sweep will continue, and the SimpleTimer thread
will respawn later, attempting closure on those Tablets at a later time. 



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

Mime
View raw message