Skip to content
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

uptake hive 4.x beta version #2005

Open
murali-shris opened this issue Jun 24, 2024 · 7 comments
Open

uptake hive 4.x beta version #2005

murali-shris opened this issue Jun 24, 2024 · 7 comments
Assignees
Labels
enhancement New feature or request

Comments

@murali-shris
Copy link
Member

Is your feature request related to a problem? Please describe.

hive older version has few issues related to box corruption, updating hive box in isolate.

Describe the solution you'd like

uptake changes in persistence for hive major version and check for performance improvements.

Describe alternatives you've considered

No response

Additional context

No response

@murali-shris murali-shris added the enhancement New feature or request label Jun 24, 2024
@murali-shris murali-shris self-assigned this Jun 24, 2024
@murali-shris murali-shris changed the title update hive 4.x beta version uptake hive 4.x beta version Jul 4, 2024
@murali-shris
Copy link
Member Author

murali-shris commented Jul 4, 2024

Progress made on hive 4.x uptake so far

  1. Ran into an issue while running dart sample code to open a box
    IsarNotReadyError: Could not initialize IsarCore library for processor architecture "linux_x64". If you create a Flutter app, make sure to add isar_flutter_libs to your dependencies. For Dart-only apps or unit tests, make sure to place the correct Isar binary in the correct directory.
Invalid argument(s): Failed to load dynamic library 'libisar.so': libisar.so: cannot open shared object file: No such file or directory
#0      initializePlatformBindings (package:isar/src/native/native.dart:26:5)
#1      IsarCore._initialize (package:isar/src/isar_core.dart:42:20)
#2      new _IsarImpl.open (package:isar/src/impl/isar_impl.dart:50:14)
#3      Isar.open (package:isar/src/isar.dart:88:28)
#4      Hive.box (package:hive/src/hive.dart:80:23)
#5      main (file:///home/murali/git/at_protocol/at_server/packages/at_persistence_secondary_server/test/hive_new_test.dart:6:18)
#6      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#7      _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)

Solution:
Download isar library from https://github.com/isar/isar/releases/tag/4.0.0-dev.14
and add this line to sample/unit test

Isar.initialize(<path to isar lib>);
e.g in macos
Isar.initialize('libisar_macos.dylib')
  1. generateSecureKey is no longer part of Hive. We use this method to generate a key and encrypt the box. New Hive allows user to pass encryptionKey in String type. There is no explanation in dart doc what type of encryption key can be passed. whether it allows any random string to be used as encryption key ? I have to test this.
  2. Type adapters are no longer part of new Hive. So it is now easier to store and retrieve custom class object. The custom class should have toJson and fromJson impl.
  3. Old Hive.add(..) returns the auto increment key which use as commit log id. New Hive no longer returns auto increment key and doesn't expose any method to retrieve the auto increment key after adding. Commit log logic has to be modified. We have to maintain our own key to maintain latest commit id.
  4. Analysed whether our existing hive box files can be opened with new Hive methods. Not possible since Hive uses .isar extension for new boxes. Hence we have to come up with custom logic to migrate old box data to new box. Will try this migration for these scenarios before I proceed with other code changes for commit log.
  • data migration with simple key-value pair without encryption/type adapter
  • data migration with simple key-value pair plus encryption
  • data migration with custom class and encryption?
    @gkc @cpswan @cconstab

@murali-shris
Copy link
Member Author

Raised an issue in hive repo for migrating hive box to latest version
isar/hive#1298

@murali-shris
Copy link
Member Author

I will resume working on 4x changes in persistence and pass the branch to @purnimavenkatasubbu @VJag for benchmarking performance. Based on the outcome of benchmarking, we will decide the priority of migrating old hive box to new one.

@murali-shris
Copy link
Member Author

Code changes done in persistence.Currently fixing unit tests in persistence

@murali-shris
Copy link
Member Author

  • Fixed unit tests in persistence
  • ran unit tests with persistence changes in server and fixed. All tests are passing when run individually. When run using dart run test command, tests are failing. Have to investigate
  • @purnimavenkatasubbu Ran the server in local with new changes and has reported few issues. Currently investigating and fixing them.
    Plan for upcoming sprint
  • Fix pending issues and run performance tests

@purnimavenkatasubbu
Copy link
Member

Performance testing summary performance testing summary

@murali-shris
Copy link
Member Author

murali-shris commented Oct 30, 2024

hive v4 is not actively maintained.
isar/hive#1225 (comment)
Explore https://pub.dev/packages/hive_ce pointed out by @XavierChanth

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants