Skip to content

Commit 29f1588

Browse files
authored
Merge pull request #13 from eu-digital-green-certificates/feat/include_filter_lib
Moved partial variable hash filter calculation to external lib
2 parents f6b101a + 1427f51 commit 29f1588

File tree

8 files changed

+51
-26
lines changed

8 files changed

+51
-26
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
<nimbusds.version>9.9.2</nimbusds.version>
4343
<dgc.lib.version>1.1.13</dgc.lib.version>
4444
<dgc.bloomfilter.version>0.0.0-09cb38e</dgc.bloomfilter.version>
45+
<dgc.partialvarriablehashfilter.version>0.0.0-613ab9b</dgc.partialvarriablehashfilter.version>
4546
<sap.cloud.sdk.version>3.57.0</sap.cloud.sdk.version>
4647
<jjwt.version>0.11.2</jjwt.version>
4748
<!-- plugins -->
@@ -157,6 +158,11 @@
157158
<artifactId>bloomfilter</artifactId>
158159
<version>${dgc.bloomfilter.version}</version>
159160
</dependency>
161+
<dependency>
162+
<groupId>eu.europa.ec.dgc</groupId>
163+
<artifactId>partialvarriablehashfilter</artifactId>
164+
<version>${dgc.partialvarriablehashfilter.version}</version>
165+
</dependency>
160166
<dependency>
161167
<groupId>org.springframework.boot</groupId>
162168
<artifactId>spring-boot-starter</artifactId>

src/main/java/eu/europa/ec/dgc/revocationdistribution/config/DgcConfigProperties.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@ public static class VarHashListConfig {
6060
private String type = "hash_list";
6161
private String version;
6262
private float probRate;
63-
private int minByteCount = 4;
63+
private byte minByteCount = 4;
6464

65-
public int getMinByteCount() {
66-
return minByteCount > 255 ? 255 : minByteCount;
67-
}
6865
}
6966
}

src/main/java/eu/europa/ec/dgc/revocationdistribution/service/GeneratorService.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@ private void generatePartitionsForKidInPointMode(ChangeListItem changeItem) {
227227
List<ChunkMetaViewDto> entities = pointViewRepository.findAllByKid(changeItem.getKidId()).stream()
228228
.map(pointViewMapper::map).collect(Collectors.toList());
229229

230-
partitionGeneratorService.generatePartition(etag, entities, changeItem.getKidId(), null);
230+
partitionGeneratorService.generatePartition(
231+
etag, entities, changeItem.getKidId(), null, changeItem.getNewStorageMode());
231232

232233

233234
}
@@ -244,7 +245,8 @@ private void generatePartitionsForKidInVectorMode(ChangeListItem changeItem) {
244245
vectorViewRepository.findAllByKidAndId(changeItem.getKidId(), partitionId).stream()
245246
.map(vectorViewMapper::map).collect(Collectors.toList());
246247

247-
partitionGeneratorService.generatePartition(etag, entities, changeItem.getKidId(), partitionId);
248+
partitionGeneratorService.generatePartition(
249+
etag, entities, changeItem.getKidId(), partitionId, changeItem.getNewStorageMode());
248250

249251
}
250252

@@ -262,7 +264,8 @@ private void generatePartitionsForKidInCoordinateMode(ChangeListItem changeItem)
262264
coordinateViewRepository.findAllByKidAndId(changeItem.getKidId(), partitionId).stream()
263265
.map(coordinateViewMapper::map).collect(Collectors.toList());
264266

265-
partitionGeneratorService.generatePartition(etag, entities, changeItem.getKidId(), partitionId);
267+
partitionGeneratorService.generatePartition(
268+
etag, entities, changeItem.getKidId(), partitionId, changeItem.getNewStorageMode());
266269

267270
}
268271

src/main/java/eu/europa/ec/dgc/revocationdistribution/service/PartitionGeneratorService.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,21 @@ public class PartitionGeneratorService {
6565
*/
6666

6767
public void generatePartition(String etag, List<ChunkMetaViewDto> entities,
68-
String kid, String id) {
68+
String kid, String id, String storageMode) {
6969

7070
if (sliceCalculationBloomFilter.isPresent()) {
71-
generatePartition(etag, entities, kid, id, sliceCalculationBloomFilter.get());
71+
generatePartition(etag, entities, kid, id, sliceCalculationBloomFilter.get(), storageMode);
7272
}
7373

7474
if (sliceCalculationHashList.isPresent()) {
75-
generatePartition(etag, entities, kid, id, sliceCalculationHashList.get());
75+
generatePartition(etag, entities, kid, id, sliceCalculationHashList.get(), storageMode);
7676
}
7777

7878
}
7979

8080

8181
private void generatePartition(String etag, List<ChunkMetaViewDto> entities,
82-
String kid, String id, SliceCalculation sliceCalculation) {
82+
String kid, String id, SliceCalculation sliceCalculation, String storageMode) {
8383

8484
String x = null;
8585
String y = null;
@@ -99,7 +99,7 @@ private void generatePartition(String etag, List<ChunkMetaViewDto> entities,
9999
log.error("Kid and/or id does not match: kid: {} , {} id {}, {}", kid, mve.getKid(), id, mve.getId());
100100
} else {
101101

102-
SliceDataDto sliceDataDto = sliceCalculation.calculateSlice(mve.getHashes());
102+
SliceDataDto sliceDataDto = sliceCalculation.calculateSlice(mve.getHashes(), storageMode);
103103
if (sliceDataDto != null) {
104104
Map<String, PartitionChunksJsonItemDto> chunkItemsMap;
105105

src/main/java/eu/europa/ec/dgc/revocationdistribution/service/SliceCalculation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public interface SliceCalculation {
2727

2828
SliceType getSliceType();
2929

30-
SliceDataDto calculateSlice(String[] hashes);
30+
SliceDataDto calculateSlice(String[] hashes, String storageMode);
3131

3232

3333
}

src/main/java/eu/europa/ec/dgc/revocationdistribution/service/SliceCalculationBloomFilterImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public SliceType getSliceType() {
5252
}
5353

5454
@Override
55-
public SliceDataDto calculateSlice(String[] hashes) {
55+
public SliceDataDto calculateSlice(String[] hashes, String storageMode) {
5656
if (hashes.length <= 0) {
5757
return null;
5858
}

src/main/java/eu/europa/ec/dgc/revocationdistribution/service/SliceCalculationVarHashListImpl.java

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020

2121
package eu.europa.ec.dgc.revocationdistribution.service;
2222

23-
23+
import eu.europa.ec.dgc.partialvariablehashfilter.PartialVariableHashFilter;
24+
import eu.europa.ec.dgc.partialvariablehashfilter.PartitionOffset;
2425
import eu.europa.ec.dgc.revocationdistribution.config.DgcConfigProperties;
2526
import eu.europa.ec.dgc.revocationdistribution.dto.SliceDataDto;
2627
import eu.europa.ec.dgc.revocationdistribution.model.SliceType;
2728
import eu.europa.ec.dgc.revocationdistribution.utils.HelperFunctions;
28-
import java.io.ByteArrayOutputStream;
29+
import java.io.IOException;
2930
import java.security.NoSuchAlgorithmException;
30-
import java.util.Arrays;
3131
import lombok.RequiredArgsConstructor;
3232
import lombok.extern.slf4j.Slf4j;
3333
import org.bouncycastle.util.encoders.DecoderException;
@@ -50,35 +50,38 @@ public SliceType getSliceType() {
5050
}
5151

5252
@Override
53-
public SliceDataDto calculateSlice(String[] hashes) {
53+
public SliceDataDto calculateSlice(String[] hashes, String storageMode) {
5454
if (hashes.length <= 0) {
5555
return null;
5656
}
5757

58-
Arrays.sort(hashes);
59-
60-
int numBytesToStore = properties.getVarHashList().getMinByteCount();
58+
byte minByteCount = properties.getVarHashList().getMinByteCount();
6159

6260
SliceDataDto sliceDataDto = new SliceDataDto();
6361

6462
sliceDataDto.getMetaData().setType(SliceType.VARHASHLIST.name());
6563
sliceDataDto.getMetaData().setVersion(properties.getVarHashList().getVersion());
6664

67-
ByteArrayOutputStream baos = new ByteArrayOutputStream();
68-
baos.write(numBytesToStore);
65+
PartialVariableHashFilter filter =
66+
new PartialVariableHashFilter(minByteCount, getPartitionOffset(storageMode), hashes.length,
67+
properties.getVarHashList().getProbRate());
68+
69+
6970
for (String hash : hashes) {
7071
try {
7172
byte[] hashBytes = helperFunctions.getBytesFromHexString(hash);
72-
baos.write(hashBytes, 0, numBytesToStore);
73+
filter.add(hashBytes);
7374
} catch (DecoderException e) {
7475
log.error("Could not add hash to hash list: {} , {}", hash, e.getMessage());
7576
}
7677
}
7778

78-
sliceDataDto.setBinaryData(baos.toByteArray());
79-
8079
try {
80+
sliceDataDto.setBinaryData(filter.writeTo());
8181
sliceDataDto.getMetaData().setHash(helperFunctions.calculateHash(sliceDataDto.getBinaryData()));
82+
} catch (IOException e) {
83+
log.error("Could not set binary data.");
84+
return null;
8285
} catch (NoSuchAlgorithmException e) {
8386
log.error("Could not calculate hash for binary data.");
8487
return null;
@@ -87,5 +90,19 @@ public SliceDataDto calculateSlice(String[] hashes) {
8790
return sliceDataDto;
8891
}
8992

93+
private PartitionOffset getPartitionOffset(String storageMode) {
94+
switch (storageMode) {
95+
case "POINT": {
96+
return PartitionOffset.POINT;
97+
}
98+
case "VECTOR": {
99+
return PartitionOffset.VECTOR;
100+
}
101+
case "COORDINATE":
102+
default: {
103+
return PartitionOffset.COORDINATE;
104+
}
105+
}
106+
}
90107

91108
}

src/main/resources/application.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ spring:
2525
scheduling:
2626
pool:
2727
size: 5
28+
2829
management:
2930
server:
3031
ssl:
@@ -56,6 +57,7 @@ springdoc:
5657
enabled: true
5758
swagger-ui:
5859
path: /swagger
60+
tagsSorter=alpha:
5961

6062
dgc:
6163
revocationListDownload:

0 commit comments

Comments
 (0)