From befab6bd7a1d43d9d0f7dc96f75bdc872dffa42a Mon Sep 17 00:00:00 2001 From: Aleksandr Sarantsev Date: Sat, 14 Jun 2025 14:54:24 +0400 Subject: [PATCH] Return only generation when increment --- storage_controller/src/persistence.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/storage_controller/src/persistence.rs b/storage_controller/src/persistence.rs index 2edfe3a338..c9a5bcf8e8 100644 --- a/storage_controller/src/persistence.rs +++ b/storage_controller/src/persistence.rs @@ -715,10 +715,10 @@ impl Persistence { node_id: NodeId, ) -> anyhow::Result { use crate::schema::tenant_shards::dsl::*; - let updated = self + let generation_value = self .with_measured_conn(DatabaseOperation::IncrementGeneration, move |conn| { Box::pin(async move { - let updated = diesel::update(tenant_shards) + let generation_value: Option = diesel::update(tenant_shards) .filter(tenant_id.eq(tenant_shard_id.tenant_id.to_string())) .filter(shard_number.eq(tenant_shard_id.shard_number.0 as i32)) .filter(shard_count.eq(tenant_shard_id.shard_count.literal() as i32)) @@ -726,20 +726,19 @@ impl Persistence { generation.eq(generation + 1), generation_pageserver.eq(node_id.0 as i64), )) - // TODO: only returning() the generation column - .returning(TenantShardPersistence::as_returning()) + .returning(generation) .get_result(conn) .await?; - Ok(updated) + Ok(generation_value) }) }) .await?; // Generation is always non-null in the rseult: if the generation column had been NULL, then we // should have experienced an SQL Confilict error while executing a query that tries to increment it. - debug_assert!(updated.generation.is_some()); - let Some(g) = updated.generation else { + debug_assert!(generation_value.is_some()); + let Some(g) = generation_value else { return Err(DatabaseError::Logical( "Generation should always be set after incrementing".to_string(), )