)]}'
{"tvix/store/src/pathinfoservice/bigtable.rs":[{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"f9d3f2f20e2c263259546882be7fcf4727d01de5","unresolved":true,"context_lines":[{"line_number":98,"context_line":"    }"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    #[cfg(test)]"},{"line_number":101,"context_line":"    pub async fn connect(params: BigtableParameters) -\u003e Result\u003cSelf, bigtable::Error\u003e {"},{"line_number":102,"context_line":"        use std::time::Duration;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        use async_process::{Command, Stdio};"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"2b698ada_d868888f","line":101,"updated":"2024-04-09 16:19:19.000000000","message":"Might be nice to share some of this `cbtemulator` setup code with the directory service","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"78f44f1b1d50e842c78e13b00b8658889d468f83","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    }"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    #[cfg(test)]"},{"line_number":101,"context_line":"    pub async fn connect(params: BigtableParameters) -\u003e Result\u003cSelf, bigtable::Error\u003e {"},{"line_number":102,"context_line":"        use std::time::Duration;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        use async_process::{Command, Stdio};"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"c885fa8d_b3bace3e","line":101,"in_reply_to":"26801ae3_736a198f","updated":"2024-04-09 19:06:57.000000000","message":"asked in https://github.com/liufuyang/bigtable_rs/issues/36#issuecomment-2045886817.","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6c2b8ba9b0670aad3f2ff18210ae0815320ba3d9","unresolved":true,"context_lines":[{"line_number":98,"context_line":"    }"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    #[cfg(test)]"},{"line_number":101,"context_line":"    pub async fn connect(params: BigtableParameters) -\u003e Result\u003cSelf, bigtable::Error\u003e {"},{"line_number":102,"context_line":"        use std::time::Duration;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        use async_process::{Command, Stdio};"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"7fe0f71b_022347c7","line":101,"in_reply_to":"2b698ada_d868888f","updated":"2024-04-09 17:25:49.000000000","message":"Yes, though it\u0027s strictly speaking neither something that castore nor store should publicly expose. I\u0027ll ask upstream if they\u0027re interested in this, there\u0027s an issue about integration tests already. If not, I\u0027d probably rather keep the duplication than moving it into our own crate (rule of three)","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"3154203f3e8e60e758d5ba7dcebdda717838c81e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    }"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    #[cfg(test)]"},{"line_number":101,"context_line":"    pub async fn connect(params: BigtableParameters) -\u003e Result\u003cSelf, bigtable::Error\u003e {"},{"line_number":102,"context_line":"        use std::time::Duration;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        use async_process::{Command, Stdio};"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"26801ae3_736a198f","line":101,"in_reply_to":"7fe0f71b_022347c7","updated":"2024-04-09 17:28:44.000000000","message":"Sounds good!","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"f9d3f2f20e2c263259546882be7fcf4727d01de5","unresolved":true,"context_lines":[{"line_number":276,"context_line":"        Ok(Some(path_info))"},{"line_number":277,"context_line":"    }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    async fn put(\u0026self, path_info: PathInfo) -\u003e Result\u003cPathInfo, Error\u003e {"},{"line_number":280,"context_line":"        let store_path \u003d path_info"},{"line_number":281,"context_line":"            .validate()"},{"line_number":282,"context_line":"            .map_err(|e| Error::InvalidRequest(format!(\"pathinfo failed validation: {}\", e)))?;"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"91a35b16_0326473b","line":279,"updated":"2024-04-09 16:19:19.000000000","message":"should we check `is_read_only` and error out before attempting to write? (same thing for directory service)","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"fce42ab43943393d5729248e8f1959a9ef014567","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        Ok(Some(path_info))"},{"line_number":277,"context_line":"    }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    async fn put(\u0026self, path_info: PathInfo) -\u003e Result\u003cPathInfo, Error\u003e {"},{"line_number":280,"context_line":"        let store_path \u003d path_info"},{"line_number":281,"context_line":"            .validate()"},{"line_number":282,"context_line":"            .map_err(|e| Error::InvalidRequest(format!(\"pathinfo failed validation: {}\", e)))?;"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"22642643_cf69a768","line":279,"in_reply_to":"3ba311e3_3c5a3038","updated":"2024-04-09 19:40:05.000000000","message":"Ok, so bigtable-rs only creates a client with different scopes.\n\nSo we still send out HTTP requests, and it makes sense to check for this. Let\u0027s do it in a followup though, for both backends.","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6c2b8ba9b0670aad3f2ff18210ae0815320ba3d9","unresolved":true,"context_lines":[{"line_number":276,"context_line":"        Ok(Some(path_info))"},{"line_number":277,"context_line":"    }"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    async fn put(\u0026self, path_info: PathInfo) -\u003e Result\u003cPathInfo, Error\u003e {"},{"line_number":280,"context_line":"        let store_path \u003d path_info"},{"line_number":281,"context_line":"            .validate()"},{"line_number":282,"context_line":"            .map_err(|e| Error::InvalidRequest(format!(\"pathinfo failed validation: {}\", e)))?;"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"3ba311e3_3c5a3038","line":279,"in_reply_to":"91a35b16_0326473b","updated":"2024-04-09 17:25:49.000000000","message":"I assumed the server would already fail, or even the bigtable-rs plumbing.\n\nIt would be nice if we\u0027d catch this client-side somewhere though. let me check :-)","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"f9d3f2f20e2c263259546882be7fcf4727d01de5","unresolved":true,"context_lines":[{"line_number":332,"context_line":"        \u0026self,"},{"line_number":333,"context_line":"        _root_node: \u0026castorepb::node::Node,"},{"line_number":334,"context_line":"    ) -\u003e Result\u003c(u64, [u8; 32]), Error\u003e {"},{"line_number":335,"context_line":"        return Err(Error::StorageError(\"unimplemented\".into()));"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    fn list(\u0026self) -\u003e BoxStream\u003c\u0027static, Result\u003cPathInfo, Error\u003e\u003e {"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"8d2e3712_81a5ecdf","line":335,"updated":"2024-04-09 16:19:19.000000000","message":"What\u0027s the plan here? Do we need store composition before this works?","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6c2b8ba9b0670aad3f2ff18210ae0815320ba3d9","unresolved":true,"context_lines":[{"line_number":332,"context_line":"        \u0026self,"},{"line_number":333,"context_line":"        _root_node: \u0026castorepb::node::Node,"},{"line_number":334,"context_line":"    ) -\u003e Result\u003c(u64, [u8; 32]), Error\u003e {"},{"line_number":335,"context_line":"        return Err(Error::StorageError(\"unimplemented\".into()));"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    fn list(\u0026self) -\u003e BoxStream\u003c\u0027static, Result\u003cPathInfo, Error\u003e\u003e {"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"a2d785df_c941de36","line":335,"in_reply_to":"8d2e3712_81a5ecdf","updated":"2024-04-09 17:25:49.000000000","message":"If you want to call this function, yes. But if something else has already calculated that data, you don\u0027t need to call it.\n\nFor example, you can use nix-copy-closure through nar-bridge connected to this store and upload a closure.\n\nnar-bridge will only call put with the resulting `PathInfo` structs (at least IIRC).\nAs far as validating the NarHash matches, it already does do this while ingesting the NAR: https://cs.tvl.fyi/depot/-/blob/tvix/nar-bridge/pkg/importer/importer.go?L45","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"3154203f3e8e60e758d5ba7dcebdda717838c81e","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        \u0026self,"},{"line_number":333,"context_line":"        _root_node: \u0026castorepb::node::Node,"},{"line_number":334,"context_line":"    ) -\u003e Result\u003c(u64, [u8; 32]), Error\u003e {"},{"line_number":335,"context_line":"        return Err(Error::StorageError(\"unimplemented\".into()));"},{"line_number":336,"context_line":"    }"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    fn list(\u0026self) -\u003e BoxStream\u003c\u0027static, Result\u003cPathInfo, Error\u003e\u003e {"}],"source_content_type":"text/x-rustsrc","patch_set":8,"id":"5ee56154_725b47eb","line":335,"in_reply_to":"a2d785df_c941de36","updated":"2024-04-09 17:28:44.000000000","message":"Cool, as long as this works with nar-bridge ingestion I think we\u0027re good!","commit_id":"1e71aecdc3559a2037383d578bfee60fa0c10c54"}],"tvix/store/src/pathinfoservice/tests/utils.rs":[{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"201a62e5e3a029971f2e674283ca31962fb7cdf0","unresolved":true,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    let socket_path \u003d tmpdir.path().join(\"cbtemulator.sock\");"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    let emulator_process \u003d Command::new(\"cbtemulator\")"},{"line_number":123,"context_line":"        .arg(\"-address\")"},{"line_number":124,"context_line":"        .arg(socket_path.clone())"},{"line_number":125,"context_line":"        .stderr(Stdio::piped())"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"297b7b79_53d2a0db","line":122,"updated":"2024-04-05 23:19:03.000000000","message":"starting the emulator, waiting for the unix socket, creating table and family via cbt, as well as creating a bigtable connection to the emulator listening on this socket is something we already do in the castore make_bigtable too.\n\nThis should be moved to a helper function, which we use in both places.","commit_id":"bd98d6cce488852181beaca4460209a8ce24f70b"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"8109aade21d493624a5327e655b3b2d6cc3cb046","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    let socket_path \u003d tmpdir.path().join(\"cbtemulator.sock\");"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    let emulator_process \u003d Command::new(\"cbtemulator\")"},{"line_number":123,"context_line":"        .arg(\"-address\")"},{"line_number":124,"context_line":"        .arg(socket_path.clone())"},{"line_number":125,"context_line":"        .stderr(Stdio::piped())"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"bdd0ac4f_bab6b2c4","line":122,"in_reply_to":"297b7b79_53d2a0db","updated":"2024-04-06 15:50:31.000000000","message":"This got considerably smaller, by moving it into the `connect()` constructor of the two structs directly.","commit_id":"bd98d6cce488852181beaca4460209a8ce24f70b"}]}
