diff --git a/.gitignore b/.gitignore index eb5a316..7aef303 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ target +*~ diff --git a/Cargo.lock b/Cargo.lock index 2ebaf99..25b763e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "anyhow" @@ -15,30 +15,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] -name = "byteorder" -version = "0.4.2" +name = "bitflags" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8b41881888cc08af32d47ac4edd52bc7fa27fef774be47a92443756451304" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "byteorder" -version = "0.5.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "byteserver" version = "0.1.0" dependencies = [ "anyhow", - "byteorder 0.5.3", + "byteorder", "itertools", - "memmap", + "memmap2", "pipe", "rmp", "rmp-serde", "serde", - "tempdir", + "serde_bytes", "tempfile", "thiserror", "time", @@ -46,29 +46,32 @@ dependencies = [ [[package]] name = "cfg-if" -version = "0.1.10" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "crossbeam-channel" -version = "0.4.2" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", - "maybe-uninit", ] [[package]] name = "crossbeam-utils" -version = "0.7.2" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "deranged" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ - "autocfg", - "cfg-if", - "lazy_static", + "powerfmt", ] [[package]] @@ -78,184 +81,203 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] -name = "fs2" -version = "0.2.5" +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd414e5a1a979b931bb92f41b7a54106d3f6d2e6c253e9ce943b7cd468251ef" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "kernel32-sys", "libc", - "winapi 0.2.8", + "windows-sys", ] [[package]] -name = "fuchsia-cprng" -version = "0.1.1" +name = "fastrand" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "itertools" -version = "0.5.10" +name = "getrandom" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4833d6978da405305126af4ac88569b5d71ff758581ce5a987dbfa3755f694fc" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ - "either", + "cfg-if", + "libc", + "r-efi", + "wasip2", ] [[package]] -name = "kernel32-sys" -version = "0.2.2" +name = "itertools" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "either", ] [[package]] -name = "lazy_static" -version = "1.4.0" +name = "libc" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] -name = "libc" -version = "0.2.69" +name = "linux-raw-sys" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] -name = "maybe-uninit" -version = "2.0.0" +name = "memmap2" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +dependencies = [ + "libc", +] [[package]] -name = "memmap" -version = "0.4.0" +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69253224aa10070855ea8fe9dbe94a03fc2b1d7930bb340c9e586a7513716fea" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "fs2", - "kernel32-sys", - "libc", - "winapi 0.2.8", + "autocfg", ] +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pipe" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd11e042e056991b5df9c0c5ae6bd0cce219b74294c40f65b89f40f7030106c" +checksum = "1c7b8f27da217eb966df4c58d4159ea939431950ca03cf782c22bd7c5c1d8d75" dependencies = [ "crossbeam-channel", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "proc-macro2" -version = "1.0.32" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.10" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] [[package]] -name = "rand" -version = "0.3.23" +name = "r-efi" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" -dependencies = [ - "libc", - "rand 0.4.6", -] +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "rand" -version = "0.4.6" +name = "rmp" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi 0.3.8", + "byteorder", + "num-traits", + "paste", ] [[package]] -name = "rand_core" -version = "0.3.1" +name = "rmp-serde" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" dependencies = [ - "rand_core 0.4.2", + "byteorder", + "rmp", + "serde", ] [[package]] -name = "rand_core" -version = "0.4.2" +name = "rustix" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "rand_core 0.3.1", + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", ] [[package]] -name = "redox_syscall" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" - -[[package]] -name = "remove_dir_all" -version = "0.5.2" +name = "serde" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ - "winapi 0.3.8", + "serde_core", + "serde_derive", ] [[package]] -name = "rmp" -version = "0.7.5" +name = "serde_bytes" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2da68cc45d803dfd68724d767363d82c6f76293a2bf5fe6ded34f640ee01447" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ - "byteorder 0.4.2", + "serde", + "serde_core", ] [[package]] -name = "rmp-serde" -version = "0.10.0" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b371d26290d86dfa2716f1b0878a3832b94d3803fdc402a1697440d86ddbe602" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ - "rmp", - "serde", + "serde_derive", ] [[package]] -name = "serde" -version = "0.8.23" +name = "serde_derive" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] [[package]] name = "syn" @@ -269,26 +291,27 @@ dependencies = [ ] [[package]] -name = "tempdir" -version = "0.3.7" +name = "syn" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ - "rand 0.4.6", - "remove_dir_all", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] name = "tempfile" -version = "2.2.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ce2fe9db64b842314052e2421ac61a73ce41b898dc8e3750398b219c5fc1e0" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ - "kernel32-sys", - "libc", - "rand 0.3.23", - "redox_syscall", - "winapi 0.2.8", + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", ] [[package]] @@ -308,55 +331,77 @@ checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.81", ] [[package]] name = "time" -version = "0.1.43" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ - "libc", - "winapi 0.3.8", + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", ] [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "time-core" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] -name = "winapi" -version = "0.2.8" +name = "time-macros" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] [[package]] -name = "winapi" -version = "0.3.8" +name = "unicode-ident" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "wit-bindgen", ] [[package]] -name = "winapi-build" -version = "0.1.1" +name = "windows-link" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "windows-sys" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" diff --git a/Cargo.toml b/Cargo.toml index f7a708b..a046ba5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,19 +6,19 @@ edition = "2021" [dependencies] anyhow = "1.0" -byteorder = "0.5.3" -itertools = "0.5.2" -memmap = "0.4.0" -rmp = "0.7.5" -rmp-serde = "0.10.0" -serde = "0.8.12" -tempdir = "0.3.5" -tempfile = "2.1.4" +byteorder = "1.5" +itertools = "0.13" +memmap2 = "0.9" +rmp = "0.8" +rmp-serde = "1.3" +serde = { version = "1.0", features = ["derive"] } +serde_bytes = "0.11" +tempfile = "3.14" thiserror = "1.0" -time = "0.1.35" +time = { version = "0.3", features = ["macros"] } [dev-dependencies] -pipe = "0.3.0" +pipe = "0.4" [profile.release] debug = true diff --git a/src/lib.rs b/src/lib.rs index 1c44433..9607f58 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,6 @@ extern crate byteorder; pub extern crate rmp; pub extern crate rmp_serde; extern crate serde; -extern crate tempdir; extern crate tempfile; extern crate time; diff --git a/src/msg.rs b/src/msg.rs index 1c35396..3d83716 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -1,7 +1,7 @@ use byteorder::{BigEndian, ByteOrder}; -use serde::bytes::ByteBuf; +use serde_bytes::ByteBuf; use anyhow::{anyhow, Context, Result}; @@ -19,8 +19,8 @@ pub fn size_vec(mut v: Vec) -> Vec { pub const NIL: Option = None; -pub fn bytes(data: &[u8]) -> serde::bytes::Bytes { - serde::bytes::Bytes::new(data) +pub fn bytes(data: &[u8]) -> &[u8] { + data } #[derive(Debug, PartialEq)] @@ -111,7 +111,7 @@ impl ZeoIter { fn pre_parse(mut reader: &mut dyn std::io::Read) -> Result<(i64, String)> { let array_size = - rmp::decode::read_array_size(&mut reader).context("get mess size")?; + rmp::decode::read_array_len(&mut reader).context("get mess size")?; if array_size != 3 { return Err(anyhow!("Invalid message size. Expect 3, got {}", array_size))?; } @@ -127,9 +127,9 @@ fn parse_message(mut reader: &mut dyn std::io::Read) -> Result { "loadBefore" => { let (oid, before): (ByteBuf, ByteBuf) = decode!(&mut reader, "decoding loadBefore oid")?; - let oid = util::read8(&mut (&*oid)).context("loadBefore oid")?; + let oid = util::read8(&mut oid.as_slice()).context("loadBefore oid")?; let before = - util::read8(&mut (&*before)) + util::read8(&mut before.as_slice()) .context("loadBefore before")?; Zeo::LoadBefore(id, oid, before) }, @@ -143,9 +143,9 @@ fn parse_message(mut reader: &mut dyn std::io::Read) -> Result { "storea" => { let (oid, committed, data, txn): (ByteBuf, ByteBuf, ByteBuf, u64) = decode!(&mut reader, "decoding storea")?; - let oid = util::read8(&mut (&*oid)).context("storea oid")?; + let oid = util::read8(&mut oid.as_slice()).context("storea oid")?; let committed = - util::read8(&mut (&*committed)) + util::read8(&mut committed.as_slice()) .context("storea committed")?; Zeo::Storea(oid, committed, data.to_vec(), txn) }, diff --git a/src/reader.rs b/src/reader.rs index f725dfc..77b7192 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -85,7 +85,7 @@ pub fn reader( }, msg::Zeo::NewOids(id) => { let oids = fs.new_oids(); - let oids: Vec = + let oids: Vec<&[u8]> = oids.iter().map(| oid | msg::bytes(oid)).collect(); respond!(sender, id, oids) }, diff --git a/src/storage.rs b/src/storage.rs index 721ed53..e73f4dc 100644 --- a/src/storage.rs +++ b/src/storage.rs @@ -233,7 +233,7 @@ impl FileStorage { } pub fn tpc_begin(&self, user: &[u8], desc: &[u8], ext: &[u8]) - -> std::io::Result { + -> std::io::Result> { Ok(transaction::Transaction::begin( self.tmps.get()?, self.new_tid(), user, desc, ext)?) diff --git a/src/tid.rs b/src/tid.rs index a913a42..fdbf12e 100644 --- a/src/tid.rs +++ b/src/tid.rs @@ -17,20 +17,24 @@ pub fn make_tid(year: u32, month: u32, day: u32, hour: u32, minute: u32, tid } -pub fn tm_tid(tm: time::Tm) -> Tid { - let days = (tm.tm_year * 12 + tm.tm_mon) * 31 + tm.tm_mday - 1; - let minutes = ((days * 24 + tm.tm_hour) * 60 + tm.tm_min) as u64; - let seconds = (( - (tm.tm_sec - tm.tm_utcoff) as f64 + - (tm.tm_nsec as f64 / 1_000_000_000.0) - )/ SCONV) as u64; +pub fn tm_tid(dt: time::OffsetDateTime) -> Tid { + let year = dt.year() as i32; + let month = dt.month() as i32; + let day = dt.day() as i32; + let hour = dt.hour() as i32; + let minute = dt.minute() as i32; + let second = dt.second() as f64 + (dt.nanosecond() as f64 / 1_000_000_000.0); + + let days = ((year - 1900) * 12 + month - 1) * 31 + day - 1; + let minutes = ((days * 24 + hour) * 60 + minute) as u64; + let seconds = (second / SCONV) as u64; let mut tid: Tid = [0u8; 8]; BigEndian::write_u64(&mut tid, (minutes << 32) + seconds); tid } -pub fn now_tid() -> Tid { tm_tid(time::now_utc()) } +pub fn now_tid() -> Tid { tm_tid(time::OffsetDateTime::now_utc()) } pub fn next(tid: &Tid) -> Tid { let mut next = tid.clone(); @@ -66,13 +70,9 @@ mod tests { #[test] fn test_tm_tid() { + use time::macros::datetime; assert_eq!( - tm_tid(time::Tm { - tm_year: 116, tm_mon: 0, tm_mday: 2, - tm_hour: 3, tm_min: 4, tm_sec: 59, - tm_nsec: 999_999_999, - tm_wday: 0, tm_yday: 0, tm_isdst: 0, tm_utcoff: 0, - }), + tm_tid(datetime!(2016-01-02 03:04:59.999_999_999 UTC)), [3, 180, 48, 88, 255, 255, 255, 255]); assert_eq!(make_tid(2016, 1, 2, 3, 4, 56.789), [3, 180, 48, 88, 242, 76, 187, 82]); diff --git a/src/transaction.rs b/src/transaction.rs index a6705e0..6327e3a 100644 --- a/src/transaction.rs +++ b/src/transaction.rs @@ -314,7 +314,7 @@ impl<'t> TransactionSerialIterator<'t> { fn new(mut file: std::fs::File, index: &'t index::Index, length: u64, - pos: u64) -> std::io::Result { + pos: u64) -> std::io::Result> { file.seek(std::io::SeekFrom::Start(pos))?; Ok(TransactionSerialIterator { reader: std::io::BufReader::new(file), diff --git a/src/util.rs b/src/util.rs index 35f563d..a4498d6 100644 --- a/src/util.rs +++ b/src/util.rs @@ -106,13 +106,13 @@ pub fn seek(s: &mut dyn std::io::Seek, pos: u64) -> std::io::Result { pub mod test { - use tempdir; - - pub fn dir() -> tempdir::TempDir { - tempdir::TempDir::new("test").unwrap() + use tempfile; + + pub fn dir() -> tempfile::TempDir { + tempfile::TempDir::new().unwrap() } - pub fn test_path(dir: &tempdir::TempDir, name: &str) -> String { + pub fn test_path(dir: &tempfile::TempDir, name: &str) -> String { String::from(dir.path().join(name).to_str().unwrap()) } } diff --git a/src/writer.rs b/src/writer.rs index 279eeb3..7618461 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -129,12 +129,12 @@ pub fn writer( trans.locked()?; let conflicts = fs.stage(&mut trans)?; let conflict_maps: - Vec> = + Vec> = conflicts.iter() .map(| c | { let mut m: std::collections::BTreeMap< String, - serde::bytes::Bytes, + &[u8], > = std::collections::BTreeMap::new(); m.insert("oid".to_string(), msg::bytes(&c.oid)); @@ -169,7 +169,7 @@ pub fn writer( async_!(writer, "info", (info,)); }, msg::Zeo::Invalidate(tid, oids) => { - let oids: Vec = + let oids: Vec<&[u8]> = oids.iter().map(| oid | msg::bytes(oid)).collect(); async_!(writer, "invalidateTransaction", (msg::bytes(&tid), oids)); }, diff --git a/tests/reader.rs b/tests/reader.rs index 1d0974e..8187c8e 100644 --- a/tests/reader.rs +++ b/tests/reader.rs @@ -8,7 +8,7 @@ use std::collections::BTreeMap; use anyhow::Context; use byteorder::{ByteOrder, BigEndian}; -use serde::bytes::ByteBuf; +use serde_bytes::ByteBuf; use byteserver::msg; use byteserver::msgmacros::*; @@ -57,7 +57,7 @@ fn basic() { decode!(&mut (&r as &[u8]), "decoding register response").unwrap(); assert_eq!(id, 1); assert_eq!(&code, "R"); - assert_eq!(util::read8(&mut (&*tid)).unwrap(), fs.last_transaction()); + assert_eq!(util::read8(&mut tid.as_slice()).unwrap(), fs.last_transaction()); }, _ => panic!("invalid message") } // get_info(), mostly punt for now: @@ -87,7 +87,7 @@ fn basic() { assert_eq!(id, 3); assert_eq!(&code, "R"); assert_eq!(&*data, b"111"); assert!(end.is_none()); - util::read8(&mut &*tid).unwrap() + util::read8(&mut tid.as_slice()).unwrap() }, _ => panic!("invalid message") }; // previous @@ -102,8 +102,9 @@ fn basic() { "decoding loadBefore response").unwrap(); assert_eq!(id, 3); assert_eq!(&code, "R"); assert_eq!(&*data, b"000"); - assert_eq!(util::read8(&mut &*end.unwrap()).unwrap(), tid1); - util::read8(&mut &*tid).unwrap() + let end_buf = end.unwrap(); + assert_eq!(util::read8(&mut end_buf.as_slice()).unwrap(), tid1); + util::read8(&mut tid.as_slice()).unwrap() }, _ => panic!("invalid message") }; // pre creation diff --git a/tests/writer.rs b/tests/writer.rs index 8a89825..40e74e3 100644 --- a/tests/writer.rs +++ b/tests/writer.rs @@ -6,7 +6,7 @@ extern crate byteserver; use std::collections::BTreeMap; use anyhow::Context; -use serde::bytes::ByteBuf; +use serde_bytes::ByteBuf; use byteserver::msg; use byteserver::msgmacros::*; @@ -74,7 +74,7 @@ fn basic() { if let storage::LoadBeforeResult::Loaded(data, ltid, end) = fs.load_before(&util::p64(1), storage::testing::MAXTID).unwrap() { - assert_eq!(<id, &*tid); + assert_eq!(<id[..], &tid[..]); assert_eq!(&data, b"ooo"); assert!(end.is_none()); }