mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
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:
committed by
Impala Public Jenkins
parent
6c6b0ee869
commit
2dfc68d852
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
4
testdata/bin/create-load-data.sh
vendored
4
testdata/bin/create-load-data.sh
vendored
@@ -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
|
||||||
|
|||||||
9
testdata/bin/load-test-warehouse-snapshot.sh
vendored
9
testdata/bin/load-test-warehouse-snapshot.sh
vendored
@@ -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
|
||||||
|
|||||||
8
testdata/bin/run-all.sh
vendored
8
testdata/bin/run-all.sh
vendored
@@ -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"
|
||||||
|
|||||||
@@ -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':
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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} \
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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/'
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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'],
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user