hbase开发问题-PooledHTable多次close导致问题

PooledHTable多次close导致问题

PooledHTable close时,调用returnTable(table)

  private void returnTable(HTableInterface table) throws IOException {
    // this is the old putTable method renamed and made private
    String tableName = Bytes.toString(table.getTableName());
    if (tables.size(tableName) >= maxSize) {
      // release table instance since we're not reusing it
      this.tables.remove(tableName, table);
      this.tableFactory.releaseHTableInterface(table);
      return;
    }
    tables.put(tableName, table);
  }


当对于同一个PooledHTable多次close时,

当tables.size(tableName) < maxSize时,
引用返回给了pool。

当tables.size(tableName) >= maxSize时,
代码执行到
this.tableFactory.releaseHTableInterface(table)

  public void close() throws IOException {
    if (this.closed) {
      return;
    }
    flushCommits();
    if (cleanupPoolOnClose) {
      this.pool.shutdown();
    }
    if (cleanupConnectionOnClose) {
      if (this.connection != null) {
        this.connection.close();
      }
    }
    this.closed = true;
  }

该HTable被close了。

由于多个引用指向同一个HTable。当后续从HTablePool取到该HTable时,由于该HTable已经关闭,调用时报错。

猜你喜欢

转载自zhang-xzhi-xjtu.iteye.com/blog/2165684
今日推荐