From be6814ec8e0883153d23cc423c833a3ee478bcd8 Mon Sep 17 00:00:00 2001 From: Koen <koen@pop-os.localdomain> Date: Mon, 12 Jun 2023 15:55:13 +0200 Subject: [PATCH] Added better error messages. Fixed storage type event handling for SQLite storage. Added new URLInfo structure. --- .../com/futo/polycentric/core/ApiMethods.kt | 28 ++++++++++--------- .../com/futo/polycentric/core/SqlLiteStore.kt | 15 ++++++++-- .../futo/polycentric/protos/protocol.proto | 17 +++++++++-- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt b/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt index 4755868..b818b22 100644 --- a/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt +++ b/app/src/main/java/com/futo/polycentric/core/ApiMethods.kt @@ -13,6 +13,8 @@ import userpackage.Protocol //TODO: The protobuf requirements here results in lots of memory being copied, can it be avoided? class ApiMethods { companion object { + private const val TAG = "ApiMethods" + fun postEvents(server: String, events: Protocol.Events) { val (_, response, result) = "$server/events".httpPost() .header(Headers.CONTENT_TYPE, "application/octet-stream") @@ -20,7 +22,7 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val formattedMessage = "Posting events to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + val formattedMessage = "postEvents to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" throw Exception(formattedMessage) } } @@ -28,14 +30,14 @@ class ApiMethods { fun getRanges(server: String, system: Protocol.PublicKey): Protocol.RangesForSystem { val systemQuery = encode(system.toByteArray()) val path = "/ranges?system=$systemQuery" - Log.i("TEST", "$server$path") val (_, response, result) = "$server$path".httpGet() .header(Headers.CONTENT_TYPE, "application/octet-stream").response() - Log.i("TEST", "Response $response") + Log.i(TAG, "getRanges $path") + if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getRanges !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getRanges to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.RangesForSystem.parseFrom(result.get()) @@ -51,8 +53,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getEvents !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getEvents to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.Events.parseFrom(result.get()) @@ -68,8 +70,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getResolveClaim !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getResolveClaim to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.Events.parseFrom(result.get()) @@ -90,8 +92,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getQueryIndex !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getQueryIndex to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.Events.parseFrom(result.get()) @@ -112,8 +114,8 @@ class ApiMethods { .response() if (!response.isSuccessful) { - val errorMessage = result.fold({ it.decodeToString() }, { "getQueryReferences !ok" }) - throw Exception(errorMessage) + val formattedMessage = "getQueryReferences to $server failed with status code ${response.statusCode}. Response body: ${response.body().toByteArray().decodeToString()}" + throw Exception(formattedMessage) } return Protocol.QueryReferencesResponse.parseFrom(result.get()) diff --git a/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt b/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt index a2d63ac..59daa13 100644 --- a/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt +++ b/app/src/main/java/com/futo/polycentric/core/SqlLiteStore.kt @@ -73,7 +73,12 @@ class SqlLiteStore(private val _db: SqlLiteDbHelper) : Store() { } if (value != null) { - return SignedEvent.fromProto(Protocol.SignedEvent.parseFrom(value)) + val storageTypeEvent = Protocol.StorageTypeEvent.parseFrom(value) + if (!storageTypeEvent.hasEvent()) { + return null + } + + return SignedEvent.fromProto(storageTypeEvent.event) } return null @@ -90,8 +95,12 @@ class SqlLiteStore(private val _db: SqlLiteDbHelper) : Store() { do { val value = it.getBlob(0); - val se = SignedEvent.fromProto(Protocol.SignedEvent.parseFrom(value)); - handler(se); + val storageTypeEvent = Protocol.StorageTypeEvent.parseFrom(value) + if (!storageTypeEvent.hasEvent()) { + continue + } + + handler(SignedEvent.fromProto(storageTypeEvent.event)); } while (it.moveToNext()); } } diff --git a/app/src/main/proto/com/futo/polycentric/protos/protocol.proto b/app/src/main/proto/com/futo/polycentric/protos/protocol.proto index 4530b8d..739628d 100644 --- a/app/src/main/proto/com/futo/polycentric/protos/protocol.proto +++ b/app/src/main/proto/com/futo/polycentric/protos/protocol.proto @@ -107,9 +107,22 @@ message RangesForSystem { } message URLInfo { + // url_type 1 = URLInfoSystemLink + // url_type 2 = URLInfoEventLink + // url_type 3 = ExportBundle + uint64 url_type = 1; + bytes body = 2; +} + +message URLInfoSystemLink { + PublicKey system = 1; + repeated string servers = 2; +} + +message URLInfoEventLink { PublicKey system = 1; - optional Process process = 2; - optional uint64 logical_clock = 3; + Process process = 2; + uint64 logical_clock = 3; repeated string servers = 4; } -- GitLab