Skip to content

Commit a0ba0e7

Browse files
authored
OTHER: improving error handling when object doesn't exist on BP in helper bulk get. (#119)
1 parent 5036d12 commit a0ba0e7

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

helpers/getTransfernator.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package helpers
22

33
import (
4+
"fmt"
45
"github.com/SpectraLogic/ds3_go_sdk/ds3"
56
ds3Models "github.com/SpectraLogic/ds3_go_sdk/ds3/models"
67
helperModels "github.com/SpectraLogic/ds3_go_sdk/helpers/models"
@@ -86,8 +87,10 @@ func (transceiver *getTransceiver) createBulkGetJob() (*ds3Models.GetBulkJobSpec
8687
for _, obj := range *transceiver.ReadObjects {
8788
_, err := transceiver.Client.HeadObject(ds3Models.NewHeadObjectRequest(transceiver.BucketName, obj.Name))
8889
if err != nil {
89-
//mark file as having a fatal error
90-
obj.ChannelBuilder.SetFatalError(err)
90+
// mark file as having a fatal error
91+
readableErr := fmt.Errorf("failed HeadObject call on %s: %v", obj.Name, err)
92+
obj.ChannelBuilder.SetFatalError(readableErr)
93+
transceiver.Strategy.Listeners.Errored(obj.Name, readableErr)
9194
} else {
9295
objectsThatExist = append(objectsThatExist, obj)
9396
}

helpers_integration/helpersImpl_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"log"
1717
"os"
1818
"sync"
19+
"sync/atomic"
1920
"testing"
2021
"time"
2122
)
@@ -629,10 +630,17 @@ func TestRetryGetObjectsWhenSomeObjectsDoNotExist(t *testing.T) {
629630

630631
helper := helpers.NewHelpers(client)
631632

633+
perObjectErrCount := int64(0)
634+
errListener := helpers.ListenerStrategy{
635+
ErrorCallback: func(objectName string, err error) {
636+
atomic.AddInt64(&perObjectErrCount, 1)
637+
},
638+
}
639+
632640
strategy := helpers.ReadTransferStrategy{
633641
Options: helpers.ReadBulkJobOptions{}, // use default job options
634642
BlobStrategy: newTestBlobStrategy(),
635-
Listeners: newErrorOnErrorListenerStrategy(t),
643+
Listeners: errListener,
636644
}
637645

638646
file0, err := ioutil.TempFile(os.TempDir(), "goTest")
@@ -687,10 +695,16 @@ func TestRetryGetObjectsWhenSomeObjectsDoNotExist(t *testing.T) {
687695
utils.VerifyBookContent(testutils.BookTitles[2], file2)
688696
utils.VerifyBookContent(testutils.BookTitles[3], file3)
689697

698+
ds3Testing.AssertInt64(t, "per-object error count", 2, perObjectErrCount)
699+
690700
doesNotExistStat, err := os.Stat(doesNotExist1.Name())
691701
ds3Testing.AssertNilError(t, err)
692702
ds3Testing.AssertInt64(t, "size of file", 0, doesNotExistStat.Size())
693703

704+
doesNotExistStat, err = os.Stat(doesNotExist2.Name())
705+
ds3Testing.AssertNilError(t, err)
706+
ds3Testing.AssertInt64(t, "size of file", 0, doesNotExistStat.Size())
707+
694708
ds3Testing.AssertBool(t, "has fatal error", true, doesNotExistChannelBuilder1.HasFatalError())
695709
ds3Testing.AssertBool(t, "has fatal error", true, doesNotExistChannelBuilder2.HasFatalError())
696710
}

0 commit comments

Comments
 (0)