-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixes Shared Database: Changes filtering in CoarseChangeFilter to attribute property #6868
Conversation
…ChangedEvent (filteredOut): true - event may be filtered out, false - event may not be filtered out BibDatabaseContextChangedEvent got a filteredOut attribute to account for general event filtering. Super class constructors are called within inheriting classes. Last FieldChangedEvents that has not been synchronized (due to filteredOut==true) are synchronized at any other event in DBMSSynchronizer or closing the database( DBMSSynchronizer.closeSharedDatabase).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can follow your line of argumentation.
The comments should go to a new file remote-storage.md
in https://github.com/JabRef/jabref/tree/master/docs/advanced-reading.
Can you please also look at the failing tests (checkstyle and database).
I am not sure whether following failures are related to your changes - or whether you can just fix them :)
Another thing: Is the magic number 30 covered by any test case or can you think of a test setup of an automated test?
Wording Co-authored-by: Oliver Kopp <kopp.dev@gmail.com>
CoarseChangeFilter: Remove totalDelta due to restriction to pasting and deleting more than one character. Handle changed field. DBMSSynchronizer: Pull remaining changes at every entry-related event.
CoarseChangeFilter: Remove totalDelta due to restriction to pasting and deleting more than one character. Handle changed field. DBMSSynchronizer: Pull remaining changes at every entry-related event.
# Conflicts: # src/main/java/org/jabref/logic/util/CoarseChangeFilter.java
Thank you very much for review! I tried to get in line with your change requests changing some lines in
Unfortunately I could not resolve the failing database tests. Following manual tests worked when using the database for myself: Proper synchronization after:
I would be glad if you could help me fix the remaining failed tests. Maybe you have an idea about that. |
Thank you for the work. This is a huge step forward. Thank you for documenting your tests. I hope, we can inspect why test cases fail. |
…-issue-6707 * upstream/master: (35 commits) Fix a fetcher test for the ShortDOIService (#6945) Fixes Shared Database: Changes filtering in CoarseChangeFilter to attribute property (#6868) Changed default value of "search and store files relative to bibtex file" to true (#6928) Replace comment by just a failure (#6943) Fix: in entry types editor selected field is not removed after first click (#6941) Fix remove actions for entry types in the editor (#6933) Always use Java 15 (#6929) Update DevDocs: workaround for issues with local openjfx maven libraries (#6931) Fixes bugs in the `regex` cite key pattern modifier (#6893) Add missing author Readability for citation key patterns (#6706) Add new author Reset to master and add default case to switch (#6847) Bump mockito-core from 3.5.10 to 3.5.11 (#6924) Bump byte-buddy-parent from 1.10.14 to 1.10.15 (#6923) Bump org.beryx.jlink from 2.21.4 to 2.22.0 (#6925) Bump xmpbox from 2.0.20 to 2.0.21 (#6926) Bump pascalgn/automerge-action from v0.9.0 to v0.10.0 (#6927) Improve parsing of short DOIs (#6920) Bump junit-vintage-engine from 5.6.2 to 5.7.0 (#6910) ...
* upstream/master: (55 commits) Rename menus citation style in preview style (#6899) Fix for some Unicode characters in citation keys (#6938) Add missing authors Fix a fetcher test for the ShortDOIService (#6945) Fixes Shared Database: Changes filtering in CoarseChangeFilter to attribute property (#6868) Changed default value of "search and store files relative to bibtex file" to true (#6928) Replace comment by just a failure (#6943) Fix: in entry types editor selected field is not removed after first click (#6941) Fix remove actions for entry types in the editor (#6933) Always use Java 15 (#6929) Update DevDocs: workaround for issues with local openjfx maven libraries (#6931) Fixes bugs in the `regex` cite key pattern modifier (#6893) Add missing author Readability for citation key patterns (#6706) Add new author Reset to master and add default case to switch (#6847) Bump mockito-core from 3.5.10 to 3.5.11 (#6924) Bump byte-buddy-parent from 1.10.14 to 1.10.15 (#6923) Bump org.beryx.jlink from 2.21.4 to 2.22.0 (#6925) Bump xmpbox from 2.0.20 to 2.0.21 (#6926) ... # Conflicts: # src/main/java/org/jabref/logic/util/DelayTaskThrottler.java
WIth further investigations on the already closed issue #6663 I changed the function of
CoarseChangeFilter.java
. Following problems I encountered with the actual version:eventBus.post
) triggers database synchronization at the same time as a delayed event (delayed viadelayPost.schedule
). Apparently, this should be avoided.DelayTaskThrottler
causes the subsequent actions on event listening (e.g. inDBMSSynchronizer
) to run on a new thread concurrently. If I have a large shared library (~5600 entries), it takes some seconds to pull changes. A delayed event that induces database synchronization ignores all field changes within synchronization time. These are then lost.DBMSSynchronizer
does not see them at all.My new proposal includes an additional attribute
filteredOut
inBibDatabaseContextChangedEvent
. You can set it if the event may be filtered out by a listening method. The corresponding constructor has to be called in every child class (e.g.MetaDataChangedEvent
orEntriesEvent
). The according functionality has been updated inAutosaveManager
andBackupManager
.How can the remaining field changes be saved that are marked by
filteredOut == true
? I tried to introduce alastEntryChanged
attribute inDBMSSynchronizer
that indicate whichBibEntry
these unsaved changes are bound to. At every event that has been listened to last entry changes are synchronized viapullWithLastEntry
. Finally, unsaved field changes are also caught at closing the shared database. SoDBMSSynchronizer.closeSharedDatabase
callspullLastEntryChanges
. This method only synchronizes the database if unsaved field changes still remain.Maybe you could look at the proposals. The main reason for that changes is that delayed event post does not work with synchronization of large shared databases.
PS:
DelayTaskThrottler
has been extended by a method to immediately run a previously scheduled task. This had be done in accordance to the possibility of the executor serviceScheduledThreadPoolExecutor
.