Add optional last-modified timestamp to ListedFile and CachedFs FileInfo (#9803)

* Add optional last-modified timestamp to ListedFile and CachedFs FileInfo

Filled where the listing backend exposes one: local filesystems
(entry metadata) and object stores (ObjectMeta::last_modified). The
uio-grpc backend reports None since the RPC does not carry mtimes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Carry last-modified over the StorageRead ListFiles RPC

Extend ListFilesEntry with an optional google.protobuf.Timestamp, fill
it on the server from the listing metadata, and convert it back to
SystemTime in the uio-grpc client.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Update lib/common/io_bridge_object_store/src/source.rs

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Fix missing SystemTime import in io_bridge_object_store

The CodeRabbit-suggested last_modified mapping used SystemTime::from
without importing std::time::SystemTime, breaking compile and CI.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Retrigger CI after flaky integration-tests-consensus timeout

The compile fix is in; the prior run failed on an unrelated 30s timeout
in test_collection_recovery, not on PR changes.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: root <111755117+qdrant-cloud-bot@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Andrey Vasnetsov
2026-07-12 09:18:14 +02:00
committed by GitHub
co-authored by Cursor Claude Fable 5 coderabbitai[bot] root
parent e7340ed160
commit 5593bc5564
17 changed files with 108 additions and 34 deletions
+4
View File
@@ -2780,6 +2780,10 @@ pub fn date_time_to_proto(date_time: DateTimePayloadType) -> prost_wkt_types::Ti
naive_date_time_to_proto(date_time.0.naive_utc())
}
pub fn system_time_to_proto(time: std::time::SystemTime) -> prost_wkt_types::Timestamp {
naive_date_time_to_proto(chrono::DateTime::<chrono::Utc>::from(time).naive_utc())
}
pub fn try_date_time_from_proto(
date_time: prost_wkt_types::Timestamp,
) -> Result<DateTimePayloadType, Status> {
@@ -2,6 +2,8 @@ syntax = "proto3";
package qdrant;
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Qdrant.Client.Grpc";
// Shard-scoped raw I/O over on-disk collection storage.
@@ -53,6 +55,8 @@ message FileExistsResponse {
message ListFilesEntry {
string path = 1;
uint64 size = 2;
// Last modification time, when the underlying storage exposes one.
optional google.protobuf.Timestamp last_modified = 3;
}
message ListFilesResponse {
+3
View File
@@ -16273,6 +16273,9 @@ pub struct ListFilesEntry {
pub path: ::prost::alloc::string::String,
#[prost(uint64, tag = "2")]
pub size: u64,
/// Last modification time, when the underlying storage exposes one.
#[prost(message, optional, tag = "3")]
pub last_modified: ::core::option::Option<::prost_wkt_types::Timestamp>,
}
#[derive(serde::Serialize)]
#[derive(Clone, PartialEq, ::prost::Message)]