Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Remove database flush - #575

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush
Jul 4, 2022
Merged

Remove database flush#575
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
kafaichoi:remove-database-flush

Conversation

@kafaichoi

@kafaichoikafaichoi commented Mar 23, 2022

Copy link
Copy Markdown
Contributor

Description

This PR is to remove Database::flush. See this issue for detail #567

Notes to the reviewers

The 2nd commit is a small refactoring of adding a new private ivec_to_u32 to avoid too much code duplication. Please let me know if it's ok to include this in this PR or I should make it into a separate PR

Currently existing test cases are shared across for all Databaes implementation so I am not sure if we should add specific test cases for keyvalue(Tree) for this auto-flush behaviour?(and I feel like it's more a implementation detail). Please let me know how should I proceed for test case in this PR

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added tests for the new feature
  • I've added docs for the new feature
  • I've updated CHANGELOG.md

Bugfixes:

  • This pull request breaks the existing API
  • I've added tests to reproduce the issue which are now passing
  • I'm linking the issue being fixed by this PR

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 3278ea5 to 9947611CompareMarch 23, 2022 07:11
@kafaichoi
kafaichoi marked this pull request as draft March 23, 2022 08:50
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from 9947611 to bfaef77CompareMarch 23, 2022 09:47
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from bfaef77 to d107b92CompareMarch 24, 2022 04:18
@notmandatory

notmandatory commented Mar 25, 2022

Copy link
Copy Markdown
Member

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from d107b92 to 64a4f1bCompareMarch 25, 2022 02:57
@kafaichoi
kafaichoi marked this pull request as ready for review March 25, 2022 02:59
@kafaichoi

kafaichoi commented Mar 25, 2022

Copy link
Copy Markdown
ContributorAuthor

I think your code changes to remove flush from the Database trait and to refactor duplicate code into the ivec_to_u32 function look good.

But I'm having second thoughts on doing the auto-flush. I believe it's not meant to be used on every update since it will hurt performance and on most os/filesystems it is not needed since the os will automatically flush the data to disk if the process dies. For Android users it's reasonable to recommend using sqlite and not sled for now. In future bdk api changes that are currently being discussed the database will most likely be extracted from the Wallet and then if a user wants to use Sled on android they will be able directly call the .flush() function on Tree when they want such as when their app goes off screen or something like that. I'm going to update #567 to remove the part about auto flushing so you can remove the related code and tests from this PR.

You also need to do a cargo fmt which CI checks for. Thanks!

That's very reasonable. Thank you so much for your comment. I have removed the auto-flush behaviour(and ran cargo fmt, clippy for each commit)

Comment threadsrc/database/keyvalue.rs

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK 6dc9282

With few nits..

Comment threadCHANGELOG.md
Comment threadCHANGELOG.md
Comment threadCHANGELOG.md Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

@notmandatory so we don't need the explicit flush any more for any of the DBs?

@notmandatory

Copy link
Copy Markdown
Member

@notmandatory so we don't need the explicit flush any more for any of the DBs?

The only database that actually implemented flush was Sled, and even for Sled it seems to only be needed for Android. That's why I suggested removing it and that mobile apps use sqlite instead. This #409 is the PR that added it, and it was to trying to fix the issues that @thunderbiscuit ran into on Android.

@afilini

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Concept ACK for the refactor but I'll take another look later to make sure the code is also good.

@notmandatory

Copy link
Copy Markdown
Member

Maybe we should deprecate for one release before removing it? I don't know if anybody is using it, but it seems it wouldn't cost us anything to just delay the removal and it can make the transition a bit less painful for our users.

Good point, I was assuming no one was using this but I think we did promise to deprecate APIs before removing them. If we do deprecate that should go in a new PR, so this one can be ready to go right after we cut the next release branch.

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch 2 times, most recently from 5379a34 to 0e713f8CompareApril 2, 2022 03:52

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReACK 0e713f8

@notmandatory

Copy link
Copy Markdown
Member

I've assigned this to the release 0.19.0 and added #577 to deprecate Database::flush() in 0.18.0. This PR can then be merged after we create the release/0.19.0 feature freeze branch next week.

afilini added a commit that referenced this pull request Apr 13, 2022
a111d25 Deprecate Database::flush() function (Steve Myers)
Pull request description:
### Description
The Database::flush() function is only needed for the sled database on mobile, instead for mobile use the sqlite database.
### Notes to the reviewers
This PR is in preparation for removing the Database::flush() function. See #575 (comment).
After the `release/0.18.0` feature freeze branch is created then #575 should be merged.
### Checklists
#### All Submissions:
* [x] I've signed all my commits
* [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md)
* [x] I ran `cargo fmt` and `cargo clippy` before committing
#### New Features:
* [ ] I've added tests for the new feature
* [ ] I've added docs for the new feature
* [x] I've updated `CHANGELOG.md`
ACKs for top commit:
afilini:
ACK a111d25
Tree-SHA512: 18434dc95dbef47118a0d4fface908bdf920a7ffcef927b36bb740c15f8efcf11dea9198b364648f16f74aaec4aa18e92a3c5e925299b2f3b9d69e566f89e790
@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@notmandatory

Copy link
Copy Markdown
Member

I had to push this PR to the next release so the team can focus on #593, and after that one you'll probably need to rebase again. But then I promise we get this one in. :-)

@danielabrozzonidanielabrozzoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

@rajarshimaitrarajarshimaitra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK b1ace3c

This looks ready for merge to me..

@danielabrozzoni

Copy link
Copy Markdown
Contributor

This PR needs rebase to fix the CHANGELOG.md conflicts and fix the CI, but then it's ready to merge 🙏🏻

@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from b1ace3c to e4c9919CompareJune 29, 2022 05:33
@kafaichoi
kafaichoiforce-pushed the remove-database-flush branch from e4c9919 to 5ff8320CompareJune 29, 2022 05:40
@danielabrozzoni

Copy link
Copy Markdown
Contributor

re-ACK 5ff8320

@notmandatory
notmandatory merged commit 1fd62a7 into bitcoindevkit:masterJul 4, 2022
@notmandatory

Copy link
Copy Markdown
Member

Finally merged, thanks for seeing this one through!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@kafaichoi@notmandatory@rajarshimaitra@afilini@danielabrozzoni