Skip to content

Commit ac556c1

Browse files
committed
issue 3758 rewrite calculateVersionSizes to fix problem with duplicated keys
1 parent f125a8e commit ac556c1

File tree

1 file changed

+20
-22
lines changed
  • elasticsearch-agent/src/main/java/com/epam/pipeline/elasticsearchagent/service/impl/converter/storage

1 file changed

+20
-22
lines changed

elasticsearch-agent/src/main/java/com/epam/pipeline/elasticsearchagent/service/impl/converter/storage/StorageFileMapper.java

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,11 @@
2727
import com.epam.pipeline.entity.search.SearchDocumentType;
2828
import com.epam.pipeline.entity.search.StorageFileSearchMask;
2929
import com.epam.pipeline.utils.FileContentUtils;
30-
import com.epam.pipeline.utils.StreamUtils;
3130
import org.apache.commons.collections4.CollectionUtils;
3231
import org.apache.commons.collections4.ListUtils;
3332
import org.apache.commons.collections4.MapUtils;
3433
import org.apache.commons.collections4.SetUtils;
3534
import org.apache.commons.lang3.tuple.ImmutablePair;
36-
import org.apache.commons.lang3.tuple.Pair;
3735
import org.elasticsearch.common.xcontent.XContentBuilder;
3836
import org.elasticsearch.common.xcontent.XContentFactory;
3937
import org.slf4j.Logger;
@@ -42,13 +40,7 @@
4240

4341
import java.io.IOException;
4442
import java.nio.charset.StandardCharsets;
45-
import java.util.Comparator;
46-
import java.util.HashMap;
47-
import java.util.List;
48-
import java.util.Locale;
49-
import java.util.Map;
50-
import java.util.Objects;
51-
import java.util.Set;
43+
import java.util.*;
5244
import java.util.function.Function;
5345
import java.util.stream.Collectors;
5446

@@ -131,21 +123,27 @@ public XContentBuilder fileToDocument(final DataStorageFile dataStorageFile,
131123

132124
private Map<String, ImmutablePair<Long, Integer>> calculateVersionSizes(
133125
final Map<String, AbstractDataStorageItem> versions) {
134-
return StreamUtils.grouped(
135-
versions.values().stream().map(v -> (DataStorageFile) v),
136-
Comparator.comparing(v -> MapUtils.emptyIfNull(v.getLabels())
137-
.getOrDefault(ESConstants.STORAGE_CLASS_LABEL, STANDARD_TIER)
138-
)
139-
).map(tierVersions -> {
140-
final String storageClass = tierVersions.stream().findFirst()
141-
.map(v -> MapUtils.emptyIfNull(v.getLabels()).get(ESConstants.STORAGE_CLASS_LABEL))
142-
.orElse(STANDARD_TIER);
143-
final long totalSize = tierVersions.stream()
144-
.collect(Collectors.summarizingLong(DataStorageFile::getSize)).getSum();
145-
return ImmutablePair.of(storageClass, ImmutablePair.of(totalSize, tierVersions.size()));
146-
}).collect(Collectors.toMap(Pair::getKey, Pair::getValue));
126+
final HashMap<String, ImmutablePair<Long, Integer>> result = new HashMap<>();
127+
for (final AbstractDataStorageItem v : versions.values()) {
128+
final DataStorageFile version = (DataStorageFile) v;
129+
final String storageClass = Optional.ofNullable(
130+
MapUtils.emptyIfNull(version.getLabels()).get(ESConstants.STORAGE_CLASS_LABEL)
131+
).orElse(STANDARD_TIER);
132+
result.compute(
133+
storageClass,
134+
(tier, tierSize) -> {
135+
if (tierSize == null) {
136+
return ImmutablePair.of(version.getSize(), 1);
137+
} else {
138+
return ImmutablePair.of(tierSize.getLeft() + version.getSize(), tierSize.getRight() + 1);
139+
}
140+
}
141+
);
142+
}
143+
return result;
147144
}
148145

146+
149147
// This method construct mount path assuming that default mount point is /cloud-data/,
150148
// if f.e. CP_STORAGE_MOUNT_ROOT_DIR is defined in launch.env.properties or somewhere else,
151149
// this method will return wrong results

0 commit comments

Comments
 (0)