added autorelease pools

This commit is contained in:
Stefan Reitshamer 2010-06-28 07:56:28 -04:00
parent 4884a60a9d
commit 3c02cd09fb
9 changed files with 100 additions and 44 deletions

View file

@ -43,7 +43,16 @@
printf("s3bucket name: %s\n", [s3BucketName UTF8String]);
}
for (NSString *s3BucketName in s3BucketNames) {
if (![self verifyS3BucketName:s3BucketName error:error]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
BOOL ret = [self verifyS3BucketName:s3BucketName error:error];
if (error != NULL) {
[*error retain];
}
[pool drain];
if (error != NULL) {
[*error autorelease];
}
if (!ret) {
return NO;
}
}
@ -88,6 +97,7 @@
return NO;
}
for (NSString *s3BucketUUIDPath in s3BucketUUIDPaths) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *bucketUUID = [s3BucketUUIDPath lastPathComponent];
printf("verifying bucketUUID %s computerUUID %s s3Bucket %s\n", [bucketUUID UTF8String], [computerUUID UTF8String], [s3BucketName UTF8String]);
BucketVerifier *bucketVerifier = [[[BucketVerifier alloc] initWithS3Service:s3
@ -96,7 +106,15 @@
bucketUUID:bucketUUID
s3ObjectSHA1s:objectSHA1s
encryptionKey:encryptionPassword] autorelease];
if (![bucketVerifier verify:error]) {
BOOL ret = [bucketVerifier verify:error];
if (error != NULL) {
[*error retain];
}
[pool drain];
if (error != NULL) {
[*error autorelease];
}
if (!ret) {
return NO;
}
}
@ -123,16 +141,25 @@
@implementation ArqVerifyCommand (internal)
- (NSArray *)objectSHA1sForS3BucketName:(NSString *)s3BucketName computerUUID:(NSString *)computerUUID error:(NSError **)error {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *objectSHA1s = nil;
NSString *objectsPrefix = [NSString stringWithFormat:@"/%@/%@/objects", s3BucketName, computerUUID];
printf("loading S3 object SHA1s with prefix %s\n", [objectsPrefix UTF8String]);
NSArray *objectPaths = [s3 pathsWithPrefix:objectsPrefix error:error];
if (objectPaths == nil) {
return NO;
if (objectPaths != nil) {
objectSHA1s = [[NSMutableArray alloc] init];
printf("loaded %u object SHA1s with prefix %s\n", [objectPaths count], [objectsPrefix UTF8String]);
for (NSString *objectPath in objectPaths) {
[objectSHA1s addObject:[objectPath lastPathComponent]];
}
}
printf("loaded %u object SHA1s with prefix %s\n", [objectPaths count], [objectsPrefix UTF8String]);
NSMutableArray *objectSHA1s = [NSMutableArray array];
for (NSString *objectPath in objectPaths) {
[objectSHA1s addObject:[objectPath lastPathComponent]];
if (error != NULL) {
[*error retain];
}
[pool drain];
[objectSHA1s autorelease];
if (error != NULL) {
[*error autorelease];
}
return objectSHA1s;
}

View file

@ -51,5 +51,5 @@
- (NSString *)packSHA1ForPackedBlobSHA1:(NSString *)sha1 packSetName:(NSString *)packSetName;
// Sync local cache files to S3 data; reload PackIndexEntries from local cache files.
- (BOOL)resetFromS3:(NSError **)error;
- (NSArray *)resetFromS3:(NSError **)error;
@end

View file

@ -91,12 +91,12 @@
}
return [packSet packSHA1ForPackedBlobSHA1:sha1];
}
- (BOOL)resetFromS3:(NSError **)error {
- (NSArray *)resetFromS3:(NSError **)error {
HSLogDebug(@"resetting pack sets from S3");
[packSets removeAllObjects];
NSDictionary *s3PackSHA1sByPackSetName = [self packSHA1sByPackSetNameFromS3:error];
if (s3PackSHA1sByPackSetName == nil) {
return NO;
return nil;
}
//
@ -104,7 +104,7 @@
//
NSMutableSet *diskPackSetNames = [self diskPackSetNames:error];
if (diskPackSetNames == nil) {
return NO;
return nil;
}
NSMutableSet *s3PackSetNames = [NSMutableSet setWithArray:[s3PackSHA1sByPackSetName allKeys]];
[diskPackSetNames minusSet:s3PackSetNames];
@ -112,7 +112,7 @@
NSString *packSetPath = [PackSet localPathWithComputerUUID:computerUUID packSetName:bogusDiskPackSetName];
HSLogDebug(@"removing local pack set that doesn't exist in S3: %@", packSetPath);
if (![[NSFileManager defaultManager] removeItemAtPath:packSetPath error:error]) {
return NO;
return nil;
}
}
@ -128,11 +128,15 @@
keepPacksLocal:[s3PackSetName hasSuffix:@"-trees"]
packSHA1s:packSHA1s error:error] autorelease];
if (packSet == nil) {
return NO;
return nil;
}
[packSets setObject:packSet forKey:s3PackSetName];
}
return YES;
NSMutableArray *ret = [NSMutableArray array];
for (NSArray *sha1s in [s3PackSHA1sByPackSetName allValues]) {
[ret addObjectsFromArray:sha1s];
}
return ret;
}
@end
@implementation PackSetSet (internal)

View file

@ -50,5 +50,5 @@
- (ServerBlob *)newServerBlobForSHA1:(NSString *)sha1 packSetName:(NSString *)packSetName searchPackOnly:(BOOL)searchPackOnly error:(NSError **)error;
- (BOOL)containsBlobForSHA1:(NSString *)sha1 packSetName:(NSString *)packSetName searchPackOnly:(BOOL)searchPackOnly;
- (NSString *)packSHA1ForPackedBlobSHA1:(NSString *)sha1 packSetName:(NSString *)packSetName;
- (BOOL)reloadPacksFromS3:(NSError **)error;
- (NSArray *)reloadPacksFromS3:(NSError **)error;
@end

View file

@ -99,7 +99,7 @@
- (NSString *)packSHA1ForPackedBlobSHA1:(NSString *)sha1 packSetName:(NSString *)packSetName {
return [packSetSet packSHA1ForPackedBlobSHA1:sha1 packSetName:packSetName];
}
- (BOOL)reloadPacksFromS3:(NSError **)error {
- (NSArray *)reloadPacksFromS3:(NSError **)error {
NSAssert([NSThread currentThread] == creatorThread, @"must be on same thread!");
return [packSetSet resetFromS3:error];
}

View file

@ -1076,7 +1076,7 @@
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
HEADER_SEARCH_PATHS = "";
INSTALL_PATH = /usr/local/bin;
PRODUCT_NAME = arq_restore;
PRODUCT_NAME = arq_verify;
SDKROOT = macosx10.5;
};
name = Release;

View file

@ -61,7 +61,7 @@ int main (int argc, const char * argv[]) {
NSString *accessKey = [NSString stringWithUTF8String:cAccessKey];
NSString *secretKey = [NSString stringWithUTF8String:cSecretKey];
NSString *encryptionPassword = [[NSString alloc] initWithUTF8String:cEncryptionPassword];
NSString *encryptionPassword = [[[NSString alloc] initWithUTF8String:cEncryptionPassword] autorelease];
ArqVerifyCommand *cmd = [[[ArqVerifyCommand alloc] initWithAccessKey:accessKey secretKey:secretKey encryptionPassword:encryptionPassword] autorelease];
NSError *error = nil;
BOOL ret = NO;

View file

@ -45,9 +45,15 @@
}
- (BOOL)verify:(NSError **)error {
printf("reloading packs from S3 for s3Bucket %s computerUUID %s bucketUUID %s\n", [s3BucketName UTF8String], [computerUUID UTF8String], [bucketUUID UTF8String]);
if (![fark reloadPacksFromS3:error]) {
NSArray *s3PackSHA1s = [fark reloadPacksFromS3:error];
if (s3PackSHA1s == nil) {
return NO;
}
printf("S3 packs found for computer UUID %s:\n", [computerUUID UTF8String]);
for (NSString *s3PackSHA1 in s3PackSHA1s) {
printf("S3 pack SHA1: %s\n", [s3PackSHA1 UTF8String]);
}
NSString *headSHA1 = nil;
if (![repo localHeadSHA1:&headSHA1 error:error]) {
return NO;
@ -82,13 +88,19 @@
fprintf(stderr, "tree %s not found\n", [treeSHA1 UTF8String]);
return NO;
}
if (![self verify:[tree xattrsSHA1] error:error]) {
fprintf(stderr, "tree %s's xattrsSHA1 %s not found", [treeSHA1 UTF8String], [[tree xattrsSHA1] UTF8String]);
return NO;
if ([tree xattrsSHA1] != nil) {
printf("verifying xattrsSHA1 for tree %s\n", [treeSHA1 UTF8String]);
if (![self verify:[tree xattrsSHA1] error:error]) {
fprintf(stderr, "tree %s's xattrsSHA1 %s not found", [treeSHA1 UTF8String], [[tree xattrsSHA1] UTF8String]);
return NO;
}
}
if (![self verify:[tree aclSHA1] error:error]) {
fprintf(stderr, "tree %s's aclSHA1 %s not found", [treeSHA1 UTF8String], [[tree aclSHA1] UTF8String]);
return NO;
if ([tree aclSHA1] != nil) {
printf("verifying aclSHA1 for tree %s\n", [treeSHA1 UTF8String]);
if (![self verify:[tree aclSHA1] error:error]) {
fprintf(stderr, "tree %s's aclSHA1 %s not found", [treeSHA1 UTF8String], [[tree aclSHA1] UTF8String]);
return NO;
}
}
for (NSString *childNodeName in [tree childNodeNames]) {
Node *node = [tree childNodeWithName:childNodeName];
@ -100,29 +112,41 @@
return NO;
}
} else {
printf("verifying node %s\n", [childPath UTF8String]);
printf("verifying data sha1s for node %s\n", [childPath UTF8String]);
for (NSString *dataSHA1 in dataSHA1s) {
if (![self verify:dataSHA1 error:error]) {
HSLogError(@"missing data sha1 %@ for node %@ in tree %@", dataSHA1, childNodeName, treeSHA1);
return NO;
}
}
if (![self verify:[node thumbnailSHA1] error:error]) {
HSLogError(@"missing thumbnail sha1 %@ for node %@ in tree %@", [node thumbnailSHA1], childNodeName, treeSHA1);
return NO;
}
if (![self verify:[node previewSHA1] error:error]) {
HSLogError(@"missing preview sha1 %@ for node %@ in tree %@", [node previewSHA1], childNodeName, treeSHA1);
return NO;
}
if (![self verify:[node xattrsSHA1] error:error]) {
HSLogError(@"missing xattrs sha1 %@ for node %@ in tree %@", [node xattrsSHA1], childNodeName, treeSHA1);
return NO;
}
if (![self verify:[node aclSHA1] error:error]) {
HSLogError(@"missing acl sha1 %@ for node %@ in tree %@", [node aclSHA1], childNodeName, treeSHA1);
return NO;
}
if ([node thumbnailSHA1] != nil) {
printf("verifying thumbnailSHA1 for node %s\n", [childPath UTF8String]);
if (![self verify:[node thumbnailSHA1] error:error]) {
HSLogError(@"missing thumbnail sha1 %@ for node %@ in tree %@", [node thumbnailSHA1], childNodeName, treeSHA1);
return NO;
}
}
if ([node previewSHA1] != nil) {
printf("verifying previewSHA1 for node %s\n", [childPath UTF8String]);
if (![self verify:[node previewSHA1] error:error]) {
HSLogError(@"missing preview sha1 %@ for node %@ in tree %@", [node previewSHA1], childNodeName, treeSHA1);
return NO;
}
}
if ([node xattrsSHA1] != nil) {
printf("verifying xattrsSHA1 for node %s\n", [childPath UTF8String]);
if (![self verify:[node xattrsSHA1] error:error]) {
HSLogError(@"missing xattrs sha1 %@ for node %@ in tree %@", [node xattrsSHA1], childNodeName, treeSHA1);
return NO;
}
}
if ([node aclSHA1] != nil) {
printf("verifying aclSHA1 for node %s\n", [childPath UTF8String]);
if (![self verify:[node aclSHA1] error:error]) {
HSLogError(@"missing acl sha1 %@ for node %@ in tree %@", [node aclSHA1], childNodeName, treeSHA1);
return NO;
}
}
}
}
return YES;

View file

@ -60,8 +60,9 @@
goto init_error;
}
NSXMLNode *sizeNode = [nodes objectAtIndex:0];
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
size = [[numberFormatter numberFromString:[sizeNode stringValue]] longValue];
[numberFormatter release];
goto init_done;
init_error:
[self release];