You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by nh...@apache.org on 2015/11/13 20:01:40 UTC
incubator-hawq git commit: HAWQ-156. Fix hd_work_mgr unit tests.
Repository: incubator-hawq
Updated Branches:
refs/heads/master 2ee1ed909 -> f0f623872
HAWQ-156. Fix hd_work_mgr unit tests.
The tests were using an the wrong cast to access segment info. The old struct CdbComponentDatabaseInfo should have been replaced by Segment.
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/f0f62387
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/f0f62387
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/f0f62387
Branch: refs/heads/master
Commit: f0f623872bf4436d553ec07703325dcdb73ffc52
Parents: 2ee1ed9
Author: Noa Horn <nh...@pivotal.io>
Authored: Thu Nov 12 17:18:33 2015 -0800
Committer: Noa Horn <nh...@pivotal.io>
Committed: Fri Nov 13 10:31:03 2015 -0800
----------------------------------------------------------------------
...ork_mgr_distribute_work_2_gp_segments_test.c | 46 +++++---------
...ork_mgr_do_segment_clustering_by_host_test.c | 24 ++------
.../access/external/test/hd_work_mgr_mock.c | 46 ++------------
.../access/external/test/hd_work_mgr_mock.h | 63 ++------------------
4 files changed, 27 insertions(+), 152 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f0f62387/src/backend/access/external/test/hd_work_mgr_distribute_work_2_gp_segments_test.c
----------------------------------------------------------------------
diff --git a/src/backend/access/external/test/hd_work_mgr_distribute_work_2_gp_segments_test.c b/src/backend/access/external/test/hd_work_mgr_distribute_work_2_gp_segments_test.c
index aca45b0..b829db5 100644
--- a/src/backend/access/external/test/hd_work_mgr_distribute_work_2_gp_segments_test.c
+++ b/src/backend/access/external/test/hd_work_mgr_distribute_work_2_gp_segments_test.c
@@ -43,11 +43,10 @@ static void print_allocated_fragments(List **allocated_fragments, int total_segs
static char* print_one_allocated_data_fragment(AllocatedDataFragment *frag, int seg_index);
static char* find_segment_ip_by_index(int seg_index);
static char** create_cluster(int num_hosts);
-static char** clean_cluster(char** cluster, int num_hosts);
+static void clean_cluster(char** cluster, int num_hosts);
static char** create_array_of_segs(char **cluster, int num_hosts, int num_segments_on_host);
static void clean_array_of_segs(char **array_of_segs, int number_of_segments);
-static bool* create_array_of_primaries(int number_of_segments);
-static char** print_cluster(char** cluster, int num_hosts);
+static void print_cluster(char** cluster, int num_hosts);
static void print_segments_list();
void clean_allocated_fragments(List **allocated_fragments, int total_segs);
static void validate_total_fragments_allocated(List **allocated_fragments, int total_segs, int input_total_fragments);
@@ -216,7 +215,6 @@ static void test__distribute_work_to_gp_segments(TestInputData *input)
List **segs_allocated_data = NULL;
List * input_fragments_list = NIL;
char** array_of_segs = NULL;
- bool *array_of_primaries;
int total_segs;
bool cluster_size_not_exceeded = input->m_num_hosts_in_cluster <= 65025;
@@ -258,14 +256,12 @@ static void test__distribute_work_to_gp_segments(TestInputData *input)
/* 4. Input - hawq segments */
total_segs = num_hosts_in_cluster * num_segments_on_host;
array_of_segs = create_array_of_segs(cluster, num_hosts_in_cluster, num_segments_on_host);
- array_of_primaries = create_array_of_primaries(total_segs);
- buildCdbComponentDatabases(total_segs, array_of_segs, array_of_primaries);
- if (enable_print_input_segments)
- print_segments_list();
+ /* 5. Build QueryResource (acting hawq segments) */
+ buildQueryResource(total_segs, array_of_segs);
+ if (enable_print_input_segments)
+ print_segments_list();
- /* 5. Build QueryResource */
- buildQueryResource(num_hosts_in_cluster*num_segments_on_host, array_of_segs);
will_return(GetActiveQueryResource, resource);
will_return(GetActiveQueryResource, resource);
@@ -281,11 +277,9 @@ static void test__distribute_work_to_gp_segments(TestInputData *input)
/* 8. Cleanup */
freeQueryResource();
- restoreCdbComponentDatabases();
clean_cluster(cluster, num_hosts_in_cluster);
clean_array_of_segs(array_of_segs, total_segs);
clean_allocated_fragments(segs_allocated_data, total_segs);
- pfree(array_of_primaries);
}
/* create an array of segments based on the host in the cluster and the number of Hawq segments on host */
@@ -316,16 +310,6 @@ static void clean_array_of_segs(char **array_of_segs, int total_segments)
pfree(array_of_segs);
}
-static bool* create_array_of_primaries(int total_segments)
-{
- int i;
- bool *primaries = (bool*)palloc0(total_segments * sizeof(bool));
- for (i = 0; i < total_segments; i++)
- primaries[i] = true;
-
- return primaries;
-}
-
/* gives an ip to each host in a num_hosts size cluster */
static char** create_cluster(int num_hosts)
{
@@ -355,7 +339,7 @@ static char** create_cluster(int num_hosts)
}
/* release memory */
-static char** clean_cluster(char** cluster, int num_hosts)
+static void clean_cluster(char** cluster, int num_hosts)
{
int i;
@@ -368,7 +352,7 @@ static char** clean_cluster(char** cluster, int num_hosts)
}
/* show the cluster*/
-static char** print_cluster(char** cluster, int num_hosts)
+static void print_cluster(char** cluster, int num_hosts)
{
int i;
StringInfoData msg;
@@ -391,13 +375,12 @@ static char** print_cluster(char** cluster, int num_hosts)
static void print_segments_list()
{
StringInfoData msg;
- CdbComponentDatabases *test_cdb = GpAliveSegmentsInfo.cdbComponentDatabases;
initStringInfo(&msg);
- for (int i = 0; i < test_cdb->total_segment_dbs; ++i)
+ for (int i = 0; i < resource->numSegments; ++i)
{
- CdbComponentDatabaseInfo* component = &test_cdb->segment_db_info[i];
- appendStringInfo(&msg, "\nsegment -- index: %d, ip: %s", component->segindex, component->hostip);
+ Segment* seg = list_nth(resource->segments, i);
+ appendStringInfo(&msg, "\nsegment -- index: %d, ip: %s", seg->segindex, seg->hostip);
}
elog(FRAGDEBUG, "%s", msg.data);
@@ -407,13 +390,12 @@ static void print_segments_list()
/* returns the ip of the segment's host */
static char* find_segment_ip_by_index(int seg_index)
{
- CdbComponentDatabases *test_cdb = GpAliveSegmentsInfo.cdbComponentDatabases;
- if (seg_index < 0 || seg_index >= test_cdb->total_segment_dbs)
+ if (seg_index < 0 || seg_index >= resource->numSegments)
assert_true(false);
- for (int i = 0; i < test_cdb->total_segment_dbs; ++i)
+ for (int i = 0; i < resource->numSegments; ++i)
{
- CdbComponentDatabaseInfo* seg = &test_cdb->segment_db_info[i];
+ Segment* seg = list_nth(resource->segments, i);
if (seg->segindex == seg_index)
return seg->hostip;
}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f0f62387/src/backend/access/external/test/hd_work_mgr_do_segment_clustering_by_host_test.c
----------------------------------------------------------------------
diff --git a/src/backend/access/external/test/hd_work_mgr_do_segment_clustering_by_host_test.c b/src/backend/access/external/test/hd_work_mgr_do_segment_clustering_by_host_test.c
index f668ccf..ce8e61d 100644
--- a/src/backend/access/external/test/hd_work_mgr_do_segment_clustering_by_host_test.c
+++ b/src/backend/access/external/test/hd_work_mgr_do_segment_clustering_by_host_test.c
@@ -34,8 +34,8 @@ void check_segment_info(List* segment_list, int list_index,
const char* expected_hostip)
{
- CdbComponentDatabaseInfo* seg_info =
- (CdbComponentDatabaseInfo*)lfirst(list_nth_cell(segment_list, list_index));
+ Segment* seg_info =
+ (Segment*)(list_nth(segment_list, list_index));
assert_string_equal(seg_info->hostip, expected_hostip);
}
@@ -50,34 +50,21 @@ test__do_segment_clustering_by_host__10SegmentsOn3Hosts(void **state)
ListCell* cell = NULL;
GpHost* gphost = NULL;
List* segs = NIL;
- CdbComponentDatabaseInfo* seg_info = NULL;
char* array_of_segs[10] =
{"1.2.3.1", "1.2.3.1", "1.2.3.1", "1.2.3.1",
"1.2.3.2", "1.2.3.2", "1.2.3.2",
"1.2.3.3", "1.2.3.3", "1.2.3.3"
};
- bool array_of_primaries[10] =
- {
- true, true, true, true,
- true, true, true,
- true, true, true
- };
int number_of_segments = 10;
/* sanity */
assert_true(number_of_segments == (sizeof(array_of_segs) / sizeof(array_of_segs[0])));
- assert_true(number_of_segments == (sizeof(array_of_primaries) / sizeof(array_of_primaries[0])));
-
- buildCdbComponentDatabases(number_of_segments, array_of_segs, array_of_primaries);
-
- CdbComponentDatabases *cdb = GpAliveSegmentsInfo.cdbComponentDatabases;
-
- /* sanity for cdbComponentDatabases building*/
- assert_int_equal(cdb->total_segment_dbs, number_of_segments);
- assert_string_equal(cdb->segment_db_info[4].hostip, array_of_segs[4]);
/* build QueryResource */
buildQueryResource(10, array_of_segs);
+ /* sanity for QueryResource building*/
+ assert_int_equal(resource->numSegments, 10);
+ assert_string_equal(((Segment*)list_nth(resource->segments, 4))->hostip, array_of_segs[4]);
will_return(GetActiveQueryResource, resource);
/* test do_segment_clustering_by_host */
@@ -113,6 +100,5 @@ test__do_segment_clustering_by_host__10SegmentsOn3Hosts(void **state)
}
freeQueryResource();
- restoreCdbComponentDatabases();
}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f0f62387/src/backend/access/external/test/hd_work_mgr_mock.c
----------------------------------------------------------------------
diff --git a/src/backend/access/external/test/hd_work_mgr_mock.c b/src/backend/access/external/test/hd_work_mgr_mock.c
index c4ed128..723c053 100644
--- a/src/backend/access/external/test/hd_work_mgr_mock.c
+++ b/src/backend/access/external/test/hd_work_mgr_mock.c
@@ -26,57 +26,21 @@
#include "hd_work_mgr_mock.h"
/*
- * Helper functions to create and restore GpAliveSegmentsInfo.cdbComponentDatabases element
+ * Helper functions to create and free QueryResource element
* used by hd_work_mgr
*/
-/*
- * Builds an array of CdbComponentDatabaseInfo.
+/* Builds the QueryResource for a query.
* Each segment is assigned a sequence number and an ip.
* segs_num - the number of segments
* segs_hostips - array of the ip of each segment
- * primaries_map - array of which segments are primaries
*/
-void buildCdbComponentDatabases(int segs_num,
- char* segs_hostips[],
- bool primaries_map[])
-{
- CdbComponentDatabases *test_cdb = palloc0(sizeof(CdbComponentDatabases));
- CdbComponentDatabaseInfo* component = NULL;
- test_cdb->total_segment_dbs = segs_num;
- test_cdb->segment_db_info =
- (CdbComponentDatabaseInfo *) palloc0(sizeof(CdbComponentDatabaseInfo) * test_cdb->total_segment_dbs);
-
- for (int i = 0; i < test_cdb->total_segment_dbs; ++i)
- {
- component = &test_cdb->segment_db_info[i];
- component->segindex = i;
- component->role = primaries_map[i] ? SEGMENT_ROLE_PRIMARY : SEGMENT_ROLE_MIRROR;
- component->hostip = pstrdup(segs_hostips[i]);
- }
-
- orig_cdb = GpAliveSegmentsInfo.cdbComponentDatabases;
- orig_seg_count = GpAliveSegmentsInfo.aliveSegmentsCount;
- GpAliveSegmentsInfo.cdbComponentDatabases = test_cdb;
- GpAliveSegmentsInfo.aliveSegmentsCount = segs_num;
-}
-
-void restoreCdbComponentDatabases()
-{
- /* free test CdbComponentDatabases */
- if (GpAliveSegmentsInfo.cdbComponentDatabases)
- freeCdbComponentDatabases(GpAliveSegmentsInfo.cdbComponentDatabases);
-
- GpAliveSegmentsInfo.cdbComponentDatabases = orig_cdb;
- GpAliveSegmentsInfo.aliveSegmentsCount = orig_seg_count;
-}
-
-/* Builds the QueryResource for a query */
void buildQueryResource(int segs_num,
char * segs_hostips[])
{
- resource = (QueryResource *)palloc(sizeof(QueryResource));
+ resource = (QueryResource *)palloc0(sizeof(QueryResource));
+ resource->numSegments = segs_num;
resource->segments = NULL;
for (int i = 0; i < segs_num; ++i)
{
@@ -87,8 +51,6 @@ void buildQueryResource(int segs_num,
resource->segments = lappend(resource->segments, segment);
}
-
- return resource;
}
/* Restores the QueryResource for a query */
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/f0f62387/src/backend/access/external/test/hd_work_mgr_mock.h
----------------------------------------------------------------------
diff --git a/src/backend/access/external/test/hd_work_mgr_mock.h b/src/backend/access/external/test/hd_work_mgr_mock.h
index c37db78..cb561bb 100644
--- a/src/backend/access/external/test/hd_work_mgr_mock.h
+++ b/src/backend/access/external/test/hd_work_mgr_mock.h
@@ -28,74 +28,19 @@
#include "c.h"
#include "../hd_work_mgr.c"
-static CdbComponentDatabases *orig_cdb = NULL;
-static int orig_seg_count = -1;
static QueryResource * resource = NULL;
-struct AliveSegmentsInfo
-{
- uint64 fts_statusVersion;
- TransactionId tid;
-
- /* Release gangs */
- bool cleanGangs;
-
- /* Used for debug & test */
- bool forceUpdate;
- int failed_segmentid_start;
- int failed_segmentid_number;
-
- /* Used for disptacher. */
- int4 aliveSegmentsCount;
- int4 singleton_segindex;
- Bitmapset *aliveSegmentsBitmap;
- struct CdbComponentDatabases *cdbComponentDatabases;
-};
-
-typedef struct AliveSegmentsInfo AliveSegmentsInfo;
-
-AliveSegmentsInfo GpAliveSegmentsInfo = {0, 0, false, false, 0, 0, UNINITIALIZED_GP_IDENTITY_VALUE, 0, NULL, NULL};
-
-/*
- * Helper functions copied from backend/cdb/cdbutils.c
- */
-
/*
- * _freeCdbComponentDatabases
- *
- * Releases the storage occupied by the CdbComponentDatabases
- * struct pointed to by the argument.
- */
-void
-_freeCdbComponentDatabases(CdbComponentDatabases *pDBs);
-
-/*
- * _freeCdbComponentDatabaseInfo:
- * Releases any storage allocated for members variables of a CdbComponentDatabaseInfo struct.
- */
-void
-_freeCdbComponentDatabaseInfo(CdbComponentDatabaseInfo *cdi);
-
-/*
- * Helper functions to create and restore GpAliveSegmentsInfo.cdbComponentDatabases element
+ * Helper functions to create and free QueryResource element
* used by hd_work_mgr
*/
/*
- * Builds an array of CdbComponentDatabaseInfo.
- * Each segment is assigned a sequence number and an ip.
- * segs_num - the number of segments
- * segs_hostips - array of the ip of each segment
- * primaries_map - array of which segments are primaries
+ * Builds a mock QueryResource which is used when
+ * GetActiveQueryResource is called to get the
+ * list of available segments.
*/
-void buildCdbComponentDatabases(int segs_num,
- char* segs_hostips[],
- bool primaries_map[]);
-
-
-void restoreCdbComponentDatabases();
-
void buildQueryResource(int segs_num,
char * segs_hostips[]);
void freeQueryResource();