mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp
branchRCL_3
changeset 19 51035f0751c2
parent 17 780c925249c1
child 23 4740b34b83ce
equal deleted inserted replaced
17:780c925249c1 19:51035f0751c2
   166             MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in %S drive",
   166             MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in %S drive",
   167                 &drivePath);
   167                 &drivePath);
   168             TRAP( check, GetDatabaseL(static_cast<TDriveNumber>(driveNum)) );
   168             TRAP( check, GetDatabaseL(static_cast<TDriveNumber>(driveNum)) );
   169             if( check == KErrNotFound )
   169             if( check == KErrNotFound )
   170                 {
   170                 {
       
   171                 MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: re-creating database");
   171                 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL(
   172                 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL(
   172                     static_cast<TDriveNumber>(driveNum), iFs );
   173                     static_cast<TDriveNumber>(driveNum), iFs );
   173                 CleanupStack::PushL( dB );
   174                 CleanupStack::PushL( dB );
   174                 TRAPD(openError, rtn |= dB->OpenL() );  //lint !e665
   175                 TRAPD(openError, rtn |= dB->OpenL() );  //lint !e665
   175                 if(openError == KErrNone)
   176                 if(openError == KErrNone)
   177                      iDatabases.AppendL( dB );
   178                      iDatabases.AppendL( dB );
   178                      CleanupStack::Pop( dB );
   179                      CleanupStack::Pop( dB );
   179                     }
   180                     }
   180                 else
   181                 else
   181                     {
   182                     {
       
   183                     MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
   182                     CleanupStack::PopAndDestroy( dB );
   184                     CleanupStack::PopAndDestroy( dB );
   183                     }
   185                     }
   184                 }
   186                 }
   185             else if( check == KErrNone )
   187             else if( check == KErrNone )
   186                 {
   188                 {
   187                 TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() );
   189                 TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() );
   188                 if(openError != KErrNone)
   190                 if(openError != KErrNone)
   189                     {
   191                     {
       
   192                     MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
   190                     TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum)));
   193                     TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum)));
   191                     }
   194                     }
   192                 }
   195                 }
   193             }
   196             }
   194         }
   197         }
   291             {
   294             {
   292             CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i];
   295             CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i];
   293             if ( db->GetDbDrive() == aDrive)
   296             if ( db->GetDbDrive() == aDrive)
   294                 {
   297                 {
   295                 db->Close();
   298                 db->Close();
       
   299 #ifdef __RAMDISK_PERF_ENABLE                
       
   300                 if( iRAMDiskPerfEnabled && db->IsUseRamDrive() )
       
   301                     {
       
   302                     MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM");
       
   303                     db->SetRamDriveInfo( iRAMDrive, EFalse ); 
       
   304                     TRAPD( err, DoCopyDBFromRamL(aDrive) );
       
   305                     if ( err )
       
   306                         {
       
   307                         MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err);                
       
   308                         RemoveDummyFile(i);
       
   309                         }
       
   310                     }
       
   311 #endif
   296                 break;
   312                 break;
   297                 }
   313                 }
   298             }
   314             }
   299         }
   315         }
   300     MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase --->");
   316     MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase --->");
   587     //iMtpAddCount = 0;
   603     //iMtpAddCount = 0;
   588     //iUpdateCount = 0;
   604     //iUpdateCount = 0;
   589 
   605 
   590     if( iRAMDiskPerfEnabled )
   606     if( iRAMDiskPerfEnabled )
   591        {
   607        {
       
   608         // Should not leave until all the databases have been copied from RAM drive. 
       
   609         TInt leaveError = KErrNone;
   592         TInt count(iDatabases.Count());
   610         TInt count(iDatabases.Count());
   593         for (TInt i = 0; i < count; ++i)
   611         for (TInt i = 0; i < count; ++i)
   594             {
   612             {
   595             TInt err = KErrNone;
   613             TInt err = KErrNone;
   596             TDriveUnit drive( iDatabases[i]->GetDbDrive() );
   614             TDriveUnit drive( iDatabases[i]->GetDbDrive() );
   603 
   621 
   604             // Set the UseRamDrive bool to False.
   622             // Set the UseRamDrive bool to False.
   605             iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse );
   623             iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse );
   606             // Get the db state in order to restore it later.
   624             // Get the db state in order to restore it later.
   607             TDbState dbState = iDatabases[i]->GetDbState();
   625             TDbState dbState = iDatabases[i]->GetDbState();
   608             iDatabases[i]->SetDbStateL(EDbClose);
   626             TRAP( err, iDatabases[i]->SetDbStateL(EDbClose) );
   609             TRAP( err, DoCopyDBFromRamL(drive) );
   627             if ( err == KErrNone )
       
   628                 {
       
   629                 TRAP( err, DoCopyDBFromRamL(drive) );
       
   630                 }
       
   631             else
       
   632                 {
       
   633                 // Error closing db on RAM drive, try to delete it.
       
   634                 TFileName ramDB;
       
   635                 ramDB = GenerateHarvesterDbName( drive, ETrue );
       
   636                 BaflUtils::DeleteFile(iFs, ramDB);
       
   637                 }
       
   638             
   610             if ( err )
   639             if ( err )
   611                 {
   640                 {
   612                 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err);                
   641                 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err);                
   613                 //anyting wrong, delete the temp file.
   642                 //anyting wrong, delete the temp file.
   614                 RemoveDummyFile(i);
   643                 RemoveDummyFile(i);
   615                 }
   644                 }
   616 
   645 
   617             // Restore the db state.
   646             // Restore the db state.
   618             iDatabases[i]->SetDbStateL( dbState );
   647             TRAPD( error, iDatabases[i]->SetDbStateL( dbState ) );
   619             }
   648             if ( error && !leaveError )
       
   649                 {
       
   650                 leaveError = error;
       
   651                 }
       
   652             }
       
   653         User::LeaveIfError( leaveError );
   620         }
   654         }
   621     }
   655     }
   622 
   656 
   623 // ---------------------------------------------------------------------------
   657 // ---------------------------------------------------------------------------
   624 // CMPXHarvesterDatabaseManager::DoCopyDBFromRamL
   658 // CMPXHarvesterDatabaseManager::DoCopyDBFromRamL
   633     
   667     
   634     dst = GenerateHarvesterDbName( aDriveUnit );
   668     dst = GenerateHarvesterDbName( aDriveUnit );
   635     src = GenerateHarvesterDbName( aDriveUnit, ETrue );
   669     src = GenerateHarvesterDbName( aDriveUnit, ETrue );
   636     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst );
   670     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst );
   637 
   671 
   638     // Rename the temp file into real Db name
       
   639     TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); 
   672     TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); 
   640 
   673 
   641     //Copy Db from RAM to replace dummy file
   674     //Copy Db from RAM to replace dummy file
   642     err = BaflUtils::CopyFile(iFs, src, dummyDbFileName);
   675     err = BaflUtils::CopyFile(iFs, src, dummyDbFileName);
   643     MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err);
   676     MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err);
   644     
   677     
   645     // delete db in ram drive.
   678     // delete db on ram drive.
   646     TInt delErr = BaflUtils::DeleteFile(iFs, src);
   679     TInt delErr = BaflUtils::DeleteFile(iFs, src);
   647     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr);
   680     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr);
   648 
   681 
   649     // Make sure we del db from ram drive before leaving.
   682     // Make sure we del db from ram drive before leaving.
   650     User::LeaveIfError( err );
   683     User::LeaveIfError( err );