aboutsummaryrefslogtreecommitdiff
path: root/base/src/database.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-02-07 16:10:29 +0100
committermetamuffin <metamuffin@disroot.org>2025-02-07 16:10:29 +0100
commit314bca18a43e22368a87fcad53d91190fe101b60 (patch)
tree3cf89e2a6904c5a6abae8fe92a5a3aa96501a63c /base/src/database.rs
parent346095d20e3d817d150cbea49e87a49fbcaa2304 (diff)
downloadjellything-314bca18a43e22368a87fcad53d91190fe101b60.tar
jellything-314bca18a43e22368a87fcad53d91190fe101b60.tar.bz2
jellything-314bca18a43e22368a87fcad53d91190fe101b60.tar.zst
nodes modified since endpoint
Diffstat (limited to 'base/src/database.rs')
-rw-r--r--base/src/database.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/base/src/database.rs b/base/src/database.rs
index c0699f0..54ead92 100644
--- a/base/src/database.rs
+++ b/base/src/database.rs
@@ -4,7 +4,7 @@
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
use anyhow::{anyhow, bail, Context, Result};
-use bincode::{Decode, Encode};
+use bincode::{config::standard, Decode, Encode};
use jellycommon::{
user::{NodeUserData, User},
Node, NodeID,
@@ -13,6 +13,7 @@ use log::info;
use redb::{Durability, ReadableTable, StorageError, TableDefinition};
use std::{
fs::create_dir_all,
+ hash::{DefaultHasher, Hasher},
path::Path,
sync::{Arc, RwLock},
time::SystemTime,
@@ -164,7 +165,17 @@ impl Database {
let mut t_node_children = txn.open_table(T_NODE_CHILDREN)?;
let mut t_node_external_id = txn.open_table(T_NODE_EXTERNAL_ID)?;
let mut node = t_node.get(id.0)?.map(|v| v.value().0).unwrap_or_default();
+
+ let mut dh_before = HashWriter(DefaultHasher::new());
+ bincode::encode_into_writer(&node, &mut dh_before, standard()).unwrap();
update(&mut node)?;
+ let mut dh_after = HashWriter(DefaultHasher::new());
+ bincode::encode_into_writer(&node, &mut dh_after, standard()).unwrap();
+
+ if dh_before.0.finish() == dh_after.0.finish() {
+ return Ok(());
+ }
+
for parent in &node.parents {
t_node_children.insert((parent.0, id.0), ())?;
}
@@ -463,6 +474,14 @@ impl NodeTextSearchIndex {
}
}
+pub struct HashWriter(DefaultHasher);
+impl bincode::enc::write::Writer for HashWriter {
+ fn write(&mut self, bytes: &[u8]) -> std::result::Result<(), bincode::error::EncodeError> {
+ self.0.write(bytes);
+ Ok(())
+ }
+}
+
#[derive(Debug)]
#[cfg(not(feature = "db_json"))]
pub struct Ser<T>(pub T);