Skip to content

Commit 9ffa3c3

Browse files
committed
Fix timestamps (#17)
* Fix timestamp issue * Add check for correct year
1 parent d72aa0d commit 9ffa3c3

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

src/lib.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -299,14 +299,7 @@ impl ObjectStore for HdfsObjectStore {
299299
.to_object_store_err();
300300
}
301301

302-
Ok(ObjectMeta {
303-
location: location.clone(),
304-
last_modified: DateTime::<Utc>::from_timestamp(status.modification_time as i64, 0)
305-
.unwrap(),
306-
size: status.length,
307-
e_tag: None,
308-
version: None,
309-
})
302+
get_object_meta(&status)
310303
}
311304

312305
/// Delete the object at the specified location.
@@ -627,7 +620,8 @@ fn make_absolute_dir(path: &Path) -> String {
627620
fn get_object_meta(status: &FileStatus) -> Result<ObjectMeta> {
628621
Ok(ObjectMeta {
629622
location: Path::parse(&status.path)?,
630-
last_modified: DateTime::<Utc>::from_timestamp(status.modification_time as i64, 0).unwrap(),
623+
last_modified: DateTime::<Utc>::from_timestamp_millis(status.modification_time as i64)
624+
.unwrap(),
631625
size: status.length,
632626
e_tag: None,
633627
version: None,

tests/test_object_store.rs

+15-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#[cfg(feature = "integration-test")]
22
mod test {
33
use bytes::{Buf, BufMut, BytesMut};
4+
use chrono::{Datelike, Utc};
45
use hdfs_native::{
56
minidfs::{DfsFeatures, MiniDfs},
67
Client, WriteOptions,
@@ -16,7 +17,7 @@ mod test {
1617
#[serial]
1718
async fn test_object_store() -> object_store::Result<()> {
1819
let dfs = MiniDfs::with_features(&HashSet::from([DfsFeatures::HA]));
19-
let client = Client::new(&dfs.url).to_object_store_err()?;
20+
let client = Arc::new(Client::new(&dfs.url).to_object_store_err()?);
2021

2122
// Create a test file with the client directly to sanity check reads and lists
2223
let mut file = client
@@ -32,9 +33,9 @@ mod test {
3233

3334
client.mkdirs("/testdir", 0o755, true).await.unwrap();
3435

35-
let store = HdfsObjectStore::new(Arc::new(client));
36+
let store = HdfsObjectStore::new(Arc::clone(&client));
3637

37-
test_object_store_head(&store).await?;
38+
test_object_store_head(&store, &client).await?;
3839
test_object_store_list(&store).await?;
3940
test_object_store_rename(&store).await?;
4041
test_object_store_read(&store).await?;
@@ -45,12 +46,22 @@ mod test {
4546
Ok(())
4647
}
4748

48-
async fn test_object_store_head(store: &HdfsObjectStore) -> object_store::Result<()> {
49+
async fn test_object_store_head(
50+
store: &HdfsObjectStore,
51+
client: &Arc<Client>,
52+
) -> object_store::Result<()> {
4953
use object_store::{path::Path, ObjectStore};
5054

55+
let status = client.get_file_info("/testfile").await.unwrap();
56+
5157
let head = store.head(&Path::from("/testfile")).await?;
5258
assert_eq!(head.location, Path::from("/testfile"));
5359
assert_eq!(head.size, TEST_FILE_INTS * 4);
60+
assert_eq!(
61+
head.last_modified.timestamp_millis(),
62+
status.modification_time as i64
63+
);
64+
assert_eq!(head.last_modified.year(), Utc::now().year());
5465

5566
assert!(store.head(&Path::from("/testfile2")).await.is_err());
5667
assert!(store.head(&Path::from("/testdir")).await.is_err());

0 commit comments

Comments
 (0)