IMPALA-7712: Support Google Cloud Storage

This patch adds support for GCS(Google Cloud Storage). Using the
gcs-connector, the implementation is similar to other remote
FileSystems.

New flags for GCS:
 - num_gcs_io_threads: Number of GCS I/O threads. Defaults to be 16.

Follow-up:
 - Support for spilling to GCS will be addressed in IMPALA-10561.
 - Support for caching GCS file handles will be addressed in
   IMPALA-10568.
 - test_concurrent_inserts and test_failing_inserts in
   test_acid_stress.py are skipped due to slow file listing on
   GCS (IMPALA-10562).
 - Some tests are skipped due to issues introduced by /etc/hosts setting
   on GCE instances (IMPALA-10563).

Tests:
 - Compile and create hdfs test data on a GCE instance. Upload test data
   to a GCS bucket. Modify all locations in HMS DB to point to the GCS
   bucket. Remove some hdfs caching params. Run CORE tests.
 - Compile and load snapshot data to a GCS bucket. Run CORE tests.

Change-Id: Ia91ec956de3b620cccf6a1244b56b7da7a45b32b
Reviewed-on: http://gerrit.cloudera.org:8080/17121
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
This commit is contained in:
stiga-huang
2021-02-25 20:19:49 +08:00
committed by Impala Public Jenkins
parent 6c6b0ee869
commit 2dfc68d852
68 changed files with 303 additions and 64 deletions

View File

@@ -410,6 +410,7 @@ Status HdfsTableSink::CreateNewTmpFile(RuntimeState* state,
if (IsS3APath(output_partition->current_file_name.c_str()) || if (IsS3APath(output_partition->current_file_name.c_str()) ||
IsABFSPath(output_partition->current_file_name.c_str()) || IsABFSPath(output_partition->current_file_name.c_str()) ||
IsADLSPath(output_partition->current_file_name.c_str()) || IsADLSPath(output_partition->current_file_name.c_str()) ||
IsGcsPath(output_partition->current_file_name.c_str()) ||
IsOzonePath(output_partition->current_file_name.c_str())) { IsOzonePath(output_partition->current_file_name.c_str())) {
// On S3A, the file cannot be stat'ed until after it's closed, and even so, the block // On S3A, the file cannot be stat'ed until after it's closed, and even so, the block
// size reported will be just the filesystem default. Similarly, the block size // size reported will be just the filesystem default. Similarly, the block size

View File

@@ -52,6 +52,7 @@ DECLARE_int32(num_remote_hdfs_io_threads);
DECLARE_int32(num_s3_io_threads); DECLARE_int32(num_s3_io_threads);
DECLARE_int32(num_adls_io_threads); DECLARE_int32(num_adls_io_threads);
DECLARE_int32(num_abfs_io_threads); DECLARE_int32(num_abfs_io_threads);
DECLARE_int32(num_gcs_io_threads);
DECLARE_int32(num_ozone_io_threads); DECLARE_int32(num_ozone_io_threads);
DECLARE_int32(num_remote_hdfs_file_oper_io_threads); DECLARE_int32(num_remote_hdfs_file_oper_io_threads);
DECLARE_int32(num_s3_file_oper_io_threads); DECLARE_int32(num_s3_file_oper_io_threads);
@@ -1716,7 +1717,7 @@ TEST_F(DiskIoMgrTest, VerifyNumThreadsParameter) {
const int num_io_threads_for_remote_disks = FLAGS_num_remote_hdfs_io_threads const int num_io_threads_for_remote_disks = FLAGS_num_remote_hdfs_io_threads
+ FLAGS_num_s3_io_threads + FLAGS_num_adls_io_threads + FLAGS_num_abfs_io_threads + FLAGS_num_s3_io_threads + FLAGS_num_adls_io_threads + FLAGS_num_abfs_io_threads
+ FLAGS_num_ozone_io_threads + FLAGS_num_remote_hdfs_file_oper_io_threads + FLAGS_num_ozone_io_threads + FLAGS_num_remote_hdfs_file_oper_io_threads
+ FLAGS_num_s3_file_oper_io_threads; + FLAGS_num_s3_file_oper_io_threads + FLAGS_num_gcs_io_threads;
// Verify num_io_threads_per_rotational_disk and num_io_threads_per_solid_state_disk. // Verify num_io_threads_per_rotational_disk and num_io_threads_per_solid_state_disk.
// Since we do not have control over which disk is used, we check for either type // Since we do not have control over which disk is used, we check for either type

View File

@@ -130,6 +130,9 @@ DEFINE_int32(num_abfs_io_threads, 16, "Number of ABFS I/O threads");
// (~10 nodes), 64 threads would be more ideal. // (~10 nodes), 64 threads would be more ideal.
DEFINE_int32(num_adls_io_threads, 16, "Number of ADLS I/O threads"); DEFINE_int32(num_adls_io_threads, 16, "Number of ADLS I/O threads");
// The maximum number of GCS I/O threads. TODO: choose the default empirically.
DEFINE_int32(num_gcs_io_threads, 16, "Number of GCS I/O threads");
// The maximum number of Ozone I/O threads. TODO: choose the default empirically. // The maximum number of Ozone I/O threads. TODO: choose the default empirically.
DEFINE_int32(num_ozone_io_threads, 16, "Number of Ozone I/O threads"); DEFINE_int32(num_ozone_io_threads, 16, "Number of Ozone I/O threads");
@@ -465,6 +468,9 @@ Status DiskIoMgr::Init() {
} else if (i == RemoteAdlsDiskId()) { } else if (i == RemoteAdlsDiskId()) {
num_threads_per_disk = FLAGS_num_adls_io_threads; num_threads_per_disk = FLAGS_num_adls_io_threads;
device_name = "ADLS remote"; device_name = "ADLS remote";
} else if (i == RemoteGcsDiskId()) {
num_threads_per_disk = FLAGS_num_gcs_io_threads;
device_name = "GCS remote";
} else if (i == RemoteOzoneDiskId()) { } else if (i == RemoteOzoneDiskId()) {
num_threads_per_disk = FLAGS_num_ozone_io_threads; num_threads_per_disk = FLAGS_num_ozone_io_threads;
device_name = "Ozone remote"; device_name = "Ozone remote";
@@ -820,12 +826,14 @@ int DiskIoMgr::AssignQueue(
if (IsS3APath(file, check_default_fs)) return RemoteS3DiskId(); if (IsS3APath(file, check_default_fs)) return RemoteS3DiskId();
if (IsABFSPath(file, check_default_fs)) return RemoteAbfsDiskId(); if (IsABFSPath(file, check_default_fs)) return RemoteAbfsDiskId();
if (IsADLSPath(file, check_default_fs)) return RemoteAdlsDiskId(); if (IsADLSPath(file, check_default_fs)) return RemoteAdlsDiskId();
if (IsGcsPath(file, check_default_fs)) return RemoteGcsDiskId();
if (IsOzonePath(file, check_default_fs)) return RemoteOzoneDiskId(); if (IsOzonePath(file, check_default_fs)) return RemoteOzoneDiskId();
} }
// Assign to a local disk queue. // Assign to a local disk queue.
DCHECK(!IsS3APath(file, check_default_fs)); // S3 is always remote. DCHECK(!IsS3APath(file, check_default_fs)); // S3 is always remote.
DCHECK(!IsABFSPath(file, check_default_fs)); // ABFS is always remote. DCHECK(!IsABFSPath(file, check_default_fs)); // ABFS is always remote.
DCHECK(!IsADLSPath(file, check_default_fs)); // ADLS is always remote. DCHECK(!IsADLSPath(file, check_default_fs)); // ADLS is always remote.
DCHECK(!IsGcsPath(file, check_default_fs)); // GCS is always remote.
DCHECK(!IsOzonePath(file, check_default_fs)); // Ozone is always remote. DCHECK(!IsOzonePath(file, check_default_fs)); // Ozone is always remote.
if (disk_id == -1) { if (disk_id == -1) {
// disk id is unknown, assign it an arbitrary one. // disk id is unknown, assign it an arbitrary one.

View File

@@ -327,6 +327,9 @@ class DiskIoMgr : public CacheLineAligned {
/// The disk ID (and therefore disk_queues_ index) used for ADLS accesses. /// The disk ID (and therefore disk_queues_ index) used for ADLS accesses.
int RemoteAdlsDiskId() const { return num_local_disks() + REMOTE_ADLS_DISK_OFFSET; } int RemoteAdlsDiskId() const { return num_local_disks() + REMOTE_ADLS_DISK_OFFSET; }
/// The disk ID (and therefore disk_queues_ index) used for GCS accesses.
int RemoteGcsDiskId() const { return num_local_disks() + REMOTE_GCS_DISK_OFFSET; }
/// The disk ID (and therefore disk_queues_ index) used for Ozone accesses. /// The disk ID (and therefore disk_queues_ index) used for Ozone accesses.
int RemoteOzoneDiskId() const { return num_local_disks() + REMOTE_OZONE_DISK_OFFSET; } int RemoteOzoneDiskId() const { return num_local_disks() + REMOTE_OZONE_DISK_OFFSET; }
@@ -383,6 +386,7 @@ class DiskIoMgr : public CacheLineAligned {
REMOTE_S3_DISK_OFFSET, REMOTE_S3_DISK_OFFSET,
REMOTE_ADLS_DISK_OFFSET, REMOTE_ADLS_DISK_OFFSET,
REMOTE_ABFS_DISK_OFFSET, REMOTE_ABFS_DISK_OFFSET,
REMOTE_GCS_DISK_OFFSET,
REMOTE_OZONE_DISK_OFFSET, REMOTE_OZONE_DISK_OFFSET,
REMOTE_DFS_DISK_FILE_OPER_OFFSET, REMOTE_DFS_DISK_FILE_OPER_OFFSET,
REMOTE_S3_DISK_FILE_OPER_OFFSET, REMOTE_S3_DISK_FILE_OPER_OFFSET,

View File

@@ -278,6 +278,7 @@ Status TmpFileMgr::InitCustom(const vector<string>& tmp_dir_specifiers,
s3a_options_ = {make_pair("fs.s3a.fast.upload", "true"), s3a_options_ = {make_pair("fs.s3a.fast.upload", "true"),
make_pair("fs.s3a.fast.upload.buffer", "disk")}; make_pair("fs.s3a.fast.upload.buffer", "disk")};
} else { } else {
// TODO(IMPALA-10561): Add support for spilling to GCS
prefix = ""; prefix = "";
tmp_dirs_without_prefix = tmp_dir_spec_trimmed.substr(0); tmp_dirs_without_prefix = tmp_dir_spec_trimmed.substr(0);
} }

View File

@@ -34,6 +34,7 @@ const char* FILESYS_PREFIX_S3 = "s3a://";
const char* FILESYS_PREFIX_ABFS = "abfs://"; const char* FILESYS_PREFIX_ABFS = "abfs://";
const char* FILESYS_PREFIX_ABFS_SEC = "abfss://"; const char* FILESYS_PREFIX_ABFS_SEC = "abfss://";
const char* FILESYS_PREFIX_ADL = "adl://"; const char* FILESYS_PREFIX_ADL = "adl://";
const char* FILESYS_PREFIX_GCS = "gs://";
const char* FILESYS_PREFIX_OZONE = "o3fs://"; const char* FILESYS_PREFIX_OZONE = "o3fs://";
string GetHdfsErrorMsg(const string& prefix, const string& file) { string GetHdfsErrorMsg(const string& prefix, const string& file) {
@@ -108,6 +109,10 @@ bool IsADLSPath(const char* path, bool check_default_fs) {
return IsSpecificPath(path, FILESYS_PREFIX_ADL, check_default_fs); return IsSpecificPath(path, FILESYS_PREFIX_ADL, check_default_fs);
} }
bool IsGcsPath(const char* path, bool check_default_fs) {
return IsSpecificPath(path, FILESYS_PREFIX_GCS, check_default_fs);
}
bool IsOzonePath(const char* path, bool check_default_fs) { bool IsOzonePath(const char* path, bool check_default_fs) {
return IsSpecificPath(path, FILESYS_PREFIX_OZONE, check_default_fs); return IsSpecificPath(path, FILESYS_PREFIX_OZONE, check_default_fs);
} }

View File

@@ -30,6 +30,7 @@ extern const char* FILESYS_PREFIX_S3;
extern const char* FILESYS_PREFIX_ABFS; extern const char* FILESYS_PREFIX_ABFS;
extern const char* FILESYS_PREFIX_ABFS_SEC; extern const char* FILESYS_PREFIX_ABFS_SEC;
extern const char* FILESYS_PREFIX_ADL; extern const char* FILESYS_PREFIX_ADL;
extern const char* FILESYS_PREFIX_GCS;
extern const char* FILESYS_PREFIX_OZONE; extern const char* FILESYS_PREFIX_OZONE;
/// Utility function to get error messages from HDFS. This function takes prefix/file and /// Utility function to get error messages from HDFS. This function takes prefix/file and
@@ -66,6 +67,9 @@ bool IsABFSPath(const char* path, bool check_default_fs = true);
/// Returns true iff the path refers to a location on an ADL filesystem. /// Returns true iff the path refers to a location on an ADL filesystem.
bool IsADLSPath(const char* path, bool check_default_fs = true); bool IsADLSPath(const char* path, bool check_default_fs = true);
/// Returns true iff the path refers to a location on an GCS filesystem.
bool IsGcsPath(const char* path, bool check_default_fs = true);
/// Returns true iff the path refers to a location on an Ozone filesystem. /// Returns true iff the path refers to a location on an Ozone filesystem.
bool IsOzonePath(const char* path, bool check_default_fs = true); bool IsOzonePath(const char* path, bool check_default_fs = true);

View File

@@ -189,6 +189,7 @@ export CDP_OZONE_VERSION=1.0.0.7.2.7.0-44
export CDP_PARQUET_VERSION=1.10.99.7.2.7.0-44 export CDP_PARQUET_VERSION=1.10.99.7.2.7.0-44
export CDP_RANGER_VERSION=2.1.0.7.2.7.0-44 export CDP_RANGER_VERSION=2.1.0.7.2.7.0-44
export CDP_TEZ_VERSION=0.9.1.7.2.7.0-44 export CDP_TEZ_VERSION=0.9.1.7.2.7.0-44
export CDP_GCS_VERSION=2.1.2.7.2.7.0-44
export ARCH_NAME=$(uname -p) export ARCH_NAME=$(uname -p)
@@ -252,6 +253,7 @@ export IMPALA_RANGER_URL=${CDP_RANGER_URL-}
export IMPALA_TEZ_VERSION=${CDP_TEZ_VERSION} export IMPALA_TEZ_VERSION=${CDP_TEZ_VERSION}
export IMPALA_TEZ_URL=${CDP_TEZ_URL-} export IMPALA_TEZ_URL=${CDP_TEZ_URL-}
export IMPALA_HIVE_STORAGE_API_VERSION=${HIVE_STORAGE_API_VERSION_OVERRIDE:-"2.3.0.$IMPALA_HIVE_VERSION"} export IMPALA_HIVE_STORAGE_API_VERSION=${HIVE_STORAGE_API_VERSION_OVERRIDE:-"2.3.0.$IMPALA_HIVE_VERSION"}
export IMPALA_GCS_VERSION=${CDP_GCS_VERSION}
# Extract the first component of the hive version. # Extract the first component of the hive version.
# Allow overriding of Hive source location in case we want to build Impala without # Allow overriding of Hive source location in case we want to build Impala without
@@ -349,6 +351,10 @@ export azure_client_secret="${azure_client_secret-DummyAdlsClientSecret}"
export azure_data_lake_store_name="${azure_data_lake_store_name-}" export azure_data_lake_store_name="${azure_data_lake_store_name-}"
export azure_storage_account_name="${azure_storage_account_name-}" export azure_storage_account_name="${azure_storage_account_name-}"
export azure_storage_container_name="${azure_storage_container_name-}" export azure_storage_container_name="${azure_storage_container_name-}"
export GOOGLE_CLOUD_PROJECT_ID="${GOOGLE_CLOUD_PROJECT_ID-}"
export GOOGLE_CLOUD_SERVICE_ACCOUNT="${GOOGLE_CLOUD_SERVICE_ACCOUNT-}"
export GOOGLE_APPLICATION_CREDENTIALS="${GOOGLE_APPLICATION_CREDENTIALS-}"
export GCS_BUCKET="${GCS_BUCKET-}"
export HDFS_REPLICATION="${HDFS_REPLICATION-3}" export HDFS_REPLICATION="${HDFS_REPLICATION-3}"
export ISILON_NAMENODE="${ISILON_NAMENODE-}" export ISILON_NAMENODE="${ISILON_NAMENODE-}"
# Internal and external interfaces that test cluster services will listen on. The # Internal and external interfaces that test cluster services will listen on. The
@@ -493,6 +499,15 @@ elif [ "${TARGET_FILESYSTEM}" = "abfs" ]; then
domain="${azure_storage_account_name}.dfs.core.windows.net" domain="${azure_storage_account_name}.dfs.core.windows.net"
DEFAULT_FS="abfss://${azure_storage_container_name}@${domain}" DEFAULT_FS="abfss://${azure_storage_container_name}@${domain}"
export DEFAULT_FS export DEFAULT_FS
elif [ "${TARGET_FILESYSTEM}" = "gs" ]; then
# Basic error checking
if [[ "${GOOGLE_APPLICATION_CREDENTIALS}" = "" ]]; then
echo "GOOGLE_APPLICATION_CREDENTIALS should be set to the JSON file that contains
your service account key."
return 1
fi
DEFAULT_FS="gs://${GCS_BUCKET}"
export DEFAULT_FS
elif [ "${TARGET_FILESYSTEM}" = "isilon" ]; then elif [ "${TARGET_FILESYSTEM}" = "isilon" ]; then
if [ "${ISILON_NAMENODE}" = "" ]; then if [ "${ISILON_NAMENODE}" = "" ]; then
echo "In order to access the Isilon filesystem, ISILON_NAMENODE" echo "In order to access the Isilon filesystem, ISILON_NAMENODE"
@@ -526,7 +541,7 @@ elif [ "${TARGET_FILESYSTEM}" = "hdfs" ]; then
fi fi
else else
echo "Unsupported filesystem '$TARGET_FILESYSTEM'" echo "Unsupported filesystem '$TARGET_FILESYSTEM'"
echo "Valid values are: hdfs, isilon, s3, local" echo "Valid values are: hdfs, isilon, s3, abfs, adls, gs, local"
return 1 return 1
fi fi
@@ -735,6 +750,7 @@ echo "IMPALA_HUDI_VERSION = $IMPALA_HUDI_VERSION"
echo "IMPALA_KUDU_VERSION = $IMPALA_KUDU_VERSION" echo "IMPALA_KUDU_VERSION = $IMPALA_KUDU_VERSION"
echo "IMPALA_RANGER_VERSION = $IMPALA_RANGER_VERSION" echo "IMPALA_RANGER_VERSION = $IMPALA_RANGER_VERSION"
echo "IMPALA_ICEBERG_VERSION = $IMPALA_ICEBERG_VERSION" echo "IMPALA_ICEBERG_VERSION = $IMPALA_ICEBERG_VERSION"
echo "IMPALA_GCS_VERSION = $IMPALA_GCS_VERSION"
# Kerberos things. If the cluster exists and is kerberized, source # Kerberos things. If the cluster exists and is kerberized, source
# the required environment. This is required for any hadoop tool to # the required environment. This is required for any hadoop tool to

View File

@@ -770,7 +770,7 @@ public class HdfsTable extends Table implements FeFsTable {
* permissions Impala has on the given path. If the path does not exist, recurses up * permissions Impala has on the given path. If the path does not exist, recurses up
* the path until a existing parent directory is found, and inherit access permissions * the path until a existing parent directory is found, and inherit access permissions
* from that. * from that.
* Always returns READ_WRITE for S3 and ADLS files. * Always returns READ_WRITE for S3, ADLS and GCS files.
*/ */
private static TAccessLevel getAvailableAccessLevel(String tableName, private static TAccessLevel getAvailableAccessLevel(String tableName,
Path location, FsPermissionCache permCache) throws IOException { Path location, FsPermissionCache permCache) throws IOException {
@@ -818,6 +818,12 @@ public class HdfsTable extends Table implements FeFsTable {
// permissions to hadoop users/groups (HADOOP-14437). // permissions to hadoop users/groups (HADOOP-14437).
if (FileSystemUtil.isADLFileSystem(fs)) return true; if (FileSystemUtil.isADLFileSystem(fs)) return true;
if (FileSystemUtil.isABFSFileSystem(fs)) return true; if (FileSystemUtil.isABFSFileSystem(fs)) return true;
// GCS IAM permissions don't map to POSIX permissions. GCS connector presents fake
// POSIX file permissions configured by the 'fs.gs.reported.permissions' property.
// So calling getPermissions() on GCS files make no sense. Assume all GCS files have
// READ_WRITE permissions.
if (FileSystemUtil.isGCSFileSystem(fs)) return true;
return false; return false;
} }

View File

@@ -65,6 +65,7 @@ public class FileSystemUtil {
public static final String SCHEME_S3A = "s3a"; public static final String SCHEME_S3A = "s3a";
public static final String SCHEME_O3FS = "o3fs"; public static final String SCHEME_O3FS = "o3fs";
public static final String SCHEME_ALLUXIO = "alluxio"; public static final String SCHEME_ALLUXIO = "alluxio";
public static final String SCHEME_GCS = "gs";
/** /**
* Set containing all FileSystem scheme that known to supports storage UUIDs in * Set containing all FileSystem scheme that known to supports storage UUIDs in
@@ -89,6 +90,7 @@ public class FileSystemUtil {
.add(SCHEME_HDFS) .add(SCHEME_HDFS)
.add(SCHEME_S3A) .add(SCHEME_S3A)
.add(SCHEME_O3FS) .add(SCHEME_O3FS)
.add(SCHEME_GCS)
.build(); .build();
/** /**
@@ -101,6 +103,7 @@ public class FileSystemUtil {
.add(SCHEME_ADL) .add(SCHEME_ADL)
.add(SCHEME_HDFS) .add(SCHEME_HDFS)
.add(SCHEME_S3A) .add(SCHEME_S3A)
.add(SCHEME_GCS)
.build(); .build();
/** /**
@@ -114,6 +117,7 @@ public class FileSystemUtil {
.add(SCHEME_HDFS) .add(SCHEME_HDFS)
.add(SCHEME_S3A) .add(SCHEME_S3A)
.add(SCHEME_O3FS) .add(SCHEME_O3FS)
.add(SCHEME_GCS)
.build(); .build();
/** /**
@@ -384,6 +388,13 @@ public class FileSystemUtil {
return hasScheme(path, SCHEME_S3A); return hasScheme(path, SCHEME_S3A);
} }
/**
* Returns true iff the filesystem is a GoogleHadoopFileSystem.
*/
public static boolean isGCSFileSystem(FileSystem fs) {
return hasScheme(fs, SCHEME_GCS);
}
/** /**
* Returns true iff the filesystem is AdlFileSystem. * Returns true iff the filesystem is AdlFileSystem.
*/ */
@@ -491,7 +502,8 @@ public class FileSystemUtil {
LOCAL, LOCAL,
S3, S3,
OZONE, OZONE,
ALLUXIO; ALLUXIO,
GCS;
private static final Map<String, FsType> SCHEME_TO_FS_MAPPING = private static final Map<String, FsType> SCHEME_TO_FS_MAPPING =
ImmutableMap.<String, FsType>builder() ImmutableMap.<String, FsType>builder()
@@ -503,6 +515,7 @@ public class FileSystemUtil {
.put(SCHEME_S3A, S3) .put(SCHEME_S3A, S3)
.put(SCHEME_O3FS, OZONE) .put(SCHEME_O3FS, OZONE)
.put(SCHEME_ALLUXIO, ALLUXIO) .put(SCHEME_ALLUXIO, ALLUXIO)
.put(SCHEME_GCS, GCS)
.build(); .build();
/** /**
@@ -676,7 +689,7 @@ public class FileSystemUtil {
return new FilterIterator(p, new RecursingIterator(fs, p)); return new FilterIterator(p, new RecursingIterator(fs, p));
} }
DebugUtils.executeDebugAction(debugAction, DebugUtils.REFRESH_HDFS_LISTING_DELAY); DebugUtils.executeDebugAction(debugAction, DebugUtils.REFRESH_HDFS_LISTING_DELAY);
return new FilterIterator(p, fs.listStatusIterator(p)); return new FilterIterator(p, listStatusIterator(fs, p));
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
if (LOG.isWarnEnabled()) LOG.warn("Path does not exist: " + p.toString(), e); if (LOG.isWarnEnabled()) LOG.warn("Path does not exist: " + p.toString(), e);
return null; return null;
@@ -697,6 +710,23 @@ public class FileSystemUtil {
} }
} }
/**
* Wrapper around FileSystem.listStatusIterator() to make sure the path exists.
*
* @throws FileNotFoundException if <code>p</code> does not exist
* @throws IOException if any I/O error occurredd
*/
public static RemoteIterator<FileStatus> listStatusIterator(FileSystem fs, Path p)
throws IOException {
RemoteIterator<FileStatus> iterator = fs.listStatusIterator(p);
// Some FileSystem implementations like GoogleHadoopFileSystem doesn't check
// existence of the start path when creating the RemoteIterator. Instead, their
// iterators throw the FileNotFoundException in the first call of hasNext() when
// the start path doesn't exist. Here we call hasNext() to ensure start path exists.
iterator.hasNext();
return iterator;
}
/** /**
* Returns true if the path 'p' is a directory, false otherwise. * Returns true if the path 'p' is a directory, false otherwise.
*/ */
@@ -836,7 +866,7 @@ public class FileSystemUtil {
private RecursingIterator(FileSystem fs, Path startPath) throws IOException { private RecursingIterator(FileSystem fs, Path startPath) throws IOException {
this.fs_ = Preconditions.checkNotNull(fs); this.fs_ = Preconditions.checkNotNull(fs);
curIter_ = fs.listStatusIterator(Preconditions.checkNotNull(startPath)); curIter_ = listStatusIterator(fs, Preconditions.checkNotNull(startPath));
} }
@Override @Override
@@ -873,8 +903,9 @@ public class FileSystemUtil {
curFile_ = fileStatus; curFile_ = fileStatus;
return; return;
} }
RemoteIterator<FileStatus> iter = listStatusIterator(fs_, fileStatus.getPath());
iters_.push(curIter_); iters_.push(curIter_);
curIter_ = fs_.listStatusIterator(fileStatus.getPath()); curIter_ = iter;
curFile_ = fileStatus; curFile_ = fileStatus;
} }

View File

@@ -132,6 +132,12 @@ under the License.
<version>${hadoop.version}</version> <version>${hadoop.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.google.cloud.bigdataoss</groupId>
<artifactId>gcs-connector</artifactId>
<version>${gcs.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.hbase</groupId> <groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId> <artifactId>hbase-client</artifactId>

View File

@@ -44,6 +44,7 @@ under the License.
<parquet.version>${env.IMPALA_PARQUET_VERSION}</parquet.version> <parquet.version>${env.IMPALA_PARQUET_VERSION}</parquet.version>
<kite.version>${env.IMPALA_KITE_VERSION}</kite.version> <kite.version>${env.IMPALA_KITE_VERSION}</kite.version>
<knox.version>${env.IMPALA_KNOX_VERSION}</knox.version> <knox.version>${env.IMPALA_KNOX_VERSION}</knox.version>
<gcs.version>${env.IMPALA_GCS_VERSION}</gcs.version>
<thrift.version>0.9.3-1</thrift.version> <thrift.version>0.9.3-1</thrift.version>
<impala.extdatasrc.api.version>${project.version}</impala.extdatasrc.api.version> <impala.extdatasrc.api.version>${project.version}</impala.extdatasrc.api.version>
<impala.query.event.hook.api.version>${project.version}</impala.query.event.hook.api.version> <impala.query.event.hook.api.version>${project.version}</impala.query.event.hook.api.version>

View File

@@ -130,9 +130,9 @@ elif [ $SKIP_SNAPSHOT_LOAD -eq 0 ]; then
# Don't skip the metadata load if a schema change is detected. # Don't skip the metadata load if a schema change is detected.
if ! ${IMPALA_HOME}/testdata/bin/check-schema-diff.sh; then if ! ${IMPALA_HOME}/testdata/bin/check-schema-diff.sh; then
if [[ "${TARGET_FILESYSTEM}" == "isilon" || "${TARGET_FILESYSTEM}" == "s3" || \ if [[ "${TARGET_FILESYSTEM}" == "isilon" || "${TARGET_FILESYSTEM}" == "s3" || \
"${TARGET_FILESYSTEM}" == "local" ]] ; then "${TARGET_FILESYSTEM}" == "local" || "${TARGET_FILESYSTEM}" == "gs" ]] ; then
echo "ERROR in $0 at line $LINENO: A schema change has been detected in the" echo "ERROR in $0 at line $LINENO: A schema change has been detected in the"
echo "metadata, but it cannot be loaded on isilon, s3 or local and the" echo "metadata, but it cannot be loaded on isilon, s3, gcs or local and the"
echo "target file system is ${TARGET_FILESYSTEM}. Exiting." echo "target file system is ${TARGET_FILESYSTEM}. Exiting."
exit 1 exit 1
fi fi

View File

@@ -119,6 +119,15 @@ if [ "${TARGET_FILESYSTEM}" = "s3" ]; then
echo "Copying the test-warehouse to s3 failed, aborting." echo "Copying the test-warehouse to s3 failed, aborting."
exit 1 exit 1
fi fi
elif [ "${TARGET_FILESYSTEM}" = "gs" ]; then
# Authenticate with the service account before using gsutil
gcloud auth activate-service-account --key-file "$GOOGLE_APPLICATION_CREDENTIALS"
# Parallelly(-m) upload files
if ! gsutil -m -q cp -r ${SNAPSHOT_STAGING_DIR}${TEST_WAREHOUSE_DIR} \
gs://${GCS_BUCKET}; then
echo "Copying the test-warehouse to GCS failed, aborting."
exit 1
fi
else else
hadoop fs -put ${SNAPSHOT_STAGING_DIR}${TEST_WAREHOUSE_DIR}/* ${FILESYSTEM_PREFIX}${TEST_WAREHOUSE_DIR} hadoop fs -put ${SNAPSHOT_STAGING_DIR}${TEST_WAREHOUSE_DIR}/* ${FILESYSTEM_PREFIX}${TEST_WAREHOUSE_DIR}
fi fi

View File

@@ -80,13 +80,13 @@ elif [[ ${DEFAULT_FS} == "${LOCAL_FS}" ]]; then
$IMPALA_HOME/testdata/bin/run-hive-server.sh -only_metastore 2>&1 | \ $IMPALA_HOME/testdata/bin/run-hive-server.sh -only_metastore 2>&1 | \
tee ${IMPALA_CLUSTER_LOGS_DIR}/run-hive-server.log tee ${IMPALA_CLUSTER_LOGS_DIR}/run-hive-server.log
else else
# With Isilon, we only start the Hive metastore. # With Isilon, ABFS, ADLS or GCS we only start the Hive metastore.
# - HDFS is not started becuase Isilon is used as the defaultFs in core-site # - HDFS is not started becuase remote storage is used as the defaultFs in core-site
# - HBase is irrelevent for Impala testing with Isilon. # - HBase is irrelevent for Impala testing with remote storage.
# - We don't yet have a good way to start YARN using a different defaultFS. Moreoever, # - We don't yet have a good way to start YARN using a different defaultFS. Moreoever,
# we currently don't run hive queries against Isilon for testing. # we currently don't run hive queries against Isilon for testing.
# - LLAMA is avoided because we cannot start YARN. # - LLAMA is avoided because we cannot start YARN.
# - KMS is used for encryption testing, which is not available on Isilon. # - KMS is used for encryption testing, which is not available on remote storage.
# - Hive needs YARN, and we don't run Hive queries. # - Hive needs YARN, and we don't run Hive queries.
# TODO: Figure out how to start YARN, LLAMA and Hive with a different defaultFs. # TODO: Figure out how to start YARN, LLAMA and Hive with a different defaultFs.
echo " --> Starting Hive Metastore Service" echo " --> Starting Hive Metastore Service"

View File

@@ -92,6 +92,12 @@ CONFIG = {
# buckets and rely on the old behavior. This also means that the tests do not # buckets and rely on the old behavior. This also means that the tests do not
# require AWS credentials. # require AWS credentials.
'fs.s3a.bucket.probe': '1', 'fs.s3a.bucket.probe': '1',
# GCS IAM permissions don't map to POSIX permissions required by Hadoop FileSystem,
# so the GCS connector presents fake POSIX file permissions. The default 700 may end up
# being too restrictive for some processes performing file-based checks, e.g.
# HiveServer2 requires permission of /tmp/hive to be at lest 733.
'fs.gs.reported.permissions': '777',
} }
if target_filesystem == 's3': if target_filesystem == 's3':

View File

@@ -28,7 +28,7 @@ from subprocess import check_call
from getpass import getuser from getpass import getuser
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfLocal, SkipIfHive2) SkipIfLocal, SkipIfHive2, SkipIfGCS)
from tests.util.hdfs_util import NAMENODE from tests.util.hdfs_util import NAMENODE
from tests.util.calculation_util import get_random_id from tests.util.calculation_util import get_random_id
@@ -1049,6 +1049,7 @@ class TestRanger(CustomClusterTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfHive2.ranger_auth @SkipIfHive2.ranger_auth
@CustomClusterTestSuite.with_args() @CustomClusterTestSuite.with_args()
def test_hive_with_ranger_setup(self, vector): def test_hive_with_ranger_setup(self, vector):

View File

@@ -64,6 +64,7 @@ from tests.util.filesystem_utils import (
IS_S3, IS_S3,
IS_ABFS, IS_ABFS,
IS_ADLS, IS_ADLS,
IS_GCS,
IS_HDFS, IS_HDFS,
S3_BUCKET_NAME, S3_BUCKET_NAME,
S3GUARD_ENABLED, S3GUARD_ENABLED,
@@ -198,6 +199,7 @@ class ImpalaTestSuite(BaseTestSuite):
# ABFS: uses the HDFS CLI # ABFS: uses the HDFS CLI
# ADLS: uses a mixture of azure-data-lake-store-python and the HDFS CLI (TODO: # ADLS: uses a mixture of azure-data-lake-store-python and the HDFS CLI (TODO:
# this should completely switch to the HDFS CLI once we test it) # this should completely switch to the HDFS CLI once we test it)
# GCS: uses the HDFS CLI
# #
# 'hdfs_client' is a HDFS-specific client library, and it only works when running on # 'hdfs_client' is a HDFS-specific client library, and it only works when running on
# HDFS. When using 'hdfs_client', the test must be skipped on everything other than # HDFS. When using 'hdfs_client', the test must be skipped on everything other than
@@ -218,6 +220,9 @@ class ImpalaTestSuite(BaseTestSuite):
cls.filesystem_client = HadoopFsCommandLineClient("ABFS") cls.filesystem_client = HadoopFsCommandLineClient("ABFS")
elif IS_ADLS: elif IS_ADLS:
cls.filesystem_client = ADLSClient(ADLS_STORE_NAME) cls.filesystem_client = ADLSClient(ADLS_STORE_NAME)
elif IS_GCS:
# GCS is implemented via HDFS command line client
cls.filesystem_client = HadoopFsCommandLineClient("GCS")
# Override the shell history path so that commands run by any tests # Override the shell history path so that commands run by any tests
# don't write any history into the developer's file. # don't write any history into the developer's file.
@@ -996,10 +1001,10 @@ class ImpalaTestSuite(BaseTestSuite):
tf_dimensions = ImpalaTestDimension('table_format', *table_formats) tf_dimensions = ImpalaTestDimension('table_format', *table_formats)
else: else:
tf_dimensions = load_table_info_dimension(cls.get_workload(), exploration_strategy) tf_dimensions = load_table_info_dimension(cls.get_workload(), exploration_strategy)
# If 'skip_hbase' is specified or the filesystem is isilon, s3 or local, we don't # If 'skip_hbase' is specified or the filesystem is isilon, s3, GCS(gs) or local,
# need the hbase dimension. # we don't need the hbase dimension.
if pytest.config.option.skip_hbase or TARGET_FILESYSTEM.lower() \ if pytest.config.option.skip_hbase or TARGET_FILESYSTEM.lower() \
in ['s3', 'isilon', 'local', 'abfs', 'adls']: in ['s3', 'isilon', 'local', 'abfs', 'adls', 'gs']:
for tf_dimension in tf_dimensions: for tf_dimension in tf_dimensions:
if tf_dimension.value.file_format == "hbase": if tf_dimension.value.file_format == "hbase":
tf_dimensions.remove(tf_dimension) tf_dimensions.remove(tf_dimension)

View File

@@ -31,6 +31,7 @@ from tests.common.kudu_test_suite import get_kudu_master_flag
from tests.util.filesystem_utils import ( from tests.util.filesystem_utils import (
IS_ABFS, IS_ABFS,
IS_ADLS, IS_ADLS,
IS_GCS,
IS_EC, IS_EC,
IS_HDFS, IS_HDFS,
IS_ISILON, IS_ISILON,
@@ -107,6 +108,26 @@ class SkipIfADLS:
eventually_consistent = pytest.mark.skipif(IS_ADLS, eventually_consistent = pytest.mark.skipif(IS_ADLS,
reason="The client is slow to realize changes to file metadata") reason="The client is slow to realize changes to file metadata")
class SkipIfGCS:
# These are skipped due to product limitations.
caching = pytest.mark.skipif(IS_GCS, reason="SET CACHED not implemented for GCS")
hive = pytest.mark.skipif(IS_GCS, reason="Hive doesn't work with GCS")
hdfs_block_size = pytest.mark.skipif(IS_GCS, reason="GCS uses it's own block size")
hdfs_acls = pytest.mark.skipif(IS_GCS, reason="HDFS acls are not supported on GCS")
jira = partial(pytest.mark.skipif, IS_GCS)
hdfs_encryption = pytest.mark.skipif(IS_GCS,
reason="HDFS encryption is not supported with GCS")
# These need test infra work to re-enable.
hbase = pytest.mark.skipif(IS_GCS, reason="HBase not started with GCS")
qualified_path = pytest.mark.skipif(IS_GCS,
reason="Tests rely on HDFS qualified paths, IMPALA-1872")
variable_listing_times = pytest.mark.skipif(IS_GCS,
reason="Flakiness due to unpredictable listing times on GCS.")
class SkipIfKudu: class SkipIfKudu:
no_hybrid_clock = pytest.mark.skipif( no_hybrid_clock = pytest.mark.skipif(
get_kudu_master_flag("--use_hybrid_clock") == "false", get_kudu_master_flag("--use_hybrid_clock") == "false",

View File

@@ -37,6 +37,7 @@ from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.resource_pool_config import ResourcePoolConfig from tests.common.resource_pool_config import ResourcePoolConfig
from tests.common.skip import ( from tests.common.skip import (
SkipIfS3, SkipIfS3,
SkipIfGCS,
SkipIfABFS, SkipIfABFS,
SkipIfADLS, SkipIfADLS,
SkipIfEC, SkipIfEC,
@@ -443,6 +444,7 @@ class TestAdmissionController(TestAdmissionControllerBase, HS2TestSuite):
".* is greater than pool max mem resources 10.00 MB", str(ex)) ".* is greater than pool max mem resources 10.00 MB", str(ex))
@SkipIfS3.hdfs_block_size @SkipIfS3.hdfs_block_size
@SkipIfGCS.hdfs_block_size
@SkipIfABFS.hdfs_block_size @SkipIfABFS.hdfs_block_size
@SkipIfADLS.hdfs_block_size @SkipIfADLS.hdfs_block_size
@SkipIfEC.fix_later @SkipIfEC.fix_later

View File

@@ -25,7 +25,7 @@ from subprocess import check_call
from tests.util.filesystem_utils import get_fs_path from tests.util.filesystem_utils import get_fs_path
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import (SkipIf, SkipIfS3, SkipIfABFS, SkipIfADLS, from tests.common.skip import (SkipIf, SkipIfS3, SkipIfABFS, SkipIfADLS,
SkipIfIsilon, SkipIfLocal) SkipIfIsilon, SkipIfGCS, SkipIfLocal)
LOG = logging.getLogger('test_coordinators') LOG = logging.getLogger('test_coordinators')
LOG.setLevel(level=logging.DEBUG) LOG.setLevel(level=logging.DEBUG)
@@ -320,6 +320,7 @@ class TestCoordinators(CustomClusterTestSuite):
assert num_hosts in str(ret) assert num_hosts in str(ret)
@SkipIfS3.hbase @SkipIfS3.hbase
@SkipIfGCS.hbase
@SkipIfABFS.hbase @SkipIfABFS.hbase
@SkipIfADLS.hbase @SkipIfADLS.hbase
@SkipIfIsilon.hbase @SkipIfIsilon.hbase

View File

@@ -22,7 +22,8 @@ import pytest
from tests.common.skip import SkipIfHive2 from tests.common.skip import SkipIfHive2
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.environ import HIVE_MAJOR_VERSION from tests.common.environ import HIVE_MAJOR_VERSION
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfGCS, SkipIfLocal)
from tests.util.hive_utils import HiveDbWrapper from tests.util.hive_utils import HiveDbWrapper
from tests.util.event_processor_utils import EventProcessorUtils from tests.util.event_processor_utils import EventProcessorUtils
from tests.util.filesystem_utils import WAREHOUSE from tests.util.filesystem_utils import WAREHOUSE
@@ -31,6 +32,7 @@ from tests.util.filesystem_utils import WAREHOUSE
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfGCS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
class TestEventProcessing(CustomClusterTestSuite): class TestEventProcessing(CustomClusterTestSuite):

View File

@@ -21,7 +21,8 @@ from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import SkipIfLocal from tests.common.skip import SkipIfLocal
from tests.util.filesystem_utils import ( from tests.util.filesystem_utils import (
IS_ISILON, IS_ISILON,
IS_ADLS) IS_ADLS,
IS_GCS)
from time import sleep from time import sleep
@SkipIfLocal.hdfs_fd_caching @SkipIfLocal.hdfs_fd_caching
@@ -130,7 +131,7 @@ class TestHdfsFdCaching(CustomClusterTestSuite):
# Caching applies to HDFS, S3, and ABFS files. If this is HDFS, S3, or ABFS, then # Caching applies to HDFS, S3, and ABFS files. If this is HDFS, S3, or ABFS, then
# verify that caching works. Otherwise, verify that file handles are not cached. # verify that caching works. Otherwise, verify that file handles are not cached.
if IS_ADLS or IS_ISILON: if IS_ADLS or IS_ISILON or IS_GCS:
caching_expected = False caching_expected = False
else: else:
caching_expected = True caching_expected = True
@@ -146,7 +147,7 @@ class TestHdfsFdCaching(CustomClusterTestSuite):
handle_timeout = 5 handle_timeout = 5
# Only test eviction on platforms where caching is enabled. # Only test eviction on platforms where caching is enabled.
if IS_ADLS or IS_ISILON: if IS_ADLS or IS_ISILON or IS_GCS:
return return
caching_expected = True caching_expected = True
self.run_fd_caching_test(vector, caching_expected, cache_capacity, handle_timeout) self.run_fd_caching_test(vector, caching_expected, cache_capacity, handle_timeout)
@@ -174,7 +175,7 @@ class TestHdfsFdCaching(CustomClusterTestSuite):
eviction_timeout_secs = 5 eviction_timeout_secs = 5
# Only test eviction on platforms where caching is enabled. # Only test eviction on platforms where caching is enabled.
if IS_ADLS or IS_ISILON: if IS_ADLS or IS_ISILON or IS_GCS:
return return
# Maximum number of file handles cached. # Maximum number of file handles cached.

View File

@@ -21,7 +21,7 @@ import pytest
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.environ import HIVE_MAJOR_VERSION from tests.common.environ import HIVE_MAJOR_VERSION
from tests.common.skip import SkipIfS3 from tests.common.skip import SkipIfS3, SkipIfGCS
from tests.common.test_dimensions import create_exec_option_dimension from tests.common.test_dimensions import create_exec_option_dimension
from tests.common.test_result_verifier import verify_query_result_is_equal from tests.common.test_result_verifier import verify_query_result_is_equal
from tests.util.filesystem_utils import get_fs_path from tests.util.filesystem_utils import get_fs_path
@@ -52,6 +52,7 @@ class TestParquetInterop(CustomClusterTestSuite):
lambda v: v.get_value('table_format').file_format == 'parquet') lambda v: v.get_value('table_format').file_format == 'parquet')
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@pytest.mark.execute_serially @pytest.mark.execute_serially
@CustomClusterTestSuite.with_args("-convert_legacy_hive_parquet_utc_timestamps=true " @CustomClusterTestSuite.with_args("-convert_legacy_hive_parquet_utc_timestamps=true "
"-hdfs_zone_info_zip=%s" % get_fs_path("/test-warehouse/tzdb/2017c.zip")) "-hdfs_zone_info_zip=%s" % get_fs_path("/test-warehouse/tzdb/2017c.zip"))

View File

@@ -21,7 +21,7 @@ import pytest
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.environ import HIVE_MAJOR_VERSION from tests.common.environ import HIVE_MAJOR_VERSION
from tests.common.skip import SkipIfS3 from tests.common.skip import SkipIfS3, SkipIfGCS
from tests.common.test_dimensions import create_exec_option_dimension from tests.common.test_dimensions import create_exec_option_dimension
from tests.common.test_result_verifier import verify_query_result_is_equal from tests.common.test_result_verifier import verify_query_result_is_equal
@@ -52,6 +52,7 @@ class TestTextInterop(CustomClusterTestSuite):
lambda v: v.get_value('table_format').file_format == 'textfile') lambda v: v.get_value('table_format').file_format == 'textfile')
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@pytest.mark.execute_serially @pytest.mark.execute_serially
def test_hive_impala_interop(self, unique_database, cluster_properties): def test_hive_impala_interop(self, unique_database, cluster_properties):
"""Tests compressed text file written by Hive with different codecs """Tests compressed text file written by Hive with different codecs

View File

@@ -18,7 +18,7 @@
import pytest import pytest
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfLocal from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfLocal, SkipIfGCS
from tests.util.filesystem_utils import IS_ISILON, WAREHOUSE from tests.util.filesystem_utils import IS_ISILON, WAREHOUSE
from tests.util.hdfs_util import ( from tests.util.hdfs_util import (
HdfsConfig, HdfsConfig,
@@ -28,6 +28,7 @@ from tests.util.hdfs_util import (
TEST_TBL = "insert_inherit_permission" TEST_TBL = "insert_inherit_permission"
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
class TestInsertBehaviourCustomCluster(CustomClusterTestSuite): class TestInsertBehaviourCustomCluster(CustomClusterTestSuite):

View File

@@ -26,7 +26,7 @@ import tempfile
import time import time
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import SkipIfABFS, SkipIfADLS, SkipIfS3 from tests.common.skip import SkipIfABFS, SkipIfADLS, SkipIfS3, SkipIfGCS
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@@ -152,6 +152,7 @@ class TestLineage(CustomClusterTestSuite):
@SkipIfABFS.hbase @SkipIfABFS.hbase
@SkipIfADLS.hbase @SkipIfADLS.hbase
@SkipIfS3.hbase @SkipIfS3.hbase
@SkipIfGCS.hbase
@pytest.mark.execute_serially @pytest.mark.execute_serially
@CustomClusterTestSuite.with_args("--lineage_event_log_dir={0}" @CustomClusterTestSuite.with_args("--lineage_event_log_dir={0}"
.format(LINEAGE_TESTS_DIR)) .format(LINEAGE_TESTS_DIR))

View File

@@ -27,7 +27,7 @@ import time
from multiprocessing.pool import ThreadPool from multiprocessing.pool import ThreadPool
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import (SkipIfHive2, SkipIfS3, SkipIfABFS, from tests.common.skip import (SkipIfHive2, SkipIfS3, SkipIfABFS, SkipIfGCS,
SkipIfADLS, SkipIfIsilon, SkipIfLocal) SkipIfADLS, SkipIfIsilon, SkipIfLocal)
from tests.util.filesystem_utils import WAREHOUSE from tests.util.filesystem_utils import WAREHOUSE
@@ -535,6 +535,7 @@ class TestFullAcid(CustomClusterTestSuite):
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfGCS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@pytest.mark.execute_serially @pytest.mark.execute_serially

View File

@@ -19,7 +19,7 @@ import pytest
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.test_vector import ImpalaTestDimension from tests.common.test_vector import ImpalaTestDimension
from tests.common.skip import SkipIfABFS, SkipIfADLS, SkipIfS3 from tests.common.skip import SkipIfABFS, SkipIfADLS, SkipIfS3, SkipIfGCS
from tests.common.test_dimensions import create_exec_option_dimension from tests.common.test_dimensions import create_exec_option_dimension
class TestLocalTzConversion(CustomClusterTestSuite): class TestLocalTzConversion(CustomClusterTestSuite):
@@ -50,6 +50,7 @@ class TestLocalTzConversion(CustomClusterTestSuite):
@SkipIfABFS.hbase @SkipIfABFS.hbase
@SkipIfADLS.hbase @SkipIfADLS.hbase
@SkipIfS3.hbase @SkipIfS3.hbase
@SkipIfGCS.hbase
@pytest.mark.execute_serially @pytest.mark.execute_serially
@CustomClusterTestSuite.with_args("--use_local_tz_for_unix_timestamp_conversions=true") @CustomClusterTestSuite.with_args("--use_local_tz_for_unix_timestamp_conversions=true")
def test_timestamp_functions(self, vector): def test_timestamp_functions(self, vector):

View File

@@ -23,11 +23,13 @@ from tests.common.skip import (
SkipIfS3, SkipIfS3,
SkipIfABFS, SkipIfABFS,
SkipIfADLS, SkipIfADLS,
SkipIfGCS,
SkipIfIsilon, SkipIfIsilon,
SkipIfLocal) SkipIfLocal)
from tests.util.hive_utils import HiveDbWrapper from tests.util.hive_utils import HiveDbWrapper
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -24,7 +24,7 @@ import string
import subprocess import subprocess
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfGCS
class TestParquetMaxPageHeader(CustomClusterTestSuite): class TestParquetMaxPageHeader(CustomClusterTestSuite):
'''This tests large page headers in parquet files. Parquet page header size can '''This tests large page headers in parquet files. Parquet page header size can
@@ -101,6 +101,7 @@ class TestParquetMaxPageHeader(CustomClusterTestSuite):
put.wait() put.wait()
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -24,7 +24,8 @@ import subprocess
from tempfile import mkdtemp from tempfile import mkdtemp
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfGCS,
SkipIfLocal)
from tests.common.test_dimensions import create_uncompressed_text_dimension from tests.common.test_dimensions import create_uncompressed_text_dimension
from tests.util.filesystem_utils import get_fs_path from tests.util.filesystem_utils import get_fs_path
@@ -162,6 +163,7 @@ class TestUdfPersistence(CustomClusterTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@@ -184,6 +186,7 @@ class TestUdfPersistence(CustomClusterTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@@ -249,6 +252,7 @@ class TestUdfPersistence(CustomClusterTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@@ -312,6 +316,7 @@ class TestUdfPersistence(CustomClusterTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive

View File

@@ -34,7 +34,7 @@ from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.errors import Timeout from tests.common.errors import Timeout
from tests.common.skip import SkipIfEC, SkipIfBuildType from tests.common.skip import SkipIfEC, SkipIfBuildType, SkipIfGCS
from tests.common.skip import SkipIfNotHdfsMinicluster from tests.common.skip import SkipIfNotHdfsMinicluster
# The BE krpc port of the impalad to simulate rpc or disk errors in tests. # The BE krpc port of the impalad to simulate rpc or disk errors in tests.
@@ -283,6 +283,7 @@ class TestQueryRetries(CustomClusterTestSuite):
self.client.close_query(handle) self.client.close_query(handle)
self.__validate_web_ui_state() self.__validate_web_ui_state()
@SkipIfGCS.jira(reason="IMPALA-10562")
@SkipIfBuildType.not_dev_build @SkipIfBuildType.not_dev_build
@pytest.mark.execute_serially @pytest.mark.execute_serially
@CustomClusterTestSuite.with_args( @CustomClusterTestSuite.with_args(
@@ -348,6 +349,7 @@ class TestQueryRetries(CustomClusterTestSuite):
self.client.close_query(handle) self.client.close_query(handle)
self.__validate_web_ui_state() self.__validate_web_ui_state()
@SkipIfGCS.jira(reason="IMPALA-10562")
@SkipIfBuildType.not_dev_build @SkipIfBuildType.not_dev_build
@pytest.mark.execute_serially @pytest.mark.execute_serially
@CustomClusterTestSuite.with_args( @CustomClusterTestSuite.with_args(

View File

@@ -35,7 +35,7 @@ from TCLIService import TCLIService
from beeswaxd.BeeswaxService import QueryState from beeswaxd.BeeswaxService import QueryState
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import SkipIfNotHdfsMinicluster from tests.common.skip import SkipIfNotHdfsMinicluster, SkipIfGCS
from tests.hs2.hs2_test_suite import HS2TestSuite, needs_session from tests.hs2.hs2_test_suite import HS2TestSuite, needs_session
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@@ -256,6 +256,7 @@ class TestGracefulShutdown(CustomClusterTestSuite, HS2TestSuite):
def get_workload(cls): def get_workload(cls):
return 'functional-query' return 'functional-query'
@SkipIfGCS.jira(reason="IMPALA-10562")
@pytest.mark.execute_serially @pytest.mark.execute_serially
@CustomClusterTestSuite.with_args( @CustomClusterTestSuite.with_args(
impalad_args="--shutdown_grace_period_s={grace_period} \ impalad_args="--shutdown_grace_period_s={grace_period} \

View File

@@ -15,10 +15,11 @@ import pytest
import time import time
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
from tests.common.skip import SkipIfS3 from tests.common.skip import SkipIfS3, SkipIfGCS
@SkipIfS3.variable_listing_times @SkipIfS3.variable_listing_times
@SkipIfGCS.variable_listing_times
class TestTopicUpdateFrequency(CustomClusterTestSuite): class TestTopicUpdateFrequency(CustomClusterTestSuite):
@pytest.mark.execute_serially @pytest.mark.execute_serially

View File

@@ -25,7 +25,8 @@ import subprocess
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIf, SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfLocal from tests.common.skip import (SkipIf, SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfGCS,
SkipIfLocal)
from tests.common.test_dimensions import create_exec_option_dimension from tests.common.test_dimensions import create_exec_option_dimension
class TestDataErrors(ImpalaTestSuite): class TestDataErrors(ImpalaTestSuite):
@@ -106,6 +107,7 @@ class TestHdfsUnknownErrors(ImpalaTestSuite):
assert "Safe mode is OFF" in output assert "Safe mode is OFF" in output
@SkipIfS3.qualified_path @SkipIfS3.qualified_path
@SkipIfGCS.qualified_path
@SkipIfABFS.qualified_path @SkipIfABFS.qualified_path
@SkipIfADLS.qualified_path @SkipIfADLS.qualified_path
class TestHdfsScanNodeErrors(TestDataErrors): class TestHdfsScanNodeErrors(TestDataErrors):
@@ -125,6 +127,7 @@ class TestHdfsScanNodeErrors(TestDataErrors):
self.run_test_case('DataErrorsTest/hdfs-scan-node-errors', vector) self.run_test_case('DataErrorsTest/hdfs-scan-node-errors', vector)
@SkipIfS3.qualified_path @SkipIfS3.qualified_path
@SkipIfGCS.qualified_path
@SkipIfABFS.qualified_path @SkipIfABFS.qualified_path
@SkipIfADLS.qualified_path @SkipIfADLS.qualified_path
@SkipIfLocal.qualified_path @SkipIfLocal.qualified_path
@@ -141,6 +144,7 @@ class TestHdfsSeqScanNodeErrors(TestHdfsScanNodeErrors):
@SkipIfS3.qualified_path @SkipIfS3.qualified_path
@SkipIfGCS.qualified_path
@SkipIfABFS.qualified_path @SkipIfABFS.qualified_path
@SkipIfADLS.qualified_path @SkipIfADLS.qualified_path
class TestHdfsRcFileScanNodeErrors(TestHdfsScanNodeErrors): class TestHdfsRcFileScanNodeErrors(TestHdfsScanNodeErrors):

View File

@@ -27,8 +27,8 @@ from time import sleep
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_cluster import ImpalaCluster from tests.common.impala_cluster import ImpalaCluster
from tests.common.impala_test_suite import ImpalaTestSuite, LOG from tests.common.impala_test_suite import ImpalaTestSuite, LOG
from tests.common.skip import SkipIf, SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, \ from tests.common.skip import (SkipIf, SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfLocal SkipIfGCS, SkipIfLocal)
from tests.common.test_dimensions import create_exec_option_dimension from tests.common.test_dimensions import create_exec_option_dimension
from tests.common.test_vector import ImpalaTestDimension from tests.common.test_vector import ImpalaTestDimension
from tests.verifiers.metric_verifier import MetricVerifier from tests.verifiers.metric_verifier import MetricVerifier
@@ -63,6 +63,7 @@ QUERIES = [
@SkipIf.skip_hbase # -skip_hbase argument specified @SkipIf.skip_hbase # -skip_hbase argument specified
@SkipIfS3.hbase # S3: missing coverage: failures @SkipIfS3.hbase # S3: missing coverage: failures
@SkipIfGCS.hbase
@SkipIfABFS.hbase @SkipIfABFS.hbase
@SkipIfADLS.hbase @SkipIfADLS.hbase
@SkipIfIsilon.hbase # ISILON: missing coverage: failures. @SkipIfIsilon.hbase # ISILON: missing coverage: failures.

View File

@@ -17,10 +17,11 @@
import pytest import pytest
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3 from tests.common.skip import SkipIfS3, SkipIfGCS
@SkipIfS3.variable_listing_times @SkipIfS3.variable_listing_times
@SkipIfGCS.variable_listing_times
class TestDebugActions(ImpalaTestSuite): class TestDebugActions(ImpalaTestSuite):
@pytest.mark.execute_serially @pytest.mark.execute_serially

View File

@@ -22,7 +22,7 @@ from tests.common.environ import ImpalaTestClusterProperties
from tests.common.impala_cluster import ImpalaCluster from tests.common.impala_cluster import ImpalaCluster
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfLocal, SkipIfCatalogV2) SkipIfGCS, SkipIfLocal, SkipIfCatalogV2)
from tests.common.test_dimensions import ( from tests.common.test_dimensions import (
create_exec_option_dimension, create_exec_option_dimension,
create_single_exec_option_dimension, create_single_exec_option_dimension,
@@ -114,6 +114,7 @@ class TestComputeStats(ImpalaTestSuite):
self.execute_query_expect_success(self.client, "drop stats {0}".format(table)) self.execute_query_expect_success(self.client, "drop stats {0}".format(table))
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -193,6 +194,7 @@ class TestComputeStats(ImpalaTestSuite):
assert("cardinality=0" not in explain_result.data[i + 2]) assert("cardinality=0" not in explain_result.data[i + 2])
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -240,6 +242,7 @@ class TestComputeStats(ImpalaTestSuite):
table_name, 2, 2) table_name, 2, 2)
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -27,7 +27,7 @@ from tests.common.environ import (HIVE_MAJOR_VERSION)
from tests.common.impala_test_suite import LOG from tests.common.impala_test_suite import LOG
from tests.common.parametrize import UniqueDatabase from tests.common.parametrize import UniqueDatabase
from tests.common.skip import (SkipIf, SkipIfABFS, SkipIfADLS, SkipIfKudu, SkipIfLocal, from tests.common.skip import (SkipIf, SkipIfABFS, SkipIfADLS, SkipIfKudu, SkipIfLocal,
SkipIfCatalogV2, SkipIfHive2, SkipIfS3) SkipIfCatalogV2, SkipIfHive2, SkipIfS3, SkipIfGCS)
from tests.common.test_dimensions import create_single_exec_option_dimension from tests.common.test_dimensions import create_single_exec_option_dimension
from tests.util.filesystem_utils import ( from tests.util.filesystem_utils import (
WAREHOUSE, WAREHOUSE,
@@ -297,6 +297,7 @@ class TestDdlStatements(TestDdlBase):
@SkipIfHive2.orc @SkipIfHive2.orc
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@UniqueDatabase.parametrize(sync_ddl=True) @UniqueDatabase.parametrize(sync_ddl=True)
def test_create_table_like_file_orc(self, vector, unique_database): def test_create_table_like_file_orc(self, vector, unique_database):
COMPLEXTYPETBL_PATH = 'test-warehouse/managed/complextypestbl_orc_def/' COMPLEXTYPETBL_PATH = 'test-warehouse/managed/complextypestbl_orc_def/'

View File

@@ -19,7 +19,8 @@ import getpass
import pytest import pytest
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfGCS, SkipIfLocal)
from tests.common.test_dimensions import ( from tests.common.test_dimensions import (
create_single_exec_option_dimension, create_single_exec_option_dimension,
create_uncompressed_text_dimension) create_uncompressed_text_dimension)
@@ -34,6 +35,7 @@ TMP_DIR = '/%s' % (PYWEBHDFS_TMP_DIR)
@SkipIfS3.hdfs_encryption @SkipIfS3.hdfs_encryption
@SkipIfGCS.hdfs_encryption
@SkipIfABFS.hdfs_encryption @SkipIfABFS.hdfs_encryption
@SkipIfADLS.hdfs_encryption @SkipIfADLS.hdfs_encryption
@SkipIfIsilon.hdfs_encryption @SkipIfIsilon.hdfs_encryption

View File

@@ -17,7 +17,7 @@
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfLocal, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfLocal,
SkipIfCatalogV2) SkipIfGCS, SkipIfCatalogV2)
from tests.common.test_dimensions import ( from tests.common.test_dimensions import (
create_single_exec_option_dimension, create_single_exec_option_dimension,
create_uncompressed_text_dimension) create_uncompressed_text_dimension)
@@ -29,6 +29,7 @@ TBL_LOC = '%s/%s' % (WAREHOUSE, TEST_TBL)
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfLocal.hdfs_client @SkipIfLocal.hdfs_client

View File

@@ -32,7 +32,7 @@ from subprocess import call
from tests.common.environ import HIVE_MAJOR_VERSION from tests.common.environ import HIVE_MAJOR_VERSION
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfHive2, SkipIfHive3, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfHive2, SkipIfHive3,
SkipIfIsilon, SkipIfLocal, SkipIfCatalogV2) SkipIfIsilon, SkipIfGCS, SkipIfLocal, SkipIfCatalogV2)
from tests.common.test_dimensions import ( from tests.common.test_dimensions import (
create_single_exec_option_dimension, create_single_exec_option_dimension,
create_uncompressed_text_dimension) create_uncompressed_text_dimension)
@@ -40,6 +40,7 @@ from tests.util.hive_utils import HiveDbWrapper, HiveTableWrapper
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -89,6 +90,7 @@ class TestHmsIntegrationSanity(ImpalaTestSuite):
assert 'test_tbl' in self.client.execute("show tables in hms_sanity_db").data assert 'test_tbl' in self.client.execute("show tables in hms_sanity_db").data
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -23,7 +23,7 @@ import re
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import (SkipIfIsilon, SkipIfS3, SkipIfABFS, SkipIfADLS, from tests.common.skip import (SkipIfIsilon, SkipIfS3, SkipIfABFS, SkipIfADLS,
SkipIfLocal, SkipIfCatalogV2) SkipIfGCS, SkipIfLocal, SkipIfCatalogV2)
from tests.common.test_dimensions import ALL_NODES_ONLY from tests.common.test_dimensions import ALL_NODES_ONLY
from tests.common.test_dimensions import create_exec_option_dimension from tests.common.test_dimensions import create_exec_option_dimension
from tests.common.test_dimensions import create_uncompressed_text_dimension from tests.common.test_dimensions import create_uncompressed_text_dimension
@@ -76,6 +76,7 @@ class TestMetadataQueryStatements(ImpalaTestSuite):
# data doesn't reside in hdfs. # data doesn't reside in hdfs.
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@@ -167,6 +168,7 @@ class TestMetadataQueryStatements(ImpalaTestSuite):
self.client.execute(self.CREATE_DATA_SRC_STMT % (name,)) self.client.execute(self.CREATE_DATA_SRC_STMT % (name,))
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -17,7 +17,8 @@
import pytest import pytest
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfGCS, SkipIfLocal)
from tests.common.test_dimensions import (create_single_exec_option_dimension, from tests.common.test_dimensions import (create_single_exec_option_dimension,
create_uncompressed_text_dimension) create_uncompressed_text_dimension)
from tests.util.filesystem_utils import get_fs_path, WAREHOUSE, FILESYSTEM_PREFIX from tests.util.filesystem_utils import get_fs_path, WAREHOUSE, FILESYSTEM_PREFIX
@@ -89,6 +90,7 @@ class TestPartitionMetadata(ImpalaTestSuite):
assert data.split('\t') == ['6', '9'] assert data.split('\t') == ['6', '9']
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -17,11 +17,13 @@ from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.test_dimensions import create_single_exec_option_dimension from tests.common.test_dimensions import create_single_exec_option_dimension
from tests.common.test_dimensions import create_uncompressed_text_dimension from tests.common.test_dimensions import create_uncompressed_text_dimension
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfGCS, SkipIfLocal)
from tests.util.filesystem_utils import get_fs_path from tests.util.filesystem_utils import get_fs_path
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -16,7 +16,7 @@
# under the License. # under the License.
from test_ddl_base import TestDdlBase from test_ddl_base import TestDdlBase
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfGCS,
SkipIfIsilon, SkipIfLocal) SkipIfIsilon, SkipIfLocal)
@@ -37,6 +37,7 @@ class TestResetMetadata(TestDdlBase):
self.client.execute('refresh functions %s' % unique_database.upper()) self.client.execute('refresh functions %s' % unique_database.upper())
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -19,7 +19,7 @@ from subprocess import check_call
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3 from tests.common.skip import SkipIfS3, SkipIfGCS
from tests.common.test_dimensions import create_single_exec_option_dimension from tests.common.test_dimensions import create_single_exec_option_dimension
from tests.util.filesystem_utils import get_fs_path from tests.util.filesystem_utils import get_fs_path
@@ -77,11 +77,16 @@ class TestRewrittenFile(ImpalaTestSuite):
assert result.data == [str(expected_new_count)] assert result.data == [str(expected_new_count)]
@SkipIfS3.jira(reason="IMPALA-2512") @SkipIfS3.jira(reason="IMPALA-2512")
@SkipIfGCS.jira(reason="IMPALA-2512")
def test_new_file_shorter(self, vector, unique_database): def test_new_file_shorter(self, vector, unique_database):
"""Rewrites an existing file with a new shorter file.""" """Rewrites an existing file with a new shorter file."""
# Full error is something like: # Full error is something like:
# Metadata for file '...' appears stale. Try running "refresh # Metadata for file '...' appears stale. Try running "refresh
# unique_database_name.new_file_shorter" to reload the file metadata. # unique_database_name.new_file_shorter" to reload the file metadata.
# IMPALA-2512: Error message could also be something like
# Query aborted:Disk I/O error on ...:27001: Error seeking ...
# between 0 and ... for '...'
# TODO: find a better way to detect stale file meta and remove skip markers.
table_name = "new_file_shorter" table_name = "new_file_shorter"
self.__overwrite_file_and_query(unique_database, table_name, self.__overwrite_file_and_query(unique_database, table_name,
self.LONG_FILE, self.SHORT_FILE, 'appears stale.', self.SHORT_FILE_NUM_ROWS) self.LONG_FILE, self.SHORT_FILE, 'appears stale.', self.SHORT_FILE_NUM_ROWS)

View File

@@ -38,6 +38,9 @@ class TestTestcaseBuilder(ImpalaTestSuite):
def test_query_without_from(self): def test_query_without_from(self):
tmp_path = get_fs_path("/tmp") tmp_path = get_fs_path("/tmp")
# Make sure /tmp dir exists
if not self.filesystem_client.exists(tmp_path):
self.filesystem_client.make_dir('tmp')
# Generate Testcase Data for query without table reference # Generate Testcase Data for query without table reference
testcase_generate_query = """COPY TESTCASE TO '%s' SELECT 5 * 20""" % tmp_path testcase_generate_query = """COPY TESTCASE TO '%s' SELECT 5 * 20""" % tmp_path
result = self.execute_query_expect_success(self.client, testcase_generate_query) result = self.execute_query_expect_success(self.client, testcase_generate_query)

View File

@@ -24,7 +24,8 @@ from subprocess import call
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.environ import HIVE_MAJOR_VERSION from tests.common.environ import HIVE_MAJOR_VERSION
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfGCS, SkipIfLocal)
from tests.common.test_dimensions import create_uncompressed_text_dimension from tests.common.test_dimensions import create_uncompressed_text_dimension
from tests.util.test_file_parser import QueryTestSectionReader from tests.util.test_file_parser import QueryTestSectionReader
@@ -48,6 +49,7 @@ from tests.util.test_file_parser import QueryTestSectionReader
# Missing Coverage: Views created by Hive and Impala being visible and queryble by each # Missing Coverage: Views created by Hive and Impala being visible and queryble by each
# other on non hdfs storage. # other on non hdfs storage.
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -25,7 +25,7 @@ from hive_metastore.ttypes import CommitTxnRequest, OpenTxnRequest
from subprocess import check_call from subprocess import check_call
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import (SkipIf, SkipIfHive2, SkipIfCatalogV2, SkipIfS3, SkipIfABFS, from tests.common.skip import (SkipIf, SkipIfHive2, SkipIfCatalogV2, SkipIfS3, SkipIfABFS,
SkipIfADLS, SkipIfIsilon, SkipIfLocal) SkipIfADLS, SkipIfIsilon, SkipIfGCS, SkipIfLocal)
from tests.common.test_dimensions import create_single_exec_option_dimension from tests.common.test_dimensions import create_single_exec_option_dimension
@@ -45,6 +45,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -62,6 +63,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -71,6 +73,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -80,6 +83,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -91,6 +95,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -100,6 +105,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -119,6 +125,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfCatalogV2.hms_event_polling_enabled() @SkipIfCatalogV2.hms_event_polling_enabled()
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -132,6 +139,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -154,6 +162,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -170,6 +179,7 @@ class TestAcid(ImpalaTestSuite):
assert "2" in result assert "2" in result
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -188,6 +198,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -202,6 +213,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -280,6 +292,7 @@ class TestAcid(ImpalaTestSuite):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -21,7 +21,6 @@ import pytest
from testdata.common import widetable from testdata.common import widetable
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3
from tests.common.test_dimensions import ( from tests.common.test_dimensions import (
create_exec_option_dimension, create_exec_option_dimension,
create_exec_option_dimension_from_dict, create_exec_option_dimension_from_dict,

View File

@@ -20,7 +20,7 @@
import pytest import pytest
from tests.common.file_utils import create_table_and_copy_files from tests.common.file_utils import create_table_and_copy_files
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfLocal from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfLocal, SkipIfGCS
from tests.common.test_dimensions import (create_exec_option_dimension_from_dict, from tests.common.test_dimensions import (create_exec_option_dimension_from_dict,
create_client_protocol_dimension, hs2_parquet_constraint) create_client_protocol_dimension, hs2_parquet_constraint)
from tests.shell.util import ImpalaShell from tests.shell.util import ImpalaShell
@@ -71,6 +71,7 @@ class TestDateQueries(ImpalaTestSuite):
self.run_test_case('QueryTest/date-partitioning', vector, use_db=unique_database) self.run_test_case('QueryTest/date-partitioning', vector, use_db=unique_database)
@SkipIfS3.qualified_path @SkipIfS3.qualified_path
@SkipIfGCS.qualified_path
@SkipIfABFS.qualified_path @SkipIfABFS.qualified_path
@SkipIfADLS.qualified_path @SkipIfADLS.qualified_path
@SkipIfLocal.qualified_path @SkipIfLocal.qualified_path

View File

@@ -22,6 +22,7 @@ import pytest
from tests.common.skip import ( from tests.common.skip import (
SkipIfIsilon, SkipIfIsilon,
SkipIfS3, SkipIfS3,
SkipIfGCS,
SkipIfABFS, SkipIfABFS,
SkipIfADLS, SkipIfADLS,
SkipIfLocal) SkipIfLocal)
@@ -66,6 +67,7 @@ class TestHBaseQueries(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive

View File

@@ -26,13 +26,15 @@ from tests.common.environ import build_flavor_timeout, IS_DOCKERIZED_TEST_CLUSTE
from tests.common.impala_cluster import ImpalaCluster from tests.common.impala_cluster import ImpalaCluster
from tests.common.impala_test_suite import ImpalaTestSuite, LOG from tests.common.impala_test_suite import ImpalaTestSuite, LOG
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfLocal, SkipIfEC, SkipIfDockerizedCluster, SkipIfCatalogV2) SkipIfGCS, SkipIfLocal, SkipIfEC, SkipIfDockerizedCluster,
SkipIfCatalogV2)
from tests.common.test_dimensions import create_single_exec_option_dimension from tests.common.test_dimensions import create_single_exec_option_dimension
from tests.util.filesystem_utils import get_fs_path from tests.util.filesystem_utils import get_fs_path
from tests.util.shell_util import exec_process from tests.util.shell_util import exec_process
# End to end test that hdfs caching is working. # End to end test that hdfs caching is working.
@SkipIfS3.caching # S3: missing coverage: verify SET CACHED gives error @SkipIfS3.caching # S3: missing coverage: verify SET CACHED gives error
@SkipIfGCS.caching
@SkipIfABFS.caching @SkipIfABFS.caching
@SkipIfADLS.caching @SkipIfADLS.caching
@SkipIfIsilon.caching @SkipIfIsilon.caching
@@ -113,6 +115,7 @@ class TestHdfsCaching(ImpalaTestSuite):
# run as a part of exhaustive tests which require the workload to be 'functional-query'. # run as a part of exhaustive tests which require the workload to be 'functional-query'.
# TODO: Move this to TestHdfsCaching once we make exhaustive tests run for other workloads # TODO: Move this to TestHdfsCaching once we make exhaustive tests run for other workloads
@SkipIfS3.caching @SkipIfS3.caching
@SkipIfGCS.caching
@SkipIfABFS.caching @SkipIfABFS.caching
@SkipIfADLS.caching @SkipIfADLS.caching
@SkipIfIsilon.caching @SkipIfIsilon.caching
@@ -123,6 +126,7 @@ class TestHdfsCachingFallbackPath(ImpalaTestSuite):
return 'functional-query' return 'functional-query'
@SkipIfS3.hdfs_encryption @SkipIfS3.hdfs_encryption
@SkipIfGCS.hdfs_encryption
@SkipIfABFS.hdfs_encryption @SkipIfABFS.hdfs_encryption
@SkipIfADLS.hdfs_encryption @SkipIfADLS.hdfs_encryption
@SkipIfIsilon.hdfs_encryption @SkipIfIsilon.hdfs_encryption
@@ -175,6 +179,7 @@ class TestHdfsCachingFallbackPath(ImpalaTestSuite):
@SkipIfS3.caching @SkipIfS3.caching
@SkipIfGCS.caching
@SkipIfABFS.caching @SkipIfABFS.caching
@SkipIfADLS.caching @SkipIfADLS.caching
@SkipIfIsilon.caching @SkipIfIsilon.caching

View File

@@ -24,7 +24,8 @@ import re
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.parametrize import UniqueDatabase from tests.common.parametrize import UniqueDatabase
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfLocal, SkipIfDockerizedCluster, SkipIfCatalogV2) SkipIfGCS, SkipIfLocal, SkipIfDockerizedCluster,
SkipIfCatalogV2)
from tests.util.filesystem_utils import WAREHOUSE, get_fs_path, IS_S3 from tests.util.filesystem_utils import WAREHOUSE, get_fs_path, IS_S3
@SkipIfLocal.hdfs_client @SkipIfLocal.hdfs_client
@@ -133,6 +134,7 @@ class TestInsertBehaviour(ImpalaTestSuite):
assert len(self.filesystem_client.ls(part_dir)) == 1 assert len(self.filesystem_client.ls(part_dir)) == 1
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfIsilon.hdfs_acls @SkipIfIsilon.hdfs_acls
@@ -195,6 +197,7 @@ class TestInsertBehaviour(ImpalaTestSuite):
check_has_acls("p1=1/p2=2/p3=30", "default:group:new_leaf_group:-w-") check_has_acls("p1=1/p2=2/p3=30", "default:group:new_leaf_group:-w-")
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfIsilon.hdfs_acls @SkipIfIsilon.hdfs_acls
@@ -248,6 +251,7 @@ class TestInsertBehaviour(ImpalaTestSuite):
self.execute_query_expect_success(self.client, insert_query) self.execute_query_expect_success(self.client, insert_query)
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfIsilon.hdfs_acls @SkipIfIsilon.hdfs_acls
@@ -330,6 +334,7 @@ class TestInsertBehaviour(ImpalaTestSuite):
load_data(self.execute_query_expect_success, "added_part") load_data(self.execute_query_expect_success, "added_part")
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfIsilon.hdfs_acls @SkipIfIsilon.hdfs_acls
@@ -363,6 +368,7 @@ class TestInsertBehaviour(ImpalaTestSuite):
assert re.search(r'Impala does not have WRITE access.*' + table_path, str(err)) assert re.search(r'Impala does not have WRITE access.*' + table_path, str(err))
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfIsilon.hdfs_acls @SkipIfIsilon.hdfs_acls
@@ -444,6 +450,7 @@ class TestInsertBehaviour(ImpalaTestSuite):
self.execute_query_expect_success(self.client, insert_query) self.execute_query_expect_success(self.client, insert_query)
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfIsilon.hdfs_acls @SkipIfIsilon.hdfs_acls
@@ -570,6 +577,7 @@ class TestInsertBehaviour(ImpalaTestSuite):
self.execute_query_expect_failure(self.client, insert_query) self.execute_query_expect_failure(self.client, insert_query)
@SkipIfS3.hdfs_acls @SkipIfS3.hdfs_acls
@SkipIfGCS.hdfs_acls
@SkipIfABFS.hdfs_acls @SkipIfABFS.hdfs_acls
@SkipIfADLS.hdfs_acls @SkipIfADLS.hdfs_acls
@SkipIfIsilon.hdfs_acls @SkipIfIsilon.hdfs_acls

View File

@@ -29,7 +29,7 @@ from tests.common.environ import impalad_basedir
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.parametrize import UniqueDatabase from tests.common.parametrize import UniqueDatabase
from tests.common.skip import (SkipIfEC, SkipIfIsilon, SkipIfLocal, SkipIfS3, SkipIfABFS, from tests.common.skip import (SkipIfEC, SkipIfIsilon, SkipIfLocal, SkipIfS3, SkipIfABFS,
SkipIfADLS) SkipIfADLS, SkipIfGCS)
from tests.common.test_dimensions import create_exec_option_dimension from tests.common.test_dimensions import create_exec_option_dimension
from tests.common.test_result_verifier import verify_query_result_is_equal from tests.common.test_result_verifier import verify_query_result_is_equal
from tests.common.test_vector import ImpalaTestDimension from tests.common.test_vector import ImpalaTestDimension
@@ -537,6 +537,7 @@ class TestHdfsParquetTableWriter(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
# TODO: Should we move this to test_parquet_stats.py? # TODO: Should we move this to test_parquet_stats.py?

View File

@@ -18,7 +18,6 @@
# Targeted Impala insert tests # Targeted Impala insert tests
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3
from tests.common.test_dimensions import ( from tests.common.test_dimensions import (
create_exec_option_dimension, create_exec_option_dimension,
create_uncompressed_text_dimension) create_uncompressed_text_dimension)

View File

@@ -26,6 +26,7 @@ from tests.common.skip import (
SkipIfIsilon, SkipIfIsilon,
SkipIfLocal, SkipIfLocal,
SkipIfS3, SkipIfS3,
SkipIfGCS,
SkipIfABFS, SkipIfABFS,
SkipIfADLS) SkipIfADLS)
from tests.common.test_vector import ImpalaTestDimension from tests.common.test_vector import ImpalaTestDimension
@@ -79,6 +80,7 @@ class TestJoinQueries(ImpalaTestSuite):
self.run_test_case('QueryTest/single-node-joins-with-limits-exhaustive', new_vector) self.run_test_case('QueryTest/single-node-joins-with-limits-exhaustive', new_vector)
@SkipIfS3.hbase @SkipIfS3.hbase
@SkipIfGCS.hbase
@SkipIfABFS.hbase @SkipIfABFS.hbase
@SkipIfADLS.hbase @SkipIfADLS.hbase
@SkipIfIsilon.hbase @SkipIfIsilon.hbase

View File

@@ -26,6 +26,7 @@ from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import ( from tests.common.skip import (
SkipIfIsilon, SkipIfIsilon,
SkipIfS3, SkipIfS3,
SkipIfGCS,
SkipIfABFS, SkipIfABFS,
SkipIfADLS, SkipIfADLS,
SkipIfEC, SkipIfEC,
@@ -160,6 +161,7 @@ class TestNestedTypesNoMtDop(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@@ -218,6 +220,7 @@ class TestNestedTypesNoMtDop(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfHive2.acid @SkipIfHive2.acid
def test_partitioned_table_acid(self, vector, unique_database): def test_partitioned_table_acid(self, vector, unique_database):
"""IMPALA-6370: Test that a partitioned table with nested types can be scanned.""" """IMPALA-6370: Test that a partitioned table with nested types can be scanned."""
@@ -719,6 +722,7 @@ class TestMaxNestingDepth(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfLocal.hive @SkipIfLocal.hive

View File

@@ -20,7 +20,7 @@ from datetime import datetime
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfLocal, SkipIfNotHdfsMinicluster) SkipIfGCS, SkipIfLocal, SkipIfNotHdfsMinicluster)
from tests.util.filesystem_utils import IS_EC from tests.util.filesystem_utils import IS_EC
from time import sleep from time import sleep
from RuntimeProfile.ttypes import TRuntimeProfileFormat from RuntimeProfile.ttypes import TRuntimeProfileFormat
@@ -92,6 +92,7 @@ class TestObservability(ImpalaTestSuite):
self.hs2_client.close_query(handle) self.hs2_client.close_query(handle)
@SkipIfS3.hbase @SkipIfS3.hbase
@SkipIfGCS.hbase
@SkipIfLocal.hbase @SkipIfLocal.hbase
@SkipIfIsilon.hbase @SkipIfIsilon.hbase
@SkipIfABFS.hbase @SkipIfABFS.hbase
@@ -671,6 +672,7 @@ class TestObservability(ImpalaTestSuite):
cluster_properties) cluster_properties)
@SkipIfS3.hbase @SkipIfS3.hbase
@SkipIfGCS.hbase
@SkipIfLocal.hbase @SkipIfLocal.hbase
@SkipIfIsilon.hbase @SkipIfIsilon.hbase
@SkipIfABFS.hbase @SkipIfABFS.hbase

View File

@@ -20,7 +20,8 @@ import pytest
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfGCS, SkipIfLocal)
from tests.common.test_dimensions import create_single_exec_option_dimension from tests.common.test_dimensions import create_single_exec_option_dimension
# Tests to validate HDFS partitioning. # Tests to validate HDFS partitioning.
@@ -47,6 +48,7 @@ class TestPartitioning(ImpalaTestSuite):
# Missing Coverage: Impala deals with boolean partitions created by Hive on a non-hdfs # Missing Coverage: Impala deals with boolean partitions created by Hive on a non-hdfs
# filesystem. # filesystem.
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive

View File

@@ -16,8 +16,8 @@
# under the License. # under the License.
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfEC, SkipIfLocal, SkipIfS3, SkipIfABFS, \ from tests.common.skip import (SkipIfEC, SkipIfLocal, SkipIfS3, SkipIfABFS,
SkipIfADLS SkipIfGCS, SkipIfADLS)
from tests.common.test_dimensions import create_parquet_dimension from tests.common.test_dimensions import create_parquet_dimension
@@ -46,6 +46,7 @@ class TestResourceLimits(ImpalaTestSuite):
self.run_test_case('QueryTest/query-resource-limits', vector) self.run_test_case('QueryTest/query-resource-limits', vector)
@SkipIfS3.hbase @SkipIfS3.hbase
@SkipIfGCS.hbase
@SkipIfADLS.hbase @SkipIfADLS.hbase
@SkipIfABFS.hbase @SkipIfABFS.hbase
@SkipIfLocal.multiple_impalad @SkipIfLocal.multiple_impalad

View File

@@ -36,6 +36,7 @@ from tests.common.impala_test_suite import ImpalaTestSuite, LOG
from tests.common.skip import ( from tests.common.skip import (
SkipIf, SkipIf,
SkipIfS3, SkipIfS3,
SkipIfGCS,
SkipIfABFS, SkipIfABFS,
SkipIfADLS, SkipIfADLS,
SkipIfEC, SkipIfEC,
@@ -464,6 +465,7 @@ class TestParquet(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
def test_multi_compression_types(self, vector, unique_database): def test_multi_compression_types(self, vector, unique_database):
"""IMPALA-5448: Tests that parquet splits with multi compression types are counted """IMPALA-5448: Tests that parquet splits with multi compression types are counted
correctly. Cases tested: correctly. Cases tested:
@@ -582,6 +584,7 @@ class TestParquet(ImpalaTestSuite):
vector, unique_database) vector, unique_database)
@SkipIfS3.hdfs_block_size @SkipIfS3.hdfs_block_size
@SkipIfGCS.hdfs_block_size
@SkipIfABFS.hdfs_block_size @SkipIfABFS.hdfs_block_size
@SkipIfADLS.hdfs_block_size @SkipIfADLS.hdfs_block_size
@SkipIfIsilon.hdfs_block_size @SkipIfIsilon.hdfs_block_size
@@ -639,6 +642,7 @@ class TestParquet(ImpalaTestSuite):
assert total == num_scanners_with_no_reads assert total == num_scanners_with_no_reads
@SkipIfS3.hdfs_block_size @SkipIfS3.hdfs_block_size
@SkipIfGCS.hdfs_block_size
@SkipIfABFS.hdfs_block_size @SkipIfABFS.hdfs_block_size
@SkipIfADLS.hdfs_block_size @SkipIfADLS.hdfs_block_size
@SkipIfIsilon.hdfs_block_size @SkipIfIsilon.hdfs_block_size
@@ -678,6 +682,7 @@ class TestParquet(ImpalaTestSuite):
self.client.clear_configuration() self.client.clear_configuration()
@SkipIfS3.hdfs_block_size @SkipIfS3.hdfs_block_size
@SkipIfGCS.hdfs_block_size
@SkipIfABFS.hdfs_block_size @SkipIfABFS.hdfs_block_size
@SkipIfADLS.hdfs_block_size @SkipIfADLS.hdfs_block_size
@SkipIfIsilon.hdfs_block_size @SkipIfIsilon.hdfs_block_size
@@ -694,6 +699,7 @@ class TestParquet(ImpalaTestSuite):
self._multiple_blocks_helper(table_name, 40000, ranges_per_node=2) self._multiple_blocks_helper(table_name, 40000, ranges_per_node=2)
@SkipIfS3.hdfs_block_size @SkipIfS3.hdfs_block_size
@SkipIfGCS.hdfs_block_size
@SkipIfABFS.hdfs_block_size @SkipIfABFS.hdfs_block_size
@SkipIfADLS.hdfs_block_size @SkipIfADLS.hdfs_block_size
@SkipIfIsilon.hdfs_block_size @SkipIfIsilon.hdfs_block_size
@@ -1300,6 +1306,7 @@ class TestTextScanRangeLengths(ImpalaTestSuite):
# Missing Coverage: No coverage for truncated files errors or scans. # Missing Coverage: No coverage for truncated files errors or scans.
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfABFS.hive @SkipIfABFS.hive
@SkipIfADLS.hive @SkipIfADLS.hive
@SkipIfIsilon.hive @SkipIfIsilon.hive
@@ -1383,6 +1390,7 @@ class TestOrc(ImpalaTestSuite):
lambda v: v.get_value('table_format').file_format == 'orc') lambda v: v.get_value('table_format').file_format == 'orc')
@SkipIfS3.hdfs_block_size @SkipIfS3.hdfs_block_size
@SkipIfGCS.hdfs_block_size
@SkipIfABFS.hdfs_block_size @SkipIfABFS.hdfs_block_size
@SkipIfADLS.hdfs_block_size @SkipIfADLS.hdfs_block_size
@SkipIfEC.fix_later @SkipIfEC.fix_later
@@ -1457,6 +1465,7 @@ class TestOrc(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfHive3.non_acid @SkipIfHive3.non_acid
def test_type_conversions_hive2(self, vector, unique_database): def test_type_conversions_hive2(self, vector, unique_database):
# Create "illtypes" tables whose columns can't match the underlining ORC file's. # Create "illtypes" tables whose columns can't match the underlining ORC file's.
@@ -1506,6 +1515,7 @@ class TestOrc(ImpalaTestSuite):
@SkipIfIsilon.hive @SkipIfIsilon.hive
@SkipIfLocal.hive @SkipIfLocal.hive
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@SkipIfHive2.acid @SkipIfHive2.acid
def test_type_conversions_hive3(self, vector, unique_database): def test_type_conversions_hive3(self, vector, unique_database):
# Create "illtypes" tables whose columns can't match the underlining ORC file's. # Create "illtypes" tables whose columns can't match the underlining ORC file's.

View File

@@ -653,7 +653,9 @@ class TestImpalaShell(ImpalaTestSuite):
assert "Error retrieving LDAP password" in result_1.stderr assert "Error retrieving LDAP password" in result_1.stderr
assert "command was: 'cmddoesntexist'" in result_1.stderr assert "command was: 'cmddoesntexist'" in result_1.stderr
assert "No such file or directory" in result_1.stderr # On GCE instances, the error thrown in subprocess is "[Errno 13] Permission denied".
assert "No such file or directory" in result_1.stderr \
or "Permission denied" in result_1.stderr
result_2 = run_impala_shell_cmd(vector, result_2 = run_impala_shell_cmd(vector,
args + ['--ldap_password_cmd=cat filedoesntexist'], args + ['--ldap_password_cmd=cat filedoesntexist'],

View File

@@ -23,7 +23,7 @@ from multiprocessing import Value
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.parametrize import UniqueDatabase from tests.common.parametrize import UniqueDatabase
from tests.common.skip import SkipIfHive2, SkipIfS3 from tests.common.skip import SkipIfHive2, SkipIfS3, SkipIfGCS
from tests.stress.stress_util import Task, run_tasks from tests.stress.stress_util import Task, run_tasks
NUM_OVERWRITES = 2 NUM_OVERWRITES = 2
@@ -160,6 +160,7 @@ class TestAcidInsertsBasic(TestAcidStress):
@SkipIfHive2.acid @SkipIfHive2.acid
@SkipIfS3.hive @SkipIfS3.hive
@SkipIfGCS.hive
@pytest.mark.execute_serially @pytest.mark.execute_serially
@pytest.mark.stress @pytest.mark.stress
def test_read_hive_inserts(self, unique_database): def test_read_hive_inserts(self, unique_database):
@@ -227,6 +228,7 @@ class TestConcurrentAcidInserts(TestAcidStress):
finally: finally:
impalad_client.close() impalad_client.close()
@SkipIfGCS.jira(reason="IMPALA-10563")
@SkipIfHive2.acid @SkipIfHive2.acid
@pytest.mark.execute_serially @pytest.mark.execute_serially
@pytest.mark.stress @pytest.mark.stress
@@ -322,6 +324,7 @@ class TestFailingAcidInserts(TestAcidStress):
for i in xrange(0, num_checkers)] for i in xrange(0, num_checkers)]
run_tasks(writers + checkers) run_tasks(writers + checkers)
@SkipIfGCS.jira(reason="IMPALA-10563")
@SkipIfHive2.acid @SkipIfHive2.acid
@pytest.mark.execute_serially @pytest.mark.execute_serially
@pytest.mark.stress @pytest.mark.stress

View File

@@ -18,7 +18,8 @@
import pytest import pytest
from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon, SkipIfLocal from tests.common.skip import (SkipIfS3, SkipIfABFS, SkipIfADLS, SkipIfIsilon,
SkipIfGCS, SkipIfLocal)
# Number of tables to create per thread # Number of tables to create per thread
NUM_TBLS_PER_THREAD = 10 NUM_TBLS_PER_THREAD = 10
@@ -48,6 +49,7 @@ class TestDdlStress(ImpalaTestSuite):
v.get_value('table_format').compression_codec == 'none')) v.get_value('table_format').compression_codec == 'none'))
@SkipIfS3.caching @SkipIfS3.caching
@SkipIfGCS.caching
@SkipIfABFS.caching @SkipIfABFS.caching
@SkipIfADLS.caching @SkipIfADLS.caching
@SkipIfIsilon.caching @SkipIfIsilon.caching

View File

@@ -31,6 +31,7 @@ IS_LOCAL = FILESYSTEM == "local"
IS_HDFS = FILESYSTEM == "hdfs" IS_HDFS = FILESYSTEM == "hdfs"
IS_ADLS = FILESYSTEM == "adls" IS_ADLS = FILESYSTEM == "adls"
IS_ABFS = FILESYSTEM == "abfs" IS_ABFS = FILESYSTEM == "abfs"
IS_GCS = FILESYSTEM == "gs"
IS_EC = os.getenv("ERASURE_CODING") == "true" IS_EC = os.getenv("ERASURE_CODING") == "true"
# This condition satisfies both the states where one can assume a default fs # This condition satisfies both the states where one can assume a default fs
# - The environment variable is set to an empty string. # - The environment variable is set to an empty string.
@@ -56,7 +57,7 @@ ADLS_CLIENT_SECRET = os.getenv("azure_client_secret")
# A map of FILESYSTEM values to their corresponding Scan Node types # A map of FILESYSTEM values to their corresponding Scan Node types
fs_to_name = {'s3': 'S3', 'hdfs': 'HDFS', 'local': 'LOCAL', 'adls': 'ADLS', fs_to_name = {'s3': 'S3', 'hdfs': 'HDFS', 'local': 'LOCAL', 'adls': 'ADLS',
'abfs': 'ADLS'} 'abfs': 'ADLS', 'gs': 'GCS'}
def get_fs_name(fs): def get_fs_name(fs):