Add additional local metrics around storage service writes/reads.

This commit is contained in:
Greyson Parrelli
2025-04-17 13:12:42 -04:00
committed by Cody Henthorne
parent c5e795b176
commit 619d2997f6
6 changed files with 235 additions and 4 deletions

View File

@@ -3,6 +3,8 @@ package org.whispersystems.signalservice.api.storage
import okio.ByteString
import okio.ByteString.Companion.EMPTY
import okio.ByteString.Companion.toByteString
import org.signal.core.util.ByteSize
import org.signal.core.util.bytes
import org.signal.core.util.isNotEmpty
import org.signal.core.util.toOptional
import org.whispersystems.signalservice.internal.storage.protos.ManifestRecord
@@ -13,9 +15,18 @@ data class SignalStorageManifest(
@JvmField val version: Long,
val sourceDeviceId: Int,
val recordIkm: RecordIkm?,
@JvmField val storageIds: List<StorageId>
@JvmField val storageIds: List<StorageId>,
val protoByteSize: ByteSize
) {
constructor(version: Long, sourceDeviceId: Int, recordIkm: RecordIkm?, storageIds: List<StorageId>) : this(
version = version,
sourceDeviceId = sourceDeviceId,
recordIkm = recordIkm,
storageIds = storageIds,
protoByteSize = toProto(version, storageIds, sourceDeviceId, recordIkm).encode().size.bytes
)
companion object {
val EMPTY: SignalStorageManifest = SignalStorageManifest(0, 1, null, emptyList())
@@ -30,7 +41,25 @@ data class SignalStorageManifest(
version = manifest.version,
sourceDeviceId = manifestRecord.sourceDevice,
recordIkm = manifestRecord.recordIkm.takeIf { it.isNotEmpty() }?.toByteArray()?.let { RecordIkm(it) },
storageIds = ids
storageIds = ids,
protoByteSize = serialized.size.bytes
)
}
private fun toProto(version: Long, storageIds: List<StorageId>, sourceDeviceId: Int, recordIkm: RecordIkm?): StorageManifest {
val ids: List<ManifestRecord.Identifier> = storageIds.map { id ->
ManifestRecord.Identifier.fromPossiblyUnknownType(id.type, id.raw)
}
val manifestRecord = ManifestRecord(
identifiers = ids,
sourceDevice = sourceDeviceId,
recordIkm = recordIkm?.value?.toByteString() ?: ByteString.EMPTY
)
return StorageManifest(
version = version,
value_ = manifestRecord.encodeByteString()
)
}
}

View File

@@ -9,6 +9,7 @@ import com.squareup.wire.FieldEncoding
import okio.ByteString
import okio.ByteString.Companion.toByteString
import okio.IOException
import org.signal.core.util.bytes
import org.signal.core.util.isNotEmpty
import org.signal.libsignal.protocol.InvalidKeyException
import org.whispersystems.signalservice.api.NetworkResult
@@ -272,7 +273,8 @@ class StorageServiceRepository(private val storageServiceApi: StorageServiceApi)
version = manifestRecord.version,
sourceDeviceId = manifestRecord.sourceDevice,
recordIkm = manifestRecord.recordIkm.takeIf { it.isNotEmpty() }?.toByteArray()?.let { RecordIkm(it) },
storageIds = ids
storageIds = ids,
protoByteSize = this.encode().size.bytes
)
}