@@ -4,10 +4,10 @@ import (
44 ds3Models "github.com/SpectraLogic/ds3_go_sdk/ds3/models"
55 "github.com/SpectraLogic/ds3_go_sdk/ds3"
66 "sync"
7- "log"
87 "io"
98 "github.com/SpectraLogic/ds3_go_sdk/helpers/ranges"
109 helperModels "github.com/SpectraLogic/ds3_go_sdk/helpers/models"
10+ "github.com/SpectraLogic/ds3_go_sdk/sdk_log"
1111)
1212
1313type getProducer struct {
@@ -21,6 +21,7 @@ type getProducer struct {
2121 processedBlobTracker blobTracker
2222 deferredBlobQueue BlobDescriptionQueue // queue of blobs whose channels are not yet ready for transfer
2323 rangeFinder ranges.BlobRangeFinder
24+ sdk_log.Logger
2425}
2526
2627func newGetProducer (jobMasterObjectList * ds3Models.MasterObjectList , getObjects * []helperModels.GetObject , queue * chan TransferOperation , strategy * ReadTransferStrategy , client * ds3.Client , waitGroup * sync.WaitGroup ) * getProducer {
@@ -35,6 +36,7 @@ func newGetProducer(jobMasterObjectList *ds3Models.MasterObjectList, getObjects
3536 processedBlobTracker : newProcessedBlobTracker (),
3637 deferredBlobQueue : NewBlobDescriptionQueue (),
3738 rangeFinder : ranges .NewBlobRangeFinder (getObjects ),
39+ Logger : client .Logger , //use the same logger as the client
3840 }
3941}
4042
@@ -55,11 +57,11 @@ func toReadObjectMap(getObjects *[]helperModels.GetObject) map[string]helperMode
5557
5658// Processes all the blobs in a chunk that are ready for transfer from BP
5759func (producer * getProducer ) processChunk (curChunk * ds3Models.Objects , bucketName string , jobId string , aggErr * ds3Models.AggregateError ) {
58- log . Printf ( "DEBUG begin chunk processing %s" , curChunk .ChunkId )
60+ producer . Debugf ( " begin chunk processing %s" , curChunk .ChunkId )
5961
6062 // transfer blobs that are ready, and queue those that are waiting for channel
6163 for _ , curObj := range curChunk .Objects {
62- log . Printf ( "DEBUG queuing object in waiting to be processed %s offset=%d length=%d" , * curObj .Name , curObj .Offset , curObj .Length )
64+ producer . Debugf ( " queuing object in waiting to be processed %s offset=%d length=%d" , * curObj .Name , curObj .Offset , curObj .Length )
6365 blob := helperModels .NewBlobDescription (* curObj .Name , curObj .Offset , curObj .Length )
6466 producer .queueBlobForTransfer (& blob , bucketName , jobId , aggErr )
6567 }
@@ -78,7 +80,7 @@ func (producer *getProducer) transferOperationBuilder(info getObjectInfo, aggErr
7880 return func () {
7981 blobRanges := producer .rangeFinder .GetRanges (info .blob .Name (), info .blob .Offset (), info .blob .Length ())
8082
81- log . Printf ( "TRANSFER: objectName='%s' offset=%d ranges=%v" , info .blob .Name (), info .blob .Offset (), blobRanges )
83+ producer . Debugf ( "transferring objectName='%s' offset=%d ranges=%v" , info .blob .Name (), info .blob .Offset (), blobRanges )
8284
8385 getObjRequest := ds3Models .NewGetObjectRequest (info .bucketName , info .blob .Name ()).
8486 WithOffset (info .blob .Offset ()).
@@ -91,22 +93,22 @@ func (producer *getProducer) transferOperationBuilder(info getObjectInfo, aggErr
9193 getObjResponse , err := producer .client .GetObject (getObjRequest )
9294 if err != nil {
9395 aggErr .Append (err )
94- log . Printf ( "ERROR during retrieval of %s : %s" , info .blob .Name (), err .Error ())
96+ producer . Errorf ( "unable to retrieve object '%s' at offset %d : %s" , info .blob .Name (), info . blob . Offset (), err .Error ())
9597 return
9698 }
9799
98100 if len (blobRanges ) == 0 {
99101 writer , err := info .channelBuilder .GetChannel (info .blob .Offset ())
100102 if err != nil {
101103 aggErr .Append (err )
102- log . Printf ( "ERROR when copying content for object '%s' at offset '%d': %s" , info .blob .Name (), info .blob .Offset (), err .Error ())
104+ producer . Errorf ( "unable to read contents of object '%s' at offset '%d': %s" , info .blob .Name (), info .blob .Offset (), err .Error ())
103105 return
104106 }
105107 defer info .channelBuilder .OnDone (writer )
106108 _ , err = io .Copy (writer , getObjResponse .Content ) //copy all content from response reader to destination writer
107109 if err != nil {
108110 aggErr .Append (err )
109- log . Printf ( "ERROR when copying content of object '%s' at offset '%d' from source to destination: %s" , info .blob .Name (), info .blob .Offset (), err .Error ())
111+ producer . Errorf ( "unable to copy content of object '%s' at offset '%d' from source to destination: %s" , info .blob .Name (), info .blob .Offset (), err .Error ())
110112 }
111113 return
112114 }
@@ -116,7 +118,7 @@ func (producer *getProducer) transferOperationBuilder(info getObjectInfo, aggErr
116118 err := writeRangeToDestination (info .channelBuilder , r , getObjResponse .Content )
117119 if err != nil {
118120 aggErr .Append (err )
119- log . Printf ( "ERROR when writing to destination channel for object '%s' with range '%v': %s" , info .blob .Name (), r , err .Error ())
121+ producer . Errorf ( "unable to write to destination channel for object '%s' with range '%v': %s" , info .blob .Name (), r , err .Error ())
120122 }
121123 }
122124 }
@@ -145,12 +147,12 @@ func (producer *getProducer) queueBlobForTransfer(blob *helperModels.BlobDescrip
145147 curReadObj := producer .readObjectMap [blob .Name ()]
146148
147149 if ! curReadObj .ChannelBuilder .IsChannelAvailable (blob .Offset ()) {
148- log . Printf ( "DEBUG channel is NOT available for getting blob %s offset=%d length=%d" , blob .Name (), blob .Offset (), blob .Length ())
150+ producer . Debugf ( " channel is not currently available for getting blob '%s' offset=%d length=%d" , blob .Name (), blob .Offset (), blob .Length ())
149151 producer .deferredBlobQueue .Push (blob )
150152 return
151153 }
152154
153- log . Printf ( "DEBUG channel is available for getting blob %s offset=%d length=%d" , blob .Name (), blob .Offset (), blob .Length ())
155+ producer . Debugf ( " channel is available for getting blob '%s' offset=%d length=%d" , blob .Name (), blob .Offset (), blob .Length ())
154156
155157 // Create transfer operation
156158 objInfo := getObjectInfo {
@@ -178,11 +180,11 @@ func (producer *getProducer) processWaitingBlobs(bucketName string, jobId string
178180 for i := 0 ; i < waitingBlobs ; i ++ {
179181 //attempt transfer
180182 curBlob , err := producer .deferredBlobQueue .Pop ()
181- log . Printf ( "DEBUG attempting to process %s offset=%d length=%d" , curBlob .Name (), curBlob .Offset (), curBlob .Length ())
183+ producer . Debugf ( " attempting to process '%s' offset=%d length=%d" , curBlob .Name (), curBlob .Offset (), curBlob .Length ())
182184 if err != nil {
183185 //should not be possible to get here
184186 aggErr .Append (err )
185- log . Printf ( "ERROR when attempting blob transfer: %s" , err .Error ())
187+ producer . Errorf ( "failure during blob transfer '%s' at offset %d : %s", curBlob . Name (), curBlob . Offset () , err .Error ())
186188 }
187189 producer .queueBlobForTransfer (curBlob , bucketName , jobId , aggErr )
188190 }
@@ -197,7 +199,7 @@ func (producer *getProducer) run(aggErr *ds3Models.AggregateError) {
197199
198200 // determine number of blobs to be processed
199201 var totalBlobCount int64 = producer .totalBlobCount ()
200- log . Printf ( "DEBUG totalBlobs=%d processedBlobs=%d" , totalBlobCount , producer .processedBlobTracker .NumberOfProcessedBlobs ())
202+ producer . Debugf ( "job status totalBlobs=%d processedBlobs=%d" , totalBlobCount , producer .processedBlobTracker .NumberOfProcessedBlobs ())
201203
202204 // process all chunks and make sure all blobs are queued for transfer
203205 for producer .processedBlobTracker .NumberOfProcessedBlobs () < totalBlobCount || producer .deferredBlobQueue .Size () > 0 {
@@ -208,7 +210,8 @@ func (producer *getProducer) run(aggErr *ds3Models.AggregateError) {
208210 chunksReadyResponse , err := producer .client .GetJobChunksReadyForClientProcessingSpectraS3 (chunksReady )
209211 if err != nil {
210212 aggErr .Append (err )
211- log .Fatal (err )
213+ producer .Errorf ("unrecoverable error: %v" , err )
214+ return
212215 }
213216
214217 // Check to see if any chunks can be processed
0 commit comments