|
18 | 18 | import java.nio.charset.StandardCharsets; |
19 | 19 | import java.nio.file.Files; |
20 | 20 | import java.nio.file.Path; |
| 21 | +import java.util.ArrayList; |
21 | 22 | import java.util.Base64; |
22 | 23 | import java.util.Collection; |
| 24 | +import java.util.List; |
23 | 25 |
|
24 | 26 | public class EncryptedSaltStoreWriter extends SaltStoreWriter implements StoreWriter { |
25 | 27 | private StoreScope scope; |
26 | 28 | private RotatingCloudEncryptionKeyProvider cloudEncryptionKeyProvider; |
27 | 29 | private Integer siteId; |
28 | 30 |
|
| 31 | + private final List<RotatingSaltProvider.SaltSnapshot> previousSeenSnapshots = new ArrayList<>(); |
| 32 | + |
29 | 33 | private static final Logger LOGGER = LoggerFactory.getLogger(EncryptedSaltStoreWriter.class); |
30 | 34 | public EncryptedSaltStoreWriter(JsonObject config, RotatingSaltProvider provider, FileManager fileManager, |
31 | 35 | TaggableCloudStorage cloudStorage, VersionGenerator versionGenerator, StoreScope scope, |
@@ -91,6 +95,16 @@ protected void refreshProvider() { |
91 | 95 | // we do not need to refresh the provider on encrypted writers |
92 | 96 | } |
93 | 97 |
|
| 98 | + @Override |
| 99 | + protected List<RotatingSaltProvider.SaltSnapshot> getSnapshots(RotatingSaltProvider.SaltSnapshot data){ |
| 100 | + /* |
| 101 | + Since metadata.json is overwritten during the process, we maintain a history of all snapshots seen so far. |
| 102 | + On the final write, we append this history to metadata.json to ensure no snapshots are lost. |
| 103 | + */ |
| 104 | + this.previousSeenSnapshots.add(data); |
| 105 | + return this.previousSeenSnapshots; |
| 106 | + } |
| 107 | + |
94 | 108 | @Override |
95 | 109 | public void upload(Object data, JsonObject extraMeta) throws Exception { |
96 | 110 | for(RotatingSaltProvider.SaltSnapshot saltSnapshot: (Collection<RotatingSaltProvider.SaltSnapshot>) data) { |
|
0 commit comments