)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"2d5d53fb8e44f877e4cf136d9ed18b96c2617952","unresolved":true,"context_lines":[{"line_number":9,"context_line":"This adds a Directory service using"},{"line_number":10,"context_line":"https://cloud.google.com/bigtable/docs/ as a K/V store."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Directory (closures) are put in individual keys."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7fada45bf386a78b7ec93be38c5f03879a2a6e22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9237bfa2_4400b7e1","line":12,"updated":"2024-03-19 22:34:01.000000000","message":"Update commit message. this doesn\u0027t do closures/bucketing yet, as neither castore-fs does query recursive and buffer, nor we have composition yet, so intermediate keys would not be accessible.","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ce8a52860bbc040e731cfe1de3f306cb3196a692","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This adds a Directory service using"},{"line_number":10,"context_line":"https://cloud.google.com/bigtable/docs/ as a K/V store."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Directory (closures) are put in individual keys."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7fada45bf386a78b7ec93be38c5f03879a2a6e22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"52f9be08_553c80c3","line":12,"in_reply_to":"9237bfa2_4400b7e1","updated":"2024-03-29 14:39:57.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"}],"tvix/castore/src/directoryservice/bigtable.rs":[{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9ad4f77c13736b287a652ea53ecfbd936d3982bb","unresolved":true,"context_lines":[{"line_number":103,"context_line":"        if response.len() !\u003d 1 {"},{"line_number":104,"context_line":"            if response.len() \u003e 1 {"},{"line_number":105,"context_line":"                // This shouldn\u0027t happen, we limit number of rows to 1"},{"line_number":106,"context_line":"                panic!(\"got more than 1 result!\");"},{"line_number":107,"context_line":"            }"},{"line_number":108,"context_line":"            // else, this is simply a \"not found\"."},{"line_number":109,"context_line":"            return Ok(None);"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"51ecfe83_6e276f56","line":106,"updated":"2024-03-20 12:07:09.000000000","message":"report a storage \"\"inconsistency\"\"","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"c305f41b156711b7437d2adb26babd4580b49220","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        if response.len() !\u003d 1 {"},{"line_number":104,"context_line":"            if response.len() \u003e 1 {"},{"line_number":105,"context_line":"                // This shouldn\u0027t happen, we limit number of rows to 1"},{"line_number":106,"context_line":"                panic!(\"got more than 1 result!\");"},{"line_number":107,"context_line":"            }"},{"line_number":108,"context_line":"            // else, this is simply a \"not found\"."},{"line_number":109,"context_line":"            return Ok(None);"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"544187ff_ab8366ba","line":106,"in_reply_to":"51ecfe83_6e276f56","updated":"2024-03-31 16:19:08.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9ad4f77c13736b287a652ea53ecfbd936d3982bb","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        }"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        let (row_key, mut row_cells) \u003d response.pop().unwrap();"},{"line_number":113,"context_line":"        assert!(row_key \u003d\u003d directory_key.as_bytes(), \"row key must match\");"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if let Some(row_cell) \u003d row_cells.pop() {"},{"line_number":116,"context_line":"            // Ensure there\u0027s only one cell. We filter out others above."}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"aca5c8c5_902084b5","line":113,"updated":"2024-03-20 12:07:09.000000000","message":"`debug_assert!` or report error to caller?","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"c305f41b156711b7437d2adb26babd4580b49220","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        }"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        let (row_key, mut row_cells) \u003d response.pop().unwrap();"},{"line_number":113,"context_line":"        assert!(row_key \u003d\u003d directory_key.as_bytes(), \"row key must match\");"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if let Some(row_cell) \u003d row_cells.pop() {"},{"line_number":116,"context_line":"            // Ensure there\u0027s only one cell. We filter out others above."}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"c2670434_c85ea071","line":113,"in_reply_to":"aca5c8c5_902084b5","updated":"2024-03-31 16:19:08.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9ad4f77c13736b287a652ea53ecfbd936d3982bb","unresolved":true,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if let Some(row_cell) \u003d row_cells.pop() {"},{"line_number":116,"context_line":"            // Ensure there\u0027s only one cell. We filter out others above."},{"line_number":117,"context_line":"            assert!(row_cells.is_empty(), \"only one cell allowed\");"},{"line_number":118,"context_line":"            // We also require the qualifier to be correct in the filter above."},{"line_number":119,"context_line":"            assert_eq!("},{"line_number":120,"context_line":"                directory_key.as_bytes(),"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"bfe67b2c_41d04c9b","line":117,"updated":"2024-03-20 12:07:09.000000000","message":"same as above","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"c305f41b156711b7437d2adb26babd4580b49220","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if let Some(row_cell) \u003d row_cells.pop() {"},{"line_number":116,"context_line":"            // Ensure there\u0027s only one cell. We filter out others above."},{"line_number":117,"context_line":"            assert!(row_cells.is_empty(), \"only one cell allowed\");"},{"line_number":118,"context_line":"            // We also require the qualifier to be correct in the filter above."},{"line_number":119,"context_line":"            assert_eq!("},{"line_number":120,"context_line":"                directory_key.as_bytes(),"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"0d0e6737_921b8abb","line":117,"in_reply_to":"bfe67b2c_41d04c9b","updated":"2024-03-31 16:19:08.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9ad4f77c13736b287a652ea53ecfbd936d3982bb","unresolved":true,"context_lines":[{"line_number":116,"context_line":"            // Ensure there\u0027s only one cell. We filter out others above."},{"line_number":117,"context_line":"            assert!(row_cells.is_empty(), \"only one cell allowed\");"},{"line_number":118,"context_line":"            // We also require the qualifier to be correct in the filter above."},{"line_number":119,"context_line":"            assert_eq!("},{"line_number":120,"context_line":"                directory_key.as_bytes(),"},{"line_number":121,"context_line":"                \u0026row_cell.qualifier,"},{"line_number":122,"context_line":"                \"Unexpected qualifier\""}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"deec2164_df8c4840","line":119,"updated":"2024-03-20 12:07:09.000000000","message":"same as above","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"c305f41b156711b7437d2adb26babd4580b49220","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            // Ensure there\u0027s only one cell. We filter out others above."},{"line_number":117,"context_line":"            assert!(row_cells.is_empty(), \"only one cell allowed\");"},{"line_number":118,"context_line":"            // We also require the qualifier to be correct in the filter above."},{"line_number":119,"context_line":"            assert_eq!("},{"line_number":120,"context_line":"                directory_key.as_bytes(),"},{"line_number":121,"context_line":"                \u0026row_cell.qualifier,"},{"line_number":122,"context_line":"                \"Unexpected qualifier\""}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"dc437afd_3a6ef812","line":119,"in_reply_to":"deec2164_df8c4840","updated":"2024-03-31 16:19:08.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9ad4f77c13736b287a652ea53ecfbd936d3982bb","unresolved":true,"context_lines":[{"line_number":159,"context_line":"            .map_err(|e| Error::InvalidRequest(format!(\"directory is invalid: {}\", e)))?;"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        let data \u003d directory.encode_to_vec();"},{"line_number":162,"context_line":"        if data.len() \u003e 10 * 1024 * 1024 {"},{"line_number":163,"context_line":"            return Err(Error::StorageError("},{"line_number":164,"context_line":"                \"Directory exceeds cell limit on Bigtable\".into(),"},{"line_number":165,"context_line":"            ));"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"4a74c539_a89326db","line":162,"updated":"2024-03-20 12:07:09.000000000","message":"i\u0027d like a constant","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ce8a52860bbc040e731cfe1de3f306cb3196a692","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            .map_err(|e| Error::InvalidRequest(format!(\"directory is invalid: {}\", e)))?;"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        let data \u003d directory.encode_to_vec();"},{"line_number":162,"context_line":"        if data.len() \u003e 10 * 1024 * 1024 {"},{"line_number":163,"context_line":"            return Err(Error::StorageError("},{"line_number":164,"context_line":"                \"Directory exceeds cell limit on Bigtable\".into(),"},{"line_number":165,"context_line":"            ));"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"34c90afc_bf16093f","line":162,"in_reply_to":"4a74c539_a89326db","updated":"2024-03-29 14:39:57.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9ad4f77c13736b287a652ea53ecfbd936d3982bb","unresolved":true,"context_lines":[{"line_number":185,"context_line":"                            bigtable_v2::mutation::SetCell {"},{"line_number":186,"context_line":"                                family_name: self.family_name.clone(),"},{"line_number":187,"context_line":"                                column_qualifier: directory_key.clone().into(),"},{"line_number":188,"context_line":"                                timestamp_micros: -1,"},{"line_number":189,"context_line":"                                value: data,"},{"line_number":190,"context_line":"                            },"},{"line_number":191,"context_line":"                        )),"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"92715471_a9ffbe1f","line":188,"updated":"2024-03-20 12:07:09.000000000","message":"why: please add a comment","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ce8a52860bbc040e731cfe1de3f306cb3196a692","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                            bigtable_v2::mutation::SetCell {"},{"line_number":186,"context_line":"                                family_name: self.family_name.clone(),"},{"line_number":187,"context_line":"                                column_qualifier: directory_key.clone().into(),"},{"line_number":188,"context_line":"                                timestamp_micros: -1,"},{"line_number":189,"context_line":"                                value: data,"},{"line_number":190,"context_line":"                            },"},{"line_number":191,"context_line":"                        )),"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"80163446_aaec470d","line":188,"in_reply_to":"92715471_a9ffbe1f","updated":"2024-03-29 14:39:57.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"44c34a3cac5ca6871f2293d0cdac786dec5bfbf9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"77f42364_9e6eb7b8","line":221,"updated":"2024-03-19 22:19:09.000000000","message":"TODO: do some tests with cbtemulator.","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ce8a52860bbc040e731cfe1de3f306cb3196a692","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d7260531_8823e976","line":221,"in_reply_to":"77f42364_9e6eb7b8","updated":"2024-03-29 14:39:57.000000000","message":"Done","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"ca75ccf9d7f7ad8b49c2d95f4ef030bf48841d5f","unresolved":true,"context_lines":[{"line_number":19,"context_line":"/// # Data format"},{"line_number":20,"context_line":"/// We use Bigtable as a plain K/V store."},{"line_number":21,"context_line":"/// The row key is the digest of the directory, in hexlower."},{"line_number":22,"context_line":"/// Inside the row, we currently have a single column/cell, again using the"},{"line_number":23,"context_line":"/// hexlower directory digest."},{"line_number":24,"context_line":"/// Its value is the Directory message, serialized in canonical protobuf."},{"line_number":25,"context_line":"/// We currently only populate this column."}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"912060e7_a2f2364c","line":22,"updated":"2024-03-20 15:55:23.000000000","message":"If we include the digest in the row key, why do we need to also include it in the column? I think a static column name might suffice","commit_id":"b0b8f3b8758a86fa04fd24a88fa26a2d6642df38"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"f91c6a1bd398d3ea616a7e4186d8a56c46fd2d23","unresolved":false,"context_lines":[{"line_number":19,"context_line":"/// # Data format"},{"line_number":20,"context_line":"/// We use Bigtable as a plain K/V store."},{"line_number":21,"context_line":"/// The row key is the digest of the directory, in hexlower."},{"line_number":22,"context_line":"/// Inside the row, we currently have a single column/cell, again using the"},{"line_number":23,"context_line":"/// hexlower directory digest."},{"line_number":24,"context_line":"/// Its value is the Directory message, serialized in canonical protobuf."},{"line_number":25,"context_line":"/// We currently only populate this column."}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"8d3c1547_5c233ae0","line":22,"in_reply_to":"2db0f21e_cb56d67f","updated":"2024-04-01 16:00:50.000000000","message":"Chatted with someone more familiar with BigTable and they don\u0027t think this will cause problems. I think this schema makes sense.","commit_id":"b0b8f3b8758a86fa04fd24a88fa26a2d6642df38"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ce8a52860bbc040e731cfe1de3f306cb3196a692","unresolved":true,"context_lines":[{"line_number":19,"context_line":"/// # Data format"},{"line_number":20,"context_line":"/// We use Bigtable as a plain K/V store."},{"line_number":21,"context_line":"/// The row key is the digest of the directory, in hexlower."},{"line_number":22,"context_line":"/// Inside the row, we currently have a single column/cell, again using the"},{"line_number":23,"context_line":"/// hexlower directory digest."},{"line_number":24,"context_line":"/// Its value is the Directory message, serialized in canonical protobuf."},{"line_number":25,"context_line":"/// We currently only populate this column."}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"2db0f21e_cb56d67f","line":22,"in_reply_to":"912060e7_a2f2364c","updated":"2024-03-29 14:39:57.000000000","message":"The idea was that once we do bucketing, there\u0027ll be more columns, one for each directory, each keyed with its individual digest. Or is this a problem cardinality-wise?","commit_id":"b0b8f3b8758a86fa04fd24a88fa26a2d6642df38"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"66c16019fe61002ab3f4640a7914638acec3f2af","unresolved":true,"context_lines":[{"line_number":105,"context_line":"            // filter out all but the cell with a qualifier matching our digest."},{"line_number":106,"context_line":"            // This is to ensure we don\u0027t fail once we start bucketing."},{"line_number":107,"context_line":"            filter: Some(bigtable_v2::RowFilter {"},{"line_number":108,"context_line":"                filter: Some(bigtable_v2::row_filter::Filter::ColumnQualifierRegexFilter("},{"line_number":109,"context_line":"                    directory_key.clone().into(),"},{"line_number":110,"context_line":"                )),"},{"line_number":111,"context_line":"            }),"}],"source_content_type":"text/x-rustsrc","patch_set":12,"id":"f2f7881a_143eff5f","line":108,"updated":"2024-04-05 16:24:32.000000000","message":"We still need to filter by family here too.","commit_id":"0b83ad79712157529ad28716c00fe18a26c00465"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"02995850ff574d674a08f5947b2a6477f047027e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            // filter out all but the cell with a qualifier matching our digest."},{"line_number":106,"context_line":"            // This is to ensure we don\u0027t fail once we start bucketing."},{"line_number":107,"context_line":"            filter: Some(bigtable_v2::RowFilter {"},{"line_number":108,"context_line":"                filter: Some(bigtable_v2::row_filter::Filter::ColumnQualifierRegexFilter("},{"line_number":109,"context_line":"                    directory_key.clone().into(),"},{"line_number":110,"context_line":"                )),"},{"line_number":111,"context_line":"            }),"}],"source_content_type":"text/x-rustsrc","patch_set":12,"id":"f86cca77_f8a39564","line":108,"in_reply_to":"f2f7881a_143eff5f","updated":"2024-04-05 23:15:58.000000000","message":"Done","commit_id":"0b83ad79712157529ad28716c00fe18a26c00465"}],"tvix/castore/src/directoryservice/from_addr.rs":[{"author":{"_account_id":1000073,"name":"raitobezarius","display_name":"Ryan Lahfa","email":"tvl@lahfa.xyz","username":"raitobezarius"},"change_message_id":"9ad4f77c13736b287a652ea53ecfbd936d3982bb","unresolved":true,"context_lines":[{"line_number":67,"context_line":"            use super::BigtableDirectoryService;"},{"line_number":68,"context_line":"            use std::{borrow::Cow, collections::HashMap, time::Duration};"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            let query_pairs: HashMap\u003cCow\u003cstr\u003e, Cow\u003cstr\u003e\u003e \u003d url.query_pairs().collect();"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            let project_id \u003d query_pairs"},{"line_number":73,"context_line":"                .get(\"project-id\")"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"6a7ce109_29f919f3","line":70,"range":{"start_line":70,"start_character":63,"end_line":70,"end_character":74},"updated":"2024-03-20 12:07:09.000000000","message":"long term: see `query_pairs()` as a structure to deserialize over something like serde","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"a6110bf0d861ecd79c87fd762290ee96e2456feb","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            use super::BigtableDirectoryService;"},{"line_number":68,"context_line":"            use std::{borrow::Cow, collections::HashMap, time::Duration};"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            let query_pairs: HashMap\u003cCow\u003cstr\u003e, Cow\u003cstr\u003e\u003e \u003d url.query_pairs().collect();"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            let project_id \u003d query_pairs"},{"line_number":73,"context_line":"                .get(\"project-id\")"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"e6e3621d_5c6e1394","line":70,"range":{"start_line":70,"start_character":63,"end_line":70,"end_character":74},"in_reply_to":"4cfa950a_7091d551","updated":"2024-04-07 14:36:59.000000000","message":"I now ended up implementing this as well, making other things configurable where I still had TODOs in the code too.","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"c305f41b156711b7437d2adb26babd4580b49220","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            use super::BigtableDirectoryService;"},{"line_number":68,"context_line":"            use std::{borrow::Cow, collections::HashMap, time::Duration};"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            let query_pairs: HashMap\u003cCow\u003cstr\u003e, Cow\u003cstr\u003e\u003e \u003d url.query_pairs().collect();"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            let project_id \u003d query_pairs"},{"line_number":73,"context_line":"                .get(\"project-id\")"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"4cfa950a_7091d551","line":70,"range":{"start_line":70,"start_character":63,"end_line":70,"end_character":74},"in_reply_to":"6a7ce109_29f919f3","updated":"2024-03-31 16:19:08.000000000","message":"Acknowledged, but out of scope for this CL.","commit_id":"27b88840d0c5d769bee0e78f2c7f7a02d2f07d13"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"ca75ccf9d7f7ad8b49c2d95f4ef030bf48841d5f","unresolved":true,"context_lines":[{"line_number":73,"context_line":"                .get(\"project-id\")"},{"line_number":74,"context_line":"                .ok_or_else(|| Error::StorageError(\"project-id parameter missing\".into()))?;"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"            // TODO: should instance_name be the hostname of the URL instead?"},{"line_number":77,"context_line":"            let instance_name \u003d query_pairs"},{"line_number":78,"context_line":"                .get(\"instance-name\")"},{"line_number":79,"context_line":"                .ok_or_else(|| Error::StorageError(\"instance-name parameter missing\".into()))?;"}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"f7c358d4_31c2db36","line":76,"updated":"2024-03-20 15:55:23.000000000","message":"This sounds reasonable to me","commit_id":"b0b8f3b8758a86fa04fd24a88fa26a2d6642df38"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ce8a52860bbc040e731cfe1de3f306cb3196a692","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                .get(\"project-id\")"},{"line_number":74,"context_line":"                .ok_or_else(|| Error::StorageError(\"project-id parameter missing\".into()))?;"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"            // TODO: should instance_name be the hostname of the URL instead?"},{"line_number":77,"context_line":"            let instance_name \u003d query_pairs"},{"line_number":78,"context_line":"                .get(\"instance-name\")"},{"line_number":79,"context_line":"                .ok_or_else(|| Error::StorageError(\"instance-name parameter missing\".into()))?;"}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"caa4eb45_9ca1cb16","line":76,"in_reply_to":"f7c358d4_31c2db36","updated":"2024-03-29 14:39:57.000000000","message":"Updated. I think it\u0027s fine if we don\u0027t have the endpoint here, but use `BIGTABLE_EMULATOR_HOST` env var for this instead.","commit_id":"b0b8f3b8758a86fa04fd24a88fa26a2d6642df38"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"f91c6a1bd398d3ea616a7e4186d8a56c46fd2d23","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                .ok_or_else(|| Error::StorageError(\"table-name parameter missing\".into()))?;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            let family_name \u003d query_pairs"},{"line_number":85,"context_line":"                .get(\"family-name\")"},{"line_number":86,"context_line":"                .ok_or_else(|| Error::StorageError(\"family-name parameter missing\".into()))?;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            // FUTUREWORK: make is_read_only, channel_size and timeout configurable"}],"source_content_type":"text/x-rustsrc","patch_set":9,"id":"26a09444_7eaf8b1c","line":85,"updated":"2024-04-01 16:00:50.000000000","message":"Do we need to make the family-name configurable? Not sure when this would be valuable.","commit_id":"54da9b5e699b0af5bf853641a6220be7a06270e5"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"f0b42bf0bbdb116a16ff31a2da24b41dbf38a6bc","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                .ok_or_else(|| Error::StorageError(\"table-name parameter missing\".into()))?;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            let family_name \u003d query_pairs"},{"line_number":85,"context_line":"                .get(\"family-name\")"},{"line_number":86,"context_line":"                .ok_or_else(|| Error::StorageError(\"family-name parameter missing\".into()))?;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            // FUTUREWORK: make is_read_only, channel_size and timeout configurable"}],"source_content_type":"text/x-rustsrc","patch_set":9,"id":"2acce665_6e0432c9","line":85,"in_reply_to":"26a09444_7eaf8b1c","updated":"2024-04-02 14:51:55.000000000","message":"We can also set this to a constant, which value should that constant have?","commit_id":"54da9b5e699b0af5bf853641a6220be7a06270e5"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"d6e3b03983b83f93e79a7161d002d0a3765e9b7e","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                .ok_or_else(|| Error::StorageError(\"table-name parameter missing\".into()))?;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            let family_name \u003d query_pairs"},{"line_number":85,"context_line":"                .get(\"family-name\")"},{"line_number":86,"context_line":"                .ok_or_else(|| Error::StorageError(\"family-name parameter missing\".into()))?;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            // FUTUREWORK: make is_read_only, channel_size and timeout configurable"}],"source_content_type":"text/x-rustsrc","patch_set":9,"id":"c37a4bf6_f7496dc5","line":85,"in_reply_to":"2acce665_6e0432c9","updated":"2024-04-05 13:30:51.000000000","message":"Both the table name and family name is something the user configures in the cloud console / through the API, so I feel like these should be parameters.","commit_id":"54da9b5e699b0af5bf853641a6220be7a06270e5"},{"author":{"_account_id":1000085,"name":"Connor Brewster","display_name":"cbrewster","email":"cbrewster@hey.com","username":"cbrewster"},"change_message_id":"6e97fe9945463396f84c4a7696ca4908a6e5d5c5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                .ok_or_else(|| Error::StorageError(\"table-name parameter missing\".into()))?;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            let family_name \u003d query_pairs"},{"line_number":85,"context_line":"                .get(\"family-name\")"},{"line_number":86,"context_line":"                .ok_or_else(|| Error::StorageError(\"family-name parameter missing\".into()))?;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            // FUTUREWORK: make is_read_only, channel_size and timeout configurable"}],"source_content_type":"text/x-rustsrc","patch_set":9,"id":"f3bcf3fa_cb345284","line":85,"in_reply_to":"c37a4bf6_f7496dc5","updated":"2024-04-05 13:33:39.000000000","message":"Ah I see, this is probably fine as is then","commit_id":"54da9b5e699b0af5bf853641a6220be7a06270e5"}]}
