[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [sink/develop] common: Prepared aborting of synchronization commands
From: Christian Mollekopf <null () kde ! org>
Date: 2018-09-13 16:14:15
Message-ID: E1g0UFz-0002eN-PF () code ! kde ! org
[Download RAW message or body]
Git commit 08ec317e913f2679bf10329cd1a7423964266b46 by Christian Mollekopf.
Committed on 13/09/2018 at 16:14.
Pushed by cmollekopf into branch 'develop'.
Prepared aborting of synchronization commands
M +3 -0 common/commandprocessor.cpp
M +2 -0 common/commands.cpp
M +1 -0 common/commands.h
M +1 -0 common/listener.cpp
M +14 -0 common/store.cpp
M +5 -0 common/store.h
M +6 -0 common/synchronizer.cpp
M +3 -0 common/synchronizer.h
https://commits.kde.org/sink/08ec317e913f2679bf10329cd1a7423964266b46
diff --git a/common/commandprocessor.cpp b/common/commandprocessor.cpp
index 8b6e685..c57ded8 100644
--- a/common/commandprocessor.cpp
+++ b/common/commandprocessor.cpp
@@ -79,6 +79,9 @@ void CommandProcessor::processCommand(int commandId, const QByteArray &data)
case Commands::SynchronizeCommand:
processSynchronizeCommand(data);
break;
+ case Commands::AbortSynchronizationCommand:
+ mSynchronizer->abort();
+ break;
// case Commands::RevisionReplayedCommand:
// processRevisionReplayedCommand(data);
// break;
diff --git a/common/commands.cpp b/common/commands.cpp
index 0ec2c7b..18508da 100644
--- a/common/commands.cpp
+++ b/common/commands.cpp
@@ -67,6 +67,8 @@ QByteArray name(int commandId)
return "Secret";
case UpgradeCommand:
return "Upgrade";
+ case AbortSynchronizationCommand:
+ return "AbortSynchronization";
case CustomCommand:
return "Custom";
};
diff --git a/common/commands.h b/common/commands.h
index 9ca92a3..2eb5ec5 100644
--- a/common/commands.h
+++ b/common/commands.h
@@ -50,6 +50,7 @@ enum CommandIds
FlushCommand,
SecretCommand,
UpgradeCommand,
+ AbortSynchronizationCommand,
CustomCommand = 0xffff
};
diff --git a/common/listener.cpp b/common/listener.cpp
index ffc25c8..7b8fb8a 100644
--- a/common/listener.cpp
+++ b/common/listener.cpp
@@ -268,6 +268,7 @@ void Listener::processCommand(int commandId, uint messageId, const \
QByteArray &c case Sink::Commands::ModifyEntityCommand:
case Sink::Commands::CreateEntityCommand:
case Sink::Commands::FlushCommand:
+ case Sink::Commands::AbortSynchronizationCommand:
SinkTrace() << "Command id " << messageId << " of type \"" << \
Sink::Commands::name(commandId) << "\" from " << client.name; \
loadResource().processCommand(commandId, commandBuffer); break;
diff --git a/common/store.cpp b/common/store.cpp
index b68cb68..38d8a7a 100644
--- a/common/store.cpp
+++ b/common/store.cpp
@@ -420,6 +420,20 @@ KAsync::Job<void> Store::synchronize(const Sink::SyncScope &scope)
});
}
+KAsync::Job<void> Store::abortSynchronization(const QByteArray &identifier)
+{
+ auto resourceAccess = ResourceAccessFactory::instance().getAccess(identifier, \
ResourceConfig::getResourceType(identifier)); + return \
resourceAccess->sendCommand(Sink::Commands::AbortSynchronizationCommand) + \
.addToContext(resourceAccess) + .then([=](const KAsync::Error &error) {
+ if (error) {
+ SinkWarning() << "Error aborting synchronization.";
+ return KAsync::error(error);
+ }
+ return KAsync::null();
+ });
+}
+
template <class DomainType>
KAsync::Job<DomainType> Store::fetchOne(const Sink::Query &query)
{
diff --git a/common/store.h b/common/store.h
index fb9c3fe..f200132 100644
--- a/common/store.h
+++ b/common/store.h
@@ -113,6 +113,11 @@ KAsync::Job<void> SINK_EXPORT copy(const DomainType &domainObject, const \
QByteAr KAsync::Job<void> SINK_EXPORT synchronize(const Sink::Query &query);
KAsync::Job<void> SINK_EXPORT synchronize(const Sink::SyncScope &query);
+/**
+ * Abort all running synchronization commands.
+ */
+KAsync::Job<void> SINK_EXPORT abortSynchronization(const QByteArray &resourceIdentifier);
+
/**
* Removes all resource data from disk.
*
diff --git a/common/synchronizer.cpp b/common/synchronizer.cpp
index 7ae22d0..7f382ed 100644
--- a/common/synchronizer.cpp
+++ b/common/synchronizer.cpp
@@ -332,6 +332,12 @@ void Synchronizer::synchronize(const Sink::QueryBase &query)
processSyncQueue().exec();
}
+void Synchronizer::abort()
+{
+ SinkTraceCtx(mLogCtx) << "Aborting all running synchronization requests";
+ mSyncRequestQueue.clear();
+}
+
void Synchronizer::flush(int commandId, const QByteArray &flushId)
{
Q_ASSERT(!flushId.isEmpty());
diff --git a/common/synchronizer.h b/common/synchronizer.h
index d1420e6..7b5c141 100644
--- a/common/synchronizer.h
+++ b/common/synchronizer.h
@@ -62,6 +62,9 @@ public:
void setSecret(const QString &s);
+ //Abort all running synchronization requests
+ void abort();
+
signals:
void notify(Notification);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic