diff --git a/Cargo.lock b/Cargo.lock index b1e65c64a9..f0d892de90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -75,10 +75,22 @@ dependencies = [ ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "android_log-sys" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" + +[[package]] +name = "android_logger" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037f3e1da32ddba7770530e69258b742c15ad67bdf90e5f6b35f4b6db9a60eb7" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] [[package]] name = "android_system_properties" @@ -530,11 +542,10 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", @@ -931,6 +942,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "dashmap" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if", + "num_cpus", +] + [[package]] name = "deflate64" version = "0.1.9" @@ -1784,18 +1805,58 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "glean" +version = "68.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49ba23a9a7033babcc5408965a70391fdc7b658342952b587a606941da5522a1" +dependencies = [ + "crossbeam-channel", + "glean-core", + "inherent", + "log", + "once_cell", + "whatsys", + "wr_malloc_size_of", +] + [[package]] name = "glean-build" version = "20.0.0" -source = "git+https://github.com/mozilla/glean?tag=v68.0.0#3b00f26c4814a47044c6736563ee7589dfa3b399" +source = "git+https://github.com/mozilla/glean?tag=v68.0.1#92ecd18105fd2936e11936da749183369a491580" dependencies = [ "xshell-venv", ] +[[package]] +name = "glean-core" +version = "68.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad39d9ef6e8eb79d23385a5cd57529d48995ad6c159b071421eb5204331d877" +dependencies = [ + "android_logger", + "bincode", + "chrono", + "crossbeam-channel", + "flate2", + "log", + "malloc_size_of_derive", + "once_cell", + "oslog", + "rkv", + "serde", + "serde_json", + "thiserror 2.0.3", + "uniffi", + "uuid", + "wr_malloc_size_of", + "zeitstempel", +] + [[package]] name = "glean-sym" version = "0.1.0" -source = "git+https://github.com/mozilla/glean?tag=v68.0.0#3b00f26c4814a47044c6736563ee7589dfa3b399" +source = "git+https://github.com/mozilla/glean?tag=v68.0.1#92ecd18105fd2936e11936da749183369a491580" dependencies = [ "libloading", "once_cell", @@ -2248,6 +2309,17 @@ dependencies = [ "web-time", ] +[[package]] +name = "inherent" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "init_rust_components" version = "0.1.0" @@ -2595,6 +2667,17 @@ dependencies = [ "libc", ] +[[package]] +name = "malloc_size_of_derive" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f44db74bde26fdf427af23f1d146c211aed857c59e3be750cf2617f6b0b05c94" +dependencies = [ + "proc-macro2", + "syn 2.0.106", + "synstructure", +] + [[package]] name = "matchit" version = "0.7.0" @@ -3110,7 +3193,7 @@ dependencies = [ "serde", "serde_derive", "thiserror 2.0.3", - "toml 0.5.9", + "toml 0.9.6", ] [[package]] @@ -3211,6 +3294,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "oslog" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8343ce955f18e7e68c0207dd0ea776ec453035685395ababd2ea651c569728b3" +dependencies = [ + "cc", + "dashmap", + "log", +] + [[package]] name = "parking_lot" version = "0.12.1" @@ -3311,6 +3405,7 @@ dependencies = [ "bitflags 1.3.2", "dogear", "error-support", + "glean", "glean-build", "glean-sym", "icu_casemap", @@ -3761,12 +3856,14 @@ dependencies = [ "id-arena", "lazy_static", "log", + "malloc_size_of_derive", "ordered-float", "serde", "serde_derive", "thiserror 2.0.3", "url", "uuid", + "wr_malloc_size_of", ] [[package]] @@ -5372,6 +5469,17 @@ dependencies = [ "nom", ] +[[package]] +name = "whatsys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "192bcd2925a9791ba474bc673938f8c59b8978b3f304ef2c50672156bacf943b" +dependencies = [ + "cc", + "cfg-if", + "libc", +] + [[package]] name = "whoami" version = "1.5.0" @@ -5425,9 +5533,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" @@ -5686,6 +5794,15 @@ dependencies = [ "bitflags 2.11.0", ] +[[package]] +name = "wr_malloc_size_of" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "482308b684f11723b200a32808094bb460b5ac4840903ccbcb78ad92a6354a1f" +dependencies = [ + "once_cell", +] + [[package]] name = "writeable" version = "0.6.1" @@ -5804,6 +5921,18 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeitstempel" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7082d20989e6410d2d1c304c8b73fb66aa2c8f68a169b94bf31d340e85b3a4f" +dependencies = [ + "cfg-if", + "libc", + "once_cell", + "winapi", +] + [[package]] name = "zerofrom" version = "0.1.5" diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index 005430c89c..307f629094 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -57,7 +57,6 @@ The following text applies to code linked from these dependencies: [NSS](https://hg.mozilla.org/projects/nss), [ece](https://github.com/mozilla/rust-ece), [glean-build](https://github.com/mozilla/glean), -[glean-sym](https://github.com/mozilla/glean), [hawk](https://github.com/taskcluster/rust-hawk), [jexl-eval](https://github.com/mozilla/jexl-rs), [jexl-parser](https://github.com/mozilla/jexl-rs), @@ -451,7 +450,6 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice ## Apache License 2.0 The following text applies to code linked from these dependencies: -[android-tzdata](https://github.com/RumovZ/android-tzdata), [android_system_properties](https://github.com/nical/android_system_properties), [anyhow](https://github.com/dtolnay/anyhow), [askama](https://github.com/askama-rs/askama), @@ -577,7 +575,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml), @@ -599,193 +596,193 @@ The following text applies to code linked from these dependencies: [xshell](https://github.com/matklad/xshell) ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. Copyright [yyyy] [name of copyright owner] @@ -793,7 +790,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/components/places/Cargo.toml b/components/places/Cargo.toml index 0f84c2f4ea..3fce4677c7 100644 --- a/components/places/Cargo.toml +++ b/components/places/Cargo.toml @@ -7,9 +7,11 @@ license = "MPL-2.0" exclude = ["/android", "/ios"] [features] -default = ["glean-sym"] -# Enable metric recording through glean-sym (Android only) +# Enable metric recording through glean-sym (Android/iOS) +# Note: this overrides the `glean-fog` feature glean-sym = ["dep:glean-sym"] +# Use Firefox-on-Glean to publish metrics (Desktop) +glean-fog = ["dep:glean"] [dependencies] sync15 = { path = "../sync15" } @@ -34,7 +36,8 @@ sync-guid = { path = "../support/guid", features = ["rusqlite_support", "random" thiserror = "2" anyhow = "1.0" uniffi = { version = "0.31" } -glean-sym = { git = "https://github.com/mozilla/glean", tag = "v68.0.0", optional = true } +glean = { version = "68.0.1", optional = true } +glean-sym = { git = "https://github.com/mozilla/glean", tag = "v68.0.1", optional = true } [dev-dependencies] error-support = { path = "../support/error", features = ["testing"] } @@ -43,4 +46,4 @@ sql-support = { path = "../support/sql" } [build-dependencies] uniffi = { version = "0.31", features=["build"]} -glean-build = { git = "https://github.com/mozilla/glean", tag = "v68.0.0" } +glean-build = { git = "https://github.com/mozilla/glean", tag = "v68.0.1" } diff --git a/components/places/android/metrics.yaml b/components/places/android/metrics.yaml index 19000ce431..df443a88c7 100644 --- a/components/places/android/metrics.yaml +++ b/components/places/android/metrics.yaml @@ -2,124 +2,8 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -# This file defines the metrics that will be gathered for the "places" -# storage component. -# These are emitted for all users of the component. Additional metrics -# specific to the *syncing* of places are defined in a separate "sync_ping" -# package. -# -# Changes to these metrics require data review, which should take into -# consideration -# the following known consumers of the places component Android bindings: -# -# * Fenix for Android +# This file defines the metrics that are recorded by android for the places component. +# It's no longer used, but we still need to keep it around for probe-scraper reasons. --- $schema: moz://mozilla.org/schemas/glean/metrics/2-0-0 - -places_manager: - run_maintenance_time: - type: timing_distribution - description: Time taken to execute `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5115 - data_reviews: - - https://github.com/mozilla/application-services/issues/5122 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_prune_time: - type: timing_distribution - description: Time taken to execute `prune_older_visits()` inside - `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_vacuum_time: - type: timing_distribution - description: Time taken to execute `VACUUM` inside `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_optimize_time: - type: timing_distribution - description: Time taken to execute `PRAGMA optimize` inside - `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - run_maintenance_chk_pnt_time: - type: timing_distribution - description: Time taken to execute `PRAGMA_CHECKPOINT` inside - `run_maintenance()` - time_unit: millisecond - bugs: - - https://github.com/mozilla/application-services/issues/5246 - data_reviews: - - https://github.com/mozilla/application-services/issues/5247 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical - - db_size_after_maintenance: - type: memory_distribution - description: > - Size of the db after executing `run_maintenance()` - memory_unit: kilobyte - bugs: - - https://github.com/mozilla/application-services/issues/5115 - data_reviews: - - https://github.com/mozilla/application-services/issues/5122 - - https://github.com/mozilla/application-services/issues/5387 - - https://github.com/mozilla/application-services/issues/5830 - notification_emails: - - synced-client-integrations@mozilla.com - - bdk@mozilla.com - expires: "never" - data_sensitivity: - - technical diff --git a/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt b/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt index 71b10bb1f4..d6c9e5d5f0 100644 --- a/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt +++ b/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt @@ -22,6 +22,7 @@ import mozilla.appservices.places.uniffi.InsertableBookmarkItem import mozilla.appservices.places.uniffi.InsertableBookmarkSeparator import mozilla.appservices.places.uniffi.NoteHistoryMetadataObservationOptions import mozilla.appservices.places.uniffi.PlacesApiException +import mozilla.appservices.places.uniffi.RunMaintenanceOptions import mozilla.appservices.places.uniffi.SearchResult import mozilla.appservices.places.uniffi.SqlInterruptHandle import mozilla.appservices.places.uniffi.TopFrecentSiteInfo @@ -34,7 +35,6 @@ import mozilla.telemetry.glean.private.LabeledMetricType import java.lang.ref.WeakReference import mozilla.appservices.places.uniffi.PlacesApi as UniffiPlacesApi import mozilla.appservices.places.uniffi.PlacesConnection as UniffiPlacesConnection -import org.mozilla.appservices.places.GleanMetrics.PlacesManager as PlacesManagerMetrics typealias Url = String typealias Guid = String @@ -284,25 +284,12 @@ class PlacesWriterConnection internal constructor(conn: UniffiPlacesConnection, @Suppress("MagicNumber") override fun runMaintenance(dbSizeLimit: UInt) { - val pruneMetrics = PlacesManagerMetrics.runMaintenanceTime.measure { - val pruneMetrics = PlacesManagerMetrics.runMaintenancePruneTime.measure { - this.conn.runMaintenancePrune(dbSizeLimit, 12U) - } - - PlacesManagerMetrics.runMaintenanceVacuumTime.measure { - this.conn.runMaintenanceVacuum() - } - - PlacesManagerMetrics.runMaintenanceOptimizeTime.measure { - this.conn.runMaintenanceOptimize() - } - - PlacesManagerMetrics.runMaintenanceChkPntTime.measure { - this.conn.runMaintenanceCheckpoint() - } - pruneMetrics - } - PlacesManagerMetrics.dbSizeAfterMaintenance.accumulateSamples(listOf(pruneMetrics.dbSizeAfter.toLong() / 1024)) + this.conn.runMaintenance( + RunMaintenanceOptions( + dbSizeLimit = dbSizeLimit, + pruneLimit = 12U, + ), + ) } override fun deleteEverything() { diff --git a/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt b/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt index 3eedf5c5bc..fc23e8a7ea 100644 --- a/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt +++ b/components/places/android/src/test/java/mozilla/appservices/places/PlacesConnectionTest.kt @@ -34,7 +34,6 @@ import org.junit.rules.TemporaryFolder import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.mozilla.appservices.places.GleanMetrics.PlacesManager as PlacesManagerMetrics @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE) @@ -624,15 +623,6 @@ class PlacesConnectionTest { } } - @Test - fun testRunMaintenanceMetrics() { - assertNull(PlacesManagerMetrics.runMaintenanceTime.testGetValue()) - assertNull(PlacesManagerMetrics.dbSizeAfterMaintenance.testGetValue()) - db.runMaintenance() - assertEquals(1, PlacesManagerMetrics.runMaintenanceTime.testGetValue()!!.values.values.sum()) - assertEquals(1, PlacesManagerMetrics.dbSizeAfterMaintenance.testGetValue()!!.values.values.sum()) - } - @Test fun testRegisterWithSyncmanager() { val syncManager = SyncManager() diff --git a/components/places/build.rs b/components/places/build.rs index 8f231c5e76..c407a10a0b 100644 --- a/components/places/build.rs +++ b/components/places/build.rs @@ -2,19 +2,23 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use glean_build::Builder; - fn main() { uniffi::generate_scaffolding("./src/places.udl").unwrap(); + build_metrics(); +} + +fn build_metrics() { + let format = if cfg!(feature = "glean-sym") { + "rust_sym" + } else if cfg!(feature = "glean-fog") { + "rust" + } else { + return; + }; - if let Ok("android" | "ios") = std::env::var("CARGO_CFG_TARGET_OS") - .as_ref() - .map(String::as_str) - { - Builder::default() - .file("metrics.yaml") - .format("rust_sym") - .generate() - .expect("Error generating Glean Rust bindings"); - } + glean_build::Builder::default() + .file("metrics.yaml") + .format(format) + .generate() + .expect("Error generating Glean Rust bindings"); } diff --git a/components/places/metrics.yaml b/components/places/metrics.yaml index 7bae8dc224..d643ecfef9 100644 --- a/components/places/metrics.yaml +++ b/components/places/metrics.yaml @@ -6,109 +6,113 @@ $schema: moz://mozilla.org/schemas/glean/metrics/2-0-0 places_manager: - connection_initialized: - type: counter - description: | - Number of times a `PlacesConnection` was initialized. + run_maintenance_time: + type: timing_distribution + description: Time taken to execute `run_maintenance()` + time_unit: millisecond bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 + - https://github.com/mozilla/application-services/issues/5115 data_reviews: - - https://github.com/mozilla/application-services/pull/7336 + - https://github.com/mozilla/application-services/issues/5122 + - https://github.com/mozilla/application-services/issues/5387 + - https://github.com/mozilla/application-services/issues/5830 notification_emails: - - jrediger@mozilla.com - expires: 2026-11-13 + - synced-client-integrations@mozilla.com + - bdk@mozilla.com + expires: "never" data_sensitivity: - technical + no_lint: [COMMON_PREFIX] - run_maintenance_prune_time_temp: + run_maintenance_prune_time: type: timing_distribution description: | Time taken to execute `prune_older_visits()` inside `run_maintenance()` - - Duplication of `run_maintenance_prune_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" data_sensitivity: - technical no_lint: [COMMON_PREFIX] - run_maintenance_vacuum_time_temp: + run_maintenance_vacuum_time: type: timing_distribution description: | Time taken to execute `VACUUM` inside `run_maintenance()` - - Duplication of `run_maintenance_vacuum_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" data_sensitivity: - technical + no_lint: [COMMON_PREFIX] - run_maintenance_optimize_time_temp: + run_maintenance_optimize_time: type: timing_distribution description: | Time taken to execute `PRAGMA optimize` inside `run_maintenance()` - - Duplication of `run_maintenance_optimize_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" data_sensitivity: - technical + no_lint: [COMMON_PREFIX] - run_maintenance_chk_pnt_time_temp: + run_maintenance_chk_pnt_time: type: timing_distribution description: | Time taken to execute `PRAGMA_CHECKPOINT` inside `run_maintenance()` - - Duplication of `run_maintenance_chk_pnt_time` for glean-sym testing. time_unit: millisecond bugs: - https://github.com/mozilla/application-services/issues/5246 - - https://bugzilla.mozilla.org/show_bug.cgi?id=2034534 data_reviews: - https://github.com/mozilla/application-services/issues/5247 - https://github.com/mozilla/application-services/issues/5387 - https://github.com/mozilla/application-services/issues/5830 - - https://github.com/mozilla/application-services/pull/7336 notification_emails: - synced-client-integrations@mozilla.com - bdk@mozilla.com - - jrediger@mozilla.com - expires: 2026-11-13 + expires: "never" + data_sensitivity: + - technical + no_lint: [COMMON_PREFIX] + db_size_after_maintenance: + type: memory_distribution + description: > + Size of the db after executing `run_maintenance()` + memory_unit: kilobyte + bugs: + - https://github.com/mozilla/application-services/issues/5115 + data_reviews: + - https://github.com/mozilla/application-services/issues/5122 + - https://github.com/mozilla/application-services/issues/5387 + - https://github.com/mozilla/application-services/issues/5830 + notification_emails: + - synced-client-integrations@mozilla.com + - bdk@mozilla.com + expires: "never" data_sensitivity: - technical diff --git a/components/places/src/ffi.rs b/components/places/src/ffi.rs index 6ae96e5411..8eba35891c 100644 --- a/components/places/src/ffi.rs +++ b/components/places/src/ffi.rs @@ -8,8 +8,8 @@ use crate::api::matcher::{self, search_frecent, SearchParams}; pub use crate::api::places_api::places_api_new; pub use crate::error::{warn, Result}; pub use crate::error::{ApiResult, PlacesApiError}; -#[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] -use crate::glean_metrics::places_manager; +#[cfg(any(feature = "glean-sym", feature = "glean-fog"))] +use crate::glean_metrics; pub use crate::import::common::HistoryMigrationResult; use crate::import::import_ios_history; use crate::storage; @@ -20,7 +20,6 @@ pub use crate::storage::history_metadata::{ HistoryMetadataObservation, HistoryMetadataPageMissingBehavior, NoteHistoryMetadataObservationOptions, }; -pub use crate::storage::RunMaintenanceMetrics; use crate::storage::{history, history_metadata}; use crate::types::VisitTransitionSet; use crate::ConnectionType; @@ -113,9 +112,6 @@ pub struct PlacesConnection { impl PlacesConnection { pub fn new(db: PlacesDb) -> Self { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::connection_initialized.add(1); - Self { interrupt_handle: db.new_interrupt_handle(), db: Mutex::new(db), @@ -384,55 +380,55 @@ impl PlacesConnection { } #[handle_error(crate::Error)] - pub fn run_maintenance_prune( - &self, - db_size_limit: u32, - prune_limit: u32, - ) -> ApiResult { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_prune_time_temp.start(); - let res = - self.with_conn(|conn| storage::run_maintenance_prune(conn, db_size_limit, prune_limit)); + pub fn run_maintenance(&self, options: RunMaintenanceOptions) -> ApiResult<()> { + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + let timer_id = glean_metrics::places_manager::run_maintenance_time.start(); + + self.run_maintenance_prune(options.db_size_limit, options.prune_limit)?; + self.run_maintenance_vacuum()?; + self.run_maintenance_optimize()?; + self.run_maintenance_checkpoint()?; + + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + glean_metrics::places_manager::run_maintenance_time.stop_and_accumulate(timer_id); - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_prune_time_temp.stop_and_accumulate(timer_id); + Ok(()) + } + fn run_maintenance_prune(&self, db_size_limit: u32, prune_limit: u32) -> Result<()> { + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + let timer_id = glean_metrics::places_manager::run_maintenance_prune_time.start(); + let res = + self.with_conn(|conn| storage::run_maintenance_prune(conn, db_size_limit, prune_limit)); + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + glean_metrics::places_manager::run_maintenance_prune_time.stop_and_accumulate(timer_id); res } - #[handle_error(crate::Error)] - pub fn run_maintenance_vacuum(&self) -> ApiResult<()> { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_vacuum_time_temp.start(); + fn run_maintenance_vacuum(&self) -> Result<()> { + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + let timer_id = glean_metrics::places_manager::run_maintenance_vacuum_time.start(); let res = self.with_conn(storage::run_maintenance_vacuum); - - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_vacuum_time_temp.stop_and_accumulate(timer_id); - + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + glean_metrics::places_manager::run_maintenance_vacuum_time.stop_and_accumulate(timer_id); res } - #[handle_error(crate::Error)] - pub fn run_maintenance_optimize(&self) -> ApiResult<()> { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_optimize_time_temp.start(); - let res = self.with_conn(storage::run_maintenance_optimize); - - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_optimize_time_temp.stop_and_accumulate(timer_id); - - res + fn run_maintenance_optimize(&self) -> Result<()> { + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + let timer_id = glean_metrics::places_manager::run_maintenance_optimize_time.start(); + self.with_conn(storage::run_maintenance_optimize)?; + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + glean_metrics::places_manager::run_maintenance_optimize_time.stop_and_accumulate(timer_id); + Ok(()) } - #[handle_error(crate::Error)] - pub fn run_maintenance_checkpoint(&self) -> ApiResult<()> { - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - let timer_id = places_manager::run_maintenance_chk_pnt_time_temp.start(); + fn run_maintenance_checkpoint(&self) -> Result<()> { + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + let timer_id = glean_metrics::places_manager::run_maintenance_chk_pnt_time.start(); let res = self.with_conn(storage::run_maintenance_checkpoint); - - #[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] - places_manager::run_maintenance_chk_pnt_time_temp.stop_and_accumulate(timer_id); - + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + glean_metrics::places_manager::run_maintenance_chk_pnt_time.stop_and_accumulate(timer_id); res } @@ -623,6 +619,11 @@ pub struct Dummy { pub md: Option>, } +pub struct RunMaintenanceOptions { + pub db_size_limit: u32, + pub prune_limit: u32, +} + #[cfg(test)] mod tests { use super::*; diff --git a/components/places/src/lib.rs b/components/places/src/lib.rs index 2dc0423433..ff3a5cab50 100644 --- a/components/places/src/lib.rs +++ b/components/places/src/lib.rs @@ -38,8 +38,7 @@ pub use crate::types::*; pub use ffi::*; -#[cfg(all(feature = "glean-sym", any(target_os = "android", target_os = "ios")))] -#[allow(clippy::all)] // Don't lint generated code. +#[cfg(any(feature = "glean-sym", feature = "glean-fog"))] pub mod glean_metrics { include!(concat!(env!("OUT_DIR"), "/glean_metrics.rs")); } diff --git a/components/places/src/places.udl b/components/places/src/places.udl index dff00c40ac..68557c0b2c 100644 --- a/components/places/src/places.udl +++ b/components/places/src/places.udl @@ -123,46 +123,11 @@ interface PlacesConnection { [Throws=PlacesApiError] void delete_everything_history(); - /// Run maintenance on the places DB (prune step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). - /// - /// db_size_limit is the approximate storage limit in bytes. If the database is using more space - /// than this, some older visits will be deleted to free up space. Pass in a 0 to skip this. - /// - /// prune_limit is the maximum number of visits to prune if the database is over db_size_limit - [Throws=PlacesApiError] - RunMaintenanceMetrics run_maintenance_prune(u32 db_size_limit, u32 prune_limit); - - /// Run maintenance on the places DB (vacuum step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). - [Throws=PlacesApiError] - void run_maintenance_vacuum(); - - /// Run maintenance on the places DB (optimize step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). - [Throws=PlacesApiError] - void run_maintenance_optimize(); - - /// Run maintenance on the places DB (checkpoint step) - /// - /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps - /// to clean up / shrink the database. They're split up so that we can time each one in the - /// Kotlin wrapper code (This is needed because we only have access to the Glean API in Kotlin and - /// it supports a stop-watch style API, not recording specific values). + // Run maintenance on the places DB (prune step) + // + // This is intended to be run during idle time and will take steps / to clean up / shrink the database. [Throws=PlacesApiError] - void run_maintenance_checkpoint(); + void run_maintenance(RunMaintenanceOptions options); [Throws=PlacesApiError] BookmarkItem? bookmarks_get_tree([ByRef] Guid item_guid); @@ -218,12 +183,6 @@ enum FrecencyThresholdOption { "SkipOneTimePages", }; -dictionary RunMaintenanceMetrics { - boolean pruned_visits; - u32 db_size_before; - u32 db_size_after; -}; - dictionary SearchResult { Url url; string title; @@ -455,3 +414,11 @@ interface InsertableBookmarkItem { Folder(InsertableBookmarkFolder f); Separator(InsertableBookmarkSeparator s); }; + +dictionary RunMaintenanceOptions { + /// db_size_limit is the approximate storage limit in bytes. If the database is using more space + /// than this, some older visits will be deleted to free up space. Pass in a 0 to skip this. + u32 db_size_limit; + /// Maximum number of visits to prune in one pass + u32 prune_limit = 12; +}; diff --git a/components/places/src/storage/mod.rs b/components/places/src/storage/mod.rs index 5b79a5a6d5..3aaf05e305 100644 --- a/components/places/src/storage/mod.rs +++ b/components/places/src/storage/mod.rs @@ -229,13 +229,6 @@ impl TopFrecentSiteInfo { } } -#[derive(Debug)] -pub struct RunMaintenanceMetrics { - pub pruned_visits: bool, - pub db_size_before: u32, - pub db_size_after: u32, -} - /// Run maintenance on the places DB (prune step) /// /// The `run_maintenance_*()` functions are intended to be run during idle time and will take steps @@ -247,22 +240,15 @@ pub struct RunMaintenanceMetrics { /// than this, some older visits will be deleted to free up space. Pass in a 0 to skip this. /// /// prune_limit is the maximum number of visits to prune if the database is over db_size_limit -pub fn run_maintenance_prune( - conn: &PlacesDb, - db_size_limit: u32, - prune_limit: u32, -) -> Result { +pub fn run_maintenance_prune(conn: &PlacesDb, db_size_limit: u32, prune_limit: u32) -> Result<()> { let db_size_before = conn.get_db_size()?; let should_prune = db_size_limit > 0 && db_size_before > db_size_limit; if should_prune { history::prune_older_visits(conn, prune_limit)?; } - let db_size_after = conn.get_db_size()?; - Ok(RunMaintenanceMetrics { - pruned_visits: should_prune, - db_size_before, - db_size_after, - }) + #[cfg(any(feature = "glean-sym", feature = "glean-fog"))] + glean_metrics::places_manager::db_size_after_maintenance.accumulate(conn.get_db_size()? / 1024); + Ok(()) } /// Run maintenance on the places DB (vacuum step) diff --git a/examples/places-utils/src/places-utils.rs b/examples/places-utils/src/places-utils.rs index 6141ba72f2..d04105d619 100644 --- a/examples/places-utils/src/places-utils.rs +++ b/examples/places-utils/src/places-utils.rs @@ -170,12 +170,11 @@ fn run_native_export(db: &PlacesDb, filename: String) -> Result<()> { fn run_maintenance(conn: &PlacesDb, db_size_limit: u32, count: u32) -> Result<()> { for _ in 0..count { - let prune_metrics = places::storage::run_maintenance_prune(conn, db_size_limit, 6)?; + places::storage::run_maintenance_prune(conn, db_size_limit, 6)?; places::storage::run_maintenance_vacuum(conn)?; places::storage::run_maintenance_optimize(conn)?; places::storage::run_maintenance_checkpoint(conn)?; println!("Maintenance complete"); - println!("Prune metrics: {prune_metrics:?}"); } Ok(()) } diff --git a/megazords/full/DEPENDENCIES.md b/megazords/full/DEPENDENCIES.md index b569717c48..cad4240f0a 100644 --- a/megazords/full/DEPENDENCIES.md +++ b/megazords/full/DEPENDENCIES.md @@ -44,7 +44,6 @@ The following text applies to code linked from these dependencies: [NSS](https://hg.mozilla.org/projects/nss), [ece](https://github.com/mozilla/rust-ece), [glean-build](https://github.com/mozilla/glean), -[glean-sym](https://github.com/mozilla/glean), [hawk](https://github.com/taskcluster/rust-hawk), [jexl-eval](https://github.com/mozilla/jexl-rs), [jexl-parser](https://github.com/mozilla/jexl-rs), @@ -438,7 +437,6 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice ## Apache License 2.0 The following text applies to code linked from these dependencies: -[android-tzdata](https://github.com/RumovZ/android-tzdata), [android_system_properties](https://github.com/nical/android_system_properties), [anyhow](https://github.com/dtolnay/anyhow), [askama](https://github.com/askama-rs/askama), @@ -541,7 +539,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml), @@ -561,193 +558,193 @@ The following text applies to code linked from these dependencies: [xshell](https://github.com/matklad/xshell) ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. Copyright [yyyy] [name of copyright owner] @@ -755,7 +752,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/megazords/full/android/dependency-licenses.xml b/megazords/full/android/dependency-licenses.xml index b0ca743865..586c5a3da2 100644 --- a/megazords/full/android/dependency-licenses.xml +++ b/megazords/full/android/dependency-licenses.xml @@ -20,10 +20,6 @@ the details of which are reproduced below. Mozilla Public License 2.0: glean-build https://github.com/mozilla/glean/blob/main/LICENSE - - Mozilla Public License 2.0: glean-sym - https://github.com/mozilla/glean/blob/main/LICENSE - Mozilla Public License 2.0: hawk https://github.com/taskcluster/rust-hawk/blob/main/LICENSE @@ -72,10 +68,6 @@ the details of which are reproduced below. Mozilla Public License 2.0: uniffi_udl https://github.com/mozilla/uniffi-rs/blob/main/LICENSE - - Apache License 2.0: android-tzdata - https://github.com/RumovZ/android-tzdata/blob/main/LICENSE-APACHE - Apache License 2.0: android_system_properties https://github.com/nical/android_system_properties/blob/main/LICENSE-APACHE @@ -314,7 +306,7 @@ the details of which are reproduced below. Apache License 2.0: num-traits - https://github.com/rust-num/num-traits/blob/master/LICENSE-APACHE + https://github.com/rust-num/num-traits/blob/main/LICENSE-APACHE Apache License 2.0: ohttp @@ -394,7 +386,7 @@ the details of which are reproduced below. Apache License 2.0: rustc-hash - https://github.com/rust-lang/rustc-hash/blob/master/LICENSE-APACHE + https://github.com/rust-lang/rustc-hash/blob/main/LICENSE-APACHE Apache License 2.0: rustix @@ -484,10 +476,6 @@ the details of which are reproduced below. Apache License 2.0: thread_local https://github.com/Amanieu/thread_local-rs/blob/master/LICENSE-APACHE - - Apache License 2.0: toml - https://github.com/alexcrichton/toml-rs/blob/master/LICENSE-APACHE - Apache License 2.0: toml https://github.com/toml-rs/toml/blob/main/LICENSE-APACHE diff --git a/megazords/ios-rust/DEPENDENCIES.md b/megazords/ios-rust/DEPENDENCIES.md index 8fac43660a..4f2be36499 100644 --- a/megazords/ios-rust/DEPENDENCIES.md +++ b/megazords/ios-rust/DEPENDENCIES.md @@ -53,7 +53,6 @@ The following text applies to code linked from these dependencies: [NSS](https://hg.mozilla.org/projects/nss), [ece](https://github.com/mozilla/rust-ece), [glean-build](https://github.com/mozilla/glean), -[glean-sym](https://github.com/mozilla/glean), [hawk](https://github.com/taskcluster/rust-hawk), [jexl-eval](https://github.com/mozilla/jexl-rs), [jexl-parser](https://github.com/mozilla/jexl-rs), @@ -563,7 +562,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml), diff --git a/megazords/ios-rust/focus/DEPENDENCIES.md b/megazords/ios-rust/focus/DEPENDENCIES.md index e493fd77c5..2fc71598ba 100644 --- a/megazords/ios-rust/focus/DEPENDENCIES.md +++ b/megazords/ios-rust/focus/DEPENDENCIES.md @@ -546,7 +546,6 @@ The following text applies to code linked from these dependencies: [thiserror-impl](https://github.com/dtolnay/thiserror), [thiserror](https://github.com/dtolnay/thiserror), [thread_local](https://github.com/Amanieu/thread_local-rs), -[toml](https://github.com/alexcrichton/toml-rs), [toml](https://github.com/toml-rs/toml), [toml_datetime](https://github.com/toml-rs/toml), [toml_parser](https://github.com/toml-rs/toml),