-
Notifications
You must be signed in to change notification settings - Fork 466
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
Create [bundle ID] folder during migration if none exists #303
Create [bundle ID] folder during migration if none exists #303
Conversation
Please can we get this merged? Currently we can't update to 1.8.0 due to the failed migration. |
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.
Thanks for the PR, looks good so far. Left two comments for you to checkout, let me know if they make sense.
ios/RNCAsyncStorage.m
Outdated
if (error == nil) { | ||
RCTStorageDirectoryMigrate(oldDirectoryPath, newDirectoryPath, shouldCleanupOldDirectory); | ||
return; | ||
} |
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.
} | |
} else { | |
RCTStorageDirectoryMigrationLogError(@"Failed to create storage directory during the migration.", error); | |
return; | |
} |
Let's warn about directory creation fail
Co-Authored-By: Krzysztof <[email protected]>
We are really looking forward to this fix, thanks for the work done! |
@HeyImChris Hey, would you mind having a look here? |
Sorry guys! I'm a fool. I checked the wrong branch. Checked from the correct migration-fix branch, it worked! Thanks! I’ll delete my comment so as not to embarrass people. |
attributes:nil | ||
error:error]; | ||
} | ||
|
||
static void RCTStorageDirectoryMigrate(NSString *oldDirectoryPath, NSString *newDirectoryPath, BOOL shouldCleanupOldDirectory) | ||
{ | ||
NSError *error; | ||
// Migrate data by copying old storage directory to new storage directory location | ||
if (![[NSFileManager defaultManager] copyItemAtPath:oldDirectoryPath toPath:newDirectoryPath error:&error]) { |
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.
What if we put a fileExistsAtPath: check before this and if false, call _createStorageDirectory. Then add an "error != nil" to the copyItemAtPath: check to make sure the fileExistsAtPath succeeded and leave the rest of the method unchanged?
Seems a little messy to try to copy and recursively respond to that failure instead of checking if we should create first, putting ourselves in a consistent state in all cases and going from there.
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.
hey chris.. i'm down to make this change but i was reading on the apple docs that its better to attempt an operation and respond than to try to predict on how an operation will go based on the file system's current state. https://developer.apple.com/documentation/foundation/nsfilemanager/1415645-fileexistsatpath
since this is a race condition issue and we are the only thing writing to that folder, it'll be okay.
i'll test and try to get something up within today
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.
Didn't know about that doc. I think what you're doing is good then!
Thanks a lot everyone! |
Summary:
fixes issue described in #301
Test Plan:
you can use my sample repo here: https://github.com/frankenthumbs/AsyncStorageUpgradePOC and use the repro steps but the gist is, on iOS: