Jelajahi Sumber

Improved poor memory efficiency of awslogs

Signed-off-by: YAMASAKI Masahide <masahide.y@gmail.com>
YAMASAKI Masahide 8 tahun lalu
induk
melakukan
524f306340

+ 3 - 3
daemon/logger/awslogs/cloudwatchlogs.go

@@ -590,9 +590,9 @@ func (slice byTimestamp) Swap(i, j int) {
 }
 
 func unwrapEvents(events []wrappedEvent) []*cloudwatchlogs.InputLogEvent {
-	cwEvents := []*cloudwatchlogs.InputLogEvent{}
-	for _, input := range events {
-		cwEvents = append(cwEvents, input.inputLogEvent)
+	cwEvents := make([]*cloudwatchlogs.InputLogEvent, len(events))
+	for i, input := range events {
+		cwEvents[i] = input.inputLogEvent
 	}
 	return cwEvents
 }

+ 17 - 0
daemon/logger/awslogs/cloudwatchlogs_test.go

@@ -1034,3 +1034,20 @@ func TestCreateTagSuccess(t *testing.T) {
 		t.Errorf("Expected LogStreamName to be %s", "test-container/container-abcdefghijklmnopqrstuvwxyz01234567890")
 	}
 }
+
+func BenchmarkUnwrapEvents(b *testing.B) {
+	events := make([]wrappedEvent, maximumLogEventsPerPut)
+	for i := 0; i < maximumLogEventsPerPut; i++ {
+		mes := strings.Repeat("0", maximumBytesPerEvent)
+		events[i].inputLogEvent = &cloudwatchlogs.InputLogEvent{
+			Message: &mes,
+		}
+	}
+
+	as := assert.New(b)
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		res := unwrapEvents(events)
+		as.Len(res, maximumLogEventsPerPut)
+	}
+}