[WIP] Fix change on disk detection#5669
Conversation
- Add tests - Guard AtomicFileWriter with a try-with-resources during save - use Objects.requireNonNull in DefaultFileUpdateMontitor - add comment - some auto-formattings - Fix typo in comment
TODO: - Add test - saved flag local in the update monitor DONE: - After a synchronization is triggered: the referenceFile is updated with the current database - Synchronize change detection and file writing: should not happen in parallel - Use !Thread.currentThread().isInterrupted() instead of true in endless loop in thread
| try (WatchService watcher = FileSystems.getDefault().newWatchService()) { | ||
| this.watcher = watcher; | ||
| while (true) { | ||
| while (!Thread.currentThread().isInterrupted()) { |
There was a problem hiding this comment.
Use Thread.onSpinWait in addition to give an optimization hint for the cpu
https://jaxenter.de/java-9-jep-285-spin-wait-loops-65884
|
The biggest problem I see is to have a robust 3-way merge, that takes all the changes, applies some automatically and only reports conflicts. The problem is that the bibtexkey can change, so that you don't have a definitive way of telling which entries in the 3 databases correspond to each other (e.g. the user renames a key, and creates a new entry with the old key). For shared libraries, you solved this by introducing a unique identifier for each entry... Please don't forget that there are more than entries that can change (groups, strings, meta data, ...). So how should we proceed? I agree that this PR is a better alternative to #5665 but there is still a lot of work required to make it work. Should we for now merge #5665 for now and then revert it after the 5.0 release? |
|
To prevent issues such as #4877 i added Maybe, having a working with maximum job count of |
b8ef7b7 to
21c6e5e
Compare
|
Will take longer to work on this. Therefore moved to JabRef#442. |
12dbba5 Create tyndale-bulletin (#5673) b0746db Create Engineered Regeneration (#5682) e38b953 wikipedia citation template (#5662) 5e7f731 Create early-music-history.csl (#5679) 86443f3 Create zeitschrift-fur-politik.csl (#5676) 68f1996 Create annals-of-work-exposures-and-health.csl (#5666) 1ba9dc6 Create brazilian-journal-of-psychiatry.csl (#5672) 438f92c fix error for speech in ama styles (#5693) 7a0c2d3 set initialize-with-hyphen to false (#5689) 3bd2765 Update emu-austral-ornithology.csl (#5671) 31492b2 fix various errors in natura-croatica.csl (#5687) 94d6b23 Update iso690-author-date-cs.csl (#5677) 5d017da minor update on the "Haute école de gestion de Genève - ISO 690" style (#5665) 2cad8f6 add ibid/subsequent to comparative-politics.csl (#5669) de0b116 Create taylor-and-francis-vancouver-national-library-of-medicine.csl (#5650) ed87f99 Update bulletin-de-correspondance-hellenique.csl (#5663) git-subtree-dir: buildres/csl/csl-styles git-subtree-split: 12dbba5
0654e16 Create scandinavian-journal-of-information-systems.csl (#5716) ce2d537 Update journal-of-computer-applications-in-archaeology.csl (#5715) 755d3d3 Create human-rights-law-review.csl (#5626) 0feda94 Create journal-of-intercultural-studies.csl (#5709) ae4756d Update acta-universitatis-agriculturae-sueciae.csl (#5713) 323d9ac Update mohr-siebeck-recht.csl (#5559) 15530a8 Bch corr (#5712) 094a1af Create forschungsjournal-soziale-bewegungen-fjsb.csl (#5699) cb91566 initialize authors and editors (#5714) 2d5cfff Create cancer-biomarkers.csl (#5703) 5e264d5 Update multidisciplinary-digital-publishing-institute.csl (#5708) 46e961f Create klinische-padiatrie.csl (#5711) e81e877 Create bulletin-archeologique-des-ecoles-francaises-a-l-etranger.csl (#5704) 0029c5a Create polar-research.csl 🧊 (#5702) 7db1361 Update vancouver-imperial-college-london.csl (#5641) b953e9f Update iso690-author-date-fr-no-abstract.csl (#5706) 91eda8c Update thieme-german.csl (#5710) ebe0787 Update harvard-imperial-college-london.csl (#5643) 2d4db76 Fix UNESCO IIEP in text 436cbf4 Create revue-archeologique-de-narbonnaise.csl (#5688) 5150bcf Create journal-of-computer-assisted-tomography.csl (#5690) dd6f050 Create anti-trafficking-review.csl (#5658) 08e622f Create the-angle-orthodontist.csl (#5685) c6a1907 journal-of-palm-oil-research.csl fix several errors (#5686) 6cbe29d Create bern-university-of-applied-sciences-school-of-agricultural-for… (#5684) f590dc1 Update biomed-central.csl (#5701) 1efce81 Update turabian-author-date.csl (#5695) 12dbba5 Create tyndale-bulletin (#5673) b0746db Create Engineered Regeneration (#5682) e38b953 wikipedia citation template (#5662) 5e7f731 Create early-music-history.csl (#5679) 86443f3 Create zeitschrift-fur-politik.csl (#5676) 68f1996 Create annals-of-work-exposures-and-health.csl (#5666) 1ba9dc6 Create brazilian-journal-of-psychiatry.csl (#5672) 438f92c fix error for speech in ama styles (#5693) 7a0c2d3 set initialize-with-hyphen to false (#5689) 3bd2765 Update emu-austral-ornithology.csl (#5671) 31492b2 fix various errors in natura-croatica.csl (#5687) 94d6b23 Update iso690-author-date-cs.csl (#5677) 5d017da minor update on the "Haute école de gestion de Genève - ISO 690" style (#5665) 2cad8f6 add ibid/subsequent to comparative-politics.csl (#5669) de0b116 Create taylor-and-francis-vancouver-national-library-of-medicine.csl (#5650) ed87f99 Update bulletin-de-correspondance-hellenique.csl (#5663) git-subtree-dir: buildres/csl/csl-styles git-subtree-split: 0654e16
* Squashed 'buildres/csl/csl-styles/' changes from 3a6a0a7..0654e16 0654e16 Create scandinavian-journal-of-information-systems.csl (#5716) ce2d537 Update journal-of-computer-applications-in-archaeology.csl (#5715) 755d3d3 Create human-rights-law-review.csl (#5626) 0feda94 Create journal-of-intercultural-studies.csl (#5709) ae4756d Update acta-universitatis-agriculturae-sueciae.csl (#5713) 323d9ac Update mohr-siebeck-recht.csl (#5559) 15530a8 Bch corr (#5712) 094a1af Create forschungsjournal-soziale-bewegungen-fjsb.csl (#5699) cb91566 initialize authors and editors (#5714) 2d5cfff Create cancer-biomarkers.csl (#5703) 5e264d5 Update multidisciplinary-digital-publishing-institute.csl (#5708) 46e961f Create klinische-padiatrie.csl (#5711) e81e877 Create bulletin-archeologique-des-ecoles-francaises-a-l-etranger.csl (#5704) 0029c5a Create polar-research.csl 🧊 (#5702) 7db1361 Update vancouver-imperial-college-london.csl (#5641) b953e9f Update iso690-author-date-fr-no-abstract.csl (#5706) 91eda8c Update thieme-german.csl (#5710) ebe0787 Update harvard-imperial-college-london.csl (#5643) 2d4db76 Fix UNESCO IIEP in text 436cbf4 Create revue-archeologique-de-narbonnaise.csl (#5688) 5150bcf Create journal-of-computer-assisted-tomography.csl (#5690) dd6f050 Create anti-trafficking-review.csl (#5658) 08e622f Create the-angle-orthodontist.csl (#5685) c6a1907 journal-of-palm-oil-research.csl fix several errors (#5686) 6cbe29d Create bern-university-of-applied-sciences-school-of-agricultural-for… (#5684) f590dc1 Update biomed-central.csl (#5701) 1efce81 Update turabian-author-date.csl (#5695) 12dbba5 Create tyndale-bulletin (#5673) b0746db Create Engineered Regeneration (#5682) e38b953 wikipedia citation template (#5662) 5e7f731 Create early-music-history.csl (#5679) 86443f3 Create zeitschrift-fur-politik.csl (#5676) 68f1996 Create annals-of-work-exposures-and-health.csl (#5666) 1ba9dc6 Create brazilian-journal-of-psychiatry.csl (#5672) 438f92c fix error for speech in ama styles (#5693) 7a0c2d3 set initialize-with-hyphen to false (#5689) 3bd2765 Update emu-austral-ornithology.csl (#5671) 31492b2 fix various errors in natura-croatica.csl (#5687) 94d6b23 Update iso690-author-date-cs.csl (#5677) 5d017da minor update on the "Haute école de gestion de Genève - ISO 690" style (#5665) 2cad8f6 add ibid/subsequent to comparative-politics.csl (#5669) de0b116 Create taylor-and-francis-vancouver-national-library-of-medicine.csl (#5650) ed87f99 Update bulletin-de-correspondance-hellenique.csl (#5663) git-subtree-dir: buildres/csl/csl-styles git-subtree-split: 0654e16 * Squashed 'buildres/csl/csl-locales/' changes from 0cc3885f61..d5ee85de8e d5ee85de8e Period after Übers. added (#241) git-subtree-dir: buildres/csl/csl-locales git-subtree-split: d5ee85de8e74d4109509014758b6f496a968ff03 * fix merge error Co-authored-by: github actions <jabrefmail+webfeedback@gmail.com> Co-authored-by: Siedlerchr <siedlerkiller@gmail.com>
3bb4b5f infoclio.ch styles for German: remove non-breaking space delimiters (#5754) adf28db Create journal-of-health-care-for-the-poor-and-underserved.csl (#5752) 0713a8e Update chinese-gb7714-2005-numeric.csl (#5737) 1cd3754 Update china-national-standard-gb-t-7714-2015-author-date.csl (#5746) c2536b7 Update china-national-standard-gb-t-7714-2015-numeric.csl (#5745) f8c1392 Create steel-research-international.csl (#5720) 21fe1f5 Create asian-myrmecology.csl (#5718) 91e9e2b Update harvard-university-of-the-west-of-england.csl (#5734) dd453d1 fix minor erros in polar-research.csl (#5730) 038a8f5 Remove group around no-date cluster (#5731) 0710b51 remove et-al from bibtex.csl (#5728) bbd703d Add editorial-director to universite-laval-departement-des-sciences-historiques.csl (#5727) 58ea430 Create german-journal-of-agricultural-economics.csl (#5717) 0654e16 Create scandinavian-journal-of-information-systems.csl (#5716) ce2d537 Update journal-of-computer-applications-in-archaeology.csl (#5715) 755d3d3 Create human-rights-law-review.csl (#5626) 0feda94 Create journal-of-intercultural-studies.csl (#5709) ae4756d Update acta-universitatis-agriculturae-sueciae.csl (#5713) 323d9ac Update mohr-siebeck-recht.csl (#5559) 15530a8 Bch corr (#5712) 094a1af Create forschungsjournal-soziale-bewegungen-fjsb.csl (#5699) cb91566 initialize authors and editors (#5714) 2d5cfff Create cancer-biomarkers.csl (#5703) 5e264d5 Update multidisciplinary-digital-publishing-institute.csl (#5708) 46e961f Create klinische-padiatrie.csl (#5711) e81e877 Create bulletin-archeologique-des-ecoles-francaises-a-l-etranger.csl (#5704) 0029c5a Create polar-research.csl 🧊 (#5702) 7db1361 Update vancouver-imperial-college-london.csl (#5641) b953e9f Update iso690-author-date-fr-no-abstract.csl (#5706) 91eda8c Update thieme-german.csl (#5710) ebe0787 Update harvard-imperial-college-london.csl (#5643) 2d4db76 Fix UNESCO IIEP in text 436cbf4 Create revue-archeologique-de-narbonnaise.csl (#5688) 5150bcf Create journal-of-computer-assisted-tomography.csl (#5690) dd6f050 Create anti-trafficking-review.csl (#5658) 08e622f Create the-angle-orthodontist.csl (#5685) c6a1907 journal-of-palm-oil-research.csl fix several errors (#5686) 6cbe29d Create bern-university-of-applied-sciences-school-of-agricultural-for… (#5684) f590dc1 Update biomed-central.csl (#5701) 1efce81 Update turabian-author-date.csl (#5695) 12dbba5 Create tyndale-bulletin (#5673) b0746db Create Engineered Regeneration (#5682) e38b953 wikipedia citation template (#5662) 5e7f731 Create early-music-history.csl (#5679) 86443f3 Create zeitschrift-fur-politik.csl (#5676) 68f1996 Create annals-of-work-exposures-and-health.csl (#5666) 1ba9dc6 Create brazilian-journal-of-psychiatry.csl (#5672) 438f92c fix error for speech in ama styles (#5693) 7a0c2d3 set initialize-with-hyphen to false (#5689) 3bd2765 Update emu-austral-ornithology.csl (#5671) 31492b2 fix various errors in natura-croatica.csl (#5687) 94d6b23 Update iso690-author-date-cs.csl (#5677) 5d017da minor update on the "Haute école de gestion de Genève - ISO 690" style (#5665) 2cad8f6 add ibid/subsequent to comparative-politics.csl (#5669) de0b116 Create taylor-and-francis-vancouver-national-library-of-medicine.csl (#5650) ed87f99 Update bulletin-de-correspondance-hellenique.csl (#5663) git-subtree-dir: buildres/csl/csl-styles git-subtree-split: 3bb4b5f
This will solve the whole change-on-disk-dection things similar as conflicts are solved for a shared-database. This PR builds on #5640 and is an alternative to #5665.
Implementation motivation
In 2016, I designed the database synchronization feature (https://docs.jabref.org/collaborative-work/sqldatabase), which I briefly described at #2866 (comment):
How this works can be tried out using the Shared SQL Database Feature of JabRef, where @obraliar and me worked hard to have a very nice user experience.
Technically, this is not that easy to achieve. However, users will be happy, if it "just works".
At each instance of JabRef:
So R' is known. Based on R and R', the entries E where a change was made, are known.
Based on E, changes can be applied to L.
If in L the entry was not modified: just apply the update.
If in L the entry was modified: Start the merge entries dialog.
Implementation idea
Current implementation state
TODO:
Optional:
DONE: