@@ -258,20 +258,48 @@ void batchCommand() throws ReflectiveOperationException {
258258 trace ->
259259 trace .hasSpansSatisfyingExactly (
260260 span ->
261- span .hasName (emitStableDatabaseSemconv () ? "redis " : "DB Query" )
261+ span .hasName (emitStableDatabaseSemconv () ? "PIPELINE SET " : "DB Query" )
262262 .hasKind (CLIENT )
263263 .hasAttributesSatisfyingExactly (
264264 equalTo (NETWORK_TYPE , emitOldDatabaseSemconv () ? IPV4 : null ),
265265 equalTo (NETWORK_PEER_ADDRESS , ip ),
266266 equalTo (NETWORK_PEER_PORT , port ),
267267 equalTo (maybeStable (DB_SYSTEM ), REDIS ),
268+ equalTo (
269+ DB_OPERATION_NAME ,
270+ emitStableDatabaseSemconv () ? "PIPELINE SET" : null ),
268271 equalTo (maybeStable (DB_STATEMENT ), "SET batch1 ?;SET batch2 ?" ))));
269272 }
270273
271274 private static void invokeExecute (RBatch batch ) throws ReflectiveOperationException {
272275 batch .getClass ().getMethod ("execute" ).invoke (batch );
273276 }
274277
278+ @ Test
279+ void mixedBatchCommand () throws ReflectiveOperationException {
280+ RBatch batch = createBatch (redisson );
281+ assertThat (batch ).isNotNull ();
282+ batch .getBucket ("batch1" ).setAsync ("v1" );
283+ batch .getBucket ("batch1" ).getAsync ();
284+ // Adapt different method signature:
285+ // `BatchResult<?> execute()` and `List<?> execute()`
286+ invokeExecute (batch );
287+ testing .waitAndAssertTraces (
288+ trace ->
289+ trace .hasSpansSatisfyingExactly (
290+ span ->
291+ span .hasName (emitStableDatabaseSemconv () ? "PIPELINE" : "DB Query" )
292+ .hasKind (CLIENT )
293+ .hasAttributesSatisfyingExactly (
294+ equalTo (NETWORK_TYPE , emitOldDatabaseSemconv () ? IPV4 : null ),
295+ equalTo (NETWORK_PEER_ADDRESS , ip ),
296+ equalTo (NETWORK_PEER_PORT , port ),
297+ equalTo (maybeStable (DB_SYSTEM ), REDIS ),
298+ equalTo (
299+ DB_OPERATION_NAME , emitStableDatabaseSemconv () ? "PIPELINE" : null ),
300+ equalTo (maybeStable (DB_STATEMENT ), "SET batch1 ?;GET batch1" ))));
301+ }
302+
275303 @ Test
276304 void largeBatchCommand () throws ReflectiveOperationException {
277305 RBatch batch = createBatch (redisson );
@@ -292,13 +320,16 @@ void largeBatchCommand() throws ReflectiveOperationException {
292320 trace ->
293321 trace .hasSpansSatisfyingExactly (
294322 span ->
295- span .hasName (emitStableDatabaseSemconv () ? "redis " : "DB Query" )
323+ span .hasName (emitStableDatabaseSemconv () ? "PIPELINE SET " : "DB Query" )
296324 .hasKind (CLIENT )
297325 .hasAttributesSatisfyingExactly (
298326 equalTo (NETWORK_TYPE , emitOldDatabaseSemconv () ? IPV4 : null ),
299327 equalTo (NETWORK_PEER_ADDRESS , ip ),
300328 equalTo (NETWORK_PEER_PORT , port ),
301329 equalTo (maybeStable (DB_SYSTEM ), REDIS ),
330+ equalTo (
331+ DB_OPERATION_NAME ,
332+ emitStableDatabaseSemconv () ? "PIPELINE SET" : null ),
302333 equalTo (
303334 maybeStable (DB_STATEMENT ),
304335 "SET " + bucketName + " ?;SET " + bucketName + " ?" ))));
@@ -324,18 +355,21 @@ void atomicBatchCommand() {
324355 batch .execute ();
325356 });
326357 testing .waitAndAssertSortedTraces (
327- orderByRootSpanName ("redis " , "DB Query" , "SET" , "EXEC" ),
358+ orderByRootSpanName ("MULTI SET " , "DB Query" , "SET" , "EXEC" ),
328359 trace ->
329360 trace .hasSpansSatisfyingExactly (
330361 span -> span .hasName ("parent" ).hasNoParent ().hasKind (INTERNAL ),
331362 span ->
332- span .hasName (emitStableDatabaseSemconv () ? "redis " : "DB Query" )
363+ span .hasName (emitStableDatabaseSemconv () ? "MULTI SET " : "DB Query" )
333364 .hasKind (CLIENT )
334365 .hasAttributesSatisfyingExactly (
335366 equalTo (NETWORK_TYPE , emitOldDatabaseSemconv () ? IPV4 : null ),
336367 equalTo (NETWORK_PEER_ADDRESS , ip ),
337368 equalTo (NETWORK_PEER_PORT , port ),
338369 equalTo (maybeStable (DB_SYSTEM ), REDIS ),
370+ equalTo (
371+ DB_OPERATION_NAME ,
372+ emitStableDatabaseSemconv () ? "MULTI SET" : null ),
339373 equalTo (maybeStable (DB_STATEMENT ), "MULTI;SET batch1 ?" ))
340374 .hasParent (trace .getSpan (0 )),
341375 span ->
0 commit comments