8d6cf9d4e33b

fix: Keep relay capabilities out of logs (v2.7.2)

time
2026-07-27 21:31 UTC · 2 months ago
machine
koh2
parent
ea87fc9113f8
4 files app/build.gradle+2 −2app/src/main/java/com/peachpasswords/sync/CloudRelayDialer.kt+7 −8app/src/main/java/com/peachpasswords/sync/CloudRelayReconnectListener.kt+9 −19app/src/test/java/com/peachpasswords/sync/CloudRelayDialerTest.kt+7 −6
app/build.gradle+2 −2
@@ -16,8 +16,8 @@1616         applicationId "com.peachpasswords"1717         minSdk 261818         targetSdk 3519-        versionCode 24012820-        versionName "2.7.1"19+        versionCode 24012920+        versionName "2.7.2"2121 2222         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"2323         vectorDrawables {

view file

app/src/main/java/com/peachpasswords/sync/CloudRelayDialer.kt+7 −8
@@ -28,8 +28,8 @@2828     report: (SyncOutcomeSummary) -> Unit = {},2929 ) {3030     PeachSyncLog.i(31-        "cloud-relay: dial — rendezvous=$rendezvousId, " +32-            "peer=${relayLogDetail(known.deviceName ?: known.deviceId)}",31+        "cloud-relay: dial — peerType=${relayLogDetail(known.deviceType ?: "unset")}, " +32+            "trust=${relayLogDetail(known.trustSource ?: "unset")}",3333     )3434     try {3535         val responderKeyHex = known.longTermPublicKeyHex@@ -97,20 +97,20 @@9797         } finally {9898             session.close()9999         }100-        PeachSyncLog.i("cloud-relay: dial ok — rendezvous=$rendezvousId")100+        PeachSyncLog.i("cloud-relay: dial ok")101101     } catch (error: CancellationException) {102-        logCloudRelayDialFailure(rendezvousId, error)102+        logCloudRelayDialFailure(error)103103         throw error104104     } catch (error: Exception) {105-        logCloudRelayDialFailure(rendezvousId, error)105+        logCloudRelayDialFailure(error)106106         throw error107107     }108108 }109109 110-private fun logCloudRelayDialFailure(rendezvousId: String, error: Throwable) {110+private fun logCloudRelayDialFailure(error: Throwable) {111111     val reason = relayLogReason(error)112112     val outcome = classifySyncError(reason)113-    val message = "cloud-relay: dial failed — rendezvous=$rendezvousId, reason=$reason"113+    val message = "cloud-relay: dial failed — reason=$reason"114114     when {115115         error is CancellationException -> PeachSyncLog.w(message)116116         outcome == SyncOutcomeReason.RELAY_UNREACHABLE || outcome == SyncOutcomeReason.SYNC_TIMEOUT ->@@ -118,4 +118,3 @@118118         else -> PeachSyncLog.e(message)119119     }120120 }121-

view file

app/src/main/java/com/peachpasswords/sync/CloudRelayReconnectListener.kt+9 −19
@@ -330,7 +330,6 @@330330         }331331         for ((key, target) in desired) {332332             if (watchers[key]?.isActive == true) continue333-            val deviceDescription = relayDeviceDescription(target)334333             watchers[key] = scope.launch {335334                 var retryDelayMs =336335                     if (target.weDial) DIAL_RETRY_DELAY_MS else RETRY_DELAY_MS@@ -339,8 +338,9 @@339338                         val known = deviceStore.get(target.deviceId)340339                             ?: throw IllegalStateException("relay peer was unpaired")341340                         PeachSyncLog.i(342-                            "cloud-relay: open — device=$deviceDescription, " +343-                                "relay=${target.relayUrl}, rendezvous=${target.rendezvousId}, " +341+                            "cloud-relay: open — peerType=" +342+                                "${relayLogDetail(target.deviceType ?: "unset")}, " +343+                                "trust=${relayLogDetail(target.trustSource ?: "unset")}, " +344344                                 "role=${if (target.weDial) "dialer" else "waiter"}",345345                         )346346                         val socket = try {@@ -349,14 +349,11 @@349349                             )350350                         } catch (error: Throwable) {351351                             PeachSyncLog.w(352-                                "cloud-relay: open failed — rendezvous=${target.rendezvousId}, " +353-                                    "reason=${relayLogReason(error)}",352+                                "cloud-relay: open failed — reason=${relayLogReason(error)}",354353                             )355354                             throw error356355                         }357-                        PeachSyncLog.i(358-                            "cloud-relay: open ok — rendezvous=${target.rendezvousId}",359-                        )356+                        PeachSyncLog.i("cloud-relay: open ok")360357                         var closeError: Throwable? = null361358                         try {362359                             if (target.weDial) {@@ -387,9 +384,7 @@387384                                     reportDialUnanswered()388385                                 }389386                             } else {390-                                PeachSyncLog.i(391-                                    "cloud-relay: wait — rendezvous=${target.rendezvousId}",392-                                )387+                                PeachSyncLog.i("cloud-relay: wait")393388                                 runCloudRelayResponderSession(394389                                     socket = socket,395390                                     known = known,@@ -414,7 +409,7 @@414409                                 if (closeError == null) closeError = error415410                                 throw error416411                             } finally {417-                                logRelaySocketClosed(target.rendezvousId, closeError)412+                                logRelaySocketClosed(closeError)418413                             }419414                         }420415                     }@@ -443,15 +438,10 @@443438     val weDial: Boolean,444439 )445440 446-private fun relayDeviceDescription(target: RelayWaitTarget): String =447-    "${relayLogDetail(target.deviceName ?: target.deviceId)}" +448-        "[type=${relayLogDetail(target.deviceType ?: "unset")}," +449-        "trust=${relayLogDetail(target.trustSource ?: "unset")}]"450-451-private fun logRelaySocketClosed(rendezvousId: String, error: Throwable?) {441+private fun logRelaySocketClosed(error: Throwable?) {452442     val reason = error?.let(::relayLogReason) ?: "relay session complete"453443     val outcome = error?.let { classifySyncError(reason) }454-    val message = "cloud-relay: socket closed — rendezvous=$rendezvousId, reason=$reason"444+    val message = "cloud-relay: socket closed — reason=$reason"455445     when {456446         error == null -> PeachSyncLog.i(message)457447         error is CancellationException && error !is TimeoutCancellationException -> PeachSyncLog.i(message)

view file

app/src/test/java/com/peachpasswords/sync/CloudRelayDialerTest.kt+7 −6
@@ -118,14 +118,15 @@118118         }119119         assertTrue(120120             logs.contains(121-                Log.INFO to "cloud-relay: dial — rendezvous=$rendezvousId, peer=Tablet",121+                Log.INFO to "cloud-relay: dial — peerType=android, trust=unset",122122             ),123123         )124124         assertTrue(125125             logs.contains(126-                Log.INFO to "cloud-relay: dial ok — rendezvous=$rendezvousId",126+                Log.INFO to "cloud-relay: dial ok",127127             ),128128         )129+        assertTrue(logs.none { (_, message) -> message.contains(rendezvousId) || message.contains("Tablet") })129130         // No vault adapter on either side, so the handshake completes and the130131         // sync exchange is skipped — the wire is what is under test here.131132         assertFalse(dialerSynced)@@ -133,7 +134,7 @@133134     }134135 135136     @Test136-    fun `dial failure logs the rendezvous and underlying reason`() = runBlocking {137+    fun `dial failure logs the reason without relay capability or device name`() = runBlocking {137138         val dialerKeys = keys()138139         val rendezvousId = "ROOM-FAILED"139140         val socket = object : RelayBinarySocket {@@ -166,12 +167,12 @@166167         assertEquals("known peer missing static key", failure?.message)167168         assertEquals(168169             listOf(169-                Log.INFO to "cloud-relay: dial — rendezvous=$rendezvousId, peer=Tablet",170-                Log.ERROR to "cloud-relay: dial failed — rendezvous=$rendezvousId, " +171-                    "reason=known peer missing static key",170+                Log.INFO to "cloud-relay: dial — peerType=android, trust=unset",171+                Log.ERROR to "cloud-relay: dial failed — reason=known peer missing static key",172172             ),173173             logs,174174         )175+        assertTrue(logs.none { (_, message) -> message.contains(rendezvousId) || message.contains("Tablet") })175176     }176177 177178     @Test

view file