get_values: return error if key not exists instead of empty vec (#60)

This commit is contained in:
Aleksey Proshutisnkiy 2021-09-29 18:05:45 +03:00 committed by GitHub
parent 0ef7dc9f7b
commit 3598c9044b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 128 additions and 113 deletions

View File

@ -1,4 +1,4 @@
module Aqua.DHT.Scheduled declares * module AquaDHT.Scheduled declares *
export clearExpired_86400, replicate_3600 export clearExpired_86400, replicate_3600

View File

@ -1,4 +1,4 @@
module Aqua.DHT declares * module AquaDHT declares *
data ClearExpiredResult: data ClearExpiredResult:
success: bool success: bool

View File

@ -1,4 +1,4 @@
module Aqua.DHT.PubSub declares * module AquaDHT.PubSub declares *
import "dht.aqua" import "dht.aqua"
import "@fluencelabs/aqua-lib/builtin.aqua" import "@fluencelabs/aqua-lib/builtin.aqua"

151
service/Cargo.lock generated
View File

@ -15,13 +15,13 @@ dependencies = [
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.42" version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "595d3cfa7a60d4555cb5067b99f07142a08ea778de5cf993f7b75c7d8fabc486" checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"
[[package]] [[package]]
name = "aqua-dht" name = "aqua-dht"
version = "0.1.0" version = "0.1.1"
dependencies = [ dependencies = [
"boolinator", "boolinator",
"eyre", "eyre",
@ -63,9 +63,9 @@ dependencies = [
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.2.1" version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "blake3" name = "blake3"
@ -107,9 +107,9 @@ dependencies = [
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.69" version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0"
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
@ -273,9 +273,9 @@ dependencies = [
[[package]] [[package]]
name = "ctor" name = "ctor"
version = "0.1.20" version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa"
dependencies = [ dependencies = [
"quote", "quote",
"syn", "syn",
@ -362,11 +362,11 @@ dependencies = [
[[package]] [[package]]
name = "errno-dragonfly" name = "errno-dragonfly"
version = "0.1.1" version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067" checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
dependencies = [ dependencies = [
"gcc", "cc",
"libc", "libc",
] ]
@ -436,13 +436,14 @@ dependencies = [
[[package]] [[package]]
name = "fluence-it-types" name = "fluence-it-types"
version = "0.3.0" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5006d09553345421af5dd2334cc945fc34dc2a73d7c1ed842a39a3803699619d" checksum = "047f670b4807cab8872550a607b1515daff08b3e3bb7576ce8f45971fd811a4e"
dependencies = [ dependencies = [
"it-to-bytes", "it-to-bytes",
"nom", "nom",
"serde", "serde",
"variant_count",
"wast", "wast",
] ]
@ -474,12 +475,6 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "gcc"
version = "0.3.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
[[package]] [[package]]
name = "generational-arena" name = "generational-arena"
version = "0.2.8" version = "0.2.8"
@ -683,9 +678,9 @@ dependencies = [
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "0.4.7" version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
@ -714,9 +709,9 @@ dependencies = [
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.98" version = "0.2.103"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6"
[[package]] [[package]]
name = "libsqlite3-sys" name = "libsqlite3-sys"
@ -754,13 +749,13 @@ checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
[[package]] [[package]]
name = "marine-it-generator" name = "marine-it-generator"
version = "0.5.3" version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e62f29b16bbdb0763a04f8561c954624ee9cd9f558af4e67b95eb00880da11ec" checksum = "e7b40920a86fb49456f0e94862d56a8e0bfc22489e518d894628da0f3ade03d8"
dependencies = [ dependencies = [
"cargo_toml", "cargo_toml",
"it-lilo", "it-lilo",
"marine-it-parser 0.6.5", "marine-it-parser 0.6.6",
"marine-macro-impl", "marine-macro-impl",
"once_cell", "once_cell",
"serde", "serde",
@ -782,9 +777,9 @@ dependencies = [
[[package]] [[package]]
name = "marine-it-interfaces" name = "marine-it-interfaces"
version = "0.4.0" version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f18c137e51fd52ab7a3652233fc4eaa68e25a6a53d609bf9dd0f2e3bf67adee1" checksum = "42e229143e72ba20e754de4766ff0d02e0cf176001f7471593f82b16c72dc26d"
dependencies = [ dependencies = [
"multimap", "multimap",
"wasmer-interface-types-fl", "wasmer-interface-types-fl",
@ -809,13 +804,13 @@ dependencies = [
[[package]] [[package]]
name = "marine-it-parser" name = "marine-it-parser"
version = "0.6.5" version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19a6606e472587b2e7b759b16d037a4ea951facc2a6650f668f22403978c2442" checksum = "4154fc98fcfeba65a45d774cff6eeb8bddc8aa66e897f46a74dc95e8823771ea"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"itertools 0.10.1", "itertools 0.10.1",
"marine-it-interfaces 0.4.0", "marine-it-interfaces 0.4.1",
"marine-module-interface", "marine-module-interface",
"nom", "nom",
"semver 0.11.0", "semver 0.11.0",
@ -828,18 +823,18 @@ dependencies = [
[[package]] [[package]]
name = "marine-macro" name = "marine-macro"
version = "0.6.10" version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd64d5febc6b2ed709a4461c510c1429dc6e4cfcbd6ca0d88463911630acd67b" checksum = "679663e087698f1048f23fed9b51ed82f6fa75781d3747ce29ea2f3ad78a6534"
dependencies = [ dependencies = [
"marine-macro-impl", "marine-macro-impl",
] ]
[[package]] [[package]]
name = "marine-macro-impl" name = "marine-macro-impl"
version = "0.6.10" version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c644127c4a9a3345434116f6887f8522c51bddde599b51d7d312aa8b2ecfaa54" checksum = "0ba83fc29fec3b96374094a94396d3fe13c97468ffe196123b78555bdae1093e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -867,13 +862,13 @@ dependencies = [
[[package]] [[package]]
name = "marine-module-interface" name = "marine-module-interface"
version = "0.1.4" version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8a5936273bebb523ed169863282dbc19fc66bb983c7031c5b8b0556584f2401" checksum = "035fb5d160a50cbcbe244a343081550f689ceba945d95281bbe207d98bf25586"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"itertools 0.10.1", "itertools 0.10.1",
"marine-it-interfaces 0.4.0", "marine-it-interfaces 0.4.1",
"nom", "nom",
"semver 0.11.0", "semver 0.11.0",
"serde", "serde",
@ -885,9 +880,9 @@ dependencies = [
[[package]] [[package]]
name = "marine-rs-sdk" name = "marine-rs-sdk"
version = "0.6.11" version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9157bae63a4bbdd7a29984f6ded08f8ed72991b83ca3bdd59d2f889fa8b8ea02" checksum = "8866fc6f24b92342f15d2816298d3de6377b685df245e38a36ddcde993c8f1d5"
dependencies = [ dependencies = [
"marine-macro", "marine-macro",
"marine-rs-sdk-main", "marine-rs-sdk-main",
@ -897,9 +892,9 @@ dependencies = [
[[package]] [[package]]
name = "marine-rs-sdk-main" name = "marine-rs-sdk-main"
version = "0.6.10" version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95c49b5893d8689589219e07cf67421cc415dc5f219ad0e9c197a9a050b5dd4f" checksum = "4980a0c01121844419c0146e776d24e35fdf7cb2e90a33d19ecf52756e400196"
dependencies = [ dependencies = [
"log", "log",
"marine-macro", "marine-macro",
@ -930,8 +925,8 @@ dependencies = [
"it-lilo", "it-lilo",
"log", "log",
"marine-it-generator", "marine-it-generator",
"marine-it-interfaces 0.4.0", "marine-it-interfaces 0.4.1",
"marine-it-parser 0.6.5", "marine-it-parser 0.6.6",
"marine-module-info-parser", "marine-module-info-parser",
"marine-module-interface", "marine-module-interface",
"marine-utils", "marine-utils",
@ -951,9 +946,9 @@ dependencies = [
[[package]] [[package]]
name = "marine-sqlite-connector" name = "marine-sqlite-connector"
version = "0.5.0" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7aef66554a852d86eb2ee64fc11651ecb798549d0d8204761866f7fa0a40ebb" checksum = "c514fdaa43d543a58a01136d3ac4ddcfdb438cb5e25fc164554ab556c2126efa"
dependencies = [ dependencies = [
"marine-rs-sdk", "marine-rs-sdk",
] ]
@ -989,9 +984,9 @@ dependencies = [
[[package]] [[package]]
name = "marine-timestamp-macro" name = "marine-timestamp-macro"
version = "0.6.10" version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29ae1a5630bd9b652a77405750c3c37a5fdcfcdc679818bf7d970871ae28f7e6" checksum = "5656745923b99d73f945e26cf191efa70e906c7f55b0d4c1fc176b4b8087e85b"
dependencies = [ dependencies = [
"chrono", "chrono",
"quote", "quote",
@ -1005,9 +1000,9 @@ checksum = "8dc5838acba84ce4d802d672afd0814fae0ae7098021ae5b06d975e70d09f812"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.4.0" version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]] [[package]]
name = "memmap" name = "memmap"
@ -1153,9 +1148,9 @@ dependencies = [
[[package]] [[package]]
name = "pkg-config" name = "pkg-config"
version = "0.3.19" version = "0.3.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb"
[[package]] [[package]]
name = "proc-macro-error" name = "proc-macro-error"
@ -1188,9 +1183,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.28" version = "1.0.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
dependencies = [ dependencies = [
"unicode-xid", "unicode-xid",
] ]
@ -1373,9 +1368,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.66" version = "1.0.68"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
dependencies = [ dependencies = [
"itoa", "itoa",
"ryu", "ryu",
@ -1384,9 +1379,9 @@ dependencies = [
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.6.1" version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
[[package]] [[package]]
name = "static_assertions" name = "static_assertions"
@ -1408,9 +1403,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.74" version = "1.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1425,18 +1420,18 @@ checksum = "ab0e7238dcc7b40a7be719a25365910f6807bd864f4cce6b2e6b873658e2b19d"
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.26" version = "1.0.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "1.0.26" version = "1.0.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1465,9 +1460,9 @@ dependencies = [
[[package]] [[package]]
name = "typenum" name = "typenum"
version = "1.13.0" version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
[[package]] [[package]]
name = "typetag" name = "typetag"
@ -1520,6 +1515,16 @@ dependencies = [
"getrandom 0.2.3", "getrandom 0.2.3",
] ]
[[package]]
name = "variant_count"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124"
dependencies = [
"quote",
"syn",
]
[[package]] [[package]]
name = "vcpkg" name = "vcpkg"
version = "0.2.15" version = "0.2.15"
@ -1630,9 +1635,9 @@ dependencies = [
[[package]] [[package]]
name = "wasmer-interface-types-fl" name = "wasmer-interface-types-fl"
version = "0.20.1" version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df960871d756f87237e7630daa0e8453dd48f9e44e0f214e795362a6daa04967" checksum = "14ba3b5a07989987994b96bf5cc7ac2947005f9ff6123d71b7064232f07d28fa"
dependencies = [ dependencies = [
"fluence-it-types", "fluence-it-types",
"it-lilo", "it-lilo",
@ -1679,9 +1684,9 @@ dependencies = [
[[package]] [[package]]
name = "wasmer-runtime-core-fl" name = "wasmer-runtime-core-fl"
version = "0.17.0" version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4630ff544a2d7f76938bcf82ae217e0bd5c9ee078c653459d4f117c2045d315" checksum = "d0d5ac3e0603e5f0ffaf11cbd854eea7c3b609ab4b676f71968f2bc47f9e3c4a"
dependencies = [ dependencies = [
"bincode", "bincode",
"blake3", "blake3",
@ -1708,9 +1713,9 @@ dependencies = [
[[package]] [[package]]
name = "wasmer-runtime-fl" name = "wasmer-runtime-fl"
version = "0.17.0" version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e855c8942f998a6938e43c1d0bb11b76a60b1c8341e08db36cc36b97b58bb1e9" checksum = "5688460204d9f644d846300d041632cf34c4b4f83a955c0a67e600030376d2ee"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"memmap", "memmap",

View File

@ -1,6 +1,6 @@
[package] [package]
name = "aqua-dht" name = "aqua-dht"
version = "0.1.0" version = "0.1.1"
authors = ["Fluence Labs"] authors = ["Fluence Labs"]
edition = "2018" edition = "2018"
publish = false publish = false

View File

@ -178,12 +178,12 @@ fn get_key_metadata_helper(connection: &Connection, key: String, current_timesta
let mut statement = connection let mut statement = connection
.prepare(f!("SELECT key, peer_id, timestamp_created, pinned, weight \ .prepare(f!("SELECT key, peer_id, timestamp_created, pinned, weight \
FROM {KEYS_TABLE_NAME} WHERE key = ?"))?; FROM {KEYS_TABLE_NAME} WHERE key = ?"))?;
statement.bind(1, &Value::String(key))?; statement.bind(1, &Value::String(key.clone()))?;
if let State::Row = statement.next()? { if let State::Row = statement.next()? {
read_key(&statement) read_key(&statement)
} else { } else {
Err(SqliteError { code: None, message: Some("not found".to_string()) }) Err(SqliteError { code: None, message: Some(f!("Requested key {key} does not exist")) })
} }
} }
@ -231,7 +231,7 @@ pub fn register_key_impl(key: String, current_timestamp_sec: u64, pin: bool, wei
check_timestamp_tetraplets(&call_parameters, 1) check_timestamp_tetraplets(&call_parameters, 1)
.map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?; .map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?;
update_key(&get_connection()?, key, peer_id, current_timestamp_sec.clone(), current_timestamp_sec, pin, weight) update_key(&get_connection()?, key, peer_id, current_timestamp_sec, current_timestamp_sec, pin, weight)
} }
/// Used for replication, same as register_key, but key.pinned is ignored, updates timestamp_accessed /// Used for replication, same as register_key, but key.pinned is ignored, updates timestamp_accessed
@ -253,7 +253,7 @@ pub fn put_value_impl(key: String, value: String, current_timestamp_sec: u64, re
let connection = get_connection()?; let connection = get_connection()?;
check_key_existence(&connection, key.clone(), current_timestamp_sec.clone())?; check_key_existence(&connection, key.clone(), current_timestamp_sec)?;
let records_count = get_non_host_records_count_by_key(&connection, key.clone())?; let records_count = get_non_host_records_count_by_key(&connection, key.clone())?;
// check values limits for non-host values // check values limits for non-host values
@ -339,6 +339,7 @@ pub fn get_values_impl(key: String, current_timestamp_sec: u64) -> SqliteResult<
.map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?; .map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?;
let connection = get_connection()?; let connection = get_connection()?;
check_key_existence(&connection, key.clone(), current_timestamp_sec)?;
let mut statement = connection.prepare( let mut statement = connection.prepare(
f!("UPDATE {VALUES_TABLE_NAME} \ f!("UPDATE {VALUES_TABLE_NAME} \
@ -364,7 +365,7 @@ pub fn republish_values_impl(key: String, records: Vec<Record>, current_timestam
pub fn republish_values_helper(key: String, mut records: Vec<Record>, current_timestamp_sec: u64) -> SqliteResult<u64> { pub fn republish_values_helper(key: String, mut records: Vec<Record>, current_timestamp_sec: u64) -> SqliteResult<u64> {
let connection = get_connection()?; let connection = get_connection()?;
check_key_existence(&connection, key.clone(), current_timestamp_sec.clone())?; check_key_existence(&connection, key.clone(), current_timestamp_sec)?;
records = merge_impl(get_values_helper(&connection, key.clone())?.into_iter().chain(records.into_iter()).collect())?; records = merge_impl(get_values_helper(&connection, key.clone())?.into_iter().chain(records.into_iter()).collect())?;
@ -490,7 +491,7 @@ pub fn renew_host_value_impl(key: String, current_timestamp_sec: u64) -> SqliteR
.map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?; .map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?;
let connection = get_connection()?; let connection = get_connection()?;
check_key_existence(&connection, key.clone(), current_timestamp_sec.clone())?; check_key_existence(&connection, key.clone(), current_timestamp_sec)?;
let set_by = call_parameters.init_peer_id; let set_by = call_parameters.init_peer_id;
let host_id = call_parameters.host_id; let host_id = call_parameters.host_id;
@ -516,7 +517,7 @@ pub fn clear_host_value_impl(key: String, current_timestamp_sec: u64) -> SqliteR
.map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?; .map_err(|e| SqliteError { code: None, message: Some(e.to_string()) })?;
let connection = get_connection()?; let connection = get_connection()?;
check_key_existence(&connection, key.clone(), current_timestamp_sec.clone())?; check_key_existence(&connection, key.clone(), current_timestamp_sec)?;
let peer_id = call_parameters.host_id; let peer_id = call_parameters.host_id;
let set_by = call_parameters.init_peer_id; let set_by = call_parameters.init_peer_id;

View File

@ -182,9 +182,10 @@ mod tests {
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
fn get_key_metadata_not_found() { fn get_key_metadata_not_found() {
clear_env(); clear_env();
let result = aqua_dht.get_key_metadata_cp("invalid_key".to_string(), 123u64, get_correct_timestamp_cp(1)); let key = "invalid_key".to_string();
let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(!result.success); assert!(!result.success);
assert_eq!(result.error, "not found"); assert_eq!(result.error, f!("Requested key {key} does not exist"));
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
@ -312,12 +313,25 @@ mod tests {
assert_eq!(result.result.len(), 0); assert_eq!(result.result.len(), 0);
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
fn get_values_key_not_exists() {
clear_env();
let key = "invalid_key".to_string();
let result = aqua_dht.get_values_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(!result.success);
assert_eq!(result.error, f!("Requested key {key} does not exist"));
assert_eq!(result.result.len(), 0);
}
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
fn put_value_key_not_exists() { fn put_value_key_not_exists() {
clear_env(); clear_env();
let result = aqua_dht.put_value_cp("some_key".to_string(), "value".to_string(), 123u64, vec![], vec![], 8u32, get_correct_timestamp_cp(2)); let key = "some_key".to_string();
let result = aqua_dht.put_value_cp(key.clone(), "value".to_string(), 123u64, vec![], vec![], 8u32, get_correct_timestamp_cp(2));
assert!(!result.success); assert!(!result.success);
assert_eq!(result.error, "not found"); assert_eq!(result.error, f!("Requested key {key} does not exist"));
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
@ -523,9 +537,9 @@ mod tests {
assert_eq!(result.count_keys, 1); assert_eq!(result.count_keys, 1);
assert_eq!(result.count_values, 0); assert_eq!(result.count_values, 0);
let result = aqua_dht.get_key_metadata_cp(key, 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(!result.success); assert!(!result.success);
assert_eq!(result.error, "not found"); assert_eq!(result.error, f!("Requested key {key} does not exist"));
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
@ -577,13 +591,12 @@ mod tests {
let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(!result.success); assert!(!result.success);
assert_eq!(result.error, "not found"); assert_eq!(result.error, f!("Requested key {key} does not exist"));
let result = aqua_dht.get_values_cp(key, 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_values_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(result.success); assert!(!result.success);
assert_eq!(result.error, ""); assert_eq!(result.error, f!("Requested key {key} does not exist"));
assert_eq!(result.result.len(), 0);
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
@ -606,13 +619,12 @@ mod tests {
let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(!result.success); assert!(!result.success);
assert_eq!(result.error, "not found"); assert_eq!(result.error, f!("Requested key {key} does not exist"));
let result = aqua_dht.get_values_cp(key, 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_values_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(result.success); assert!(!result.success);
assert_eq!(result.error, ""); assert_eq!(result.error, f!("Requested key {key} does not exist"));
assert_eq!(result.result.len(), 0);
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
@ -667,9 +679,9 @@ mod tests {
assert_eq!(item.key.key, key); assert_eq!(item.key.key, key);
assert_eq!(item.records.len(), 0); assert_eq!(item.records.len(), 0);
let result = aqua_dht.get_key_metadata_cp(key, 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(!result.success); assert!(!result.success);
assert_eq!(result.error, "not found"); assert_eq!(result.error, f!("Requested key {key} does not exist"));
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
@ -697,13 +709,12 @@ mod tests {
let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_key_metadata_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(!result.success); assert!(!result.success);
assert_eq!(result.error, "not found"); assert_eq!(result.error, f!("Requested key {key} does not exist"));
let result = aqua_dht.get_values_cp(key, 123u64, get_correct_timestamp_cp(1)); let result = aqua_dht.get_values_cp(key.clone(), 123u64, get_correct_timestamp_cp(1));
assert!(result.success); assert!(!result.success);
assert_eq!(result.error, ""); assert_eq!(result.error, f!("Requested key {key} does not exist"));
assert_eq!(result.result.len(), 0);
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]
@ -867,9 +878,8 @@ mod tests {
// check that key not exists and values are empty (because node is neighbor to itself and should republish values to itself) // check that key not exists and values are empty (because node is neighbor to itself and should republish values to itself)
// get_values checks key existence // get_values checks key existence
let result = aqua_dht.get_values_cp(key.clone(), current_timestamp, get_correct_timestamp_cp(1)); let result = aqua_dht.get_values_cp(key.clone(), current_timestamp, get_correct_timestamp_cp(1));
assert!(result.success); assert!(!result.success);
assert_eq!(result.error, ""); assert_eq!(result.error, f!("Requested key {key} does not exist"));
assert_eq!(result.result.len(), 0);
// republish key and values // republish key and values
let result = aqua_dht.republish_key_cp(key_to_republish, current_timestamp, get_correct_timestamp_cp(1)); let result = aqua_dht.republish_key_cp(key_to_republish, current_timestamp, get_correct_timestamp_cp(1));
@ -896,9 +906,8 @@ mod tests {
// check that values and keys not exists anymore (get_values checks key existence) // check that values and keys not exists anymore (get_values checks key existence)
let result = aqua_dht.get_values_cp(key.clone(), expired_timestamp, get_correct_timestamp_cp(1)); let result = aqua_dht.get_values_cp(key.clone(), expired_timestamp, get_correct_timestamp_cp(1));
assert!(result.success); assert!(!result.success);
assert_eq!(result.error, ""); assert_eq!(result.error, f!("Requested key {key} does not exist"));
assert_eq!(result.result.len(), 0);
} }
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")] #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts/")]