You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ze...@apache.org on 2021/09/30 19:00:37 UTC

[arrow] branch master updated: ARROW-6946: [Go] Run tests with assert build tag enabled to ensure safety

This is an automated email from the ASF dual-hosted git repository.

zeroshade pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new 5d41f1d  ARROW-6946: [Go] Run tests with assert build tag enabled to ensure safety
5d41f1d is described below

commit 5d41f1d138295a3864243e6a4b7033d4ae5dc582
Author: Matthew Topol <mt...@factset.com>
AuthorDate: Thu Sep 30 14:59:43 2021 -0400

    ARROW-6946: [Go] Run tests with assert build tag enabled to ensure safety
    
    This patch had conflicts when merged, resolved by
    Committer: Matthew Topol <mt...@factset.com>
    
    Closes #11276 from zeroshade/arrow-6946
    
    Authored-by: Matthew Topol <mt...@factset.com>
    Signed-off-by: Matthew Topol <mt...@factset.com>
---
 ci/scripts/go_cgo_python_test.sh     |  2 +-
 ci/scripts/go_test.sh                |  4 +--
 go/arrow/array/record.go             |  7 ++--
 go/arrow/array/struct_test.go        |  3 --
 go/arrow/array/table_test.go         | 28 ++++++----------
 go/arrow/example_test.go             | 65 +++++++++++++++---------------------
 go/arrow/internal/arrjson/arrjson.go | 15 +++------
 go/arrow/ipc/cmd/arrow-cat/main.go   |  1 -
 8 files changed, 47 insertions(+), 78 deletions(-)

diff --git a/ci/scripts/go_cgo_python_test.sh b/ci/scripts/go_cgo_python_test.sh
index 564b5e3..5f2032f 100755
--- a/ci/scripts/go_cgo_python_test.sh
+++ b/ci/scripts/go_cgo_python_test.sh
@@ -35,7 +35,7 @@ case "$(uname)" in
         ;;
 esac
 
-go build -tags cdata_test -buildmode=c-shared -o $testlib .
+go build -tags cdata_test,assert -buildmode=c-shared -o $testlib .
 
 python test_export_to_cgo.py
 
diff --git a/ci/scripts/go_test.sh b/ci/scripts/go_test.sh
index 7bbfb2d..568a572 100755
--- a/ci/scripts/go_test.sh
+++ b/ci/scripts/go_test.sh
@@ -31,7 +31,7 @@ esac
 
 pushd ${source_dir}/arrow
 
-TAGS="test"
+TAGS="assert,test"
 if [[ -n "${ARROW_GO_TESTCGO}" ]]; then
     TAGS="${TAGS},ccalloc"
 fi
@@ -50,7 +50,7 @@ popd
 pushd ${source_dir}/parquet
 
 for d in $(go list ./... | grep -v vendor); do
-    go test $testargs  $d
+    go test $testargs -tags assert $d
 done
 
 popd
diff --git a/go/arrow/array/record.go b/go/arrow/array/record.go
index cf9ffc4..f65a4e8 100644
--- a/go/arrow/array/record.go
+++ b/go/arrow/array/record.go
@@ -289,11 +289,10 @@ func (b *RecordBuilder) Retain() {
 func (b *RecordBuilder) Release() {
 	debug.Assert(atomic.LoadInt64(&b.refCount) > 0, "too many releases")
 
-	for _, f := range b.fields {
-		f.Release()
-	}
-
 	if atomic.AddInt64(&b.refCount, -1) == 0 {
+		for _, f := range b.fields {
+			f.Release()
+		}
 		b.fields = nil
 	}
 }
diff --git a/go/arrow/array/struct_test.go b/go/arrow/array/struct_test.go
index 5a0cefd..b948530 100644
--- a/go/arrow/array/struct_test.go
+++ b/go/arrow/array/struct_test.go
@@ -270,10 +270,7 @@ func TestStructArrayStringer(t *testing.T) {
 	defer sb.Release()
 
 	f1b := sb.FieldBuilder(0).(*array.Float64Builder)
-	defer f1b.Release()
-
 	f2b := sb.FieldBuilder(1).(*array.Int32Builder)
-	defer f2b.Release()
 
 	if got, want := sb.NumField(), 2; got != want {
 		t.Fatalf("got=%d, want=%d", got, want)
diff --git a/go/arrow/array/table_test.go b/go/arrow/array/table_test.go
index 408be8b..6bb6235 100644
--- a/go/arrow/array/table_test.go
+++ b/go/arrow/array/table_test.go
@@ -225,7 +225,6 @@ func TestColumn(t *testing.T) {
 		len    int
 		nulls  int
 		chunks int
-		err    error
 	}
 
 	for _, tc := range []struct {
@@ -396,8 +395,8 @@ func TestTable(t *testing.T) {
 
 	schema := arrow.NewSchema(
 		[]arrow.Field{
-			arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-			arrow.Field{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
+			{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+			{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
 		},
 		nil,
 	)
@@ -456,11 +455,6 @@ func TestTable(t *testing.T) {
 	defer col2.Release()
 
 	cols := []array.Column{*col1, *col2}
-	defer func(cols []array.Column) {
-		for i := range cols {
-			cols[i].Release()
-		}
-	}(cols)
 
 	tbl := array.NewTable(schema, cols, -1)
 	defer tbl.Release()
@@ -503,7 +497,7 @@ func TestTable(t *testing.T) {
 		{
 			schema: arrow.NewSchema(
 				[]arrow.Field{
-					arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+					{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
 				},
 				nil,
 			),
@@ -514,8 +508,8 @@ func TestTable(t *testing.T) {
 		{
 			schema: arrow.NewSchema(
 				[]arrow.Field{
-					arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-					arrow.Field{Name: "f2-f64", Type: arrow.PrimitiveTypes.Int32},
+					{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+					{Name: "f2-f64", Type: arrow.PrimitiveTypes.Int32},
 				},
 				nil,
 			),
@@ -526,8 +520,8 @@ func TestTable(t *testing.T) {
 		{
 			schema: arrow.NewSchema(
 				[]arrow.Field{
-					arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-					arrow.Field{Name: "f2-f32", Type: arrow.PrimitiveTypes.Float64},
+					{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+					{Name: "f2-f32", Type: arrow.PrimitiveTypes.Float64},
 				},
 				nil,
 			),
@@ -584,8 +578,8 @@ func TestTableFromRecords(t *testing.T) {
 
 	schema := arrow.NewSchema(
 		[]arrow.Field{
-			arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-			arrow.Field{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
+			{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+			{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
 		},
 		nil,
 	)
@@ -630,8 +624,8 @@ func TestTableReader(t *testing.T) {
 
 	schema := arrow.NewSchema(
 		[]arrow.Field{
-			arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-			arrow.Field{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
+			{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+			{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
 		},
 		nil,
 	)
diff --git a/go/arrow/example_test.go b/go/arrow/example_test.go
index 71f8674..bb4bf78 100644
--- a/go/arrow/example_test.go
+++ b/go/arrow/example_test.go
@@ -133,8 +133,6 @@ func Example_listArray() {
 	defer lb.Release()
 
 	vb := lb.ValueBuilder().(*array.Int64Builder)
-	defer vb.Release()
-
 	vb.Reserve(10)
 
 	lb.Append(true)
@@ -214,8 +212,6 @@ func Example_fixedSizeListArray() {
 	defer lb.Release()
 
 	vb := lb.ValueBuilder().(*array.Int64Builder)
-	defer vb.Release()
-
 	vb.Reserve(10)
 
 	lb.Append(true)
@@ -268,12 +264,8 @@ func Example_structArray() {
 	defer sb.Release()
 
 	f1b := sb.FieldBuilder(0).(*array.ListBuilder)
-	defer f1b.Release()
 	f1vb := f1b.ValueBuilder().(*array.Uint8Builder)
-	defer f1vb.Release()
-
 	f2b := sb.FieldBuilder(1).(*array.Int32Builder)
-	defer f2b.Release()
 
 	sb.Reserve(4)
 	f1vb.Reserve(7)
@@ -302,15 +294,10 @@ func Example_structArray() {
 	fmt.Printf("Len()   = %d\n", arr.Len())
 
 	list := arr.Field(0).(*array.List)
-	defer list.Release()
-
 	offsets := list.Offsets()
 
 	varr := list.ListValues().(*array.Uint8)
-	defer varr.Release()
-
 	ints := arr.Field(1).(*array.Int32)
-	defer ints.Release()
 
 	for i := 0; i < arr.Len(); i++ {
 		if !arr.IsValid(i) {
@@ -392,16 +379,16 @@ func Example_float64Tensor2x5() {
 	defer f64.Release()
 
 	for _, i := range [][]int64{
-		[]int64{0, 0},
-		[]int64{0, 1},
-		[]int64{0, 2},
-		[]int64{0, 3},
-		[]int64{0, 4},
-		[]int64{1, 0},
-		[]int64{1, 1},
-		[]int64{1, 2},
-		[]int64{1, 3},
-		[]int64{1, 4},
+		{0, 0},
+		{0, 1},
+		{0, 2},
+		{0, 3},
+		{0, 4},
+		{1, 0},
+		{1, 1},
+		{1, 2},
+		{1, 3},
+		{1, 4},
 	} {
 		fmt.Printf("arr%v = %v\n", i, f64.Value(i))
 	}
@@ -435,16 +422,16 @@ func Example_float64Tensor2x5ColMajor() {
 	defer f64.Release()
 
 	for _, i := range [][]int64{
-		[]int64{0, 0},
-		[]int64{0, 1},
-		[]int64{0, 2},
-		[]int64{0, 3},
-		[]int64{0, 4},
-		[]int64{1, 0},
-		[]int64{1, 1},
-		[]int64{1, 2},
-		[]int64{1, 3},
-		[]int64{1, 4},
+		{0, 0},
+		{0, 1},
+		{0, 2},
+		{0, 3},
+		{0, 4},
+		{1, 0},
+		{1, 1},
+		{1, 2},
+		{1, 3},
+		{1, 4},
 	} {
 		fmt.Printf("arr%v = %v\n", i, f64.Value(i))
 	}
@@ -467,8 +454,8 @@ func Example_record() {
 
 	schema := arrow.NewSchema(
 		[]arrow.Field{
-			arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-			arrow.Field{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
+			{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+			{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
 		},
 		nil,
 	)
@@ -497,8 +484,8 @@ func Example_recordReader() {
 
 	schema := arrow.NewSchema(
 		[]arrow.Field{
-			arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-			arrow.Field{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
+			{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+			{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
 		},
 		nil,
 	)
@@ -546,8 +533,8 @@ func Example_table() {
 
 	schema := arrow.NewSchema(
 		[]arrow.Field{
-			arrow.Field{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
-			arrow.Field{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
+			{Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
+			{Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
 		},
 		nil,
 	)
diff --git a/go/arrow/internal/arrjson/arrjson.go b/go/arrow/internal/arrjson/arrjson.go
index 57e7cb9..3d5247b 100644
--- a/go/arrow/internal/arrjson/arrjson.go
+++ b/go/arrow/internal/arrjson/arrjson.go
@@ -759,9 +759,7 @@ func arrayFromJSON(mem memory.Allocator, dt arrow.DataType, arr Array) array.Int
 			bldr.Append(v)
 			beg := int64(arr.Offset[i])
 			end := int64(arr.Offset[i+1])
-			slice := array.NewSlice(elems, beg, end)
-			buildArray(bldr.ValueBuilder(), slice)
-			slice.Release()
+			buildArray(bldr.ValueBuilder(), array.NewSlice(elems, beg, end))
 		}
 		return bldr.NewArray()
 
@@ -776,9 +774,7 @@ func arrayFromJSON(mem memory.Allocator, dt arrow.DataType, arr Array) array.Int
 			bldr.Append(v)
 			beg := int64(i) * size
 			end := int64(i+1) * size
-			slice := array.NewSlice(elems, beg, end)
-			buildArray(bldr.ValueBuilder(), slice)
-			slice.Release()
+			buildArray(bldr.ValueBuilder(), array.NewSlice(elems, beg, end))
 		}
 		return bldr.NewArray()
 
@@ -795,7 +791,6 @@ func arrayFromJSON(mem memory.Allocator, dt arrow.DataType, arr Array) array.Int
 		for i := range dt.Fields() {
 			fbldr := bldr.FieldBuilder(i)
 			buildArray(fbldr, fields[i])
-			fields[i].Release()
 		}
 
 		return bldr.NewArray()
@@ -829,12 +824,10 @@ func arrayFromJSON(mem memory.Allocator, dt arrow.DataType, arr Array) array.Int
 			bldr.Append(v)
 			beg := int64(arr.Offset[i])
 			end := int64(arr.Offset[i+1])
-			slice := array.NewSlice(pairs, beg, end).(*array.Struct)
 			kb := bldr.KeyBuilder()
-			buildArray(kb, slice.Field(0))
+			buildArray(kb, array.NewSlice(pairs.(*array.Struct).Field(0), beg, end))
 			ib := bldr.ItemBuilder()
-			buildArray(ib, slice.Field(1))
-			slice.Release()
+			buildArray(ib, array.NewSlice(pairs.(*array.Struct).Field(1), beg, end))
 		}
 		return bldr.NewArray()
 
diff --git a/go/arrow/ipc/cmd/arrow-cat/main.go b/go/arrow/ipc/cmd/arrow-cat/main.go
index 8e7f19b..d754f5d 100644
--- a/go/arrow/ipc/cmd/arrow-cat/main.go
+++ b/go/arrow/ipc/cmd/arrow-cat/main.go
@@ -162,7 +162,6 @@ func processFile(w io.Writer, fname string) error {
 		for i, col := range rec.Columns() {
 			fmt.Fprintf(w, "  col[%d] %q: %v\n", i, rec.ColumnName(i), col)
 		}
-		rec.Release()
 	}
 
 	return nil