|
From: <tiz...@us...> - 2012-09-14 19:22:28
|
Revision: 337
http://sepiola.svn.sourceforge.net/sepiola/?rev=337&view=rev
Author: tizianomueller
Date: 2012-09-14 19:22:17 +0000 (Fri, 14 Sep 2012)
Log Message:
-----------
Bandwidth-Limit support in rsync
thanks to Steve Ludovicy
Modified Paths:
--------------
trunk/src/model/backup_thread.cc
trunk/src/model/backup_thread.hh
trunk/src/settings/settings.cc
trunk/src/settings/settings.hh
trunk/src/tools/abstract_rsync.hh
trunk/src/tools/rsync.cc
trunk/src/tools/rsync.hh
Modified: trunk/src/model/backup_thread.cc
===================================================================
--- trunk/src/model/backup_thread.cc 2012-09-14 19:18:38 UTC (rev 336)
+++ trunk/src/model/backup_thread.cc 2012-09-14 19:22:17 UTC (rev 337)
@@ -54,6 +54,7 @@
Settings* settings = Settings::getInstance();
this->setDeleteFlag = settings->getDeleteExtraneousItems();
this->compressedUpload = settings->isCompressedRsyncTraffic();
+ this->bandwidthLimit = settings->getBandwidthLimit();
// TODO adjust the given values for subtask steps and durations
this->pt = ProgressTask("Backup", DateTimeUtils::getDateTimeFromSecs(60), 50);
@@ -124,7 +125,7 @@
this->pt.debugIsCorrectCurrentTask(TASKNAME_FILE_UPLOAD);
emit infoSignal( tr( "Uploading files and directories" ) );
- QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > processedItems = rsync->upload( includeRules, source, destination, setDeleteFlag, compressedUpload, &warnings, false );
+ QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > processedItems = rsync->upload( includeRules, source, destination, setDeleteFlag, compressedUpload, bandwidthLimit, &warnings, false );
checkAbortState();
if ((subPt = this->pt.getSubtask(TASKNAME_FILE_UPLOAD)) != 0) subPt->setTerminated(true);
@@ -147,7 +148,7 @@
updateBackupContentFile( currentBackupContentFile, processedItems );
QString warning;
- rsync->upload( currentBackupContentFile, metaDataDir, true, 0 );
+ rsync->upload( currentBackupContentFile, metaDataDir, true, 0, 0 );
checkAbortState();
if ((subPt = this->pt.getSubtask(TASKNAME_UPLOAD_METADATA)) != 0) subPt->setTerminated(true);
@@ -157,7 +158,7 @@
this->pt.debugIsCorrectCurrentTask(TASKNAME_METAINFO);
QString currentBackupTimeFile = createCurrentBackupTimeFile();
- rsync->upload( currentBackupTimeFile, metaDataDir, true, 0 );
+ rsync->upload( currentBackupTimeFile, metaDataDir, true, 0, 0 );
FileSystemUtils::removeFile( currentBackupTimeFile );
checkAbortState();
@@ -181,7 +182,7 @@
try
{
- rsync->upload( currentMetadataFileName, metaDataDir, true, &warning );
+ rsync->upload( currentMetadataFileName, metaDataDir, true, bandwidthLimit, &warning );
}
catch ( const ProcessException& e )
{
@@ -349,11 +350,11 @@
vars.append(QPair<QString,QString>(tr("current task"), infoText));
emit progressSignal(mySubPt->getName(), mySubPt->getRootTask()->getFinishedRatio(), mySubPt->getRootTask()->getEstimatedTimeLeft(), vars);
- rsync->upload( QStringList( backupPrefixFolder ), source, destination, QStringList(), QStringList(), false, false, 0, false );
+ rsync->upload( QStringList( backupPrefixFolder ), source, destination, QStringList(), QStringList(), false, false, 0, 0, false );
checkAbortState();
backupPrefixDir.mkdir( settings->getMetaFolderName() );
backupPrefixDir.mkdir( settings->getBackupFolderName() );
- rsync->upload( QStringList( backupPrefixFolder ), source, destination, QStringList(), QStringList(), false, false, 0, false );
+ rsync->upload( QStringList( backupPrefixFolder ), source, destination, QStringList(), QStringList(), false, false, 0, 0, false );
checkAbortState();
mySubPt->addFixpointNow(2);
emit progressSignal(mySubPt->getName(), mySubPt->getRootTask()->getFinishedRatio(), mySubPt->getRootTask()->getEstimatedTimeLeft(), vars);
@@ -378,7 +379,7 @@
QObject::connect( rsync.get(), SIGNAL( volumeCalculationInfoSignal( const QString&, long, long ) ),
this, SLOT( rsyncDryrunProgressHandler( const QString&, long, long ) ) );
- quint64 uploadSize = rsync->calculateUploadTransfer( includeRules, src, destination, false, false, NULL, NULL );
+ quint64 uploadSize = rsync->calculateUploadTransfer( includeRules, src, destination, false, false, bandwidthLimit, NULL, NULL );
QObject::disconnect( rsync.get(), SIGNAL( volumeCalculationInfoSignal( const QString&, long, long ) ),
this, SLOT( rsyncDryrunProgressHandler( const QString&, long, long ) ) );
Modified: trunk/src/model/backup_thread.hh
===================================================================
--- trunk/src/model/backup_thread.hh 2012-09-14 19:18:38 UTC (rev 336)
+++ trunk/src/model/backup_thread.hh 2012-09-14 19:22:17 UTC (rev 337)
@@ -107,6 +107,7 @@
QStringList excludePatternList;
bool setDeleteFlag;
bool compressedUpload;
+ int bandwidthLimit;
QDateTime backupStartDateTime;
ConstUtils::StatusEnum backupCurrentStatus;
ProgressTask pt;
Modified: trunk/src/settings/settings.cc
===================================================================
--- trunk/src/settings/settings.cc 2012-09-14 19:18:38 UTC (rev 336)
+++ trunk/src/settings/settings.cc 2012-09-14 19:22:17 UTC (rev 337)
@@ -56,7 +56,6 @@
const QString Settings::SETTINGS_PRIVATE_OPEN_SSH_KEY_FILE_NAME = "PrivateOpenSshKeyFileName";
const QString Settings::SETTINGS_LOCK_FILE_NAME = "LockFileName";
const QString Settings::SETTINGS_LOG_FILE_NAME = "LogFileName";
-const QString Settings::SETTINGS_LOG_DEBUG_MESSAGE = "LogDebugMessage";
const QString Settings::SETTINGS_IGNORE_REINSTALL = "IgnoreReinstall";
const QString Settings::SETTINGS_INCLUDE_PATTERN_FILE_NAME = "InlcudePatternFileName";
const QString Settings::SETTINGS_EXCLUDE_PATTERN_FILE_NAME = "ExcludePatternFileName";
@@ -101,8 +100,9 @@
const QString Settings::SETTINGS_WINDOW_SIZE = "WindowSize";
const QString Settings::SETTINGS_DELETE_EXTRANEOUS_ITEMS = "DeleteExtraneousItems";
const QString Settings::SETTINGS_SHOW_HIDDEN_FILES_AND_FOLDERS = "ShowHiddenFilesAndFolders";
+const QString Settings::SETTINGS_LOG_DEBUG_MESSAGE = "LogDebugMessage";
+const QString Settings::SETTINGS_BANDWITH_LIMIT = "BandwidthLimit";
-
// [Reseller]
const QString Settings::SETTINGS_GROUP_RESELLER = "Reseller";
const QString Settings::SETTINGS_RESELLER_ADDRESS = "ResellerAddress";
@@ -298,6 +298,7 @@
windowSize = userSettings->value( SETTINGS_WINDOW_SIZE ).toSize();
windowPosition = userSettings->value( SETTINGS_WINDOW_POSITION, QPoint( 200, 200 ) ).toPoint();
logDebugMessage = userSettings->value( SETTINGS_LOG_DEBUG_MESSAGE ).toBool();
+ bandwidthLimit = userSettings->value( SETTINGS_BANDWITH_LIMIT ).toInt();
// [AppData]
appData->beginGroup( SETTINGS_GROUP_APPDATA );
@@ -969,3 +970,17 @@
{
return logDebugMessage;
}
+
+void Settings::saveBandwidthLimit(int bandwidthLimit)
+{
+ if (this->bandwidthLimit != bandwidthLimit)
+ {
+ this->bandwidthLimit = bandwidthLimit;
+ userSettings->setValue(SETTINGS_BANDWITH_LIMIT, bandwidthLimit);
+ }
+}
+
+int Settings::getBandwidthLimit() const
+{
+ return bandwidthLimit;
+}
Modified: trunk/src/settings/settings.hh
===================================================================
--- trunk/src/settings/settings.hh 2012-09-14 19:18:38 UTC (rev 336)
+++ trunk/src/settings/settings.hh 2012-09-14 19:22:17 UTC (rev 337)
@@ -250,6 +250,10 @@
void saveWindowSize( QSize size );
QPoint getWindowPosition();
void saveWindowPosition( QPoint position );
+ void saveLogDebugMessages(bool logDebugMessage);
+ bool getLogDebugMessages() const;
+ void saveBandwidthLimit(int bandwidthLimit);
+ int getBandwidthLimit() const;
int getNOfLastBackups() const;
void saveNOfLastBackups( int nOfLastBackups );
@@ -262,9 +266,6 @@
const BackupSelectionHash& getLastBackupSelectionRules() const;
void saveBackupSelectionRules( const BackupSelectionHash& selectionRules );
- void saveLogDebugMessages(bool logDebugMessage);
- bool getLogDebugMessages() const;
-
static const QString VERSION;
private:
@@ -326,8 +327,8 @@
static const QString SETTINGS_WINDOW_POSITION;
static const QString SETTINGS_DELETE_EXTRANEOUS_ITEMS;
static const QString SETTINGS_SHOW_HIDDEN_FILES_AND_FOLDERS;
+ static const QString SETTINGS_BANDWITH_LIMIT;
-
// [Reseller]
static const QString SETTINGS_GROUP_RESELLER;
static const QString SETTINGS_RESELLER_ADDRESS;
@@ -412,6 +413,7 @@
bool deleteExtraneousItems;
bool showHiddenFilesAndFolders;
bool compressedRsyncTraffic; // read only at the moment
+ int bandwidthLimit;
QSize windowSize;
QPoint windowPosition;
Modified: trunk/src/tools/abstract_rsync.hh
===================================================================
--- trunk/src/tools/abstract_rsync.hh 2012-09-14 19:18:38 UTC (rev 336)
+++ trunk/src/tools/abstract_rsync.hh 2012-09-14 19:22:17 UTC (rev 337)
@@ -58,12 +58,12 @@
* @param errors a QString pointer for saving errors
* @return a list of transfered items
*/
- virtual QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const BackupSelectionHash& includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, QString* warnings, bool dry_run ) = 0;
- virtual QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const QStringList& items, const QString& source, const QString& destination, const QStringList& includePatternList, const QStringList& excludePatternList, bool setDeleteFlag, bool compress, QString* warnings, bool dry_run ) = 0;
+ virtual QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const BackupSelectionHash& includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* warnings, bool dry_run ) = 0;
+ virtual QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const QStringList& items, const QString& source, const QString& destination, const QStringList& includePatternList, const QStringList& excludePatternList, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* warnings, bool dry_run ) = 0;
- virtual long calculateUploadTransfer( const BackupSelectionHash includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, QString* errors, QString* warnings ) = 0;
+ virtual long calculateUploadTransfer( const BackupSelectionHash includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* errors, QString* warnings ) = 0;
- void upload( const QFileInfo& fileInfo, const QString& destination, bool bCompress, QString* warnings);
+ void upload( const QFileInfo& fileInfo, const QString& destination, bool bCompress, int bandwidthLimit, QString* warnings);
/**
* Downloads a full backup of the given name
@@ -145,11 +145,11 @@
{
}
-inline void AbstractRsync::upload( const QFileInfo& fileInfo, const QString& destination, bool compress, QString* warnings )
+inline void AbstractRsync::upload( const QFileInfo& fileInfo, const QString& destination, bool compress, int bandwidthLimit, QString* warnings )
{
QStringList fileNameList;
fileNameList << fileInfo.fileName();
- upload(fileNameList, fileInfo.absolutePath(), destination, QStringList(), QStringList(), false, compress, warnings, false );
+ upload(fileNameList, fileInfo.absolutePath(), destination, QStringList(), QStringList(), false, compress, bandwidthLimit, warnings, false );
}
#endif
Modified: trunk/src/tools/rsync.cc
===================================================================
--- trunk/src/tools/rsync.cc 2012-09-14 19:18:38 UTC (rev 336)
+++ trunk/src/tools/rsync.cc 2012-09-14 19:22:17 UTC (rev 337)
@@ -39,20 +39,21 @@
#include "utils/log_file_utils.hh"
#include "utils/string_utils.hh"
-Rsync::Rsync() {
- this->files_total = -1;
- this->cur_n_files_done = 0;
- this->lastUpdateTime = QDateTime::currentDateTime();
+Rsync::Rsync() :
+ progress_bytesRead(0),
+ progress_bytesWritten(0),
+ progress_trafficB_s(0),
+ files_total(-1),
+ cur_n_files_done(0),
+ lastUpdateTime(QDateTime::currentDateTime())
+{
+}
- this->progress_trafficB_s = 0;
- this->progress_bytesRead = 0;
- this->progress_bytesWritten = 0;
+Rsync::~Rsync()
+{
}
-Rsync::~Rsync() {}
-
-
-QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > Rsync::upload( const BackupSelectionHash& includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, QString* warnings, bool dry_run )
+QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > Rsync::upload( const BackupSelectionHash& includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* warnings, bool dry_run )
{
qDebug() << "Rsync::upload(" << includeRules << "," << src << "," << destination << "," << setDeleteFlag << "," << compress << "," << (warnings ? *warnings : "(no warnings)") << "," << dry_run << ")";
enum DryrunStates { DRY_RUN_START, DRY_RUN_COUNT_FILES, DRY_RUN_CALCULATE_SIZE, DRY_RUN_END };
@@ -81,6 +82,10 @@
{
arguments << "-z";
}
+
+ if (bandwidthLimit > 0)
+ arguments << QString("--bwlimit=%1").arg(bandwidthLimit);
+
arguments << source;
arguments << getValidDestinationPath( destination );
arguments << "--include-from=-";
@@ -227,7 +232,7 @@
/**
* deprecated
*/
-QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > Rsync::upload( const QStringList& items, const QString& src, const QString& destination, const QStringList& includePatternList, const QStringList& excludePatternList, bool setDeleteFlag, bool compress, QString* warnings, bool dry_run )
+QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > Rsync::upload( const QStringList& items, const QString& src, const QString& destination, const QStringList& includePatternList, const QStringList& excludePatternList, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* warnings, bool dry_run )
{
QString STATISTICS_FIRST_USED_LABEL = "Literal data:";
QString STATISTICS_FIRST_LABEL = "Number of files:";
@@ -251,6 +256,10 @@
{
arguments << "-z";
}
+
+ if (bandwidthLimit > 0)
+ arguments << QString("--bwlimit=%1").arg(bandwidthLimit);
+
arguments << source;
arguments << getValidDestinationPath( destination );
@@ -345,9 +354,9 @@
}
-long Rsync::calculateUploadTransfer( const BackupSelectionHash includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, QString* /* errors */, QString* warnings )
+long Rsync::calculateUploadTransfer( const BackupSelectionHash includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* /* errors */, QString* warnings )
{
- this->upload( includeRules, src, destination, setDeleteFlag, compress, warnings, true );
+ this->upload( includeRules, src, destination, setDeleteFlag, compress, bandwidthLimit, warnings, true );
return this->last_calculatedLiteralData;
}
@@ -1061,7 +1070,7 @@
QString destination = settings->getServerUserName() + "@" + settings->getServerName() + ":" + StringUtils::quoteText(settings->getBackupRootFolder() + backup_prefix + "/" + settings->getBackupFolderName() + "/", "'");
Rsync rsync;
QString warnings;
- rsync.upload( files, source, destination, QStringList(), QStringList(), false, false, &warnings, false );
+ rsync.upload( files, source, destination, QStringList(), QStringList(), false, false, 0, &warnings, false );
qDebug() << "warnings: " << warnings;
}
Modified: trunk/src/tools/rsync.hh
===================================================================
--- trunk/src/tools/rsync.hh 2012-09-14 19:18:38 UTC (rev 336)
+++ trunk/src/tools/rsync.hh 2012-09-14 19:22:17 UTC (rev 337)
@@ -58,13 +58,13 @@
/**
* @see AbstractRsync::upload( const QStringList& items, const QString& source, const QString& destination, const QString& includePattern, const QString& excludePattern, QString* errors )
*/
- QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const BackupSelectionHash& includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, QString* warnings, bool dry_run );
- QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const QStringList& items, const QString& source, const QString& destination, const QStringList& includePatternList, const QStringList& excludePatternList, bool setDeleteFlag, bool bCompress, QString* warnings, bool dry_run );
+ QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const BackupSelectionHash& includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* warnings, bool dry_run );
+ QList< QPair<QString, AbstractRsync::ITEMIZE_CHANGE_TYPE> > upload( const QStringList& items, const QString& source, const QString& destination, const QStringList& includePatternList, const QStringList& excludePatternList, bool setDeleteFlag, bool bCompress, int bandwidthLimit, QString* warnings, bool dry_run );
/**
*
*/
- long calculateUploadTransfer( const BackupSelectionHash includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, QString* errors, QString* warnings );
+ long calculateUploadTransfer( const BackupSelectionHash includeRules, const QString& src, const QString& destination, bool setDeleteFlag, bool compress, int bandwidthLimit, QString* errors, QString* warnings );
/**
* @see AbstractRsync::downloadFullBackup( const QString& backup_prefix, const QString& backupName, const QString& destination )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|