@@ -48,9 +48,9 @@ func (handler *SQSHandler) StartServer() error {
48
48
49
49
glog .Info ("Starting a new server ..." )
50
50
51
- go handler .StartConsumingProcess (handler . QueueURL )
51
+ go handler .StartConsumingProcess ()
52
52
go handler .StartMonitoringProcess ()
53
- // go handler.RemoveCompletedJobsProcess()
53
+ go handler .RemoveCompletedJobsProcess ()
54
54
55
55
glog .Info ("The server is started" )
56
56
@@ -59,14 +59,14 @@ func (handler *SQSHandler) StartServer() error {
59
59
}
60
60
61
61
// StartConsumingProcess starts consumming the queue
62
- func (handler * SQSHandler ) StartConsumingProcess (queueURL string ) error {
62
+ func (handler * SQSHandler ) StartConsumingProcess () error {
63
63
newClient , err := NewSQSClient ()
64
64
if err != nil {
65
65
return err
66
66
}
67
67
68
68
receiveParams := & sqs.ReceiveMessageInput {
69
- QueueUrl : aws .String (queueURL ),
69
+ QueueUrl : aws .String (handler . QueueURL ),
70
70
MaxNumberOfMessages : aws .Int64 (1 ),
71
71
VisibilityTimeout : aws .Int64 (30 ),
72
72
WaitTimeSeconds : aws .Int64 (20 ),
@@ -79,49 +79,53 @@ func (handler *SQSHandler) StartConsumingProcess(queueURL string) error {
79
79
}
80
80
81
81
for _ , message := range receiveResp .Messages {
82
- // err := handler.HandleSQSMessage(queueURL, message)
83
- // if err != nil {
84
- // glog.Errorf("Can not process the message. Error %s. Message %s", err, *message.Body)
85
- // continue
86
- // }
87
-
88
- glog .Info ("message:" , * message .Body )
89
-
90
- glog .Infof ("Start proceess meessage %s" , message .MessageId )
91
- time .Sleep (5 )
92
-
93
- handler .RemoveSQSMessage (queueURL , message )
94
-
95
- sentMessageInput := & sqs.SendMessageInput {
96
- MessageBody : message .Body ,
97
- QueueUrl : aws .String (queueURL ),
82
+ err := handler .HandleSQSMessage (message )
83
+ if err != nil {
84
+ glog .Errorf ("Can not process the message. Error %s. Message %s" , err , * message .Body )
85
+ continue
98
86
}
99
- newClient .SendMessageRequest (sentMessageInput )
87
+
88
+ handler .RemoveSQSMessage (message )
100
89
101
90
}
102
91
103
92
}
104
93
}
105
94
106
95
// RemoveSQSMessage removes SQS message
107
- func (handler * SQSHandler ) RemoveSQSMessage (queueURL string , message * sqs.Message ) error {
96
+ func (handler * SQSHandler ) RemoveSQSMessage (message * sqs.Message ) error {
108
97
newClient , err := NewSQSClient ()
109
98
if err != nil {
110
99
return err
111
100
}
112
101
deleteParams := & sqs.DeleteMessageInput {
113
- QueueUrl : aws .String (queueURL ), // Required
114
- ReceiptHandle : message .ReceiptHandle , // Required
102
+ QueueUrl : aws .String (handler . QueueURL ), // Required
103
+ ReceiptHandle : message .ReceiptHandle , // Required
115
104
}
116
105
_ , err = newClient .DeleteMessage (deleteParams ) // No response returned when successed.
117
106
if err != nil {
118
107
glog .Error (err )
119
108
return err
120
109
}
121
- glog .Infof ("[Delete message] \n Message ID: %s has beed deleted.\n \n " , * message .MessageId )
110
+ glog .Infof ("Message ID: %s has beed deleted.\n \n " , * message .MessageId )
122
111
return nil
123
112
}
124
113
114
+ // ResendSQSMessage resends the message
115
+ func (handler * SQSHandler ) ResendSQSMessage (queueURL string , message * sqs.Message ) error {
116
+ newClient , err := NewSQSClient ()
117
+ if err != nil {
118
+ return err
119
+ }
120
+ sentMessageInput := & sqs.SendMessageInput {
121
+ MessageBody : message .Body ,
122
+ QueueUrl : aws .String (queueURL ),
123
+ }
124
+ _ , err = newClient .SendMessage (sentMessageInput )
125
+ return err
126
+
127
+ }
128
+
125
129
// StartMonitoringProcess starts the process to monitor the created job
126
130
func (handler * SQSHandler ) StartMonitoringProcess () {
127
131
for {
@@ -130,14 +134,12 @@ func (handler *SQSHandler) StartMonitoringProcess() {
130
134
for _ , jobInfo := range handler .MonitoredJobs {
131
135
k8sJob , err := GetJobStatusByID (jobInfo .UID )
132
136
if err != nil {
133
- glog .Errorf ("Can not get k8s job %s. Detail %s" , jobInfo .Name , err )
137
+ glog .Errorf ("Can not get k8s job %s. Detail %s. Resend the message to the queue" , jobInfo .Name , err )
138
+ handler .ResendSQSMessage (handler .QueueURL , k8sJob .SQSMessage )
134
139
} else {
135
140
glog .Infof ("%s: %s" , k8sJob .Name , k8sJob .Status )
136
141
if k8sJob .Status == "Unknown" || k8sJob .Status == "Running" {
137
142
nextMonitoredJobs = append (nextMonitoredJobs , jobInfo )
138
- } else if k8sJob .Status == "Completed" {
139
- deleteJobByID (k8sJob .UID , GRACE_PERIOD )
140
- handler .RemoveSQSMessage (k8sJob .QueueURL , k8sJob .SQSMessage )
141
143
}
142
144
}
143
145
@@ -151,13 +153,13 @@ func (handler *SQSHandler) StartMonitoringProcess() {
151
153
}
152
154
153
155
// RemoveCompletedJobsProcess starts the process to remove completed jobs
154
- // func (handler *SQSHandler) RemoveCompletedJobsProcess() {
155
- // for {
156
- // time.Sleep(300 * time.Second)
157
- // glog.Info("Start to remove completed jobs")
158
- // RemoveCompletedJobs()
159
- // }
160
- // }
156
+ func (handler * SQSHandler ) RemoveCompletedJobsProcess () {
157
+ for {
158
+ time .Sleep (300 * time .Second )
159
+ glog .Info ("Start to remove completed jobs" )
160
+ RemoveCompletedJobs ()
161
+ }
162
+ }
161
163
162
164
/*
163
165
getObjectFromSQSMessage returns s3 object from sqs message
@@ -243,7 +245,7 @@ to the queue and retry later (handled by `md` library). That makes sure
243
245
the message is properly handle before it actually deleted
244
246
245
247
*/
246
- func (handler * SQSHandler ) HandleSQSMessage (queueURL string , message * sqs.Message ) error {
248
+ func (handler * SQSHandler ) HandleSQSMessage (message * sqs.Message ) error {
247
249
248
250
jsonBody := * message .Body
249
251
objectPaths := getObjectsFromSQSMessage (jsonBody )
@@ -270,7 +272,6 @@ func (handler *SQSHandler) HandleSQSMessage(queueURL string, message *sqs.Messag
270
272
for GetNumberRunningJobs () > GetMaxJobConfig () {
271
273
time .Sleep (5 * time .Second )
272
274
}
273
- glog .Info ("Processing: " , objectPath )
274
275
jobInfo , err := CreateK8sJob (objectPath , jobConfig )
275
276
if err != nil {
276
277
glog .Infof ("Error :%s" , err )
@@ -283,9 +284,8 @@ func (handler *SQSHandler) HandleSQSMessage(queueURL string, message *sqs.Messag
283
284
glog .Errorln (err )
284
285
return err
285
286
}
286
- glog .Info (string (out ))
287
287
jobInfo .SQSMessage = message
288
- jobInfo . QueueURL = queueURL
288
+ glog . Info ( string ( out ))
289
289
handler .Mu .Lock ()
290
290
handler .MonitoredJobs = append (handler .MonitoredJobs , jobInfo )
291
291
handler .Mu .Unlock ()
@@ -345,5 +345,6 @@ func (handler *SQSHandler) RetryCreateIndexingJob(jsonBytes []byte) error {
345
345
"Message" : "{\"Records\":[{\"eventSource\":\"aws:s3\",\"awsRegion\":\"us-east-1\",\"eventName\":\"ObjectCreated:Put\",\"s3\":{\"s3SchemaVersion\":\"1.0\",\"bucket\":{\"name\":\"%s\"},\"object\":{\"key\":\"%s\"}}}]}"}` , retryMessage .Bucket , retryMessage .Key )
346
346
sqsMessage := sqs.Message {}
347
347
sqsMessage .SetBody (str )
348
+
348
349
return handler .HandleSQSMessage (& sqsMessage )
349
350
}
0 commit comments