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

Create [bundle ID] folder during migration if none exists #303

Merged
merged 4 commits into from
Feb 28, 2020

Conversation

joonmanji
Copy link
Contributor

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:

  1. save something in async storage on version 1.2.1
  2. upgrade to latest
  3. noticed data doesn't get wiped

@geraintwhite
Copy link

Please can we get this merged? Currently we can't update to 1.8.0 due to the failed migration.

@krizzu krizzu added the LEGACY label Feb 25, 2020
Copy link
Member

@krizzu krizzu left a 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 Show resolved Hide resolved
if (error == nil) {
RCTStorageDirectoryMigrate(oldDirectoryPath, newDirectoryPath, shouldCleanupOldDirectory);
return;
}
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
}
} else {
RCTStorageDirectoryMigrationLogError(@"Failed to create storage directory during the migration.", error);
return;
}

Let's warn about directory creation fail

@JerakRus
Copy link

JerakRus commented Feb 26, 2020

We are really looking forward to this fix, thanks for the work done!

@krizzu krizzu removed the request for review from tido64 February 27, 2020 09:53
@krizzu
Copy link
Member

krizzu commented Feb 27, 2020

@HeyImChris Hey, would you mind having a look here?

@JerakRus
Copy link

JerakRus commented Feb 27, 2020

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]) {
Copy link
Contributor

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.

Copy link
Contributor Author

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

Copy link
Contributor

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!

@krizzu krizzu merged commit 8616cbd into react-native-async-storage:LEGACY Feb 28, 2020
@krizzu
Copy link
Member

krizzu commented Feb 28, 2020

Thanks a lot everyone!

Sign up for free to 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