@@ -37,23 +37,23 @@ type WakuStore* = ref object of LPProtocol
3737
3838# # Protocol
3939
40+ type StoreResp = tuple [resp: seq [byte ], requestId: string ]
41+
4042proc handleLegacyQueryRequest (
4143 self: WakuStore , requestor: PeerId , raw_request: seq [byte ]
42- ): Future [seq [ byte ] ] {.async .} =
44+ ): Future [StoreResp ] {.async .} =
4345 let decodeRes = HistoryRPC .decode (raw_request)
4446 if decodeRes.isErr ():
45- error " failed to decode rpc" , peerId = requestor
47+ error " failed to decode rpc" , peerId = requestor, error = $ decodeRes.error
4648 waku_legacy_store_errors.inc (labelValues = [decodeRpcFailure])
47- # TODO : Return (BAD_REQUEST, cause: "decode rpc failed")
48- return
49+ return (newSeq [byte ](), " failed to decode rpc" )
4950
5051 let reqRpc = decodeRes.value
5152
5253 if reqRpc.query.isNone ():
5354 error " empty query rpc" , peerId = requestor, requestId = reqRpc.requestId
5455 waku_legacy_store_errors.inc (labelValues = [emptyRpcQueryFailure])
55- # TODO : Return (BAD_REQUEST, cause: "empty query")
56- return
56+ return (newSeq [byte ](), " empty query rpc" )
5757
5858 let requestId = reqRpc.requestId
5959 var request = reqRpc.query.get ().toAPI ()
@@ -72,21 +72,30 @@ proc handleLegacyQueryRequest(
7272
7373 let error = HistoryError (kind: HistoryErrorKind .UNKNOWN ).toRPC ()
7474 let response = HistoryResponseRPC (error: error)
75- return HistoryRPC (requestId: requestId, response: some (response)).encode ().buffer
75+ return (
76+ HistoryRPC (requestId: requestId, response: some (response)).encode ().buffer,
77+ requestId,
78+ )
7679
7780 if responseRes.isErr ():
7881 error " history query failed" ,
7982 peerId = requestor, requestId = requestId, error = responseRes.error
8083
8184 let response = responseRes.toRPC ()
82- return HistoryRPC (requestId: requestId, response: some (response)).encode ().buffer
85+ return (
86+ HistoryRPC (requestId: requestId, response: some (response)).encode ().buffer,
87+ requestId,
88+ )
8389
8490 let response = responseRes.toRPC ()
8591
8692 info " sending history response" ,
8793 peerId = requestor, requestId = requestId, messages = response.messages.len
8894
89- return HistoryRPC (requestId: requestId, response: some (response)).encode ().buffer
95+ return (
96+ HistoryRPC (requestId: requestId, response: some (response)).encode ().buffer,
97+ requestId,
98+ )
9099
91100proc initProtocolHandler (ws: WakuStore ) =
92101 let rejectResponseBuf = HistoryRPC (
@@ -103,7 +112,8 @@ proc initProtocolHandler(ws: WakuStore) =
103112
104113 proc handler (conn: Connection , proto: string ) {.async , closure .} =
105114 var successfulQuery = false # # only consider the correct queries in metrics
106- var resBuf: seq [byte ]
115+ var resBuf: StoreResp
116+ var queryDuration: float
107117 ws.requestRateLimiter.checkUsageLimit (WakuLegacyStoreCodec , conn):
108118 let readRes = catch:
109119 await conn.readLp (DefaultMaxRpcSize .int )
@@ -118,17 +128,17 @@ proc initProtocolHandler(ws: WakuStore) =
118128
119129 let queryStartTime = getTime ().toUnixFloat ()
120130 resBuf = await ws.handleLegacyQueryRequest (conn.peerId, reqBuf)
121- let queryDuration = getTime ().toUnixFloat () - queryStartTime
131+ queryDuration = getTime ().toUnixFloat () - queryStartTime
122132 waku_legacy_store_time_seconds.set (queryDuration, [" query-db-time" ])
123133 successfulQuery = true
124134 do :
125135 debug " Legacy store query request rejected due rate limit exceeded" ,
126136 peerId = conn.peerId, limit = $ ws.requestRateLimiter.setting
127- resBuf = rejectResponseBuf
137+ resBuf = ( rejectResponseBuf, " rejected " )
128138
129139 let writeRespStartTime = getTime ().toUnixFloat ()
130140 let writeRes = catch:
131- await conn.writeLp (resBuf)
141+ await conn.writeLp (resBuf.resp )
132142
133143 if writeRes.isErr ():
134144 error " Connection write error" , error = writeRes.error.msg
@@ -137,9 +147,13 @@ proc initProtocolHandler(ws: WakuStore) =
137147 if successfulQuery:
138148 let writeDuration = getTime ().toUnixFloat () - writeRespStartTime
139149 waku_legacy_store_time_seconds.set (writeDuration, [" send-store-resp-time" ])
150+ debug " after sending response" ,
151+ requestId = resBuf.requestId,
152+ queryDurationSecs = queryDuration,
153+ writeStreamDurationSecs = writeDuration
140154
141155 waku_service_network_bytes.inc (
142- amount = resBuf.len ().int64 , labelValues = [WakuLegacyStoreCodec , " out" ]
156+ amount = resBuf.resp. len ().int64 , labelValues = [WakuLegacyStoreCodec , " out" ]
143157 )
144158
145159 ws.handler = handler
0 commit comments