Hello Impala Public Jenkins,

I'd like you to reexamine a change. Please visit

    http://gerrit.cloudera.org:8080/21115

to look at the new patch set (#2).

Change subject: WIP IMPALA-12831: Add lock for partition map in HdfsTable
......................................................................

WIP IMPALA-12831: Add lock for partition map in HdfsTable

HdfsTable.toMinimalTCatalogObject() is not always invoked with holding
the table lock, e.g. in invalidating a table, we could replace an
HdfsTable instance with an IncompleteTable instance. We then invoke
HdfsTable.toMinimalTCatalogObject() to get the removed catalog object.
However, the HdfsTable instance could be modified in the meantime by a
concurrent DDL/DML that would reload it, e.g. a REFRESH statement. This
causes HdfsTable.toMinimalTCatalogObject() failed by
ConcurrentModificationException on the column/partition list.

There are two parts in HdfsTable.toMinimalTCatalogObject() that could be
failed by concurrent modifications. One is adding the columns, the other
is adding the partitions. The columns are not used in the result
consumers so we can simply ignore them. To protect reading the partition
map, this patch adds a ReentrantReadWriteLock in HdfsTable for it.
Refactor some code paths to avoid holding the lock during external RPCs,
e.g. loading file metadata.

TODO:
HdfsTable.getPartitions() returns the map values externally. To protect
its usage without exposing the partitionMapLock outside HdfsTable, we
have to make sure it's only used in impalad or tests.
Currently, there are several code paths in catalogd that use it, e.g.
FeFsTable.Utils.getPartitionFromThriftPartitionSpec() which is used in
many catalogd code paths. As a workaround, a deep copy of the value list
are returned in getPartitions().

Tests
 - Added e2e test
 - TODO: run CORE tests

Change-Id: I7466c291e4619b1ceac325b84f1eadc598aef29e
---
M fe/src/main/java/org/apache/impala/catalog/CatalogServiceCatalog.java
M fe/src/main/java/org/apache/impala/catalog/HdfsTable.java
M fe/src/main/java/org/apache/impala/catalog/ImpaladCatalog.java
M fe/src/main/java/org/apache/impala/catalog/Table.java
M fe/src/main/java/org/apache/impala/service/CatalogOpExecutor.java
M fe/src/test/java/org/apache/impala/catalog/CatalogTest.java
M tests/custom_cluster/test_concurrent_ddls.py
7 files changed, 360 insertions(+), 173 deletions(-)


  git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/15/21115/2
-- 
To view, visit http://gerrit.cloudera.org:8080/21115
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I7466c291e4619b1ceac325b84f1eadc598aef29e
Gerrit-Change-Number: 21115
Gerrit-PatchSet: 2
Gerrit-Owner: Quanlong Huang <huangquanl...@gmail.com>
Gerrit-Reviewer: Impala Public Jenkins <impala-public-jenk...@cloudera.com>

Reply via email to