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
↓ peach-android-8d6cf9d4.tar.gzatlas at this save
files changed4 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 −6app/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 {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-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)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