Skip to content

Commit 5678a65

Browse files
committed
core: compress timetables saved to s3
Signed-off-by: Eloi Charpentier <eloi.charpentier.42@gmail.com>
1 parent 587b450 commit 5678a65

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

core/src/main/java/fr/sncf/osrd/api/TimetableCacheManager.kt

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import com.google.common.collect.Range
55
import com.google.common.collect.RangeSet
66
import com.google.common.collect.TreeRangeSet
77
import fr.sncf.osrd.sim_infra.api.ZoneId
8+
import fr.sncf.osrd.utils.compress
9+
import fr.sncf.osrd.utils.compressToZip
10+
import fr.sncf.osrd.utils.decompress
811
import io.lettuce.core.api.StatefulRedisConnection
912
import io.opentelemetry.api.trace.Span
1013
import io.opentelemetry.api.trace.SpanKind
1114
import io.opentelemetry.instrumentation.annotations.WithSpan
12-
import java.io.ByteArrayOutputStream
1315
import java.nio.file.Files
1416
import java.util.concurrent.ConcurrentHashMap
15-
import java.util.zip.GZIPInputStream
16-
import java.util.zip.GZIPOutputStream
1717
import kotlin.io.path.Path
1818
import kotlin.io.path.exists
1919
import kotlin.io.path.readBytes
@@ -290,29 +290,18 @@ class TimetableCacheManager(
290290
private fun saveToS3(timetableId: TimetableId, requirements: STDCMTimetableData) {
291291
if (s3Context == null) return
292292

293-
val objectPath = "stdcm/saved_timetables/$timetableId.cbor"
293+
val objectPath = "stdcm/saved_timetables/$timetableId.cbor.zip"
294294
s3Context.writeFileIfMissing(objectPath) {
295295
try {
296296
val serializable = requirements.toSerializable()
297297
val cbor = Cbor {}
298298
val serializer = STDCMTimetableData.SerializableMap.serializer()
299299
val bytes = cbor.encodeToByteArray(serializer, serializable)
300-
301-
bytes
300+
bytes.compressToZip("$timetableId.cbor")
302301
} catch (e: Exception) {
303302
logger.error("failed to save timetable to s3", e)
304303
null
305304
}
306305
}
307306
}
308307
}
309-
310-
fun ByteArray.compress(): ByteArray {
311-
val outputStream = ByteArrayOutputStream(this.size)
312-
GZIPOutputStream(outputStream).use { it.write(this) }
313-
return outputStream.toByteArray()
314-
}
315-
316-
fun ByteArray.decompress(): ByteArray {
317-
return GZIPInputStream(this.inputStream()).use { it.readBytes() }
318-
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package fr.sncf.osrd.utils
2+
3+
import java.io.ByteArrayOutputStream
4+
import java.util.zip.GZIPInputStream
5+
import java.util.zip.GZIPOutputStream
6+
import java.util.zip.ZipEntry
7+
import java.util.zip.ZipOutputStream
8+
9+
/** GZIP compression */
10+
fun ByteArray.compress(): ByteArray {
11+
val outputStream = ByteArrayOutputStream(this.size)
12+
GZIPOutputStream(outputStream).use { it.write(this) }
13+
return outputStream.toByteArray()
14+
}
15+
16+
/** GZIP decompression */
17+
fun ByteArray.decompress(): ByteArray {
18+
return GZIPInputStream(this.inputStream()).use { it.readBytes() }
19+
}
20+
21+
/** ZIP compression */
22+
fun ByteArray.compressToZip(innerFilename: String): ByteArray {
23+
val outputStream = ByteArrayOutputStream(this.size)
24+
ZipOutputStream(outputStream).use {
25+
val entry = ZipEntry(innerFilename)
26+
it.putNextEntry(entry)
27+
it.write(this)
28+
}
29+
return outputStream.toByteArray()
30+
}

0 commit comments

Comments
 (0)