[pdm-devel] [PATCH datacenter-manager v3 03/19] server: api: refactor filter logic for resource post gathering

Christian Ebner c.ebner at proxmox.com
Tue Oct 21 13:11:13 CEST 2025


Avoids to loop twice over the list of remote resources if a filter is
set, at the cost of checking the presence of the filter on each element.

In preparation to also pass along the remote to the remote search term
matching.

No functional changes intended.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
Changes since version 2:
- no changes

 server/src/api/resources.rs | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/server/src/api/resources.rs b/server/src/api/resources.rs
index 21143a8..a00742b 100644
--- a/server/src/api/resources.rs
+++ b/server/src/api/resources.rs
@@ -292,18 +292,21 @@ pub(crate) async fn get_resources_impl(
 
     let mut remote_resources = Vec::new();
     for handle in join_handles {
-        remote_resources.push(handle.await?);
-    }
-
-    if !filters.is_empty() {
-        remote_resources.retain(|res| {
-            if !res.resources.is_empty() {
-                return true;
-            }
-            filters.matches(|filter| {
-                remote_matches_search_term(&res.remote, Some(res.error.is_none()), filter)
-            })
-        })
+        let remote_resource = handle.await?;
+
+        if filters.is_empty() {
+            remote_resources.push(remote_resource);
+        } else if !remote_resource.resources.is_empty() {
+            remote_resources.push(remote_resource);
+        } else if filters.matches(|filter| {
+            remote_matches_search_term(
+                &remote_resource.remote,
+                Some(remote_resource.error.is_none()),
+                filter,
+            )
+        }) {
+            remote_resources.push(remote_resource);
+        }
     }
 
     Ok(remote_resources)
-- 
2.47.3





More information about the pdm-devel mailing list