diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-07-07 22:23:49 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-07-07 22:23:49 +0200 |
commit | da2b049e248c1ad7efeb53685158a205335e4e36 (patch) | |
tree | 1e7e5e940e9b760b2108081b1d2f3879cebdb0ff | |
parent | 9bcb822963fc96c94dbe7dcc4134dcd2dac454ff (diff) | |
download | sink-da2b049e248c1ad7efeb53685158a205335e4e36.tar.gz sink-da2b049e248c1ad7efeb53685158a205335e4e36.zip |
A new debug system.
Instead of a single #define as debug area the new system allows for an
identifier for each debug message with the structure component.area.
The component is a dot separated identifier of the runtime component,
such as the process or the plugin.
The area is the code component, and can be as such defined at
compiletime.
The idea of this system is that it becomes possible to i.e. look at the
output of all messages in the query subsystem of a specific resource
(something that happens in the client process, but in the
resource-specific subcomponent).
The new macros are supposed to be less likely to clash with other names,
hence the new names.
48 files changed, 565 insertions, 527 deletions
diff --git a/common/changereplay.cpp b/common/changereplay.cpp index 78c0ff5..99bbaab 100644 --- a/common/changereplay.cpp +++ b/common/changereplay.cpp | |||
@@ -26,13 +26,12 @@ | |||
26 | 26 | ||
27 | using namespace Sink; | 27 | using namespace Sink; |
28 | 28 | ||
29 | #undef DEBUG_AREA | 29 | SINK_DEBUG_AREA("changereplay"); |
30 | #define DEBUG_AREA "resource.changereplay" | ||
31 | 30 | ||
32 | ChangeReplay::ChangeReplay(const QByteArray &resourceName) | 31 | ChangeReplay::ChangeReplay(const QByteArray &resourceName) |
33 | : mStorage(storageLocation(), resourceName, Storage::ReadOnly), mChangeReplayStore(storageLocation(), resourceName + ".changereplay", Storage::ReadWrite), mReplayInProgress(false) | 32 | : mStorage(storageLocation(), resourceName, Storage::ReadOnly), mChangeReplayStore(storageLocation(), resourceName + ".changereplay", Storage::ReadWrite), mReplayInProgress(false) |
34 | { | 33 | { |
35 | Trace() << "Created change replay: " << resourceName; | 34 | SinkTrace() << "Created change replay: " << resourceName; |
36 | } | 35 | } |
37 | 36 | ||
38 | qint64 ChangeReplay::getLastReplayedRevision() | 37 | qint64 ChangeReplay::getLastReplayedRevision() |
@@ -51,10 +50,10 @@ qint64 ChangeReplay::getLastReplayedRevision() | |||
51 | bool ChangeReplay::allChangesReplayed() | 50 | bool ChangeReplay::allChangesReplayed() |
52 | { | 51 | { |
53 | const qint64 topRevision = Storage::maxRevision(mStorage.createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { | 52 | const qint64 topRevision = Storage::maxRevision(mStorage.createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { |
54 | Warning() << error.message; | 53 | SinkWarning() << error.message; |
55 | })); | 54 | })); |
56 | const qint64 lastReplayedRevision = getLastReplayedRevision(); | 55 | const qint64 lastReplayedRevision = getLastReplayedRevision(); |
57 | Trace() << "All changes replayed " << topRevision << lastReplayedRevision; | 56 | SinkTrace() << "All changes replayed " << topRevision << lastReplayedRevision; |
58 | return (lastReplayedRevision >= topRevision); | 57 | return (lastReplayedRevision >= topRevision); |
59 | } | 58 | } |
60 | 59 | ||
@@ -62,10 +61,10 @@ KAsync::Job<void> ChangeReplay::replayNextRevision() | |||
62 | { | 61 | { |
63 | mReplayInProgress = true; | 62 | mReplayInProgress = true; |
64 | auto mainStoreTransaction = mStorage.createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { | 63 | auto mainStoreTransaction = mStorage.createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { |
65 | Warning() << error.message; | 64 | SinkWarning() << error.message; |
66 | }); | 65 | }); |
67 | auto replayStoreTransaction = mChangeReplayStore.createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { | 66 | auto replayStoreTransaction = mChangeReplayStore.createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { |
68 | Warning() << error.message; | 67 | SinkWarning() << error.message; |
69 | }); | 68 | }); |
70 | qint64 lastReplayedRevision = 0; | 69 | qint64 lastReplayedRevision = 0; |
71 | replayStoreTransaction.openDatabase().scan("lastReplayedRevision", | 70 | replayStoreTransaction.openDatabase().scan("lastReplayedRevision", |
@@ -78,14 +77,14 @@ KAsync::Job<void> ChangeReplay::replayNextRevision() | |||
78 | 77 | ||
79 | auto recordReplayedRevision = [this](qint64 revision) { | 78 | auto recordReplayedRevision = [this](qint64 revision) { |
80 | auto replayStoreTransaction = mChangeReplayStore.createTransaction(Storage::ReadWrite, [](const Sink::Storage::Error &error) { | 79 | auto replayStoreTransaction = mChangeReplayStore.createTransaction(Storage::ReadWrite, [](const Sink::Storage::Error &error) { |
81 | Warning() << error.message; | 80 | SinkWarning() << error.message; |
82 | }); | 81 | }); |
83 | replayStoreTransaction.openDatabase().write("lastReplayedRevision", QByteArray::number(revision)); | 82 | replayStoreTransaction.openDatabase().write("lastReplayedRevision", QByteArray::number(revision)); |
84 | replayStoreTransaction.commit(); | 83 | replayStoreTransaction.commit(); |
85 | }; | 84 | }; |
86 | 85 | ||
87 | if (lastReplayedRevision < topRevision) { | 86 | if (lastReplayedRevision < topRevision) { |
88 | Trace() << "Changereplay from " << lastReplayedRevision << " to " << topRevision; | 87 | SinkTrace() << "Changereplay from " << lastReplayedRevision << " to " << topRevision; |
89 | emit replayingChanges(); | 88 | emit replayingChanges(); |
90 | qint64 revision = lastReplayedRevision + 1; | 89 | qint64 revision = lastReplayedRevision + 1; |
91 | const auto uid = Storage::getUidFromRevision(mainStoreTransaction, revision); | 90 | const auto uid = Storage::getUidFromRevision(mainStoreTransaction, revision); |
@@ -95,25 +94,25 @@ KAsync::Job<void> ChangeReplay::replayNextRevision() | |||
95 | Storage::mainDatabase(mainStoreTransaction, type) | 94 | Storage::mainDatabase(mainStoreTransaction, type) |
96 | .scan(key, | 95 | .scan(key, |
97 | [&lastReplayedRevision, type, this, &replayJob](const QByteArray &key, const QByteArray &value) -> bool { | 96 | [&lastReplayedRevision, type, this, &replayJob](const QByteArray &key, const QByteArray &value) -> bool { |
98 | Trace() << "Replaying " << key; | 97 | SinkTrace() << "Replaying " << key; |
99 | replayJob = replay(type, key, value); | 98 | replayJob = replay(type, key, value); |
100 | return false; | 99 | return false; |
101 | }, | 100 | }, |
102 | [key](const Storage::Error &) { ErrorMsg() << "Failed to replay change " << key; }); | 101 | [key](const Storage::Error &) { SinkError() << "Failed to replay change " << key; }); |
103 | return replayJob.then<void>([this, revision, recordReplayedRevision]() { | 102 | return replayJob.then<void>([this, revision, recordReplayedRevision]() { |
104 | Trace() << "Replayed until " << revision; | 103 | SinkTrace() << "Replayed until " << revision; |
105 | recordReplayedRevision(revision); | 104 | recordReplayedRevision(revision); |
106 | //replay until we're done | 105 | //replay until we're done |
107 | replayNextRevision().exec(); | 106 | replayNextRevision().exec(); |
108 | }, | 107 | }, |
109 | [this, revision, recordReplayedRevision](int, QString) { | 108 | [this, revision, recordReplayedRevision](int, QString) { |
110 | Trace() << "Change replay failed" << revision; | 109 | SinkTrace() << "Change replay failed" << revision; |
111 | //We're probably not online or so, so postpone retrying | 110 | //We're probably not online or so, so postpone retrying |
112 | mReplayInProgress = false; | 111 | mReplayInProgress = false; |
113 | emit changesReplayed(); | 112 | emit changesReplayed(); |
114 | }); | 113 | }); |
115 | } else { | 114 | } else { |
116 | Trace() << "No changes to replay"; | 115 | SinkTrace() << "No changes to replay"; |
117 | mReplayInProgress = false; | 116 | mReplayInProgress = false; |
118 | emit changesReplayed(); | 117 | emit changesReplayed(); |
119 | } | 118 | } |
diff --git a/common/configstore.cpp b/common/configstore.cpp index a8469ba..c8809ea 100644 --- a/common/configstore.cpp +++ b/common/configstore.cpp | |||
@@ -24,6 +24,8 @@ | |||
24 | #include <QFile> | 24 | #include <QFile> |
25 | #include <log.h> | 25 | #include <log.h> |
26 | 26 | ||
27 | SINK_DEBUG_AREA("configstore") | ||
28 | |||
27 | static QSharedPointer<QSettings> getConfig(const QByteArray &identifier) | 29 | static QSharedPointer<QSettings> getConfig(const QByteArray &identifier) |
28 | { | 30 | { |
29 | return QSharedPointer<QSettings>::create(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/sink/" + identifier + ".ini", QSettings::IniFormat); | 31 | return QSharedPointer<QSettings>::create(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/sink/" + identifier + ".ini", QSettings::IniFormat); |
@@ -50,7 +52,7 @@ QMap<QByteArray, QByteArray> ConfigStore::getEntries() | |||
50 | 52 | ||
51 | void ConfigStore::add(const QByteArray &identifier, const QByteArray &type) | 53 | void ConfigStore::add(const QByteArray &identifier, const QByteArray &type) |
52 | { | 54 | { |
53 | Trace() << "Adding " << identifier; | 55 | SinkTrace() << "Adding " << identifier; |
54 | mConfig->beginGroup(QString::fromLatin1(identifier)); | 56 | mConfig->beginGroup(QString::fromLatin1(identifier)); |
55 | mConfig->setValue("type", type); | 57 | mConfig->setValue("type", type); |
56 | mConfig->endGroup(); | 58 | mConfig->endGroup(); |
@@ -59,7 +61,7 @@ void ConfigStore::add(const QByteArray &identifier, const QByteArray &type) | |||
59 | 61 | ||
60 | void ConfigStore::remove(const QByteArray &identifier) | 62 | void ConfigStore::remove(const QByteArray &identifier) |
61 | { | 63 | { |
62 | Trace() << "Removing " << identifier; | 64 | SinkTrace() << "Removing " << identifier; |
63 | mConfig->beginGroup(QString::fromLatin1(identifier)); | 65 | mConfig->beginGroup(QString::fromLatin1(identifier)); |
64 | mConfig->remove(""); | 66 | mConfig->remove(""); |
65 | mConfig->endGroup(); | 67 | mConfig->endGroup(); |
@@ -75,7 +77,7 @@ void ConfigStore::clear() | |||
75 | 77 | ||
76 | void ConfigStore::modify(const QByteArray &identifier, const QMap<QByteArray, QVariant> &configuration) | 78 | void ConfigStore::modify(const QByteArray &identifier, const QMap<QByteArray, QVariant> &configuration) |
77 | { | 79 | { |
78 | Trace() << "Modifying " << identifier; | 80 | SinkTrace() << "Modifying " << identifier; |
79 | auto config = getConfig(identifier); | 81 | auto config = getConfig(identifier); |
80 | config->clear(); | 82 | config->clear(); |
81 | for (const auto &key : configuration.keys()) { | 83 | for (const auto &key : configuration.keys()) { |
diff --git a/common/domain/applicationdomaintype.cpp b/common/domain/applicationdomaintype.cpp index 44eeb13..57919ff 100644 --- a/common/domain/applicationdomaintype.cpp +++ b/common/domain/applicationdomaintype.cpp | |||
@@ -24,6 +24,8 @@ | |||
24 | #include "storage.h" //for generateUid() | 24 | #include "storage.h" //for generateUid() |
25 | #include <QFile> | 25 | #include <QFile> |
26 | 26 | ||
27 | SINK_DEBUG_AREA("applicationdomaintype"); | ||
28 | |||
27 | namespace Sink { | 29 | namespace Sink { |
28 | namespace ApplicationDomain { | 30 | namespace ApplicationDomain { |
29 | 31 | ||
@@ -82,7 +84,7 @@ QVariant ApplicationDomainType::getProperty(const QByteArray &key) const | |||
82 | { | 84 | { |
83 | Q_ASSERT(mAdaptor); | 85 | Q_ASSERT(mAdaptor); |
84 | if (!mAdaptor->availableProperties().contains(key)) { | 86 | if (!mAdaptor->availableProperties().contains(key)) { |
85 | Warning() << "No such property available " << key; | 87 | SinkWarning() << "No such property available " << key; |
86 | } | 88 | } |
87 | return mAdaptor->getProperty(key); | 89 | return mAdaptor->getProperty(key); |
88 | } | 90 | } |
@@ -105,7 +107,7 @@ QByteArray ApplicationDomainType::getBlobProperty(const QByteArray &key) const | |||
105 | const auto path = getProperty(key).toByteArray(); | 107 | const auto path = getProperty(key).toByteArray(); |
106 | QFile file(path); | 108 | QFile file(path); |
107 | if (!file.open(QIODevice::ReadOnly)) { | 109 | if (!file.open(QIODevice::ReadOnly)) { |
108 | ErrorMsg() << "Failed to open the file: " << file.errorString() << path; | 110 | SinkError() << "Failed to open the file: " << file.errorString() << path; |
109 | return QByteArray(); | 111 | return QByteArray(); |
110 | } | 112 | } |
111 | return file.readAll(); | 113 | return file.readAll(); |
@@ -116,7 +118,7 @@ void ApplicationDomainType::setBlobProperty(const QByteArray &key, const QByteAr | |||
116 | const auto path = Sink::temporaryFileLocation() + "/" + QUuid::createUuid().toString(); | 118 | const auto path = Sink::temporaryFileLocation() + "/" + QUuid::createUuid().toString(); |
117 | QFile file(path); | 119 | QFile file(path); |
118 | if (!file.open(QIODevice::WriteOnly)) { | 120 | if (!file.open(QIODevice::WriteOnly)) { |
119 | ErrorMsg() << "Failed to open the file: " << file.errorString() << path; | 121 | SinkError() << "Failed to open the file: " << file.errorString() << path; |
120 | return; | 122 | return; |
121 | } | 123 | } |
122 | file.write(value); | 124 | file.write(value); |
diff --git a/common/domain/folder.cpp b/common/domain/folder.cpp index 309ca3f..ddb0c10 100644 --- a/common/domain/folder.cpp +++ b/common/domain/folder.cpp | |||
@@ -35,6 +35,8 @@ | |||
35 | 35 | ||
36 | #include "folder_generated.h" | 36 | #include "folder_generated.h" |
37 | 37 | ||
38 | SINK_DEBUG_AREA("folder"); | ||
39 | |||
38 | static QMutex sMutex; | 40 | static QMutex sMutex; |
39 | 41 | ||
40 | using namespace Sink::ApplicationDomain; | 42 | using namespace Sink::ApplicationDomain; |
@@ -58,7 +60,7 @@ ResultSet TypeImplementation<Folder>::queryIndexes(const Sink::Query &query, con | |||
58 | 60 | ||
59 | void TypeImplementation<Folder>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 61 | void TypeImplementation<Folder>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) |
60 | { | 62 | { |
61 | Trace() << "Indexing " << identifier; | 63 | SinkTrace() << "Indexing " << identifier; |
62 | getIndex().add(identifier, bufferAdaptor, transaction); | 64 | getIndex().add(identifier, bufferAdaptor, transaction); |
63 | } | 65 | } |
64 | 66 | ||
diff --git a/common/domain/mail.cpp b/common/domain/mail.cpp index 5b35a9a..13e1305 100644 --- a/common/domain/mail.cpp +++ b/common/domain/mail.cpp | |||
@@ -35,6 +35,8 @@ | |||
35 | 35 | ||
36 | #include "mail_generated.h" | 36 | #include "mail_generated.h" |
37 | 37 | ||
38 | SINK_DEBUG_AREA("mail"); | ||
39 | |||
38 | static QMutex sMutex; | 40 | static QMutex sMutex; |
39 | 41 | ||
40 | using namespace Sink::ApplicationDomain; | 42 | using namespace Sink::ApplicationDomain; |
@@ -63,7 +65,7 @@ ResultSet TypeImplementation<Mail>::queryIndexes(const Sink::Query &query, const | |||
63 | 65 | ||
64 | void TypeImplementation<Mail>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 66 | void TypeImplementation<Mail>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) |
65 | { | 67 | { |
66 | Trace() << "Indexing " << identifier; | 68 | SinkTrace() << "Indexing " << identifier; |
67 | getIndex().add(identifier, bufferAdaptor, transaction); | 69 | getIndex().add(identifier, bufferAdaptor, transaction); |
68 | } | 70 | } |
69 | 71 | ||
diff --git a/common/domainadaptor.h b/common/domainadaptor.h index 8ac8171..25448f3 100644 --- a/common/domainadaptor.h +++ b/common/domainadaptor.h | |||
@@ -47,12 +47,12 @@ createBufferPart(const Sink::ApplicationDomain::ApplicationDomainType &domainObj | |||
47 | // First create a primitives such as strings using the mappings | 47 | // First create a primitives such as strings using the mappings |
48 | QList<std::function<void(Builder &)>> propertiesToAddToResource; | 48 | QList<std::function<void(Builder &)>> propertiesToAddToResource; |
49 | for (const auto &property : domainObject.changedProperties()) { | 49 | for (const auto &property : domainObject.changedProperties()) { |
50 | // Trace() << "copying property " << property; | 50 | // SinkTrace() << "copying property " << property; |
51 | const auto value = domainObject.getProperty(property); | 51 | const auto value = domainObject.getProperty(property); |
52 | if (mapper.hasMapping(property)) { | 52 | if (mapper.hasMapping(property)) { |
53 | mapper.setProperty(property, domainObject.getProperty(property), propertiesToAddToResource, fbb); | 53 | mapper.setProperty(property, domainObject.getProperty(property), propertiesToAddToResource, fbb); |
54 | } else { | 54 | } else { |
55 | // Trace() << "no mapping for property available " << property; | 55 | // SinkTrace() << "no mapping for property available " << property; |
56 | } | 56 | } |
57 | } | 57 | } |
58 | 58 | ||
@@ -79,7 +79,7 @@ static void createBufferPartBuffer(const Sink::ApplicationDomain::ApplicationDom | |||
79 | fbb.Finish(pos, "AKFB"); | 79 | fbb.Finish(pos, "AKFB"); |
80 | flatbuffers::Verifier verifier(fbb.GetBufferPointer(), fbb.GetSize()); | 80 | flatbuffers::Verifier verifier(fbb.GetBufferPointer(), fbb.GetSize()); |
81 | if (!verifier.VerifyBuffer<Buffer>()) { | 81 | if (!verifier.VerifyBuffer<Buffer>()) { |
82 | Warning() << "Created invalid uffer"; | 82 | SinkWarning_(0, "bufferadaptor") << "Created invalid uffer"; |
83 | } | 83 | } |
84 | } | 84 | } |
85 | 85 | ||
@@ -89,6 +89,7 @@ static void createBufferPartBuffer(const Sink::ApplicationDomain::ApplicationDom | |||
89 | template <class LocalBuffer, class ResourceBuffer> | 89 | template <class LocalBuffer, class ResourceBuffer> |
90 | class GenericBufferAdaptor : public Sink::ApplicationDomain::BufferAdaptor | 90 | class GenericBufferAdaptor : public Sink::ApplicationDomain::BufferAdaptor |
91 | { | 91 | { |
92 | SINK_DEBUG_AREA("bufferadaptor") | ||
92 | public: | 93 | public: |
93 | GenericBufferAdaptor() : BufferAdaptor() | 94 | GenericBufferAdaptor() : BufferAdaptor() |
94 | { | 95 | { |
@@ -96,7 +97,7 @@ public: | |||
96 | 97 | ||
97 | virtual void setProperty(const QByteArray &key, const QVariant &value) Q_DECL_OVERRIDE | 98 | virtual void setProperty(const QByteArray &key, const QVariant &value) Q_DECL_OVERRIDE |
98 | { | 99 | { |
99 | Warning() << "Can't set property " << key; | 100 | SinkWarning() << "Can't set property " << key; |
100 | Q_ASSERT(false); | 101 | Q_ASSERT(false); |
101 | } | 102 | } |
102 | 103 | ||
@@ -107,7 +108,7 @@ public: | |||
107 | } else if (mLocalBuffer && mLocalMapper->hasMapping(key)) { | 108 | } else if (mLocalBuffer && mLocalMapper->hasMapping(key)) { |
108 | return mLocalMapper->getProperty(key, mLocalBuffer); | 109 | return mLocalMapper->getProperty(key, mLocalBuffer); |
109 | } | 110 | } |
110 | Warning() << "No mapping available for key " << key << mLocalBuffer << mResourceBuffer; | 111 | SinkWarning() << "No mapping available for key " << key << mLocalBuffer << mResourceBuffer; |
111 | return QVariant(); | 112 | return QVariant(); |
112 | } | 113 | } |
113 | 114 | ||
@@ -168,13 +169,13 @@ public: | |||
168 | { | 169 | { |
169 | flatbuffers::FlatBufferBuilder localFbb; | 170 | flatbuffers::FlatBufferBuilder localFbb; |
170 | if (mLocalWriteMapper) { | 171 | if (mLocalWriteMapper) { |
171 | // Trace() << "Creating local buffer part"; | 172 | // SinkTrace() << "Creating local buffer part"; |
172 | createBufferPartBuffer<LocalBuffer, LocalBuilder>(domainObject, localFbb, *mLocalWriteMapper); | 173 | createBufferPartBuffer<LocalBuffer, LocalBuilder>(domainObject, localFbb, *mLocalWriteMapper); |
173 | } | 174 | } |
174 | 175 | ||
175 | flatbuffers::FlatBufferBuilder resFbb; | 176 | flatbuffers::FlatBufferBuilder resFbb; |
176 | if (mResourceWriteMapper) { | 177 | if (mResourceWriteMapper) { |
177 | // Trace() << "Creating resouce buffer part"; | 178 | // SinkTrace() << "Creating resouce buffer part"; |
178 | createBufferPartBuffer<ResourceBuffer, ResourceBuilder>(domainObject, resFbb, *mResourceWriteMapper); | 179 | createBufferPartBuffer<ResourceBuffer, ResourceBuilder>(domainObject, resFbb, *mResourceWriteMapper); |
179 | } | 180 | } |
180 | 181 | ||
diff --git a/common/entityreader.cpp b/common/entityreader.cpp index c15f73f..411e7e4 100644 --- a/common/entityreader.cpp +++ b/common/entityreader.cpp | |||
@@ -23,6 +23,8 @@ | |||
23 | #include "storage.h" | 23 | #include "storage.h" |
24 | #include "query.h" | 24 | #include "query.h" |
25 | 25 | ||
26 | SINK_DEBUG_AREA("entityreader") | ||
27 | |||
26 | using namespace Sink; | 28 | using namespace Sink; |
27 | 29 | ||
28 | QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> EntityReaderUtils::getLatest(const Sink::Storage::NamedDatabase &db, const QByteArray &uid, DomainTypeAdaptorFactoryInterface &adaptorFactory, qint64 &retrievedRevision) | 30 | QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> EntityReaderUtils::getLatest(const Sink::Storage::NamedDatabase &db, const QByteArray &uid, DomainTypeAdaptorFactoryInterface &adaptorFactory, qint64 &retrievedRevision) |
@@ -32,15 +34,15 @@ QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> EntityReaderUtils::getLat | |||
32 | [¤t, &adaptorFactory, &retrievedRevision](const QByteArray &key, const QByteArray &data) -> bool { | 34 | [¤t, &adaptorFactory, &retrievedRevision](const QByteArray &key, const QByteArray &data) -> bool { |
33 | Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); | 35 | Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); |
34 | if (!buffer.isValid()) { | 36 | if (!buffer.isValid()) { |
35 | Warning() << "Read invalid buffer from disk"; | 37 | SinkWarning() << "Read invalid buffer from disk"; |
36 | } else { | 38 | } else { |
37 | Trace() << "Found value " << key; | 39 | SinkTrace() << "Found value " << key; |
38 | current = adaptorFactory.createAdaptor(buffer.entity()); | 40 | current = adaptorFactory.createAdaptor(buffer.entity()); |
39 | retrievedRevision = Sink::Storage::revisionFromKey(key); | 41 | retrievedRevision = Sink::Storage::revisionFromKey(key); |
40 | } | 42 | } |
41 | return false; | 43 | return false; |
42 | }, | 44 | }, |
43 | [](const Sink::Storage::Error &error) { Warning() << "Failed to read current value from storage: " << error.message; }); | 45 | [](const Sink::Storage::Error &error) { SinkWarning() << "Failed to read current value from storage: " << error.message; }); |
44 | return current; | 46 | return current; |
45 | } | 47 | } |
46 | 48 | ||
@@ -51,14 +53,14 @@ QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> EntityReaderUtils::get(co | |||
51 | [¤t, &adaptorFactory, &retrievedRevision](const QByteArray &key, const QByteArray &data) -> bool { | 53 | [¤t, &adaptorFactory, &retrievedRevision](const QByteArray &key, const QByteArray &data) -> bool { |
52 | Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); | 54 | Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); |
53 | if (!buffer.isValid()) { | 55 | if (!buffer.isValid()) { |
54 | Warning() << "Read invalid buffer from disk"; | 56 | SinkWarning() << "Read invalid buffer from disk"; |
55 | } else { | 57 | } else { |
56 | current = adaptorFactory.createAdaptor(buffer.entity()); | 58 | current = adaptorFactory.createAdaptor(buffer.entity()); |
57 | retrievedRevision = Sink::Storage::revisionFromKey(key); | 59 | retrievedRevision = Sink::Storage::revisionFromKey(key); |
58 | } | 60 | } |
59 | return false; | 61 | return false; |
60 | }, | 62 | }, |
61 | [](const Sink::Storage::Error &error) { Warning() << "Failed to read current value from storage: " << error.message; }); | 63 | [](const Sink::Storage::Error &error) { SinkWarning() << "Failed to read current value from storage: " << error.message; }); |
62 | return current; | 64 | return current; |
63 | } | 65 | } |
64 | 66 | ||
@@ -74,7 +76,7 @@ QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> EntityReaderUtils::getPre | |||
74 | } | 76 | } |
75 | return true; | 77 | return true; |
76 | }, | 78 | }, |
77 | [](const Sink::Storage::Error &error) { Warning() << "Failed to read current value from storage: " << error.message; }, true); | 79 | [](const Sink::Storage::Error &error) { SinkWarning() << "Failed to read current value from storage: " << error.message; }, true); |
78 | return get(db, Sink::Storage::assembleKey(uid, latestRevision), adaptorFactory, retrievedRevision); | 80 | return get(db, Sink::Storage::assembleKey(uid, latestRevision), adaptorFactory, retrievedRevision); |
79 | } | 81 | } |
80 | 82 | ||
@@ -86,7 +88,7 @@ EntityReader<DomainType>::EntityReader(const QByteArray &resourceType, const QBy | |||
86 | mDomainTypeAdaptorFactory(*mDomainTypeAdaptorFactoryPtr) | 88 | mDomainTypeAdaptorFactory(*mDomainTypeAdaptorFactoryPtr) |
87 | { | 89 | { |
88 | Q_ASSERT(!resourceType.isEmpty()); | 90 | Q_ASSERT(!resourceType.isEmpty()); |
89 | Trace() << "resourceType " << resourceType; | 91 | SinkTrace() << "resourceType " << resourceType; |
90 | Q_ASSERT(mDomainTypeAdaptorFactoryPtr); | 92 | Q_ASSERT(mDomainTypeAdaptorFactoryPtr); |
91 | } | 93 | } |
92 | 94 | ||
@@ -165,13 +167,13 @@ void EntityReader<DomainType>::readEntity(const Sink::Storage::NamedDatabase &db | |||
165 | resultCallback(DomainType::Ptr::create(mResourceInstanceIdentifier, Sink::Storage::uidFromKey(key), revision, adaptor), operation); | 167 | resultCallback(DomainType::Ptr::create(mResourceInstanceIdentifier, Sink::Storage::uidFromKey(key), revision, adaptor), operation); |
166 | return false; | 168 | return false; |
167 | }, | 169 | }, |
168 | [&](const Sink::Storage::Error &error) { Warning() << "Error during query: " << error.message << key; }); | 170 | [&](const Sink::Storage::Error &error) { SinkWarning() << "Error during query: " << error.message << key; }); |
169 | } | 171 | } |
170 | 172 | ||
171 | static inline ResultSet fullScan(const Sink::Storage::Transaction &transaction, const QByteArray &bufferType) | 173 | static inline ResultSet fullScan(const Sink::Storage::Transaction &transaction, const QByteArray &bufferType) |
172 | { | 174 | { |
173 | // TODO use a result set with an iterator, to read values on demand | 175 | // TODO use a result set with an iterator, to read values on demand |
174 | Trace() << "Looking for : " << bufferType; | 176 | SinkTrace() << "Looking for : " << bufferType; |
175 | //The scan can return duplicate results if we have multiple revisions, so we use a set to deduplicate. | 177 | //The scan can return duplicate results if we have multiple revisions, so we use a set to deduplicate. |
176 | QSet<QByteArray> keys; | 178 | QSet<QByteArray> keys; |
177 | Storage::mainDatabase(transaction, bufferType) | 179 | Storage::mainDatabase(transaction, bufferType) |
@@ -179,14 +181,14 @@ static inline ResultSet fullScan(const Sink::Storage::Transaction &transaction, | |||
179 | [&](const QByteArray &key, const QByteArray &value) -> bool { | 181 | [&](const QByteArray &key, const QByteArray &value) -> bool { |
180 | if (keys.contains(Sink::Storage::uidFromKey(key))) { | 182 | if (keys.contains(Sink::Storage::uidFromKey(key))) { |
181 | //Not something that should persist if the replay works, so we keep a message for now. | 183 | //Not something that should persist if the replay works, so we keep a message for now. |
182 | Trace() << "Multiple revisions for key: " << key; | 184 | SinkTrace() << "Multiple revisions for key: " << key; |
183 | } | 185 | } |
184 | keys << Sink::Storage::uidFromKey(key); | 186 | keys << Sink::Storage::uidFromKey(key); |
185 | return true; | 187 | return true; |
186 | }, | 188 | }, |
187 | [](const Sink::Storage::Error &error) { Warning() << "Error during query: " << error.message; }); | 189 | [](const Sink::Storage::Error &error) { SinkWarning() << "Error during query: " << error.message; }); |
188 | 190 | ||
189 | Trace() << "Full scan retrieved " << keys.size() << " results."; | 191 | SinkTrace() << "Full scan retrieved " << keys.size() << " results."; |
190 | return ResultSet(keys.toList().toVector()); | 192 | return ResultSet(keys.toList().toVector()); |
191 | } | 193 | } |
192 | 194 | ||
@@ -224,7 +226,7 @@ ResultSet EntityReader<DomainType>::loadIncrementalResultSet(qint64 baseRevision | |||
224 | while (*revisionCounter <= topRevision) { | 226 | while (*revisionCounter <= topRevision) { |
225 | const auto uid = Sink::Storage::getUidFromRevision(mTransaction, *revisionCounter); | 227 | const auto uid = Sink::Storage::getUidFromRevision(mTransaction, *revisionCounter); |
226 | const auto type = Sink::Storage::getTypeFromRevision(mTransaction, *revisionCounter); | 228 | const auto type = Sink::Storage::getTypeFromRevision(mTransaction, *revisionCounter); |
227 | // Trace() << "Revision" << *revisionCounter << type << uid; | 229 | // SinkTrace() << "Revision" << *revisionCounter << type << uid; |
228 | Q_ASSERT(!uid.isEmpty()); | 230 | Q_ASSERT(!uid.isEmpty()); |
229 | Q_ASSERT(!type.isEmpty()); | 231 | Q_ASSERT(!type.isEmpty()); |
230 | if (type != bufferType) { | 232 | if (type != bufferType) { |
@@ -236,7 +238,7 @@ ResultSet EntityReader<DomainType>::loadIncrementalResultSet(qint64 baseRevision | |||
236 | *revisionCounter += 1; | 238 | *revisionCounter += 1; |
237 | return key; | 239 | return key; |
238 | } | 240 | } |
239 | Trace() << "Finished reading incremental result set:" << *revisionCounter; | 241 | SinkTrace() << "Finished reading incremental result set:" << *revisionCounter; |
240 | // We're done | 242 | // We're done |
241 | return QByteArray(); | 243 | return QByteArray(); |
242 | }); | 244 | }); |
@@ -248,7 +250,7 @@ ResultSet EntityReader<DomainType>::filterAndSortSet(ResultSet &resultSet, const | |||
248 | { | 250 | { |
249 | const bool sortingRequired = !sortProperty.isEmpty(); | 251 | const bool sortingRequired = !sortProperty.isEmpty(); |
250 | if (initialQuery && sortingRequired) { | 252 | if (initialQuery && sortingRequired) { |
251 | Trace() << "Sorting the resultset in memory according to property: " << sortProperty; | 253 | SinkTrace() << "Sorting the resultset in memory according to property: " << sortProperty; |
252 | // Sort the complete set by reading the sort property and filling into a sorted map | 254 | // Sort the complete set by reading the sort property and filling into a sorted map |
253 | auto sortedMap = QSharedPointer<QMap<QByteArray, QByteArray>>::create(); | 255 | auto sortedMap = QSharedPointer<QMap<QByteArray, QByteArray>>::create(); |
254 | while (resultSet.next()) { | 256 | while (resultSet.next()) { |
@@ -271,7 +273,7 @@ ResultSet EntityReader<DomainType>::filterAndSortSet(ResultSet &resultSet, const | |||
271 | }); | 273 | }); |
272 | } | 274 | } |
273 | 275 | ||
274 | Trace() << "Sorted " << sortedMap->size() << " values."; | 276 | SinkTrace() << "Sorted " << sortedMap->size() << " values."; |
275 | auto iterator = QSharedPointer<QMapIterator<QByteArray, QByteArray>>::create(*sortedMap); | 277 | auto iterator = QSharedPointer<QMapIterator<QByteArray, QByteArray>>::create(*sortedMap); |
276 | ResultSet::ValueGenerator generator = [this, iterator, sortedMap, &db, filter, initialQuery]( | 278 | ResultSet::ValueGenerator generator = [this, iterator, sortedMap, &db, filter, initialQuery]( |
277 | std::function<void(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &, Sink::Operation)> callback) -> bool { | 279 | std::function<void(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &, Sink::Operation)> callback) -> bool { |
@@ -330,11 +332,11 @@ QPair<qint64, qint64> EntityReader<DomainType>::load(const Sink::Query &query, c | |||
330 | QSet<QByteArray> remainingFilters; | 332 | QSet<QByteArray> remainingFilters; |
331 | QByteArray remainingSorting; | 333 | QByteArray remainingSorting; |
332 | auto resultSet = baseSetRetriever(remainingFilters, remainingSorting); | 334 | auto resultSet = baseSetRetriever(remainingFilters, remainingSorting); |
333 | Trace() << "Base set retrieved. " << Log::TraceTime(time.elapsed()); | 335 | SinkTrace() << "Base set retrieved. " << Log::TraceTime(time.elapsed()); |
334 | auto filteredSet = filterAndSortSet(resultSet, getFilter(remainingFilters, query), db, initialQuery, remainingSorting); | 336 | auto filteredSet = filterAndSortSet(resultSet, getFilter(remainingFilters, query), db, initialQuery, remainingSorting); |
335 | Trace() << "Filtered set retrieved. " << Log::TraceTime(time.elapsed()); | 337 | SinkTrace() << "Filtered set retrieved. " << Log::TraceTime(time.elapsed()); |
336 | auto replayedEntities = replaySet(filteredSet, offset, batchSize, callback); | 338 | auto replayedEntities = replaySet(filteredSet, offset, batchSize, callback); |
337 | // Trace() << "Filtered set replayed. " << Log::TraceTime(time.elapsed()); | 339 | // SinkTrace() << "Filtered set replayed. " << Log::TraceTime(time.elapsed()); |
338 | return qMakePair(Sink::Storage::maxRevision(mTransaction), replayedEntities); | 340 | return qMakePair(Sink::Storage::maxRevision(mTransaction), replayedEntities); |
339 | } | 341 | } |
340 | 342 | ||
@@ -346,7 +348,7 @@ QPair<qint64, qint64> EntityReader<DomainType>::executeInitialQuery(const Sink:: | |||
346 | auto revisionAndReplayedEntities = load(query, [&](QSet<QByteArray> &remainingFilters, QByteArray &remainingSorting) -> ResultSet { | 348 | auto revisionAndReplayedEntities = load(query, [&](QSet<QByteArray> &remainingFilters, QByteArray &remainingSorting) -> ResultSet { |
347 | return loadInitialResultSet(query, remainingFilters, remainingSorting); | 349 | return loadInitialResultSet(query, remainingFilters, remainingSorting); |
348 | }, true, offset, batchsize, callback); | 350 | }, true, offset, batchsize, callback); |
349 | Trace() << "Initial query took: " << Log::TraceTime(time.elapsed()); | 351 | SinkTrace() << "Initial query took: " << Log::TraceTime(time.elapsed()); |
350 | return revisionAndReplayedEntities; | 352 | return revisionAndReplayedEntities; |
351 | } | 353 | } |
352 | 354 | ||
@@ -359,7 +361,7 @@ QPair<qint64, qint64> EntityReader<DomainType>::executeIncrementalQuery(const Si | |||
359 | auto revisionAndReplayedEntities = load(query, [&](QSet<QByteArray> &remainingFilters, QByteArray &remainingSorting) -> ResultSet { | 361 | auto revisionAndReplayedEntities = load(query, [&](QSet<QByteArray> &remainingFilters, QByteArray &remainingSorting) -> ResultSet { |
360 | return loadIncrementalResultSet(baseRevision, query, remainingFilters); | 362 | return loadIncrementalResultSet(baseRevision, query, remainingFilters); |
361 | }, false, 0, 0, callback); | 363 | }, false, 0, 0, callback); |
362 | Trace() << "Initial query took: " << Log::TraceTime(time.elapsed()); | 364 | SinkTrace() << "Initial query took: " << Log::TraceTime(time.elapsed()); |
363 | return revisionAndReplayedEntities; | 365 | return revisionAndReplayedEntities; |
364 | } | 366 | } |
365 | 367 | ||
@@ -377,7 +379,7 @@ EntityReader<DomainType>::getFilter(const QSet<QByteArray> remainingFilters, con | |||
377 | const auto property = domainObject->getProperty(filterProperty); | 379 | const auto property = domainObject->getProperty(filterProperty); |
378 | const auto comparator = query.propertyFilter.value(filterProperty); | 380 | const auto comparator = query.propertyFilter.value(filterProperty); |
379 | if (!comparator.matches(property)) { | 381 | if (!comparator.matches(property)) { |
380 | Trace() << "Filtering entity due to property mismatch on filter: " << filterProperty << property << ":" << comparator.value; | 382 | SinkTrace() << "Filtering entity due to property mismatch on filter: " << filterProperty << property << ":" << comparator.value; |
381 | return false; | 383 | return false; |
382 | } | 384 | } |
383 | } | 385 | } |
@@ -388,7 +390,7 @@ EntityReader<DomainType>::getFilter(const QSet<QByteArray> remainingFilters, con | |||
388 | template <class DomainType> | 390 | template <class DomainType> |
389 | qint64 EntityReader<DomainType>::replaySet(ResultSet &resultSet, int offset, int batchSize, const std::function<bool(const typename DomainType::Ptr &value, Sink::Operation operation)> &callback) | 391 | qint64 EntityReader<DomainType>::replaySet(ResultSet &resultSet, int offset, int batchSize, const std::function<bool(const typename DomainType::Ptr &value, Sink::Operation operation)> &callback) |
390 | { | 392 | { |
391 | Trace() << "Skipping over " << offset << " results"; | 393 | SinkTrace() << "Skipping over " << offset << " results"; |
392 | resultSet.skip(offset); | 394 | resultSet.skip(offset); |
393 | int counter = 0; | 395 | int counter = 0; |
394 | while (!batchSize || (counter < batchSize)) { | 396 | while (!batchSize || (counter < batchSize)) { |
@@ -401,7 +403,7 @@ qint64 EntityReader<DomainType>::replaySet(ResultSet &resultSet, int offset, int | |||
401 | break; | 403 | break; |
402 | } | 404 | } |
403 | }; | 405 | }; |
404 | Trace() << "Replayed " << counter << " results." | 406 | SinkTrace() << "Replayed " << counter << " results." |
405 | << "Limit " << batchSize; | 407 | << "Limit " << batchSize; |
406 | return counter; | 408 | return counter; |
407 | } | 409 | } |
diff --git a/common/facade.cpp b/common/facade.cpp index 2660300..72f7414 100644 --- a/common/facade.cpp +++ b/common/facade.cpp | |||
@@ -30,9 +30,6 @@ | |||
30 | 30 | ||
31 | using namespace Sink; | 31 | using namespace Sink; |
32 | 32 | ||
33 | #undef DEBUG_AREA | ||
34 | #define DEBUG_AREA "client.facade" | ||
35 | |||
36 | template <class DomainType> | 33 | template <class DomainType> |
37 | GenericFacade<DomainType>::GenericFacade( | 34 | GenericFacade<DomainType>::GenericFacade( |
38 | const QByteArray &resourceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &adaptorFactory, const QSharedPointer<Sink::ResourceAccessInterface> resourceAccess) | 35 | const QByteArray &resourceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &adaptorFactory, const QSharedPointer<Sink::ResourceAccessInterface> resourceAccess) |
@@ -59,7 +56,7 @@ template <class DomainType> | |||
59 | KAsync::Job<void> GenericFacade<DomainType>::create(const DomainType &domainObject) | 56 | KAsync::Job<void> GenericFacade<DomainType>::create(const DomainType &domainObject) |
60 | { | 57 | { |
61 | if (!mDomainTypeAdaptorFactory) { | 58 | if (!mDomainTypeAdaptorFactory) { |
62 | Warning() << "No domain type adaptor factory available"; | 59 | SinkWarning() << "No domain type adaptor factory available"; |
63 | return KAsync::error<void>(); | 60 | return KAsync::error<void>(); |
64 | } | 61 | } |
65 | flatbuffers::FlatBufferBuilder entityFbb; | 62 | flatbuffers::FlatBufferBuilder entityFbb; |
@@ -71,10 +68,10 @@ template <class DomainType> | |||
71 | KAsync::Job<void> GenericFacade<DomainType>::modify(const DomainType &domainObject) | 68 | KAsync::Job<void> GenericFacade<DomainType>::modify(const DomainType &domainObject) |
72 | { | 69 | { |
73 | if (!mDomainTypeAdaptorFactory) { | 70 | if (!mDomainTypeAdaptorFactory) { |
74 | Warning() << "No domain type adaptor factory available"; | 71 | SinkWarning() << "No domain type adaptor factory available"; |
75 | return KAsync::error<void>(); | 72 | return KAsync::error<void>(); |
76 | } | 73 | } |
77 | Trace() << "Modifying entity: " << domainObject.identifier() << domainObject.changedProperties(); | 74 | SinkTrace() << "Modifying entity: " << domainObject.identifier() << domainObject.changedProperties(); |
78 | flatbuffers::FlatBufferBuilder entityFbb; | 75 | flatbuffers::FlatBufferBuilder entityFbb; |
79 | mDomainTypeAdaptorFactory->createBuffer(domainObject, entityFbb); | 76 | mDomainTypeAdaptorFactory->createBuffer(domainObject, entityFbb); |
80 | return mResourceAccess->sendModifyCommand(domainObject.identifier(), domainObject.revision(), bufferTypeForDomainType(), QByteArrayList(), BufferUtils::extractBuffer(entityFbb), domainObject.changedProperties()); | 77 | return mResourceAccess->sendModifyCommand(domainObject.identifier(), domainObject.revision(), bufferTypeForDomainType(), QByteArrayList(), BufferUtils::extractBuffer(entityFbb), domainObject.changedProperties()); |
diff --git a/common/facade.h b/common/facade.h index 658ccb8..b193580 100644 --- a/common/facade.h +++ b/common/facade.h | |||
@@ -46,6 +46,9 @@ namespace Sink { | |||
46 | template <typename DomainType> | 46 | template <typename DomainType> |
47 | class SINK_EXPORT GenericFacade : public Sink::StoreFacade<DomainType> | 47 | class SINK_EXPORT GenericFacade : public Sink::StoreFacade<DomainType> |
48 | { | 48 | { |
49 | protected: | ||
50 | SINK_DEBUG_AREA("facade") | ||
51 | SINK_DEBUG_COMPONENT(mResourceInstanceIdentifier) | ||
49 | public: | 52 | public: |
50 | /** | 53 | /** |
51 | * Create a new GenericFacade | 54 | * Create a new GenericFacade |
diff --git a/common/genericresource.cpp b/common/genericresource.cpp index ed7dd46..7136882 100644 --- a/common/genericresource.cpp +++ b/common/genericresource.cpp | |||
@@ -46,9 +46,6 @@ static int sCommitInterval = 10; | |||
46 | 46 | ||
47 | using namespace Sink; | 47 | using namespace Sink; |
48 | 48 | ||
49 | #undef DEBUG_AREA | ||
50 | #define DEBUG_AREA "resource.commandprocessor" | ||
51 | |||
52 | /** | 49 | /** |
53 | * Drives the pipeline using the output from all command queues | 50 | * Drives the pipeline using the output from all command queues |
54 | */ | 51 | */ |
@@ -56,12 +53,13 @@ class CommandProcessor : public QObject | |||
56 | { | 53 | { |
57 | Q_OBJECT | 54 | Q_OBJECT |
58 | typedef std::function<KAsync::Job<void>(void const *, size_t)> InspectionFunction; | 55 | typedef std::function<KAsync::Job<void>(void const *, size_t)> InspectionFunction; |
56 | SINK_DEBUG_AREA("commandprocessor") | ||
59 | 57 | ||
60 | public: | 58 | public: |
61 | CommandProcessor(Sink::Pipeline *pipeline, QList<MessageQueue *> commandQueues) : QObject(), mPipeline(pipeline), mCommandQueues(commandQueues), mProcessingLock(false) | 59 | CommandProcessor(Sink::Pipeline *pipeline, QList<MessageQueue *> commandQueues) : QObject(), mPipeline(pipeline), mCommandQueues(commandQueues), mProcessingLock(false) |
62 | { | 60 | { |
63 | mLowerBoundRevision = Storage::maxRevision(mPipeline->storage().createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { | 61 | mLowerBoundRevision = Storage::maxRevision(mPipeline->storage().createTransaction(Storage::ReadOnly, [](const Sink::Storage::Error &error) { |
64 | Warning() << error.message; | 62 | SinkWarning() << error.message; |
65 | })); | 63 | })); |
66 | 64 | ||
67 | for (auto queue : mCommandQueues) { | 65 | for (auto queue : mCommandQueues) { |
@@ -80,7 +78,6 @@ public: | |||
80 | mInspect = f; | 78 | mInspect = f; |
81 | } | 79 | } |
82 | 80 | ||
83 | |||
84 | signals: | 81 | signals: |
85 | void error(int errorCode, const QString &errorMessage); | 82 | void error(int errorCode, const QString &errorMessage); |
86 | 83 | ||
@@ -114,7 +111,7 @@ private slots: | |||
114 | 111 | ||
115 | KAsync::Job<qint64> processQueuedCommand(const Sink::QueuedCommand *queuedCommand) | 112 | KAsync::Job<qint64> processQueuedCommand(const Sink::QueuedCommand *queuedCommand) |
116 | { | 113 | { |
117 | Trace() << "Processing command: " << Sink::Commands::name(queuedCommand->commandId()); | 114 | SinkTrace() << "Processing command: " << Sink::Commands::name(queuedCommand->commandId()); |
118 | // Throw command into appropriate pipeline | 115 | // Throw command into appropriate pipeline |
119 | switch (queuedCommand->commandId()) { | 116 | switch (queuedCommand->commandId()) { |
120 | case Sink::Commands::DeleteEntityCommand: | 117 | case Sink::Commands::DeleteEntityCommand: |
@@ -138,21 +135,21 @@ private slots: | |||
138 | { | 135 | { |
139 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(data.constData()), data.size()); | 136 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(data.constData()), data.size()); |
140 | if (!Sink::VerifyQueuedCommandBuffer(verifyer)) { | 137 | if (!Sink::VerifyQueuedCommandBuffer(verifyer)) { |
141 | Warning() << "invalid buffer"; | 138 | SinkWarning() << "invalid buffer"; |
142 | // return KAsync::error<void, qint64>(1, "Invalid Buffer"); | 139 | // return KAsync::error<void, qint64>(1, "Invalid Buffer"); |
143 | } | 140 | } |
144 | auto queuedCommand = Sink::GetQueuedCommand(data.constData()); | 141 | auto queuedCommand = Sink::GetQueuedCommand(data.constData()); |
145 | const auto commandId = queuedCommand->commandId(); | 142 | const auto commandId = queuedCommand->commandId(); |
146 | Trace() << "Dequeued Command: " << Sink::Commands::name(commandId); | 143 | SinkTrace() << "Dequeued Command: " << Sink::Commands::name(commandId); |
147 | return processQueuedCommand(queuedCommand) | 144 | return processQueuedCommand(queuedCommand) |
148 | .then<qint64, qint64>( | 145 | .then<qint64, qint64>( |
149 | [commandId](qint64 createdRevision) -> qint64 { | 146 | [this, commandId](qint64 createdRevision) -> qint64 { |
150 | Trace() << "Command pipeline processed: " << Sink::Commands::name(commandId); | 147 | SinkTrace() << "Command pipeline processed: " << Sink::Commands::name(commandId); |
151 | return createdRevision; | 148 | return createdRevision; |
152 | }, | 149 | }, |
153 | [](int errorCode, QString errorMessage) { | 150 | [](int errorCode, QString errorMessage) { |
154 | // FIXME propagate error, we didn't handle it | 151 | // FIXME propagate error, we didn't handle it |
155 | Warning() << "Error while processing queue command: " << errorMessage; | 152 | SinkWarning() << "Error while processing queue command: " << errorMessage; |
156 | }); | 153 | }); |
157 | } | 154 | } |
158 | 155 | ||
@@ -169,7 +166,7 @@ private slots: | |||
169 | return KAsync::start<void>([this, data, time](KAsync::Future<void> &future) { | 166 | return KAsync::start<void>([this, data, time](KAsync::Future<void> &future) { |
170 | processQueuedCommand(data) | 167 | processQueuedCommand(data) |
171 | .then<void, qint64>([&future, this, time](qint64 createdRevision) { | 168 | .then<void, qint64>([&future, this, time](qint64 createdRevision) { |
172 | Trace() << "Created revision " << createdRevision << ". Processing took: " << Log::TraceTime(time->elapsed()); | 169 | SinkTrace() << "Created revision " << createdRevision << ". Processing took: " << Log::TraceTime(time->elapsed()); |
173 | future.setFinished(); | 170 | future.setFinished(); |
174 | }) | 171 | }) |
175 | .exec(); | 172 | .exec(); |
@@ -178,7 +175,7 @@ private slots: | |||
178 | .then<void>([&future, queue]() { future.setFinished(); }, | 175 | .then<void>([&future, queue]() { future.setFinished(); }, |
179 | [&future](int i, QString error) { | 176 | [&future](int i, QString error) { |
180 | if (i != MessageQueue::ErrorCodes::NoMessageFound) { | 177 | if (i != MessageQueue::ErrorCodes::NoMessageFound) { |
181 | Warning() << "Error while getting message from messagequeue: " << error; | 178 | SinkWarning() << "Error while getting message from messagequeue: " << error; |
182 | } | 179 | } |
183 | future.setFinished(); | 180 | future.setFinished(); |
184 | }) | 181 | }) |
@@ -192,12 +189,12 @@ private slots: | |||
192 | auto time = QSharedPointer<QTime>::create(); | 189 | auto time = QSharedPointer<QTime>::create(); |
193 | time->start(); | 190 | time->start(); |
194 | mPipeline->startTransaction(); | 191 | mPipeline->startTransaction(); |
195 | Trace() << "Cleaning up from " << mPipeline->cleanedUpRevision() + 1 << " to " << mLowerBoundRevision; | 192 | SinkTrace() << "Cleaning up from " << mPipeline->cleanedUpRevision() + 1 << " to " << mLowerBoundRevision; |
196 | for (qint64 revision = mPipeline->cleanedUpRevision() + 1; revision <= mLowerBoundRevision; revision++) { | 193 | for (qint64 revision = mPipeline->cleanedUpRevision() + 1; revision <= mLowerBoundRevision; revision++) { |
197 | mPipeline->cleanupRevision(revision); | 194 | mPipeline->cleanupRevision(revision); |
198 | } | 195 | } |
199 | mPipeline->commit(); | 196 | mPipeline->commit(); |
200 | Trace() << "Cleanup done." << Log::TraceTime(time->elapsed()); | 197 | SinkTrace() << "Cleanup done." << Log::TraceTime(time->elapsed()); |
201 | 198 | ||
202 | // Go through all message queues | 199 | // Go through all message queues |
203 | auto it = QSharedPointer<QListIterator<MessageQueue *>>::create(mCommandQueues); | 200 | auto it = QSharedPointer<QListIterator<MessageQueue *>>::create(mCommandQueues); |
@@ -208,8 +205,8 @@ private slots: | |||
208 | 205 | ||
209 | auto queue = it->next(); | 206 | auto queue = it->next(); |
210 | processQueue(queue) | 207 | processQueue(queue) |
211 | .then<void>([&future, time]() { | 208 | .then<void>([this, &future, time]() { |
212 | Trace() << "Queue processed." << Log::TraceTime(time->elapsed()); | 209 | SinkTrace() << "Queue processed." << Log::TraceTime(time->elapsed()); |
213 | future.setFinished(); | 210 | future.setFinished(); |
214 | }) | 211 | }) |
215 | .exec(); | 212 | .exec(); |
@@ -226,9 +223,6 @@ private: | |||
226 | InspectionFunction mInspect; | 223 | InspectionFunction mInspect; |
227 | }; | 224 | }; |
228 | 225 | ||
229 | #undef DEBUG_AREA | ||
230 | #define DEBUG_AREA "resource" | ||
231 | |||
232 | GenericResource::GenericResource(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier, const QSharedPointer<Pipeline> &pipeline ) | 226 | GenericResource::GenericResource(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier, const QSharedPointer<Pipeline> &pipeline ) |
233 | : Sink::Resource(), | 227 | : Sink::Resource(), |
234 | mUserQueue(Sink::storageLocation(), resourceInstanceIdentifier + ".userqueue"), | 228 | mUserQueue(Sink::storageLocation(), resourceInstanceIdentifier + ".userqueue"), |
@@ -301,7 +295,7 @@ GenericResource::~GenericResource() | |||
301 | KAsync::Job<void> GenericResource::inspect( | 295 | KAsync::Job<void> GenericResource::inspect( |
302 | int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) | 296 | int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) |
303 | { | 297 | { |
304 | Warning() << "Inspection not implemented"; | 298 | SinkWarning() << "Inspection not implemented"; |
305 | return KAsync::null<void>(); | 299 | return KAsync::null<void>(); |
306 | } | 300 | } |
307 | 301 | ||
@@ -363,7 +357,7 @@ void GenericResource::setupChangereplay(const QSharedPointer<ChangeReplay> &chan | |||
363 | 357 | ||
364 | void GenericResource::removeDataFromDisk() | 358 | void GenericResource::removeDataFromDisk() |
365 | { | 359 | { |
366 | Log() << "Removing the resource from disk: " << mResourceInstanceIdentifier; | 360 | SinkLog() << "Removing the resource from disk: " << mResourceInstanceIdentifier; |
367 | //Ensure we have no transaction or databases open | 361 | //Ensure we have no transaction or databases open |
368 | mSynchronizer.clear(); | 362 | mSynchronizer.clear(); |
369 | mChangeReplay.clear(); | 363 | mChangeReplay.clear(); |
@@ -391,7 +385,7 @@ qint64 GenericResource::diskUsage(const QByteArray &instanceIdentifier) | |||
391 | 385 | ||
392 | void GenericResource::onProcessorError(int errorCode, const QString &errorMessage) | 386 | void GenericResource::onProcessorError(int errorCode, const QString &errorMessage) |
393 | { | 387 | { |
394 | Warning() << "Received error from Processor: " << errorCode << errorMessage; | 388 | SinkWarning() << "Received error from Processor: " << errorCode << errorMessage; |
395 | mError = errorCode; | 389 | mError = errorCode; |
396 | } | 390 | } |
397 | 391 | ||
@@ -435,12 +429,12 @@ KAsync::Job<void> GenericResource::synchronizeWithSource() | |||
435 | n.code = Sink::ApplicationDomain::BusyStatus; | 429 | n.code = Sink::ApplicationDomain::BusyStatus; |
436 | emit notify(n); | 430 | emit notify(n); |
437 | 431 | ||
438 | Log() << " Synchronizing"; | 432 | SinkLog() << " Synchronizing"; |
439 | // Changereplay would deadlock otherwise when trying to open the synchronization store | 433 | // Changereplay would deadlock otherwise when trying to open the synchronization store |
440 | enableChangeReplay(false); | 434 | enableChangeReplay(false); |
441 | mSynchronizer->synchronize() | 435 | mSynchronizer->synchronize() |
442 | .then<void>([this, &future]() { | 436 | .then<void>([this, &future]() { |
443 | Log() << "Done Synchronizing"; | 437 | SinkLog() << "Done Synchronizing"; |
444 | Sink::Notification n; | 438 | Sink::Notification n; |
445 | n.id = "sync"; | 439 | n.id = "sync"; |
446 | n.type = Sink::Notification::Status; | 440 | n.type = Sink::Notification::Status; |
diff --git a/common/genericresource.h b/common/genericresource.h index 2254172..25892ca 100644 --- a/common/genericresource.h +++ b/common/genericresource.h | |||
@@ -40,6 +40,9 @@ class Synchronizer; | |||
40 | */ | 40 | */ |
41 | class SINK_EXPORT GenericResource : public Resource | 41 | class SINK_EXPORT GenericResource : public Resource |
42 | { | 42 | { |
43 | protected: | ||
44 | SINK_DEBUG_AREA("resource") | ||
45 | SINK_DEBUG_COMPONENT(mResourceInstanceIdentifier) | ||
43 | public: | 46 | public: |
44 | GenericResource(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier, const QSharedPointer<Pipeline> &pipeline); | 47 | GenericResource(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier, const QSharedPointer<Pipeline> &pipeline); |
45 | virtual ~GenericResource(); | 48 | virtual ~GenericResource(); |
diff --git a/common/index.cpp b/common/index.cpp index 151f7af..beed45c 100644 --- a/common/index.cpp +++ b/common/index.cpp | |||
@@ -2,8 +2,7 @@ | |||
2 | 2 | ||
3 | #include "log.h" | 3 | #include "log.h" |
4 | 4 | ||
5 | #undef Trace | 5 | SINK_DEBUG_AREA("index") |
6 | #define Trace() Trace_area("index." + mName.toLatin1()) | ||
7 | 6 | ||
8 | Index::Index(const QString &storageRoot, const QString &name, Sink::Storage::AccessMode mode) | 7 | Index::Index(const QString &storageRoot, const QString &name, Sink::Storage::AccessMode mode) |
9 | : mTransaction(Sink::Storage(storageRoot, name, mode).createTransaction(mode)), | 8 | : mTransaction(Sink::Storage(storageRoot, name, mode).createTransaction(mode)), |
@@ -34,8 +33,8 @@ void Index::lookup(const QByteArray &key, const std::function<void(const QByteAr | |||
34 | resultHandler(value); | 33 | resultHandler(value); |
35 | return true; | 34 | return true; |
36 | }, | 35 | }, |
37 | [errorHandler](const Sink::Storage::Error &error) { | 36 | [this, errorHandler](const Sink::Storage::Error &error) { |
38 | Warning() << "Error while retrieving value" << error.message; | 37 | SinkWarning() << "Error while retrieving value" << error.message; |
39 | errorHandler(Error(error.store, error.code, error.message)); | 38 | errorHandler(Error(error.store, error.code, error.message)); |
40 | }, | 39 | }, |
41 | matchSubStringKeys); | 40 | matchSubStringKeys); |
@@ -45,6 +44,6 @@ QByteArray Index::lookup(const QByteArray &key) | |||
45 | { | 44 | { |
46 | QByteArray result; | 45 | QByteArray result; |
47 | //We have to create a deep copy, otherwise the returned data may become invalid when the transaction ends. | 46 | //We have to create a deep copy, otherwise the returned data may become invalid when the transaction ends. |
48 | lookup(key, [&result](const QByteArray &value) { result = QByteArray(value.constData(), value.size()); }, [this](const Index::Error &error) { Trace() << "Error while retrieving value" << error.message; }); | 47 | lookup(key, [&result](const QByteArray &value) { result = QByteArray(value.constData(), value.size()); }, [this](const Index::Error &error) { SinkTrace() << "Error while retrieving value" << error.message; }); |
49 | return result; | 48 | return result; |
50 | } | 49 | } |
diff --git a/common/index.h b/common/index.h index 0345f56..bfedf9a 100644 --- a/common/index.h +++ b/common/index.h | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <functional> | 5 | #include <functional> |
6 | #include <QString> | 6 | #include <QString> |
7 | #include "storage.h" | 7 | #include "storage.h" |
8 | #include "log.h" | ||
8 | 9 | ||
9 | /** | 10 | /** |
10 | * An index for value pairs. | 11 | * An index for value pairs. |
@@ -43,4 +44,5 @@ private: | |||
43 | Sink::Storage::Transaction mTransaction; | 44 | Sink::Storage::Transaction mTransaction; |
44 | Sink::Storage::NamedDatabase mDb; | 45 | Sink::Storage::NamedDatabase mDb; |
45 | QString mName; | 46 | QString mName; |
47 | SINK_DEBUG_COMPONENT(mName.toLatin1()) | ||
46 | }; | 48 | }; |
diff --git a/common/listener.cpp b/common/listener.cpp index af8eaa2..2c5c1df 100644 --- a/common/listener.cpp +++ b/common/listener.cpp | |||
@@ -39,9 +39,6 @@ | |||
39 | #include <QTime> | 39 | #include <QTime> |
40 | #include <QDataStream> | 40 | #include <QDataStream> |
41 | 41 | ||
42 | #undef DEBUG_AREA | ||
43 | #define DEBUG_AREA "resource.communication" | ||
44 | |||
45 | Listener::Listener(const QByteArray &resourceInstanceIdentifier, const QByteArray &resourceType, QObject *parent) | 42 | Listener::Listener(const QByteArray &resourceInstanceIdentifier, const QByteArray &resourceType, QObject *parent) |
46 | : QObject(parent), | 43 | : QObject(parent), |
47 | m_server(new QLocalServer(this)), | 44 | m_server(new QLocalServer(this)), |
@@ -51,18 +48,18 @@ Listener::Listener(const QByteArray &resourceInstanceIdentifier, const QByteArra | |||
51 | m_messageId(0) | 48 | m_messageId(0) |
52 | { | 49 | { |
53 | connect(m_server.get(), &QLocalServer::newConnection, this, &Listener::acceptConnection); | 50 | connect(m_server.get(), &QLocalServer::newConnection, this, &Listener::acceptConnection); |
54 | Trace() << "Trying to open " << m_resourceInstanceIdentifier; | 51 | SinkTrace() << "Trying to open " << m_resourceInstanceIdentifier; |
55 | 52 | ||
56 | if (!m_server->listen(QString::fromLatin1(m_resourceInstanceIdentifier))) { | 53 | if (!m_server->listen(QString::fromLatin1(m_resourceInstanceIdentifier))) { |
57 | m_server->removeServer(m_resourceInstanceIdentifier); | 54 | m_server->removeServer(m_resourceInstanceIdentifier); |
58 | if (!m_server->listen(QString::fromLatin1(m_resourceInstanceIdentifier))) { | 55 | if (!m_server->listen(QString::fromLatin1(m_resourceInstanceIdentifier))) { |
59 | Warning() << "Utter failure to start server"; | 56 | SinkWarning() << "Utter failure to start server"; |
60 | exit(-1); | 57 | exit(-1); |
61 | } | 58 | } |
62 | } | 59 | } |
63 | 60 | ||
64 | if (m_server->isListening()) { | 61 | if (m_server->isListening()) { |
65 | Log() << QString("Listening on %1").arg(m_server->serverName()); | 62 | SinkLog() << QString("Listening on %1").arg(m_server->serverName()); |
66 | } | 63 | } |
67 | 64 | ||
68 | m_checkConnectionsTimer = std::unique_ptr<QTimer>(new QTimer); | 65 | m_checkConnectionsTimer = std::unique_ptr<QTimer>(new QTimer); |
@@ -70,7 +67,7 @@ Listener::Listener(const QByteArray &resourceInstanceIdentifier, const QByteArra | |||
70 | m_checkConnectionsTimer->setInterval(1000); | 67 | m_checkConnectionsTimer->setInterval(1000); |
71 | connect(m_checkConnectionsTimer.get(), &QTimer::timeout, [this]() { | 68 | connect(m_checkConnectionsTimer.get(), &QTimer::timeout, [this]() { |
72 | if (m_connections.isEmpty()) { | 69 | if (m_connections.isEmpty()) { |
73 | Log() << QString("No connections, shutting down."); | 70 | SinkLog() << QString("No connections, shutting down."); |
74 | quit(); | 71 | quit(); |
75 | } | 72 | } |
76 | }); | 73 | }); |
@@ -91,7 +88,7 @@ void Listener::emergencyAbortAllConnections() | |||
91 | { | 88 | { |
92 | for (Client &client : m_connections) { | 89 | for (Client &client : m_connections) { |
93 | if (client.socket) { | 90 | if (client.socket) { |
94 | Warning() << "Sending panic"; | 91 | SinkWarning() << "Sending panic"; |
95 | client.socket->write("PANIC"); | 92 | client.socket->write("PANIC"); |
96 | client.socket->waitForBytesWritten(); | 93 | client.socket->waitForBytesWritten(); |
97 | disconnect(client.socket, 0, this, 0); | 94 | disconnect(client.socket, 0, this, 0); |
@@ -120,11 +117,11 @@ void Listener::closeAllConnections() | |||
120 | 117 | ||
121 | void Listener::acceptConnection() | 118 | void Listener::acceptConnection() |
122 | { | 119 | { |
123 | Trace() << "Accepting connection"; | 120 | SinkTrace() << "Accepting connection"; |
124 | QLocalSocket *socket = m_server->nextPendingConnection(); | 121 | QLocalSocket *socket = m_server->nextPendingConnection(); |
125 | 122 | ||
126 | if (!socket) { | 123 | if (!socket) { |
127 | Warning() << "Accepted connection but didn't get a socket for it"; | 124 | SinkWarning() << "Accepted connection but didn't get a socket for it"; |
128 | return; | 125 | return; |
129 | } | 126 | } |
130 | 127 | ||
@@ -156,13 +153,13 @@ void Listener::clientDropped() | |||
156 | const Client &client = it.next(); | 153 | const Client &client = it.next(); |
157 | if (client.socket == socket) { | 154 | if (client.socket == socket) { |
158 | dropped = true; | 155 | dropped = true; |
159 | Log() << QString("Dropped connection: %1").arg(client.name) << socket; | 156 | SinkLog() << QString("Dropped connection: %1").arg(client.name) << socket; |
160 | it.remove(); | 157 | it.remove(); |
161 | break; | 158 | break; |
162 | } | 159 | } |
163 | } | 160 | } |
164 | if (!dropped) { | 161 | if (!dropped) { |
165 | Warning() << "Failed to find connection for disconnected socket: " << socket; | 162 | SinkWarning() << "Failed to find connection for disconnected socket: " << socket; |
166 | } | 163 | } |
167 | 164 | ||
168 | checkConnections(); | 165 | checkConnections(); |
@@ -188,7 +185,7 @@ void Listener::onDataAvailable() | |||
188 | 185 | ||
189 | void Listener::readFromSocket(QLocalSocket *socket) | 186 | void Listener::readFromSocket(QLocalSocket *socket) |
190 | { | 187 | { |
191 | Trace() << "Reading from socket..."; | 188 | SinkTrace() << "Reading from socket..."; |
192 | for (Client &client : m_connections) { | 189 | for (Client &client : m_connections) { |
193 | if (client.socket == socket) { | 190 | if (client.socket == socket) { |
194 | client.commandBuffer += socket->readAll(); | 191 | client.commandBuffer += socket->readAll(); |
@@ -231,7 +228,7 @@ void Listener::processCommand(int commandId, uint messageId, const QByteArray &c | |||
231 | auto buffer = Sink::Commands::GetHandshake(commandBuffer.constData()); | 228 | auto buffer = Sink::Commands::GetHandshake(commandBuffer.constData()); |
232 | client.name = buffer->name()->c_str(); | 229 | client.name = buffer->name()->c_str(); |
233 | } else { | 230 | } else { |
234 | Warning() << "received invalid command"; | 231 | SinkWarning() << "received invalid command"; |
235 | } | 232 | } |
236 | break; | 233 | break; |
237 | } | 234 | } |
@@ -239,7 +236,7 @@ void Listener::processCommand(int commandId, uint messageId, const QByteArray &c | |||
239 | flatbuffers::Verifier verifier((const uint8_t *)commandBuffer.constData(), commandBuffer.size()); | 236 | flatbuffers::Verifier verifier((const uint8_t *)commandBuffer.constData(), commandBuffer.size()); |
240 | if (Sink::Commands::VerifySynchronizeBuffer(verifier)) { | 237 | if (Sink::Commands::VerifySynchronizeBuffer(verifier)) { |
241 | auto buffer = Sink::Commands::GetSynchronize(commandBuffer.constData()); | 238 | auto buffer = Sink::Commands::GetSynchronize(commandBuffer.constData()); |
242 | Trace() << QString("Synchronize request (id %1) from %2").arg(messageId).arg(client.name); | 239 | SinkTrace() << QString("Synchronize request (id %1) from %2").arg(messageId).arg(client.name); |
243 | auto timer = QSharedPointer<QTime>::create(); | 240 | auto timer = QSharedPointer<QTime>::create(); |
244 | timer->start(); | 241 | timer->start(); |
245 | auto job = KAsync::null<void>(); | 242 | auto job = KAsync::null<void>(); |
@@ -250,16 +247,16 @@ void Listener::processCommand(int commandId, uint messageId, const QByteArray &c | |||
250 | job = job.then<void>(loadResource().processAllMessages()); | 247 | job = job.then<void>(loadResource().processAllMessages()); |
251 | } | 248 | } |
252 | job.then<void>([callback, timer]() { | 249 | job.then<void>([callback, timer]() { |
253 | Trace() << "Sync took " << Sink::Log::TraceTime(timer->elapsed()); | 250 | SinkTrace() << "Sync took " << Sink::Log::TraceTime(timer->elapsed()); |
254 | callback(true); | 251 | callback(true); |
255 | }, [callback](int errorCode, const QString &msg) { | 252 | }, [callback](int errorCode, const QString &msg) { |
256 | Warning() << "Sync failed: " << msg; | 253 | SinkWarning() << "Sync failed: " << msg; |
257 | callback(false); | 254 | callback(false); |
258 | }) | 255 | }) |
259 | .exec(); | 256 | .exec(); |
260 | return; | 257 | return; |
261 | } else { | 258 | } else { |
262 | Warning() << "received invalid command"; | 259 | SinkWarning() << "received invalid command"; |
263 | } | 260 | } |
264 | break; | 261 | break; |
265 | } | 262 | } |
@@ -268,31 +265,31 @@ void Listener::processCommand(int commandId, uint messageId, const QByteArray &c | |||
268 | case Sink::Commands::DeleteEntityCommand: | 265 | case Sink::Commands::DeleteEntityCommand: |
269 | case Sink::Commands::ModifyEntityCommand: | 266 | case Sink::Commands::ModifyEntityCommand: |
270 | case Sink::Commands::CreateEntityCommand: | 267 | case Sink::Commands::CreateEntityCommand: |
271 | Trace() << "Command id " << messageId << " of type \"" << Sink::Commands::name(commandId) << "\" from " << client.name; | 268 | SinkTrace() << "Command id " << messageId << " of type \"" << Sink::Commands::name(commandId) << "\" from " << client.name; |
272 | loadResource().processCommand(commandId, commandBuffer); | 269 | loadResource().processCommand(commandId, commandBuffer); |
273 | break; | 270 | break; |
274 | case Sink::Commands::ShutdownCommand: | 271 | case Sink::Commands::ShutdownCommand: |
275 | Log() << QString("Received shutdown command from %1").arg(client.name); | 272 | SinkLog() << QString("Received shutdown command from %1").arg(client.name); |
276 | // Immediately reject new connections | 273 | // Immediately reject new connections |
277 | m_server->close(); | 274 | m_server->close(); |
278 | QTimer::singleShot(0, this, &Listener::quit); | 275 | QTimer::singleShot(0, this, &Listener::quit); |
279 | break; | 276 | break; |
280 | case Sink::Commands::PingCommand: | 277 | case Sink::Commands::PingCommand: |
281 | Trace() << QString("Received ping command from %1").arg(client.name); | 278 | SinkTrace() << QString("Received ping command from %1").arg(client.name); |
282 | break; | 279 | break; |
283 | case Sink::Commands::RevisionReplayedCommand: { | 280 | case Sink::Commands::RevisionReplayedCommand: { |
284 | Trace() << QString("Received revision replayed command from %1").arg(client.name); | 281 | SinkTrace() << QString("Received revision replayed command from %1").arg(client.name); |
285 | flatbuffers::Verifier verifier((const uint8_t *)commandBuffer.constData(), commandBuffer.size()); | 282 | flatbuffers::Verifier verifier((const uint8_t *)commandBuffer.constData(), commandBuffer.size()); |
286 | if (Sink::Commands::VerifyRevisionReplayedBuffer(verifier)) { | 283 | if (Sink::Commands::VerifyRevisionReplayedBuffer(verifier)) { |
287 | auto buffer = Sink::Commands::GetRevisionReplayed(commandBuffer.constData()); | 284 | auto buffer = Sink::Commands::GetRevisionReplayed(commandBuffer.constData()); |
288 | client.currentRevision = buffer->revision(); | 285 | client.currentRevision = buffer->revision(); |
289 | } else { | 286 | } else { |
290 | Warning() << "received invalid command"; | 287 | SinkWarning() << "received invalid command"; |
291 | } | 288 | } |
292 | loadResource().setLowerBoundRevision(lowerBoundRevision()); | 289 | loadResource().setLowerBoundRevision(lowerBoundRevision()); |
293 | } break; | 290 | } break; |
294 | case Sink::Commands::RemoveFromDiskCommand: { | 291 | case Sink::Commands::RemoveFromDiskCommand: { |
295 | Log() << QString("Received a remove from disk command from %1").arg(client.name); | 292 | SinkLog() << QString("Received a remove from disk command from %1").arg(client.name); |
296 | m_resource.reset(nullptr); | 293 | m_resource.reset(nullptr); |
297 | loadResource().removeDataFromDisk(); | 294 | loadResource().removeDataFromDisk(); |
298 | m_server->close(); | 295 | m_server->close(); |
@@ -300,11 +297,11 @@ void Listener::processCommand(int commandId, uint messageId, const QByteArray &c | |||
300 | } break; | 297 | } break; |
301 | default: | 298 | default: |
302 | if (commandId > Sink::Commands::CustomCommand) { | 299 | if (commandId > Sink::Commands::CustomCommand) { |
303 | Log() << QString("Received custom command from %1: ").arg(client.name) << commandId; | 300 | SinkLog() << QString("Received custom command from %1: ").arg(client.name) << commandId; |
304 | loadResource().processCommand(commandId, commandBuffer); | 301 | loadResource().processCommand(commandId, commandBuffer); |
305 | } else { | 302 | } else { |
306 | success = false; | 303 | success = false; |
307 | ErrorMsg() << QString("\tReceived invalid command from %1: ").arg(client.name) << commandId; | 304 | SinkError() << QString("\tReceived invalid command from %1: ").arg(client.name) << commandId; |
308 | } | 305 | } |
309 | break; | 306 | break; |
310 | } | 307 | } |
@@ -352,7 +349,7 @@ bool Listener::processClientBuffer(Client &client) | |||
352 | const uint messageId = *(uint *)client.commandBuffer.constData(); | 349 | const uint messageId = *(uint *)client.commandBuffer.constData(); |
353 | const int commandId = *(int *)(client.commandBuffer.constData() + sizeof(uint)); | 350 | const int commandId = *(int *)(client.commandBuffer.constData() + sizeof(uint)); |
354 | const uint size = *(uint *)(client.commandBuffer.constData() + sizeof(int) + sizeof(uint)); | 351 | const uint size = *(uint *)(client.commandBuffer.constData() + sizeof(int) + sizeof(uint)); |
355 | Trace() << "Received message. Id:" << messageId << " CommandId: " << commandId << " Size: " << size; | 352 | SinkTrace() << "Received message. Id:" << messageId << " CommandId: " << commandId << " Size: " << size; |
356 | 353 | ||
357 | // TODO: reject messages above a certain size? | 354 | // TODO: reject messages above a certain size? |
358 | 355 | ||
@@ -365,11 +362,11 @@ bool Listener::processClientBuffer(Client &client) | |||
365 | const QByteArray commandBuffer = client.commandBuffer.left(size); | 362 | const QByteArray commandBuffer = client.commandBuffer.left(size); |
366 | client.commandBuffer.remove(0, size); | 363 | client.commandBuffer.remove(0, size); |
367 | processCommand(commandId, messageId, commandBuffer, client, [this, messageId, commandId, socket, clientName](bool success) { | 364 | processCommand(commandId, messageId, commandBuffer, client, [this, messageId, commandId, socket, clientName](bool success) { |
368 | Trace() << QString("Completed command messageid %1 of type \"%2\" from %3").arg(messageId).arg(QString(Sink::Commands::name(commandId))).arg(clientName); | 365 | SinkTrace() << QString("Completed command messageid %1 of type \"%2\" from %3").arg(messageId).arg(QString(Sink::Commands::name(commandId))).arg(clientName); |
369 | if (socket) { | 366 | if (socket) { |
370 | sendCommandCompleted(socket.data(), messageId, success); | 367 | sendCommandCompleted(socket.data(), messageId, success); |
371 | } else { | 368 | } else { |
372 | Log() << QString("Socket became invalid before we could send a response. client: %1").arg(clientName); | 369 | SinkLog() << QString("Socket became invalid before we could send a response. client: %1").arg(clientName); |
373 | } | 370 | } |
374 | }); | 371 | }); |
375 | 372 | ||
@@ -406,7 +403,7 @@ void Listener::updateClientsWithRevision(qint64 revision) | |||
406 | continue; | 403 | continue; |
407 | } | 404 | } |
408 | 405 | ||
409 | Trace() << "Sending revision update for " << client.name << revision; | 406 | SinkTrace() << "Sending revision update for " << client.name << revision; |
410 | Sink::Commands::write(client.socket, ++m_messageId, Sink::Commands::RevisionUpdateCommand, m_fbb); | 407 | Sink::Commands::write(client.socket, ++m_messageId, Sink::Commands::RevisionUpdateCommand, m_fbb); |
411 | } | 408 | } |
412 | m_fbb.Clear(); | 409 | m_fbb.Clear(); |
@@ -437,15 +434,15 @@ Sink::Resource &Listener::loadResource() | |||
437 | if (Sink::ResourceFactory *resourceFactory = Sink::ResourceFactory::load(m_resourceName)) { | 434 | if (Sink::ResourceFactory *resourceFactory = Sink::ResourceFactory::load(m_resourceName)) { |
438 | m_resource = std::unique_ptr<Sink::Resource>(resourceFactory->createResource(m_resourceInstanceIdentifier)); | 435 | m_resource = std::unique_ptr<Sink::Resource>(resourceFactory->createResource(m_resourceInstanceIdentifier)); |
439 | if (!m_resource) { | 436 | if (!m_resource) { |
440 | ErrorMsg() << "Failed to instantiate the resource " << m_resourceName; | 437 | SinkError() << "Failed to instantiate the resource " << m_resourceName; |
441 | m_resource = std::unique_ptr<Sink::Resource>(new Sink::Resource); | 438 | m_resource = std::unique_ptr<Sink::Resource>(new Sink::Resource); |
442 | } | 439 | } |
443 | Trace() << QString("Resource factory: %1").arg((qlonglong)resourceFactory); | 440 | SinkTrace() << QString("Resource factory: %1").arg((qlonglong)resourceFactory); |
444 | Trace() << QString("\tResource: %1").arg((qlonglong)m_resource.get()); | 441 | SinkTrace() << QString("\tResource: %1").arg((qlonglong)m_resource.get()); |
445 | connect(m_resource.get(), &Sink::Resource::revisionUpdated, this, &Listener::refreshRevision); | 442 | connect(m_resource.get(), &Sink::Resource::revisionUpdated, this, &Listener::refreshRevision); |
446 | connect(m_resource.get(), &Sink::Resource::notify, this, &Listener::notify); | 443 | connect(m_resource.get(), &Sink::Resource::notify, this, &Listener::notify); |
447 | } else { | 444 | } else { |
448 | ErrorMsg() << "Failed to load resource " << m_resourceName; | 445 | SinkError() << "Failed to load resource " << m_resourceName; |
449 | m_resource = std::unique_ptr<Sink::Resource>(new Sink::Resource); | 446 | m_resource = std::unique_ptr<Sink::Resource>(new Sink::Resource); |
450 | } | 447 | } |
451 | } | 448 | } |
diff --git a/common/listener.h b/common/listener.h index 67d76e9..d6c537a 100644 --- a/common/listener.h +++ b/common/listener.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <QPointer> | 25 | #include <QPointer> |
26 | #include <QLocalSocket> | 26 | #include <QLocalSocket> |
27 | #include <flatbuffers/flatbuffers.h> | 27 | #include <flatbuffers/flatbuffers.h> |
28 | #include <log.h> | ||
28 | 29 | ||
29 | namespace Sink { | 30 | namespace Sink { |
30 | class Resource; | 31 | class Resource; |
@@ -54,6 +55,7 @@ public: | |||
54 | class SINK_EXPORT Listener : public QObject | 55 | class SINK_EXPORT Listener : public QObject |
55 | { | 56 | { |
56 | Q_OBJECT | 57 | Q_OBJECT |
58 | SINK_DEBUG_AREA("communication") | ||
57 | 59 | ||
58 | public: | 60 | public: |
59 | Listener(const QByteArray &resourceName, const QByteArray &resourceType, QObject *parent = 0); | 61 | Listener(const QByteArray &resourceName, const QByteArray &resourceType, QObject *parent = 0); |
diff --git a/common/log.cpp b/common/log.cpp index 83cdc8a..821df06 100644 --- a/common/log.cpp +++ b/common/log.cpp | |||
@@ -238,27 +238,34 @@ static bool caseInsensitiveContains(const QByteArray &pattern, const QByteArrayL | |||
238 | return false; | 238 | return false; |
239 | } | 239 | } |
240 | 240 | ||
241 | QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea) | 241 | QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea, const char *debugComponent) |
242 | { | 242 | { |
243 | static NullStream nullstream; | 243 | static NullStream nullstream; |
244 | if (debugLevel < debugOutputLevel()) { | 244 | if (debugLevel < debugOutputLevel()) { |
245 | return QDebug(&nullstream); | 245 | return QDebug(&nullstream); |
246 | } | 246 | } |
247 | 247 | ||
248 | auto areas = debugOutputFilter(Sink::Log::Area); | 248 | if (sPrimaryComponent.isEmpty()) { |
249 | if (debugArea && !areas.isEmpty()) { | 249 | sPrimaryComponent = getProgramName(); |
250 | if (!containsItemStartingWith(debugArea, areas)) { | ||
251 | return QDebug(&nullstream); | ||
252 | } | ||
253 | } | 250 | } |
254 | static QByteArray programName = getProgramName(); | 251 | QString fullDebugArea = sPrimaryComponent + "."+ QString::fromLatin1(debugComponent) + "." + QString::fromLatin1(debugArea); |
255 | 252 | ||
256 | auto filter = debugOutputFilter(Sink::Log::ApplicationName); | 253 | //TODO add to autocompletion |
257 | if (!filter.isEmpty() && !filter.contains(programName)) { | 254 | |
258 | if (!containsItemStartingWith(programName, filter)) { | 255 | auto areas = debugOutputFilter(Sink::Log::Area); |
256 | if (!areas.isEmpty()) { | ||
257 | if (!containsItemStartingWith(fullDebugArea.toUtf8(), areas)) { | ||
259 | return QDebug(&nullstream); | 258 | return QDebug(&nullstream); |
260 | } | 259 | } |
261 | } | 260 | } |
261 | // static QByteArray programName = getProgramName(); | ||
262 | // | ||
263 | // auto filter = debugOutputFilter(Sink::Log::ApplicationName); | ||
264 | // if (!filter.isEmpty() && !filter.contains(programName)) { | ||
265 | // if (!containsItemStartingWith(programName, filter)) { | ||
266 | // return QDebug(&nullstream); | ||
267 | // } | ||
268 | // } | ||
262 | 269 | ||
263 | QString prefix; | 270 | QString prefix; |
264 | int prefixColorCode = ANSI_Colors::DoNothing; | 271 | int prefixColorCode = ANSI_Colors::DoNothing; |
@@ -299,19 +306,17 @@ QDebug Sink::Log::debugStream(DebugLevel debugLevel, int line, const char *file, | |||
299 | } | 306 | } |
300 | if (showProgram) { | 307 | if (showProgram) { |
301 | int width = 10; | 308 | int width = 10; |
302 | output += QString(" %1(%2)").arg(QString::fromLatin1(programName).leftJustified(width, ' ', true)).arg(unsigned(getpid())).rightJustified(width + 8, ' '); | 309 | output += QString(" %1(%2)").arg(QString::fromLatin1(getProgramName()).leftJustified(width, ' ', true)).arg(unsigned(getpid())).rightJustified(width + 8, ' '); |
303 | } | 310 | } |
304 | if (debugArea) { | 311 | if (useColor) { |
305 | if (useColor) { | 312 | output += colorCommand(QList<int>() << ANSI_Colors::Bold << prefixColorCode); |
306 | output += colorCommand(QList<int>() << ANSI_Colors::Bold << prefixColorCode); | 313 | } |
307 | } | 314 | output += QString(" %1 ").arg(fullDebugArea.leftJustified(25, ' ', true)); |
308 | output += QString(" %1 ").arg(QString::fromLatin1(debugArea).leftJustified(25, ' ', true)); | 315 | if (useColor) { |
309 | if (useColor) { | 316 | output += resetColor; |
310 | output += resetColor; | ||
311 | } | ||
312 | } | 317 | } |
313 | if (showFunction) { | 318 | if (showFunction) { |
314 | output += QString(" %3").arg(QString::fromLatin1(function).leftJustified(25, ' ', true)); | 319 | output += QString(" %3").arg(fullDebugArea.leftJustified(25, ' ', true)); |
315 | } | 320 | } |
316 | if (showLocation) { | 321 | if (showLocation) { |
317 | const auto filename = QString::fromLatin1(file).split('/').last(); | 322 | const auto filename = QString::fromLatin1(file).split('/').last(); |
diff --git a/common/log.h b/common/log.h index 36b8efe..d801ed9 100644 --- a/common/log.h +++ b/common/log.h | |||
@@ -57,7 +57,7 @@ QByteArrayList SINK_EXPORT debugOutputFilter(FilterType type); | |||
57 | void SINK_EXPORT setDebugOutputFields(const QByteArrayList &filter); | 57 | void SINK_EXPORT setDebugOutputFields(const QByteArrayList &filter); |
58 | QByteArrayList SINK_EXPORT debugOutputFields(); | 58 | QByteArrayList SINK_EXPORT debugOutputFields(); |
59 | 59 | ||
60 | QDebug SINK_EXPORT debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea = 0); | 60 | QDebug SINK_EXPORT debugStream(DebugLevel debugLevel, int line, const char *file, const char *function, const char *debugArea = 0, const char *debugComponent = 0); |
61 | 61 | ||
62 | struct SINK_EXPORT TraceTime | 62 | struct SINK_EXPORT TraceTime |
63 | { | 63 | { |
@@ -73,18 +73,23 @@ inline QDebug SINK_EXPORT operator<<(QDebug d, const TraceTime &time) | |||
73 | } | 73 | } |
74 | } | 74 | } |
75 | 75 | ||
76 | #define DEBUG_AREA nullptr | 76 | static const char *getComponentName() { return nullptr; } |
77 | |||
78 | #define Trace_() Sink::Log::debugStream(Sink::Log::DebugLevel::Trace, __LINE__, __FILE__, Q_FUNC_INFO) | ||
79 | #define Log_() Sink::Log::debugStream(Sink::Log::DebugLevel::Log, __LINE__, __FILE__, Q_FUNC_INFO) | ||
80 | 77 | ||
81 | #define Trace_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Trace, __LINE__, __FILE__, Q_FUNC_INFO, AREA) | 78 | #define Trace_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Trace, __LINE__, __FILE__, Q_FUNC_INFO, AREA) |
82 | #define Log_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Log, __LINE__, __FILE__, Q_FUNC_INFO, AREA) | 79 | #define Log_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Log, __LINE__, __FILE__, Q_FUNC_INFO, AREA) |
83 | #define Warning_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Warning, __LINE__, __FILE__, Q_FUNC_INFO, AREA) | 80 | #define Warning_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Warning, __LINE__, __FILE__, Q_FUNC_INFO, AREA) |
84 | #define Error_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Error, __LINE__, __FILE__, Q_FUNC_INFO, AREA) | 81 | #define Error_area(AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Error, __LINE__, __FILE__, Q_FUNC_INFO, AREA) |
85 | 82 | ||
86 | #define Trace() Sink::Log::debugStream(Sink::Log::DebugLevel::Trace, __LINE__, __FILE__, Q_FUNC_INFO, DEBUG_AREA) | 83 | #define SinkTrace_(COMPONENT, AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Trace, __LINE__, __FILE__, Q_FUNC_INFO, AREA, COMPONENT) |
87 | #define Log() Sink::Log::debugStream(Sink::Log::DebugLevel::Log, __LINE__, __FILE__, Q_FUNC_INFO, DEBUG_AREA) | 84 | #define SinkLog_(COMPONENT, AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Log, __LINE__, __FILE__, Q_FUNC_INFO, AREA, COMPONENT) |
88 | #define Warning() Sink::Log::debugStream(Sink::Log::DebugLevel::Warning, __LINE__, __FILE__, Q_FUNC_INFO, DEBUG_AREA) | 85 | #define SinkWarning_(COMPONENT, AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Warning, __LINE__, __FILE__, Q_FUNC_INFO, AREA, COMPONENT) |
89 | // FIXME Error clashes with Storage::Error and MessageQueue::Error | 86 | #define SinkError_(COMPONENT, AREA) Sink::Log::debugStream(Sink::Log::DebugLevel::Error, __LINE__, __FILE__, Q_FUNC_INFO, AREA, COMPONENT) |
90 | #define ErrorMsg() Sink::Log::debugStream(Sink::Log::DebugLevel::Error, __LINE__, __FILE__, Q_FUNC_INFO, DEBUG_AREA) | 87 | |
88 | #define SinkTrace() Sink::Log::debugStream(Sink::Log::DebugLevel::Trace, __LINE__, __FILE__, Q_FUNC_INFO, s_sinkDebugArea, getComponentName()) | ||
89 | #define SinkLog() Sink::Log::debugStream(Sink::Log::DebugLevel::Log, __LINE__, __FILE__, Q_FUNC_INFO, s_sinkDebugArea, getComponentName()) | ||
90 | #define SinkWarning() Sink::Log::debugStream(Sink::Log::DebugLevel::Warning, __LINE__, __FILE__, Q_FUNC_INFO, s_sinkDebugArea, getComponentName()) | ||
91 | #define SinkError() Sink::Log::debugStream(Sink::Log::DebugLevel::Error, __LINE__, __FILE__, Q_FUNC_INFO, s_sinkDebugArea, getComponentName()) | ||
92 | |||
93 | #define SINK_DEBUG_AREA(AREA) static constexpr const char* s_sinkDebugArea{AREA}; | ||
94 | #define SINK_DEBUG_COMPONENT(COMPONENT) const char* getComponentName() const { return COMPONENT; }; | ||
95 | #define SINK_DEBUG_COMPONENT_STATIC(COMPONENT) static const char* getComponentName() { return COMPONENT; }; | ||
diff --git a/common/mailpreprocessor.cpp b/common/mailpreprocessor.cpp index c38035e..2863ad4 100644 --- a/common/mailpreprocessor.cpp +++ b/common/mailpreprocessor.cpp | |||
@@ -29,6 +29,8 @@ | |||
29 | 29 | ||
30 | using namespace Sink; | 30 | using namespace Sink; |
31 | 31 | ||
32 | SINK_DEBUG_AREA("mailpreprocessor") | ||
33 | |||
32 | QString MailPropertyExtractor::getFilePathFromMimeMessagePath(const QString &s) const | 34 | QString MailPropertyExtractor::getFilePathFromMimeMessagePath(const QString &s) const |
33 | { | 35 | { |
34 | return s; | 36 | return s; |
@@ -38,23 +40,23 @@ void MailPropertyExtractor::updatedIndexedProperties(Sink::ApplicationDomain::Ma | |||
38 | { | 40 | { |
39 | const auto mimeMessagePath = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); | 41 | const auto mimeMessagePath = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); |
40 | if (mimeMessagePath.isNull()) { | 42 | if (mimeMessagePath.isNull()) { |
41 | Trace() << "No mime message"; | 43 | SinkTrace() << "No mime message"; |
42 | return; | 44 | return; |
43 | } | 45 | } |
44 | Trace() << "Updating indexed properties " << mimeMessagePath; | 46 | SinkTrace() << "Updating indexed properties " << mimeMessagePath; |
45 | QFile f(mimeMessagePath); | 47 | QFile f(mimeMessagePath); |
46 | if (!f.open(QIODevice::ReadOnly)) { | 48 | if (!f.open(QIODevice::ReadOnly)) { |
47 | Warning() << "Failed to open the file: " << mimeMessagePath; | 49 | SinkWarning() << "Failed to open the file: " << mimeMessagePath; |
48 | return; | 50 | return; |
49 | } | 51 | } |
50 | if (!f.size()) { | 52 | if (!f.size()) { |
51 | Warning() << "The file is empty."; | 53 | SinkWarning() << "The file is empty."; |
52 | return; | 54 | return; |
53 | } | 55 | } |
54 | const auto mappedSize = qMin((qint64)8000, f.size()); | 56 | const auto mappedSize = qMin((qint64)8000, f.size()); |
55 | auto mapped = f.map(0, mappedSize); | 57 | auto mapped = f.map(0, mappedSize); |
56 | if (!mapped) { | 58 | if (!mapped) { |
57 | Warning() << "Failed to map the file: " << f.errorString(); | 59 | SinkWarning() << "Failed to map the file: " << f.errorString(); |
58 | return; | 60 | return; |
59 | } | 61 | } |
60 | 62 | ||
@@ -89,15 +91,15 @@ QString MimeMessageMover::moveMessage(const QString &oldPath, const Sink::Applic | |||
89 | const auto filePath = directory + "/" + mail.identifier(); | 91 | const auto filePath = directory + "/" + mail.identifier(); |
90 | if (oldPath != filePath) { | 92 | if (oldPath != filePath) { |
91 | if (!QDir().mkpath(directory)) { | 93 | if (!QDir().mkpath(directory)) { |
92 | Warning() << "Failed to create the directory: " << directory; | 94 | SinkWarning() << "Failed to create the directory: " << directory; |
93 | } | 95 | } |
94 | QFile::remove(filePath); | 96 | QFile::remove(filePath); |
95 | QFile origFile(oldPath); | 97 | QFile origFile(oldPath); |
96 | if (!origFile.open(QIODevice::ReadWrite)) { | 98 | if (!origFile.open(QIODevice::ReadWrite)) { |
97 | Warning() << "Failed to open the original file with write rights: " << origFile.errorString(); | 99 | SinkWarning() << "Failed to open the original file with write rights: " << origFile.errorString(); |
98 | } | 100 | } |
99 | if (!origFile.rename(filePath)) { | 101 | if (!origFile.rename(filePath)) { |
100 | Warning() << "Failed to move the file from: " << oldPath << " to " << filePath << ". " << origFile.errorString(); | 102 | SinkWarning() << "Failed to move the file from: " << oldPath << " to " << filePath << ". " << origFile.errorString(); |
101 | } | 103 | } |
102 | origFile.close(); | 104 | origFile.close(); |
103 | return filePath; | 105 | return filePath; |
diff --git a/common/messagequeue.cpp b/common/messagequeue.cpp index b9f11f8..a6e44e3 100644 --- a/common/messagequeue.cpp +++ b/common/messagequeue.cpp | |||
@@ -3,6 +3,8 @@ | |||
3 | #include <QDebug> | 3 | #include <QDebug> |
4 | #include <log.h> | 4 | #include <log.h> |
5 | 5 | ||
6 | SINK_DEBUG_AREA("messagequeue") | ||
7 | |||
6 | static KAsync::Job<void> waitForCompletion(QList<KAsync::Future<void>> &futures) | 8 | static KAsync::Job<void> waitForCompletion(QList<KAsync::Future<void>> &futures) |
7 | { | 9 | { |
8 | auto context = new QObject; | 10 | auto context = new QObject; |
@@ -128,7 +130,7 @@ KAsync::Job<void> MessageQueue::dequeueBatch(int maxBatchSize, const std::functi | |||
128 | return false; | 130 | return false; |
129 | }, | 131 | }, |
130 | [](const Sink::Storage::Error &error) { | 132 | [](const Sink::Storage::Error &error) { |
131 | ErrorMsg() << "Error while retrieving value" << error.message; | 133 | SinkError() << "Error while retrieving value" << error.message; |
132 | // errorHandler(Error(error.store, error.code, error.message)); | 134 | // errorHandler(Error(error.store, error.code, error.message)); |
133 | }); | 135 | }); |
134 | 136 | ||
@@ -164,7 +166,7 @@ bool MessageQueue::isEmpty() | |||
164 | } | 166 | } |
165 | return true; | 167 | return true; |
166 | }, | 168 | }, |
167 | [](const Sink::Storage::Error &error) { ErrorMsg() << "Error while checking if empty" << error.message; }); | 169 | [](const Sink::Storage::Error &error) { SinkError() << "Error while checking if empty" << error.message; }); |
168 | } | 170 | } |
169 | return count == 0; | 171 | return count == 0; |
170 | } | 172 | } |
diff --git a/common/modelresult.cpp b/common/modelresult.cpp index 3778d4d..56a39ee 100644 --- a/common/modelresult.cpp +++ b/common/modelresult.cpp | |||
@@ -25,8 +25,7 @@ | |||
25 | #include "domain/folder.h" | 25 | #include "domain/folder.h" |
26 | #include "log.h" | 26 | #include "log.h" |
27 | 27 | ||
28 | #undef DEBUG_AREA | 28 | SINK_DEBUG_AREA("modelresult") |
29 | #define DEBUG_AREA "client.modelresult" | ||
30 | 29 | ||
31 | static uint qHash(const Sink::ApplicationDomain::ApplicationDomainType &type) | 30 | static uint qHash(const Sink::ApplicationDomain::ApplicationDomainType &type) |
32 | { | 31 | { |
@@ -123,7 +122,7 @@ QModelIndex ModelResult<T, Ptr>::index(int row, int column, const QModelIndex &p | |||
123 | const auto childId = list.at(row); | 122 | const auto childId = list.at(row); |
124 | return createIndex(row, column, childId); | 123 | return createIndex(row, column, childId); |
125 | } | 124 | } |
126 | Warning() << "Index not available " << row << column << parent; | 125 | SinkWarning() << "Index not available " << row << column << parent; |
127 | Q_ASSERT(false); | 126 | Q_ASSERT(false); |
128 | return QModelIndex(); | 127 | return QModelIndex(); |
129 | } | 128 | } |
@@ -174,7 +173,7 @@ bool ModelResult<T, Ptr>::canFetchMore(const QModelIndex &parent) const | |||
174 | template <class T, class Ptr> | 173 | template <class T, class Ptr> |
175 | void ModelResult<T, Ptr>::fetchMore(const QModelIndex &parent) | 174 | void ModelResult<T, Ptr>::fetchMore(const QModelIndex &parent) |
176 | { | 175 | { |
177 | Trace() << "Fetching more: " << parent; | 176 | SinkTrace() << "Fetching more: " << parent; |
178 | fetchEntities(parent); | 177 | fetchEntities(parent); |
179 | } | 178 | } |
180 | 179 | ||
@@ -185,7 +184,7 @@ void ModelResult<T, Ptr>::add(const Ptr &value) | |||
185 | const auto id = parentId(value); | 184 | const auto id = parentId(value); |
186 | // Ignore updates we get before the initial fetch is done | 185 | // Ignore updates we get before the initial fetch is done |
187 | if (!mEntityChildrenFetched.contains(id)) { | 186 | if (!mEntityChildrenFetched.contains(id)) { |
188 | Trace() << "Too early" << id; | 187 | SinkTrace() << "Too early" << id; |
189 | return; | 188 | return; |
190 | } | 189 | } |
191 | auto parent = createIndexFromId(id); | 190 | auto parent = createIndexFromId(id); |
@@ -198,7 +197,7 @@ void ModelResult<T, Ptr>::add(const Ptr &value) | |||
198 | } | 197 | } |
199 | } | 198 | } |
200 | if (mEntities.contains(childId)) { | 199 | if (mEntities.contains(childId)) { |
201 | Warning() << "Entity already in model " << value->identifier(); | 200 | SinkWarning() << "Entity already in model " << value->identifier(); |
202 | return; | 201 | return; |
203 | } | 202 | } |
204 | // qDebug() << "Inserting rows " << index << parent; | 203 | // qDebug() << "Inserting rows " << index << parent; |
@@ -234,18 +233,18 @@ void ModelResult<T, Ptr>::fetchEntities(const QModelIndex &parent) | |||
234 | const auto id = getIdentifier(parent); | 233 | const auto id = getIdentifier(parent); |
235 | mEntityChildrenFetchComplete.remove(id); | 234 | mEntityChildrenFetchComplete.remove(id); |
236 | mEntityChildrenFetched.insert(id); | 235 | mEntityChildrenFetched.insert(id); |
237 | Trace() << "Loading child entities of parent " << id; | 236 | SinkTrace() << "Loading child entities of parent " << id; |
238 | if (loadEntities) { | 237 | if (loadEntities) { |
239 | loadEntities(parent.data(DomainObjectRole).template value<Ptr>()); | 238 | loadEntities(parent.data(DomainObjectRole).template value<Ptr>()); |
240 | } else { | 239 | } else { |
241 | Warning() << "No way to fetch entities"; | 240 | SinkWarning() << "No way to fetch entities"; |
242 | } | 241 | } |
243 | } | 242 | } |
244 | 243 | ||
245 | template <class T, class Ptr> | 244 | template <class T, class Ptr> |
246 | void ModelResult<T, Ptr>::setFetcher(const std::function<void(const Ptr &parent)> &fetcher) | 245 | void ModelResult<T, Ptr>::setFetcher(const std::function<void(const Ptr &parent)> &fetcher) |
247 | { | 246 | { |
248 | Trace() << "Setting fetcher"; | 247 | SinkTrace() << "Setting fetcher"; |
249 | loadEntities = fetcher; | 248 | loadEntities = fetcher; |
250 | } | 249 | } |
251 | 250 | ||
@@ -270,7 +269,7 @@ void ModelResult<T, Ptr>::setEmitter(const typename Sink::ResultEmitter<Ptr>::Pt | |||
270 | }); | 269 | }); |
271 | }); | 270 | }); |
272 | emitter->onInitialResultSetComplete([this](const Ptr &parent) { | 271 | emitter->onInitialResultSetComplete([this](const Ptr &parent) { |
273 | Trace() << "Initial result set complete"; | 272 | SinkTrace() << "Initial result set complete"; |
274 | const qint64 parentId = parent ? qHash(*parent) : 0; | 273 | const qint64 parentId = parent ? qHash(*parent) : 0; |
275 | const auto parentIndex = createIndexFromId(parentId); | 274 | const auto parentIndex = createIndexFromId(parentId); |
276 | mEntityChildrenFetchComplete.insert(parentId); | 275 | mEntityChildrenFetchComplete.insert(parentId); |
diff --git a/common/pipeline.cpp b/common/pipeline.cpp index 034f913..f1a4a32 100644 --- a/common/pipeline.cpp +++ b/common/pipeline.cpp | |||
@@ -38,8 +38,7 @@ | |||
38 | #include "definitions.h" | 38 | #include "definitions.h" |
39 | #include "bufferutils.h" | 39 | #include "bufferutils.h" |
40 | 40 | ||
41 | #undef DEBUG_AREA | 41 | SINK_DEBUG_AREA("pipeline") |
42 | #define DEBUG_AREA "resource.pipeline" | ||
43 | 42 | ||
44 | namespace Sink { | 43 | namespace Sink { |
45 | 44 | ||
@@ -63,10 +62,10 @@ public: | |||
63 | 62 | ||
64 | void Pipeline::Private::storeNewRevision(qint64 newRevision, const flatbuffers::FlatBufferBuilder &fbb, const QByteArray &bufferType, const QByteArray &uid) | 63 | void Pipeline::Private::storeNewRevision(qint64 newRevision, const flatbuffers::FlatBufferBuilder &fbb, const QByteArray &bufferType, const QByteArray &uid) |
65 | { | 64 | { |
66 | Trace() << "Committing new revision: " << uid << newRevision; | 65 | SinkTrace() << "Committing new revision: " << uid << newRevision; |
67 | Storage::mainDatabase(transaction, bufferType) | 66 | Storage::mainDatabase(transaction, bufferType) |
68 | .write(Storage::assembleKey(uid, newRevision), BufferUtils::extractBuffer(fbb), | 67 | .write(Storage::assembleKey(uid, newRevision), BufferUtils::extractBuffer(fbb), |
69 | [uid, newRevision](const Storage::Error &error) { Warning() << "Failed to write entity" << uid << newRevision; }); | 68 | [uid, newRevision](const Storage::Error &error) { SinkWarning() << "Failed to write entity" << uid << newRevision; }); |
70 | revisionChanged = true; | 69 | revisionChanged = true; |
71 | Storage::setMaxRevision(transaction, newRevision); | 70 | Storage::setMaxRevision(transaction, newRevision); |
72 | Storage::recordRevision(transaction, newRevision, uid, bufferType); | 71 | Storage::recordRevision(transaction, newRevision, uid, bufferType); |
@@ -107,11 +106,11 @@ void Pipeline::startTransaction() | |||
107 | if (d->transaction) { | 106 | if (d->transaction) { |
108 | return; | 107 | return; |
109 | } | 108 | } |
110 | Trace() << "Starting transaction."; | 109 | SinkTrace() << "Starting transaction."; |
111 | d->transactionTime.start(); | 110 | d->transactionTime.start(); |
112 | d->transactionItemCount = 0; | 111 | d->transactionItemCount = 0; |
113 | d->transaction = storage().createTransaction(Storage::ReadWrite, [](const Sink::Storage::Error &error) { | 112 | d->transaction = storage().createTransaction(Storage::ReadWrite, [](const Sink::Storage::Error &error) { |
114 | Warning() << error.message; | 113 | SinkWarning() << error.message; |
115 | }); | 114 | }); |
116 | 115 | ||
117 | //FIXME this is a temporary measure to recover from a failure to open the named databases correctly. | 116 | //FIXME this is a temporary measure to recover from a failure to open the named databases correctly. |
@@ -119,9 +118,9 @@ void Pipeline::startTransaction() | |||
119 | //It seems like the validateNamedDatabase calls actually stops the mdb_put failures during sync... | 118 | //It seems like the validateNamedDatabase calls actually stops the mdb_put failures during sync... |
120 | if (d->storage.exists()) { | 119 | if (d->storage.exists()) { |
121 | while (!d->transaction.validateNamedDatabases()) { | 120 | while (!d->transaction.validateNamedDatabases()) { |
122 | Warning() << "Opened an invalid transaction!!!!!!"; | 121 | SinkWarning() << "Opened an invalid transaction!!!!!!"; |
123 | d->transaction = std::move(storage().createTransaction(Storage::ReadWrite, [](const Sink::Storage::Error &error) { | 122 | d->transaction = std::move(storage().createTransaction(Storage::ReadWrite, [](const Sink::Storage::Error &error) { |
124 | Warning() << error.message; | 123 | SinkWarning() << error.message; |
125 | })); | 124 | })); |
126 | } | 125 | } |
127 | } | 126 | } |
@@ -141,7 +140,7 @@ void Pipeline::commit() | |||
141 | } | 140 | } |
142 | const auto revision = Storage::maxRevision(d->transaction); | 141 | const auto revision = Storage::maxRevision(d->transaction); |
143 | const auto elapsed = d->transactionTime.elapsed(); | 142 | const auto elapsed = d->transactionTime.elapsed(); |
144 | Log() << "Committing revision: " << revision << ":" << d->transactionItemCount << " items in: " << Log::TraceTime(elapsed) << " " | 143 | SinkLog() << "Committing revision: " << revision << ":" << d->transactionItemCount << " items in: " << Log::TraceTime(elapsed) << " " |
145 | << (double)elapsed / (double)qMax(d->transactionItemCount, 1) << "[ms/item]"; | 144 | << (double)elapsed / (double)qMax(d->transactionItemCount, 1) << "[ms/item]"; |
146 | if (d->transaction) { | 145 | if (d->transaction) { |
147 | d->transaction.commit(); | 146 | d->transaction.commit(); |
@@ -170,7 +169,7 @@ KAsync::Job<qint64> Pipeline::newEntity(void const *command, size_t size) | |||
170 | { | 169 | { |
171 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(command), size); | 170 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(command), size); |
172 | if (!Commands::VerifyCreateEntityBuffer(verifyer)) { | 171 | if (!Commands::VerifyCreateEntityBuffer(verifyer)) { |
173 | Warning() << "invalid buffer, not a create entity buffer"; | 172 | SinkWarning() << "invalid buffer, not a create entity buffer"; |
174 | return KAsync::error<qint64>(0); | 173 | return KAsync::error<qint64>(0); |
175 | } | 174 | } |
176 | } | 175 | } |
@@ -182,7 +181,7 @@ KAsync::Job<qint64> Pipeline::newEntity(void const *command, size_t size) | |||
182 | if (createEntity->entityId()) { | 181 | if (createEntity->entityId()) { |
183 | key = QByteArray(reinterpret_cast<char const *>(createEntity->entityId()->Data()), createEntity->entityId()->size()); | 182 | key = QByteArray(reinterpret_cast<char const *>(createEntity->entityId()->Data()), createEntity->entityId()->size()); |
184 | if (Storage::mainDatabase(d->transaction, bufferType).contains(key)) { | 183 | if (Storage::mainDatabase(d->transaction, bufferType).contains(key)) { |
185 | ErrorMsg() << "An entity with this id already exists: " << key; | 184 | SinkError() << "An entity with this id already exists: " << key; |
186 | return KAsync::error<qint64>(0); | 185 | return KAsync::error<qint64>(0); |
187 | } | 186 | } |
188 | } | 187 | } |
@@ -190,25 +189,25 @@ KAsync::Job<qint64> Pipeline::newEntity(void const *command, size_t size) | |||
190 | if (key.isEmpty()) { | 189 | if (key.isEmpty()) { |
191 | key = Sink::Storage::generateUid(); | 190 | key = Sink::Storage::generateUid(); |
192 | } | 191 | } |
193 | Log() << "New Entity. Type: " << bufferType << "uid: "<< key << " replayToSource: " << replayToSource; | 192 | SinkLog() << "New Entity. Type: " << bufferType << "uid: "<< key << " replayToSource: " << replayToSource; |
194 | Q_ASSERT(!key.isEmpty()); | 193 | Q_ASSERT(!key.isEmpty()); |
195 | 194 | ||
196 | { | 195 | { |
197 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(createEntity->delta()->Data()), createEntity->delta()->size()); | 196 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(createEntity->delta()->Data()), createEntity->delta()->size()); |
198 | if (!VerifyEntityBuffer(verifyer)) { | 197 | if (!VerifyEntityBuffer(verifyer)) { |
199 | Warning() << "invalid buffer, not an entity buffer"; | 198 | SinkWarning() << "invalid buffer, not an entity buffer"; |
200 | return KAsync::error<qint64>(0); | 199 | return KAsync::error<qint64>(0); |
201 | } | 200 | } |
202 | } | 201 | } |
203 | auto entity = GetEntity(createEntity->delta()->Data()); | 202 | auto entity = GetEntity(createEntity->delta()->Data()); |
204 | if (!entity->resource()->size() && !entity->local()->size()) { | 203 | if (!entity->resource()->size() && !entity->local()->size()) { |
205 | Warning() << "No local and no resource buffer while trying to create entity."; | 204 | SinkWarning() << "No local and no resource buffer while trying to create entity."; |
206 | return KAsync::error<qint64>(0); | 205 | return KAsync::error<qint64>(0); |
207 | } | 206 | } |
208 | 207 | ||
209 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(d->resourceType, bufferType); | 208 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(d->resourceType, bufferType); |
210 | if (!adaptorFactory) { | 209 | if (!adaptorFactory) { |
211 | Warning() << "no adaptor factory for type " << bufferType; | 210 | SinkWarning() << "no adaptor factory for type " << bufferType; |
212 | return KAsync::error<qint64>(0); | 211 | return KAsync::error<qint64>(0); |
213 | } | 212 | } |
214 | 213 | ||
@@ -244,7 +243,7 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size) | |||
244 | { | 243 | { |
245 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(command), size); | 244 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(command), size); |
246 | if (!Commands::VerifyModifyEntityBuffer(verifyer)) { | 245 | if (!Commands::VerifyModifyEntityBuffer(verifyer)) { |
247 | Warning() << "invalid buffer, not a modify entity buffer"; | 246 | SinkWarning() << "invalid buffer, not a modify entity buffer"; |
248 | return KAsync::error<qint64>(0); | 247 | return KAsync::error<qint64>(0); |
249 | } | 248 | } |
250 | } | 249 | } |
@@ -254,21 +253,21 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size) | |||
254 | if (modifyEntity->modifiedProperties()) { | 253 | if (modifyEntity->modifiedProperties()) { |
255 | changeset = BufferUtils::fromVector(*modifyEntity->modifiedProperties()); | 254 | changeset = BufferUtils::fromVector(*modifyEntity->modifiedProperties()); |
256 | } else { | 255 | } else { |
257 | Warning() << "No changeset available"; | 256 | SinkWarning() << "No changeset available"; |
258 | } | 257 | } |
259 | const qint64 baseRevision = modifyEntity->revision(); | 258 | const qint64 baseRevision = modifyEntity->revision(); |
260 | const bool replayToSource = modifyEntity->replayToSource(); | 259 | const bool replayToSource = modifyEntity->replayToSource(); |
261 | const QByteArray bufferType = QByteArray(reinterpret_cast<char const *>(modifyEntity->domainType()->Data()), modifyEntity->domainType()->size()); | 260 | const QByteArray bufferType = QByteArray(reinterpret_cast<char const *>(modifyEntity->domainType()->Data()), modifyEntity->domainType()->size()); |
262 | const QByteArray key = QByteArray(reinterpret_cast<char const *>(modifyEntity->entityId()->Data()), modifyEntity->entityId()->size()); | 261 | const QByteArray key = QByteArray(reinterpret_cast<char const *>(modifyEntity->entityId()->Data()), modifyEntity->entityId()->size()); |
263 | Log() << "Modified Entity. Type: " << bufferType << "uid: "<< key << " replayToSource: " << replayToSource; | 262 | SinkLog() << "Modified Entity. Type: " << bufferType << "uid: "<< key << " replayToSource: " << replayToSource; |
264 | if (bufferType.isEmpty() || key.isEmpty()) { | 263 | if (bufferType.isEmpty() || key.isEmpty()) { |
265 | Warning() << "entity type or key " << bufferType << key; | 264 | SinkWarning() << "entity type or key " << bufferType << key; |
266 | return KAsync::error<qint64>(0); | 265 | return KAsync::error<qint64>(0); |
267 | } | 266 | } |
268 | { | 267 | { |
269 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(modifyEntity->delta()->Data()), modifyEntity->delta()->size()); | 268 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(modifyEntity->delta()->Data()), modifyEntity->delta()->size()); |
270 | if (!VerifyEntityBuffer(verifyer)) { | 269 | if (!VerifyEntityBuffer(verifyer)) { |
271 | Warning() << "invalid buffer, not an entity buffer"; | 270 | SinkWarning() << "invalid buffer, not an entity buffer"; |
272 | return KAsync::error<qint64>(0); | 271 | return KAsync::error<qint64>(0); |
273 | } | 272 | } |
274 | } | 273 | } |
@@ -276,7 +275,7 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size) | |||
276 | // TODO use only readPropertyMapper and writePropertyMapper | 275 | // TODO use only readPropertyMapper and writePropertyMapper |
277 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(d->resourceType, bufferType); | 276 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(d->resourceType, bufferType); |
278 | if (!adaptorFactory) { | 277 | if (!adaptorFactory) { |
279 | Warning() << "no adaptor factory for type " << bufferType; | 278 | SinkWarning() << "no adaptor factory for type " << bufferType; |
280 | return KAsync::error<qint64>(0); | 279 | return KAsync::error<qint64>(0); |
281 | } | 280 | } |
282 | 281 | ||
@@ -290,16 +289,16 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size) | |||
290 | [¤t, adaptorFactory](const QByteArray &key, const QByteArray &data) -> bool { | 289 | [¤t, adaptorFactory](const QByteArray &key, const QByteArray &data) -> bool { |
291 | EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); | 290 | EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); |
292 | if (!buffer.isValid()) { | 291 | if (!buffer.isValid()) { |
293 | Warning() << "Read invalid buffer from disk"; | 292 | SinkWarning() << "Read invalid buffer from disk"; |
294 | } else { | 293 | } else { |
295 | current = adaptorFactory->createAdaptor(buffer.entity()); | 294 | current = adaptorFactory->createAdaptor(buffer.entity()); |
296 | } | 295 | } |
297 | return false; | 296 | return false; |
298 | }, | 297 | }, |
299 | [baseRevision](const Storage::Error &error) { Warning() << "Failed to read old revision from storage: " << error.message << "Revision: " << baseRevision; }); | 298 | [baseRevision](const Storage::Error &error) { SinkWarning() << "Failed to read old revision from storage: " << error.message << "Revision: " << baseRevision; }); |
300 | 299 | ||
301 | if (!current) { | 300 | if (!current) { |
302 | Warning() << "Failed to read local value " << key; | 301 | SinkWarning() << "Failed to read local value " << key; |
303 | return KAsync::error<qint64>(0); | 302 | return KAsync::error<qint64>(0); |
304 | } | 303 | } |
305 | 304 | ||
@@ -307,7 +306,7 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size) | |||
307 | 306 | ||
308 | // Apply diff | 307 | // Apply diff |
309 | // FIXME only apply the properties that are available in the buffer | 308 | // FIXME only apply the properties that are available in the buffer |
310 | Trace() << "Applying changed properties: " << changeset; | 309 | SinkTrace() << "Applying changed properties: " << changeset; |
311 | for (const auto &property : changeset) { | 310 | for (const auto &property : changeset) { |
312 | const auto value = diff->getProperty(property); | 311 | const auto value = diff->getProperty(property); |
313 | if (value.isValid()) { | 312 | if (value.isValid()) { |
@@ -357,7 +356,7 @@ KAsync::Job<qint64> Pipeline::deletedEntity(void const *command, size_t size) | |||
357 | { | 356 | { |
358 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(command), size); | 357 | flatbuffers::Verifier verifyer(reinterpret_cast<const uint8_t *>(command), size); |
359 | if (!Commands::VerifyDeleteEntityBuffer(verifyer)) { | 358 | if (!Commands::VerifyDeleteEntityBuffer(verifyer)) { |
360 | Warning() << "invalid buffer, not a delete entity buffer"; | 359 | SinkWarning() << "invalid buffer, not a delete entity buffer"; |
361 | return KAsync::error<qint64>(0); | 360 | return KAsync::error<qint64>(0); |
362 | } | 361 | } |
363 | } | 362 | } |
@@ -366,7 +365,7 @@ KAsync::Job<qint64> Pipeline::deletedEntity(void const *command, size_t size) | |||
366 | const bool replayToSource = deleteEntity->replayToSource(); | 365 | const bool replayToSource = deleteEntity->replayToSource(); |
367 | const QByteArray bufferType = QByteArray(reinterpret_cast<char const *>(deleteEntity->domainType()->Data()), deleteEntity->domainType()->size()); | 366 | const QByteArray bufferType = QByteArray(reinterpret_cast<char const *>(deleteEntity->domainType()->Data()), deleteEntity->domainType()->size()); |
368 | const QByteArray key = QByteArray(reinterpret_cast<char const *>(deleteEntity->entityId()->Data()), deleteEntity->entityId()->size()); | 367 | const QByteArray key = QByteArray(reinterpret_cast<char const *>(deleteEntity->entityId()->Data()), deleteEntity->entityId()->size()); |
369 | Log() << "Deleted Entity. Type: " << bufferType << "uid: "<< key << " replayToSource: " << replayToSource; | 368 | SinkLog() << "Deleted Entity. Type: " << bufferType << "uid: "<< key << " replayToSource: " << replayToSource; |
370 | 369 | ||
371 | bool found = false; | 370 | bool found = false; |
372 | bool alreadyRemoved = false; | 371 | bool alreadyRemoved = false; |
@@ -383,14 +382,14 @@ KAsync::Job<qint64> Pipeline::deletedEntity(void const *command, size_t size) | |||
383 | } | 382 | } |
384 | return false; | 383 | return false; |
385 | }, | 384 | }, |
386 | [](const Storage::Error &error) { Warning() << "Failed to read old revision from storage: " << error.message; }); | 385 | [](const Storage::Error &error) { SinkWarning() << "Failed to read old revision from storage: " << error.message; }); |
387 | 386 | ||
388 | if (!found) { | 387 | if (!found) { |
389 | Warning() << "Failed to find entity " << key; | 388 | SinkWarning() << "Failed to find entity " << key; |
390 | return KAsync::error<qint64>(0); | 389 | return KAsync::error<qint64>(0); |
391 | } | 390 | } |
392 | if (alreadyRemoved) { | 391 | if (alreadyRemoved) { |
393 | Warning() << "Entity is already removed " << key; | 392 | SinkWarning() << "Entity is already removed " << key; |
394 | return KAsync::error<qint64>(0); | 393 | return KAsync::error<qint64>(0); |
395 | } | 394 | } |
396 | 395 | ||
@@ -410,7 +409,7 @@ KAsync::Job<qint64> Pipeline::deletedEntity(void const *command, size_t size) | |||
410 | 409 | ||
411 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(d->resourceType, bufferType); | 410 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(d->resourceType, bufferType); |
412 | if (!adaptorFactory) { | 411 | if (!adaptorFactory) { |
413 | Warning() << "no adaptor factory for type " << bufferType; | 412 | SinkWarning() << "no adaptor factory for type " << bufferType; |
414 | return KAsync::error<qint64>(0); | 413 | return KAsync::error<qint64>(0); |
415 | } | 414 | } |
416 | 415 | ||
@@ -420,13 +419,13 @@ KAsync::Job<qint64> Pipeline::deletedEntity(void const *command, size_t size) | |||
420 | [this, bufferType, newRevision, adaptorFactory, key, ¤t](const QByteArray &, const QByteArray &data) -> bool { | 419 | [this, bufferType, newRevision, adaptorFactory, key, ¤t](const QByteArray &, const QByteArray &data) -> bool { |
421 | EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); | 420 | EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); |
422 | if (!buffer.isValid()) { | 421 | if (!buffer.isValid()) { |
423 | Warning() << "Read invalid buffer from disk"; | 422 | SinkWarning() << "Read invalid buffer from disk"; |
424 | } else { | 423 | } else { |
425 | current = adaptorFactory->createAdaptor(buffer.entity()); | 424 | current = adaptorFactory->createAdaptor(buffer.entity()); |
426 | } | 425 | } |
427 | return false; | 426 | return false; |
428 | }, | 427 | }, |
429 | [this](const Storage::Error &error) { ErrorMsg() << "Failed to find value in pipeline: " << error.message; }); | 428 | [this](const Storage::Error &error) { SinkError() << "Failed to find value in pipeline: " << error.message; }); |
430 | 429 | ||
431 | d->storeNewRevision(newRevision, fbb, bufferType, key); | 430 | d->storeNewRevision(newRevision, fbb, bufferType, key); |
432 | 431 | ||
@@ -442,13 +441,13 @@ void Pipeline::cleanupRevision(qint64 revision) | |||
442 | d->revisionChanged = true; | 441 | d->revisionChanged = true; |
443 | const auto uid = Storage::getUidFromRevision(d->transaction, revision); | 442 | const auto uid = Storage::getUidFromRevision(d->transaction, revision); |
444 | const auto bufferType = Storage::getTypeFromRevision(d->transaction, revision); | 443 | const auto bufferType = Storage::getTypeFromRevision(d->transaction, revision); |
445 | Trace() << "Cleaning up revision " << revision << uid << bufferType; | 444 | SinkTrace() << "Cleaning up revision " << revision << uid << bufferType; |
446 | Storage::mainDatabase(d->transaction, bufferType) | 445 | Storage::mainDatabase(d->transaction, bufferType) |
447 | .scan(uid, | 446 | .scan(uid, |
448 | [&](const QByteArray &key, const QByteArray &data) -> bool { | 447 | [&](const QByteArray &key, const QByteArray &data) -> bool { |
449 | EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); | 448 | EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); |
450 | if (!buffer.isValid()) { | 449 | if (!buffer.isValid()) { |
451 | Warning() << "Read invalid buffer from disk"; | 450 | SinkWarning() << "Read invalid buffer from disk"; |
452 | } else { | 451 | } else { |
453 | const auto metadata = flatbuffers::GetRoot<Metadata>(buffer.metadataBuffer()); | 452 | const auto metadata = flatbuffers::GetRoot<Metadata>(buffer.metadataBuffer()); |
454 | const qint64 rev = metadata->revision(); | 453 | const qint64 rev = metadata->revision(); |
@@ -461,7 +460,7 @@ void Pipeline::cleanupRevision(qint64 revision) | |||
461 | 460 | ||
462 | return true; | 461 | return true; |
463 | }, | 462 | }, |
464 | [](const Storage::Error &error) { Warning() << "Error while reading: " << error.message; }, true); | 463 | [](const Storage::Error &error) { SinkWarning() << "Error while reading: " << error.message; }, true); |
465 | Storage::setCleanedUpRevision(d->transaction, revision); | 464 | Storage::setCleanedUpRevision(d->transaction, revision); |
466 | } | 465 | } |
467 | 466 | ||
diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index 0be2ae1..2e2e96d 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp | |||
@@ -29,8 +29,7 @@ | |||
29 | #include "asyncutils.h" | 29 | #include "asyncutils.h" |
30 | #include "entityreader.h" | 30 | #include "entityreader.h" |
31 | 31 | ||
32 | #undef DEBUG_AREA | 32 | SINK_DEBUG_AREA("queryrunner") |
33 | #define DEBUG_AREA "client.queryrunner" | ||
34 | 33 | ||
35 | using namespace Sink; | 34 | using namespace Sink; |
36 | 35 | ||
@@ -43,6 +42,8 @@ using namespace Sink; | |||
43 | template <typename DomainType> | 42 | template <typename DomainType> |
44 | class QueryWorker : public QObject | 43 | class QueryWorker : public QObject |
45 | { | 44 | { |
45 | // SINK_DEBUG_COMPONENT(mResourceInstanceIdentifier, mId) | ||
46 | SINK_DEBUG_COMPONENT(mResourceInstanceIdentifier) | ||
46 | public: | 47 | public: |
47 | QueryWorker(const Sink::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &, const QByteArray &bufferType, | 48 | QueryWorker(const Sink::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &, const QByteArray &bufferType, |
48 | const QueryRunnerBase::ResultTransformation &transformation); | 49 | const QueryRunnerBase::ResultTransformation &transformation); |
@@ -61,22 +62,19 @@ private: | |||
61 | QByteArray mId; //Used for identification in debug output | 62 | QByteArray mId; //Used for identification in debug output |
62 | }; | 63 | }; |
63 | 64 | ||
64 | #undef Trace | ||
65 | #define Trace() Trace_area(DEBUG_AREA) | ||
66 | |||
67 | template <class DomainType> | 65 | template <class DomainType> |
68 | QueryRunner<DomainType>::QueryRunner(const Sink::Query &query, const Sink::ResourceAccessInterface::Ptr &resourceAccess, const QByteArray &instanceIdentifier, | 66 | QueryRunner<DomainType>::QueryRunner(const Sink::Query &query, const Sink::ResourceAccessInterface::Ptr &resourceAccess, const QByteArray &instanceIdentifier, |
69 | const DomainTypeAdaptorFactoryInterface::Ptr &factory, const QByteArray &bufferType) | 67 | const DomainTypeAdaptorFactoryInterface::Ptr &factory, const QByteArray &bufferType) |
70 | : QueryRunnerBase(), mResourceAccess(resourceAccess), mResultProvider(new ResultProvider<typename DomainType::Ptr>), mBatchSize(query.limit) | 68 | : QueryRunnerBase(), mResourceAccess(resourceAccess), mResultProvider(new ResultProvider<typename DomainType::Ptr>), mBatchSize(query.limit) |
71 | { | 69 | { |
72 | Trace() << "Starting query"; | 70 | SinkTrace() << "Starting query"; |
73 | if (query.limit && query.sortProperty.isEmpty()) { | 71 | if (query.limit && query.sortProperty.isEmpty()) { |
74 | Warning() << "A limited query without sorting is typically a bad idea."; | 72 | SinkWarning() << "A limited query without sorting is typically a bad idea."; |
75 | } | 73 | } |
76 | // We delegate loading of initial data to the result provider, so it can decide for itself what it needs to load. | 74 | // We delegate loading of initial data to the result provider, so it can decide for itself what it needs to load. |
77 | mResultProvider->setFetcher([=](const typename DomainType::Ptr &parent) { | 75 | mResultProvider->setFetcher([=](const typename DomainType::Ptr &parent) { |
78 | const QByteArray parentId = parent ? parent->identifier() : QByteArray(); | 76 | const QByteArray parentId = parent ? parent->identifier() : QByteArray(); |
79 | Trace() << "Running fetcher. Offset: " << mOffset[parentId] << " Batchsize: " << mBatchSize; | 77 | SinkTrace() << "Running fetcher. Offset: " << mOffset[parentId] << " Batchsize: " << mBatchSize; |
80 | auto resultProvider = mResultProvider; | 78 | auto resultProvider = mResultProvider; |
81 | if (query.synchronousQuery) { | 79 | if (query.synchronousQuery) { |
82 | QueryWorker<DomainType> worker(query, instanceIdentifier, factory, bufferType, mResultTransformation); | 80 | QueryWorker<DomainType> worker(query, instanceIdentifier, factory, bufferType, mResultTransformation); |
@@ -131,7 +129,7 @@ QueryRunner<DomainType>::QueryRunner(const Sink::Query &query, const Sink::Resou | |||
131 | template <class DomainType> | 129 | template <class DomainType> |
132 | QueryRunner<DomainType>::~QueryRunner() | 130 | QueryRunner<DomainType>::~QueryRunner() |
133 | { | 131 | { |
134 | Trace() << "Stopped query"; | 132 | SinkTrace() << "Stopped query"; |
135 | } | 133 | } |
136 | 134 | ||
137 | template <class DomainType> | 135 | template <class DomainType> |
@@ -147,21 +145,18 @@ typename Sink::ResultEmitter<typename DomainType::Ptr>::Ptr QueryRunner<DomainTy | |||
147 | } | 145 | } |
148 | 146 | ||
149 | 147 | ||
150 | #undef Trace | ||
151 | #define Trace() Trace_area("client.queryrunner." + mId) | ||
152 | |||
153 | template <class DomainType> | 148 | template <class DomainType> |
154 | QueryWorker<DomainType>::QueryWorker(const Sink::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &factory, | 149 | QueryWorker<DomainType>::QueryWorker(const Sink::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &factory, |
155 | const QByteArray &bufferType, const QueryRunnerBase::ResultTransformation &transformation) | 150 | const QByteArray &bufferType, const QueryRunnerBase::ResultTransformation &transformation) |
156 | : QObject(), mResultTransformation(transformation), mDomainTypeAdaptorFactory(factory), mResourceInstanceIdentifier(instanceIdentifier), mId(QUuid::createUuid().toByteArray()) | 151 | : QObject(), mResultTransformation(transformation), mDomainTypeAdaptorFactory(factory), mResourceInstanceIdentifier(instanceIdentifier), mId(QUuid::createUuid().toByteArray()) |
157 | { | 152 | { |
158 | Trace() << "Starting query worker"; | 153 | SinkTrace() << "Starting query worker"; |
159 | } | 154 | } |
160 | 155 | ||
161 | template <class DomainType> | 156 | template <class DomainType> |
162 | QueryWorker<DomainType>::~QueryWorker() | 157 | QueryWorker<DomainType>::~QueryWorker() |
163 | { | 158 | { |
164 | Trace() << "Stopped query worker"; | 159 | SinkTrace() << "Stopped query worker"; |
165 | } | 160 | } |
166 | 161 | ||
167 | template <class DomainType> | 162 | template <class DomainType> |
@@ -174,15 +169,15 @@ std::function<bool(const typename DomainType::Ptr &, Sink::Operation)> QueryWork | |||
174 | } | 169 | } |
175 | switch (operation) { | 170 | switch (operation) { |
176 | case Sink::Operation_Creation: | 171 | case Sink::Operation_Creation: |
177 | // Trace() << "Got creation"; | 172 | // SinkTrace() << "Got creation"; |
178 | resultProvider.add(valueCopy); | 173 | resultProvider.add(valueCopy); |
179 | break; | 174 | break; |
180 | case Sink::Operation_Modification: | 175 | case Sink::Operation_Modification: |
181 | // Trace() << "Got modification"; | 176 | // SinkTrace() << "Got modification"; |
182 | resultProvider.modify(valueCopy); | 177 | resultProvider.modify(valueCopy); |
183 | break; | 178 | break; |
184 | case Sink::Operation_Removal: | 179 | case Sink::Operation_Removal: |
185 | // Trace() << "Got removal"; | 180 | // SinkTrace() << "Got removal"; |
186 | resultProvider.remove(valueCopy); | 181 | resultProvider.remove(valueCopy); |
187 | break; | 182 | break; |
188 | } | 183 | } |
@@ -200,7 +195,7 @@ QPair<qint64, qint64> QueryWorker<DomainType>::executeIncrementalQuery(const Sin | |||
200 | 195 | ||
201 | Sink::EntityReader<DomainType> reader(*mDomainTypeAdaptorFactory, mResourceInstanceIdentifier, transaction); | 196 | Sink::EntityReader<DomainType> reader(*mDomainTypeAdaptorFactory, mResourceInstanceIdentifier, transaction); |
202 | auto revisionAndReplayedEntities = reader.executeIncrementalQuery(query, resultProvider.revision(), resultProviderCallback(query, resultProvider)); | 197 | auto revisionAndReplayedEntities = reader.executeIncrementalQuery(query, resultProvider.revision(), resultProviderCallback(query, resultProvider)); |
203 | Trace() << "Incremental query took: " << Log::TraceTime(time.elapsed()); | 198 | SinkTrace() << "Incremental query took: " << Log::TraceTime(time.elapsed()); |
204 | return revisionAndReplayedEntities; | 199 | return revisionAndReplayedEntities; |
205 | } | 200 | } |
206 | 201 | ||
@@ -212,10 +207,10 @@ Storage::Transaction QueryWorker<DomainType>::getTransaction() | |||
212 | Sink::Storage storage(Sink::storageLocation(), mResourceInstanceIdentifier); | 207 | Sink::Storage storage(Sink::storageLocation(), mResourceInstanceIdentifier); |
213 | if (!storage.exists()) { | 208 | if (!storage.exists()) { |
214 | //This is not an error if the resource wasn't started before | 209 | //This is not an error if the resource wasn't started before |
215 | Log() << "Store doesn't exist: " << mResourceInstanceIdentifier; | 210 | SinkLog() << "Store doesn't exist: " << mResourceInstanceIdentifier; |
216 | return Sink::Storage::Transaction(); | 211 | return Sink::Storage::Transaction(); |
217 | } | 212 | } |
218 | storage.setDefaultErrorHandler([](const Sink::Storage::Error &error) { Warning() << "Error during query: " << error.store << error.message; }); | 213 | storage.setDefaultErrorHandler([this](const Sink::Storage::Error &error) { SinkWarning() << "Error during query: " << error.store << error.message; }); |
219 | transaction = storage.createTransaction(Sink::Storage::ReadOnly); | 214 | transaction = storage.createTransaction(Sink::Storage::ReadOnly); |
220 | } | 215 | } |
221 | 216 | ||
@@ -238,10 +233,10 @@ QPair<qint64, qint64> QueryWorker<DomainType>::executeInitialQuery( | |||
238 | auto modifiedQuery = query; | 233 | auto modifiedQuery = query; |
239 | if (!query.parentProperty.isEmpty()) { | 234 | if (!query.parentProperty.isEmpty()) { |
240 | if (parent) { | 235 | if (parent) { |
241 | Trace() << "Running initial query for parent:" << parent->identifier(); | 236 | SinkTrace() << "Running initial query for parent:" << parent->identifier(); |
242 | modifiedQuery.propertyFilter.insert(query.parentProperty, Query::Comparator(parent->identifier())); | 237 | modifiedQuery.propertyFilter.insert(query.parentProperty, Query::Comparator(parent->identifier())); |
243 | } else { | 238 | } else { |
244 | Trace() << "Running initial query for toplevel"; | 239 | SinkTrace() << "Running initial query for toplevel"; |
245 | modifiedQuery.propertyFilter.insert(query.parentProperty, Query::Comparator(QVariant())); | 240 | modifiedQuery.propertyFilter.insert(query.parentProperty, Query::Comparator(QVariant())); |
246 | } | 241 | } |
247 | } | 242 | } |
@@ -250,7 +245,7 @@ QPair<qint64, qint64> QueryWorker<DomainType>::executeInitialQuery( | |||
250 | 245 | ||
251 | Sink::EntityReader<DomainType> reader(*mDomainTypeAdaptorFactory, mResourceInstanceIdentifier, transaction); | 246 | Sink::EntityReader<DomainType> reader(*mDomainTypeAdaptorFactory, mResourceInstanceIdentifier, transaction); |
252 | auto revisionAndReplayedEntities = reader.executeInitialQuery(modifiedQuery, offset, batchsize, resultProviderCallback(query, resultProvider)); | 247 | auto revisionAndReplayedEntities = reader.executeInitialQuery(modifiedQuery, offset, batchsize, resultProviderCallback(query, resultProvider)); |
253 | Trace() << "Initial query took: " << Log::TraceTime(time.elapsed()); | 248 | SinkTrace() << "Initial query took: " << Log::TraceTime(time.elapsed()); |
254 | return revisionAndReplayedEntities; | 249 | return revisionAndReplayedEntities; |
255 | } | 250 | } |
256 | 251 | ||
diff --git a/common/queryrunner.h b/common/queryrunner.h index e6d5a54..155528e 100644 --- a/common/queryrunner.h +++ b/common/queryrunner.h | |||
@@ -32,6 +32,8 @@ | |||
32 | class QueryRunnerBase : public QObject | 32 | class QueryRunnerBase : public QObject |
33 | { | 33 | { |
34 | Q_OBJECT | 34 | Q_OBJECT |
35 | protected: | ||
36 | SINK_DEBUG_AREA("queryrunner") | ||
35 | public: | 37 | public: |
36 | typedef std::function<void(Sink::ApplicationDomain::ApplicationDomainType &domainObject)> ResultTransformation; | 38 | typedef std::function<void(Sink::ApplicationDomain::ApplicationDomainType &domainObject)> ResultTransformation; |
37 | 39 | ||
@@ -52,7 +54,7 @@ protected slots: | |||
52 | */ | 54 | */ |
53 | void revisionChanged(qint64 newRevision) | 55 | void revisionChanged(qint64 newRevision) |
54 | { | 56 | { |
55 | Trace() << "New revision: " << newRevision; | 57 | SinkTrace() << "New revision: " << newRevision; |
56 | run().exec(); | 58 | run().exec(); |
57 | } | 59 | } |
58 | 60 | ||
diff --git a/common/remoteidmap.cpp b/common/remoteidmap.cpp index bbcd641..20a054d 100644 --- a/common/remoteidmap.cpp +++ b/common/remoteidmap.cpp | |||
@@ -25,6 +25,8 @@ | |||
25 | 25 | ||
26 | using namespace Sink; | 26 | using namespace Sink; |
27 | 27 | ||
28 | SINK_DEBUG_AREA("remoteidmap") | ||
29 | |||
28 | RemoteIdMap::RemoteIdMap(Sink::Storage::Transaction &transaction) | 30 | RemoteIdMap::RemoteIdMap(Sink::Storage::Transaction &transaction) |
29 | : mTransaction(transaction) | 31 | : mTransaction(transaction) |
30 | { | 32 | { |
@@ -67,7 +69,7 @@ QByteArray RemoteIdMap::resolveLocalId(const QByteArray &bufferType, const QByte | |||
67 | { | 69 | { |
68 | QByteArray remoteId = Index("localid.mapping." + bufferType, mTransaction).lookup(localId); | 70 | QByteArray remoteId = Index("localid.mapping." + bufferType, mTransaction).lookup(localId); |
69 | if (remoteId.isEmpty()) { | 71 | if (remoteId.isEmpty()) { |
70 | Warning() << "Couldn't find the remote id for " << localId; | 72 | SinkWarning() << "Couldn't find the remote id for " << localId; |
71 | return QByteArray(); | 73 | return QByteArray(); |
72 | } | 74 | } |
73 | return remoteId; | 75 | return remoteId; |
diff --git a/common/resourceaccess.cpp b/common/resourceaccess.cpp index 93f97e8..c878143 100644 --- a/common/resourceaccess.cpp +++ b/common/resourceaccess.cpp | |||
@@ -44,12 +44,6 @@ | |||
44 | #include <QBuffer> | 44 | #include <QBuffer> |
45 | #include <QTime> | 45 | #include <QTime> |
46 | 46 | ||
47 | #undef Trace | ||
48 | #define TracePrivate() Trace_area("client.communication." + resourceInstanceIdentifier) | ||
49 | #define Trace() Trace_area("client.communication." + d->resourceInstanceIdentifier) | ||
50 | #undef Log | ||
51 | #define Log() Log_area("client.communication." + d->resourceInstanceIdentifier) | ||
52 | |||
53 | static void queuedInvoke(const std::function<void()> &f, QObject *context = 0) | 47 | static void queuedInvoke(const std::function<void()> &f, QObject *context = 0) |
54 | { | 48 | { |
55 | auto timer = QSharedPointer<QTimer>::create(); | 49 | auto timer = QSharedPointer<QTimer>::create(); |
@@ -100,8 +94,10 @@ public: | |||
100 | QHash<uint, bool> completeCommands; | 94 | QHash<uint, bool> completeCommands; |
101 | uint messageId; | 95 | uint messageId; |
102 | bool openingSocket; | 96 | bool openingSocket; |
97 | SINK_DEBUG_COMPONENT(resourceInstanceIdentifier) | ||
103 | }; | 98 | }; |
104 | 99 | ||
100 | |||
105 | ResourceAccess::Private::Private(const QByteArray &name, const QByteArray &instanceIdentifier, ResourceAccess *q) | 101 | ResourceAccess::Private::Private(const QByteArray &name, const QByteArray &instanceIdentifier, ResourceAccess *q) |
106 | : resourceName(name), resourceInstanceIdentifier(instanceIdentifier), messageId(0), openingSocket(false) | 102 | : resourceName(name), resourceInstanceIdentifier(instanceIdentifier), messageId(0), openingSocket(false) |
107 | { | 103 | { |
@@ -111,7 +107,7 @@ void ResourceAccess::Private::abortPendingOperations() | |||
111 | { | 107 | { |
112 | callCallbacks(); | 108 | callCallbacks(); |
113 | if (!resultHandler.isEmpty()) { | 109 | if (!resultHandler.isEmpty()) { |
114 | Warning() << "Aborting pending operations " << resultHandler.keys(); | 110 | SinkWarning() << "Aborting pending operations " << resultHandler.keys(); |
115 | } | 111 | } |
116 | auto handlers = resultHandler.values(); | 112 | auto handlers = resultHandler.values(); |
117 | resultHandler.clear(); | 113 | resultHandler.clear(); |
@@ -165,7 +161,7 @@ KAsync::Job<void> ResourceAccess::Private::tryToConnect() | |||
165 | auto counter = QSharedPointer<int>::create(0); | 161 | auto counter = QSharedPointer<int>::create(0); |
166 | return KAsync::dowhile([this]() -> bool { return !socket; }, | 162 | return KAsync::dowhile([this]() -> bool { return !socket; }, |
167 | [this, counter](KAsync::Future<void> &future) { | 163 | [this, counter](KAsync::Future<void> &future) { |
168 | TracePrivate() << "Loop"; | 164 | SinkTrace() << "Loop"; |
169 | connectToServer(resourceInstanceIdentifier) | 165 | connectToServer(resourceInstanceIdentifier) |
170 | .then<void, QSharedPointer<QLocalSocket>>( | 166 | .then<void, QSharedPointer<QLocalSocket>>( |
171 | [this, &future](const QSharedPointer<QLocalSocket> &s) { | 167 | [this, &future](const QSharedPointer<QLocalSocket> &s) { |
@@ -178,7 +174,7 @@ KAsync::Job<void> ResourceAccess::Private::tryToConnect() | |||
178 | static int timeout = 500; | 174 | static int timeout = 500; |
179 | static int maxRetries = timeout / waitTime; | 175 | static int maxRetries = timeout / waitTime; |
180 | if (*counter > maxRetries) { | 176 | if (*counter > maxRetries) { |
181 | TracePrivate() << "Giving up"; | 177 | SinkTrace() << "Giving up"; |
182 | future.setError(-1, "Failed to connect to socket"); | 178 | future.setError(-1, "Failed to connect to socket"); |
183 | } else { | 179 | } else { |
184 | KAsync::wait(waitTime).then<void>([&future]() { future.setFinished(); }).exec(); | 180 | KAsync::wait(waitTime).then<void>([&future]() { future.setFinished(); }).exec(); |
@@ -192,17 +188,17 @@ KAsync::Job<void> ResourceAccess::Private::tryToConnect() | |||
192 | KAsync::Job<void> ResourceAccess::Private::initializeSocket() | 188 | KAsync::Job<void> ResourceAccess::Private::initializeSocket() |
193 | { | 189 | { |
194 | return KAsync::start<void>([this](KAsync::Future<void> &future) { | 190 | return KAsync::start<void>([this](KAsync::Future<void> &future) { |
195 | TracePrivate() << "Trying to connect"; | 191 | SinkTrace() << "Trying to connect"; |
196 | connectToServer(resourceInstanceIdentifier) | 192 | connectToServer(resourceInstanceIdentifier) |
197 | .then<void, QSharedPointer<QLocalSocket>>( | 193 | .then<void, QSharedPointer<QLocalSocket>>( |
198 | [this, &future](const QSharedPointer<QLocalSocket> &s) { | 194 | [this, &future](const QSharedPointer<QLocalSocket> &s) { |
199 | TracePrivate() << "Connected to resource, without having to start it."; | 195 | SinkTrace() << "Connected to resource, without having to start it."; |
200 | Q_ASSERT(s); | 196 | Q_ASSERT(s); |
201 | socket = s; | 197 | socket = s; |
202 | future.setFinished(); | 198 | future.setFinished(); |
203 | }, | 199 | }, |
204 | [this, &future](int errorCode, const QString &errorString) { | 200 | [this, &future](int errorCode, const QString &errorString) { |
205 | TracePrivate() << "Failed to connect, starting resource"; | 201 | SinkTrace() << "Failed to connect, starting resource"; |
206 | // We failed to connect, so let's start the resource | 202 | // We failed to connect, so let's start the resource |
207 | QStringList args; | 203 | QStringList args; |
208 | if (Sink::Test::testModeEnabled()) { | 204 | if (Sink::Test::testModeEnabled()) { |
@@ -211,16 +207,16 @@ KAsync::Job<void> ResourceAccess::Private::initializeSocket() | |||
211 | args << resourceInstanceIdentifier << resourceName; | 207 | args << resourceInstanceIdentifier << resourceName; |
212 | qint64 pid = 0; | 208 | qint64 pid = 0; |
213 | if (QProcess::startDetached("sink_synchronizer", args, QDir::homePath(), &pid)) { | 209 | if (QProcess::startDetached("sink_synchronizer", args, QDir::homePath(), &pid)) { |
214 | TracePrivate() << "Started resource " << pid; | 210 | SinkTrace() << "Started resource " << pid; |
215 | tryToConnect() | 211 | tryToConnect() |
216 | .then<void>([&future]() { future.setFinished(); }, | 212 | .then<void>([&future]() { future.setFinished(); }, |
217 | [this, &future](int errorCode, const QString &errorString) { | 213 | [this, &future](int errorCode, const QString &errorString) { |
218 | Warning() << "Failed to connect to started resource"; | 214 | SinkWarning() << "Failed to connect to started resource"; |
219 | future.setError(errorCode, errorString); | 215 | future.setError(errorCode, errorString); |
220 | }) | 216 | }) |
221 | .exec(); | 217 | .exec(); |
222 | } else { | 218 | } else { |
223 | Warning() << "Failed to start resource"; | 219 | SinkWarning() << "Failed to start resource"; |
224 | } | 220 | } |
225 | }) | 221 | }) |
226 | .exec(); | 222 | .exec(); |
@@ -231,14 +227,14 @@ ResourceAccess::ResourceAccess(const QByteArray &resourceInstanceIdentifier, con | |||
231 | : ResourceAccessInterface(), d(new Private(resourceType, resourceInstanceIdentifier, this)) | 227 | : ResourceAccessInterface(), d(new Private(resourceType, resourceInstanceIdentifier, this)) |
232 | { | 228 | { |
233 | mResourceStatus = Sink::ApplicationDomain::OfflineStatus; | 229 | mResourceStatus = Sink::ApplicationDomain::OfflineStatus; |
234 | Trace() << "Starting access"; | 230 | SinkTrace() << "Starting access"; |
235 | } | 231 | } |
236 | 232 | ||
237 | ResourceAccess::~ResourceAccess() | 233 | ResourceAccess::~ResourceAccess() |
238 | { | 234 | { |
239 | Log() << "Closing access"; | 235 | SinkLog() << "Closing access"; |
240 | if (!d->resultHandler.isEmpty()) { | 236 | if (!d->resultHandler.isEmpty()) { |
241 | Warning() << "Left jobs running while shutting down ResourceAccess: " << d->resultHandler.keys(); | 237 | SinkWarning() << "Left jobs running while shutting down ResourceAccess: " << d->resultHandler.keys(); |
242 | } | 238 | } |
243 | } | 239 | } |
244 | 240 | ||
@@ -295,7 +291,7 @@ KAsync::Job<void> ResourceAccess::sendCommand(int commandId, flatbuffers::FlatBu | |||
295 | 291 | ||
296 | KAsync::Job<void> ResourceAccess::synchronizeResource(bool sourceSync, bool localSync) | 292 | KAsync::Job<void> ResourceAccess::synchronizeResource(bool sourceSync, bool localSync) |
297 | { | 293 | { |
298 | Trace() << "Sending synchronize command: " << sourceSync << localSync; | 294 | SinkTrace() << "Sending synchronize command: " << sourceSync << localSync; |
299 | flatbuffers::FlatBufferBuilder fbb; | 295 | flatbuffers::FlatBufferBuilder fbb; |
300 | auto command = Sink::Commands::CreateSynchronize(fbb, sourceSync, localSync); | 296 | auto command = Sink::Commands::CreateSynchronize(fbb, sourceSync, localSync); |
301 | Sink::Commands::FinishSynchronizeBuffer(fbb, command); | 297 | Sink::Commands::FinishSynchronizeBuffer(fbb, command); |
@@ -376,7 +372,7 @@ ResourceAccess::sendInspectionCommand(int inspectionType, const QByteArray &insp | |||
376 | void ResourceAccess::open() | 372 | void ResourceAccess::open() |
377 | { | 373 | { |
378 | if (d->socket && d->socket->isValid()) { | 374 | if (d->socket && d->socket->isValid()) { |
379 | // Trace() << "Socket valid, so not opening again"; | 375 | // SinkTrace() << "Socket valid, so not opening again"; |
380 | return; | 376 | return; |
381 | } | 377 | } |
382 | if (d->openingSocket) { | 378 | if (d->openingSocket) { |
@@ -388,7 +384,7 @@ void ResourceAccess::open() | |||
388 | d->initializeSocket() | 384 | d->initializeSocket() |
389 | .then<void>( | 385 | .then<void>( |
390 | [this, time]() { | 386 | [this, time]() { |
391 | Trace() << "Socket is initialized." << Log::TraceTime(time->elapsed()); | 387 | SinkTrace() << "Socket is initialized." << Log::TraceTime(time->elapsed()); |
392 | d->openingSocket = false; | 388 | d->openingSocket = false; |
393 | QObject::connect(d->socket.data(), &QLocalSocket::disconnected, this, &ResourceAccess::disconnected); | 389 | QObject::connect(d->socket.data(), &QLocalSocket::disconnected, this, &ResourceAccess::disconnected); |
394 | QObject::connect(d->socket.data(), SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(connectionError(QLocalSocket::LocalSocketError))); | 390 | QObject::connect(d->socket.data(), SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(connectionError(QLocalSocket::LocalSocketError))); |
@@ -397,16 +393,16 @@ void ResourceAccess::open() | |||
397 | }, | 393 | }, |
398 | [this](int error, const QString &errorString) { | 394 | [this](int error, const QString &errorString) { |
399 | d->openingSocket = false; | 395 | d->openingSocket = false; |
400 | Warning() << "Failed to initialize socket " << errorString; | 396 | SinkWarning() << "Failed to initialize socket " << errorString; |
401 | }) | 397 | }) |
402 | .exec(); | 398 | .exec(); |
403 | } | 399 | } |
404 | 400 | ||
405 | void ResourceAccess::close() | 401 | void ResourceAccess::close() |
406 | { | 402 | { |
407 | Log() << QString("Closing %1").arg(d->socket->fullServerName()); | 403 | SinkLog() << QString("Closing %1").arg(d->socket->fullServerName()); |
408 | Trace() << "Pending commands: " << d->pendingCommands.size(); | 404 | SinkTrace() << "Pending commands: " << d->pendingCommands.size(); |
409 | Trace() << "Queued commands: " << d->commandQueue.size(); | 405 | SinkTrace() << "Queued commands: " << d->commandQueue.size(); |
410 | d->socket->close(); | 406 | d->socket->close(); |
411 | } | 407 | } |
412 | 408 | ||
@@ -416,10 +412,10 @@ void ResourceAccess::sendCommand(const QSharedPointer<QueuedCommand> &command) | |||
416 | // TODO: we should have a timeout for commands | 412 | // TODO: we should have a timeout for commands |
417 | d->messageId++; | 413 | d->messageId++; |
418 | const auto messageId = d->messageId; | 414 | const auto messageId = d->messageId; |
419 | Trace() << QString("Sending command \"%1\" with messageId %2").arg(QString(Sink::Commands::name(command->commandId))).arg(d->messageId); | 415 | SinkTrace() << QString("Sending command \"%1\" with messageId %2").arg(QString(Sink::Commands::name(command->commandId))).arg(d->messageId); |
420 | Q_ASSERT(command->callback); | 416 | Q_ASSERT(command->callback); |
421 | registerCallback(d->messageId, [this, messageId, command](int errorCode, QString errorMessage) { | 417 | registerCallback(d->messageId, [this, messageId, command](int errorCode, QString errorMessage) { |
422 | Trace() << "Command complete " << messageId; | 418 | SinkTrace() << "Command complete " << messageId; |
423 | d->pendingCommands.remove(messageId); | 419 | d->pendingCommands.remove(messageId); |
424 | command->callback(errorCode, errorMessage); | 420 | command->callback(errorCode, errorMessage); |
425 | }); | 421 | }); |
@@ -431,8 +427,8 @@ void ResourceAccess::sendCommand(const QSharedPointer<QueuedCommand> &command) | |||
431 | void ResourceAccess::processCommandQueue() | 427 | void ResourceAccess::processCommandQueue() |
432 | { | 428 | { |
433 | // TODO: serialize instead of blast them all through the socket? | 429 | // TODO: serialize instead of blast them all through the socket? |
434 | Trace() << "We have " << d->commandQueue.size() << " queued commands"; | 430 | SinkTrace() << "We have " << d->commandQueue.size() << " queued commands"; |
435 | Trace() << "Pending commands: " << d->pendingCommands.size(); | 431 | SinkTrace() << "Pending commands: " << d->pendingCommands.size(); |
436 | for (auto command : d->commandQueue) { | 432 | for (auto command : d->commandQueue) { |
437 | sendCommand(command); | 433 | sendCommand(command); |
438 | } | 434 | } |
@@ -441,9 +437,9 @@ void ResourceAccess::processCommandQueue() | |||
441 | 437 | ||
442 | void ResourceAccess::processPendingCommandQueue() | 438 | void ResourceAccess::processPendingCommandQueue() |
443 | { | 439 | { |
444 | Trace() << "We have " << d->pendingCommands.size() << " pending commands"; | 440 | SinkTrace() << "We have " << d->pendingCommands.size() << " pending commands"; |
445 | for (auto command : d->pendingCommands) { | 441 | for (auto command : d->pendingCommands) { |
446 | Trace() << "Reenquing command " << command->commandId; | 442 | SinkTrace() << "Reenquing command " << command->commandId; |
447 | d->commandQueue << command; | 443 | d->commandQueue << command; |
448 | } | 444 | } |
449 | d->pendingCommands.clear(); | 445 | d->pendingCommands.clear(); |
@@ -453,11 +449,11 @@ void ResourceAccess::processPendingCommandQueue() | |||
453 | void ResourceAccess::connected() | 449 | void ResourceAccess::connected() |
454 | { | 450 | { |
455 | if (!isReady()) { | 451 | if (!isReady()) { |
456 | Trace() << "Connected but not ready?"; | 452 | SinkTrace() << "Connected but not ready?"; |
457 | return; | 453 | return; |
458 | } | 454 | } |
459 | 455 | ||
460 | Trace() << QString("Connected: %1").arg(d->socket->fullServerName()); | 456 | SinkTrace() << QString("Connected: %1").arg(d->socket->fullServerName()); |
461 | 457 | ||
462 | { | 458 | { |
463 | flatbuffers::FlatBufferBuilder fbb; | 459 | flatbuffers::FlatBufferBuilder fbb; |
@@ -477,7 +473,7 @@ void ResourceAccess::connected() | |||
477 | 473 | ||
478 | void ResourceAccess::disconnected() | 474 | void ResourceAccess::disconnected() |
479 | { | 475 | { |
480 | Log() << QString("Disconnected from %1").arg(d->socket->fullServerName()); | 476 | SinkLog() << QString("Disconnected from %1").arg(d->socket->fullServerName()); |
481 | d->socket->close(); | 477 | d->socket->close(); |
482 | emit ready(false); | 478 | emit ready(false); |
483 | } | 479 | } |
@@ -486,15 +482,15 @@ void ResourceAccess::connectionError(QLocalSocket::LocalSocketError error) | |||
486 | { | 482 | { |
487 | const bool resourceCrashed = d->partialMessageBuffer.contains("PANIC"); | 483 | const bool resourceCrashed = d->partialMessageBuffer.contains("PANIC"); |
488 | if (resourceCrashed) { | 484 | if (resourceCrashed) { |
489 | ErrorMsg() << "The resource crashed!"; | 485 | SinkError() << "The resource crashed!"; |
490 | d->abortPendingOperations(); | 486 | d->abortPendingOperations(); |
491 | } else if (error == QLocalSocket::PeerClosedError) { | 487 | } else if (error == QLocalSocket::PeerClosedError) { |
492 | Log() << "The resource closed the connection."; | 488 | SinkLog() << "The resource closed the connection."; |
493 | d->abortPendingOperations(); | 489 | d->abortPendingOperations(); |
494 | } else { | 490 | } else { |
495 | Warning() << QString("Connection error: %1 : %2").arg(error).arg(d->socket->errorString()); | 491 | SinkWarning() << QString("Connection error: %1 : %2").arg(error).arg(d->socket->errorString()); |
496 | if (d->pendingCommands.size()) { | 492 | if (d->pendingCommands.size()) { |
497 | Trace() << "Reconnecting due to pending operations: " << d->pendingCommands.size(); | 493 | SinkTrace() << "Reconnecting due to pending operations: " << d->pendingCommands.size(); |
498 | open(); | 494 | open(); |
499 | } | 495 | } |
500 | } | 496 | } |
@@ -503,7 +499,7 @@ void ResourceAccess::connectionError(QLocalSocket::LocalSocketError error) | |||
503 | void ResourceAccess::readResourceMessage() | 499 | void ResourceAccess::readResourceMessage() |
504 | { | 500 | { |
505 | if (!d->socket || !d->socket->isValid()) { | 501 | if (!d->socket || !d->socket->isValid()) { |
506 | Warning() << "No socket available"; | 502 | SinkWarning() << "No socket available"; |
507 | return; | 503 | return; |
508 | } | 504 | } |
509 | 505 | ||
@@ -534,7 +530,7 @@ bool ResourceAccess::processMessageBuffer() | |||
534 | { | 530 | { |
535 | static const int headerSize = Commands::headerSize(); | 531 | static const int headerSize = Commands::headerSize(); |
536 | if (d->partialMessageBuffer.size() < headerSize) { | 532 | if (d->partialMessageBuffer.size() < headerSize) { |
537 | Warning() << "command too small"; | 533 | SinkWarning() << "command too small"; |
538 | return false; | 534 | return false; |
539 | } | 535 | } |
540 | 536 | ||
@@ -543,14 +539,14 @@ bool ResourceAccess::processMessageBuffer() | |||
543 | const uint size = *(int *)(d->partialMessageBuffer.constData() + sizeof(int) + sizeof(uint)); | 539 | const uint size = *(int *)(d->partialMessageBuffer.constData() + sizeof(int) + sizeof(uint)); |
544 | 540 | ||
545 | if (size > (uint)(d->partialMessageBuffer.size() - headerSize)) { | 541 | if (size > (uint)(d->partialMessageBuffer.size() - headerSize)) { |
546 | Warning() << "command too small"; | 542 | SinkWarning() << "command too small"; |
547 | return false; | 543 | return false; |
548 | } | 544 | } |
549 | 545 | ||
550 | switch (commandId) { | 546 | switch (commandId) { |
551 | case Commands::RevisionUpdateCommand: { | 547 | case Commands::RevisionUpdateCommand: { |
552 | auto buffer = Commands::GetRevisionUpdate(d->partialMessageBuffer.constData() + headerSize); | 548 | auto buffer = Commands::GetRevisionUpdate(d->partialMessageBuffer.constData() + headerSize); |
553 | Trace() << QString("Revision updated to: %1").arg(buffer->revision()); | 549 | SinkTrace() << QString("Revision updated to: %1").arg(buffer->revision()); |
554 | Notification n; | 550 | Notification n; |
555 | n.type = Sink::Notification::RevisionUpdate; | 551 | n.type = Sink::Notification::RevisionUpdate; |
556 | emit notification(n); | 552 | emit notification(n); |
@@ -560,7 +556,7 @@ bool ResourceAccess::processMessageBuffer() | |||
560 | } | 556 | } |
561 | case Commands::CommandCompletionCommand: { | 557 | case Commands::CommandCompletionCommand: { |
562 | auto buffer = Commands::GetCommandCompletion(d->partialMessageBuffer.constData() + headerSize); | 558 | auto buffer = Commands::GetCommandCompletion(d->partialMessageBuffer.constData() + headerSize); |
563 | Trace() << QString("Command with messageId %1 completed %2").arg(buffer->id()).arg(buffer->success() ? "sucessfully" : "unsuccessfully"); | 559 | SinkTrace() << QString("Command with messageId %1 completed %2").arg(buffer->id()).arg(buffer->success() ? "sucessfully" : "unsuccessfully"); |
564 | 560 | ||
565 | d->completeCommands.insert(buffer->id(), buffer->success()); | 561 | d->completeCommands.insert(buffer->id(), buffer->success()); |
566 | // The callbacks can result in this object getting destroyed directly, so we need to ensure we finish our work first | 562 | // The callbacks can result in this object getting destroyed directly, so we need to ensure we finish our work first |
@@ -571,33 +567,33 @@ bool ResourceAccess::processMessageBuffer() | |||
571 | auto buffer = Commands::GetNotification(d->partialMessageBuffer.constData() + headerSize); | 567 | auto buffer = Commands::GetNotification(d->partialMessageBuffer.constData() + headerSize); |
572 | switch (buffer->type()) { | 568 | switch (buffer->type()) { |
573 | case Sink::Notification::Shutdown: | 569 | case Sink::Notification::Shutdown: |
574 | Log() << "Received shutdown notification."; | 570 | SinkLog() << "Received shutdown notification."; |
575 | close(); | 571 | close(); |
576 | break; | 572 | break; |
577 | case Sink::Notification::Inspection: { | 573 | case Sink::Notification::Inspection: { |
578 | Trace() << "Received inspection notification."; | 574 | SinkTrace() << "Received inspection notification."; |
579 | auto n = getNotification(buffer); | 575 | auto n = getNotification(buffer); |
580 | // The callbacks can result in this object getting destroyed directly, so we need to ensure we finish our work first | 576 | // The callbacks can result in this object getting destroyed directly, so we need to ensure we finish our work first |
581 | queuedInvoke([=]() { emit notification(n); }, this); | 577 | queuedInvoke([=]() { emit notification(n); }, this); |
582 | } break; | 578 | } break; |
583 | case Sink::Notification::Status: | 579 | case Sink::Notification::Status: |
584 | if (mResourceStatus == buffer->code()) { | 580 | if (mResourceStatus == buffer->code()) { |
585 | Trace() << "Got an unnecessary status notification"; | 581 | SinkTrace() << "Got an unnecessary status notification"; |
586 | break; | 582 | break; |
587 | } | 583 | } |
588 | mResourceStatus = buffer->code(); | 584 | mResourceStatus = buffer->code(); |
589 | Trace() << "Updated status: " << mResourceStatus; | 585 | SinkTrace() << "Updated status: " << mResourceStatus; |
590 | [[clang::fallthrough]]; | 586 | [[clang::fallthrough]]; |
591 | case Sink::Notification::Warning: | 587 | case Sink::Notification::Warning: |
592 | [[clang::fallthrough]]; | 588 | [[clang::fallthrough]]; |
593 | case Sink::Notification::Progress: { | 589 | case Sink::Notification::Progress: { |
594 | auto n = getNotification(buffer); | 590 | auto n = getNotification(buffer); |
595 | Trace() << "Received notification: " << n.type; | 591 | SinkTrace() << "Received notification: " << n.type; |
596 | emit notification(n); | 592 | emit notification(n); |
597 | } break; | 593 | } break; |
598 | case Sink::Notification::RevisionUpdate: | 594 | case Sink::Notification::RevisionUpdate: |
599 | default: | 595 | default: |
600 | Warning() << "Received unknown notification: " << buffer->type(); | 596 | SinkWarning() << "Received unknown notification: " << buffer->type(); |
601 | break; | 597 | break; |
602 | } | 598 | } |
603 | break; | 599 | break; |
diff --git a/common/resourceaccess.h b/common/resourceaccess.h index 47b848e..5d66246 100644 --- a/common/resourceaccess.h +++ b/common/resourceaccess.h | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | #include <flatbuffers/flatbuffers.h> | 30 | #include <flatbuffers/flatbuffers.h> |
31 | #include "notification.h" | 31 | #include "notification.h" |
32 | #include "log.h" | ||
32 | 33 | ||
33 | namespace Sink { | 34 | namespace Sink { |
34 | 35 | ||
@@ -93,6 +94,7 @@ protected: | |||
93 | class SINK_EXPORT ResourceAccess : public ResourceAccessInterface | 94 | class SINK_EXPORT ResourceAccess : public ResourceAccessInterface |
94 | { | 95 | { |
95 | Q_OBJECT | 96 | Q_OBJECT |
97 | SINK_DEBUG_AREA("communication") | ||
96 | public: | 98 | public: |
97 | typedef QSharedPointer<ResourceAccess> Ptr; | 99 | typedef QSharedPointer<ResourceAccess> Ptr; |
98 | 100 | ||
@@ -138,6 +140,7 @@ private: | |||
138 | 140 | ||
139 | class Private; | 141 | class Private; |
140 | Private *const d; | 142 | Private *const d; |
143 | // SINK_DEBUG_COMPONENT(d->resourceInstanceIdentifier) | ||
141 | }; | 144 | }; |
142 | 145 | ||
143 | /** | 146 | /** |
@@ -147,6 +150,7 @@ private: | |||
147 | */ | 150 | */ |
148 | class SINK_EXPORT ResourceAccessFactory | 151 | class SINK_EXPORT ResourceAccessFactory |
149 | { | 152 | { |
153 | SINK_DEBUG_AREA("ResourceAccessFactory") | ||
150 | public: | 154 | public: |
151 | static ResourceAccessFactory &instance(); | 155 | static ResourceAccessFactory &instance(); |
152 | Sink::ResourceAccess::Ptr getAccess(const QByteArray &instanceIdentifier, const QByteArray resourceType); | 156 | Sink::ResourceAccess::Ptr getAccess(const QByteArray &instanceIdentifier, const QByteArray resourceType); |
diff --git a/common/resourcecontrol.cpp b/common/resourcecontrol.cpp index 5c2cd06..7d092a4 100644 --- a/common/resourcecontrol.cpp +++ b/common/resourcecontrol.cpp | |||
@@ -30,14 +30,13 @@ | |||
30 | #include "log.h" | 30 | #include "log.h" |
31 | #include "notifier.h" | 31 | #include "notifier.h" |
32 | 32 | ||
33 | #undef DEBUG_AREA | 33 | SINK_DEBUG_AREA("resourcecontrol") |
34 | #define DEBUG_AREA "client.resourcecontrol" | ||
35 | 34 | ||
36 | namespace Sink { | 35 | namespace Sink { |
37 | 36 | ||
38 | KAsync::Job<void> ResourceControl::shutdown(const QByteArray &identifier) | 37 | KAsync::Job<void> ResourceControl::shutdown(const QByteArray &identifier) |
39 | { | 38 | { |
40 | Trace() << "shutdown " << identifier; | 39 | SinkTrace() << "shutdown " << identifier; |
41 | auto time = QSharedPointer<QTime>::create(); | 40 | auto time = QSharedPointer<QTime>::create(); |
42 | time->start(); | 41 | time->start(); |
43 | return ResourceAccess::connectToServer(identifier) | 42 | return ResourceAccess::connectToServer(identifier) |
@@ -50,33 +49,33 @@ KAsync::Job<void> ResourceControl::shutdown(const QByteArray &identifier) | |||
50 | resourceAccess->sendCommand(Sink::Commands::ShutdownCommand) | 49 | resourceAccess->sendCommand(Sink::Commands::ShutdownCommand) |
51 | .then<void>([&future, resourceAccess, time]() { | 50 | .then<void>([&future, resourceAccess, time]() { |
52 | resourceAccess->close(); | 51 | resourceAccess->close(); |
53 | Trace() << "Shutdown complete." << Log::TraceTime(time->elapsed()); | 52 | SinkTrace() << "Shutdown complete." << Log::TraceTime(time->elapsed()); |
54 | future.setFinished(); | 53 | future.setFinished(); |
55 | }) | 54 | }) |
56 | .exec(); | 55 | .exec(); |
57 | }, | 56 | }, |
58 | [](int, const QString &) { | 57 | [](int, const QString &) { |
59 | Trace() << "Resource is already closed."; | 58 | SinkTrace() << "Resource is already closed."; |
60 | // Resource isn't started, nothing to shutdown | 59 | // Resource isn't started, nothing to shutdown |
61 | }); | 60 | }); |
62 | } | 61 | } |
63 | 62 | ||
64 | KAsync::Job<void> ResourceControl::start(const QByteArray &identifier) | 63 | KAsync::Job<void> ResourceControl::start(const QByteArray &identifier) |
65 | { | 64 | { |
66 | Trace() << "start " << identifier; | 65 | SinkTrace() << "start " << identifier; |
67 | auto time = QSharedPointer<QTime>::create(); | 66 | auto time = QSharedPointer<QTime>::create(); |
68 | time->start(); | 67 | time->start(); |
69 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(identifier, ResourceConfig::getResourceType(identifier)); | 68 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(identifier, ResourceConfig::getResourceType(identifier)); |
70 | resourceAccess->open(); | 69 | resourceAccess->open(); |
71 | return resourceAccess->sendCommand(Sink::Commands::PingCommand).then<void>([resourceAccess, time]() { Trace() << "Start complete." << Log::TraceTime(time->elapsed()); }); | 70 | return resourceAccess->sendCommand(Sink::Commands::PingCommand).then<void>([resourceAccess, time]() { SinkTrace() << "Start complete." << Log::TraceTime(time->elapsed()); }); |
72 | } | 71 | } |
73 | 72 | ||
74 | KAsync::Job<void> ResourceControl::flushMessageQueue(const QByteArrayList &resourceIdentifier) | 73 | KAsync::Job<void> ResourceControl::flushMessageQueue(const QByteArrayList &resourceIdentifier) |
75 | { | 74 | { |
76 | Trace() << "flushMessageQueue" << resourceIdentifier; | 75 | SinkTrace() << "flushMessageQueue" << resourceIdentifier; |
77 | return KAsync::iterate(resourceIdentifier) | 76 | return KAsync::iterate(resourceIdentifier) |
78 | .template each<void, QByteArray>([](const QByteArray &resource, KAsync::Future<void> &future) { | 77 | .template each<void, QByteArray>([](const QByteArray &resource, KAsync::Future<void> &future) { |
79 | Trace() << "Flushing message queue " << resource; | 78 | SinkTrace() << "Flushing message queue " << resource; |
80 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); | 79 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); |
81 | resourceAccess->open(); | 80 | resourceAccess->open(); |
82 | resourceAccess->synchronizeResource(false, true).then<void>([&future, resourceAccess]() { future.setFinished(); }).exec(); | 81 | resourceAccess->synchronizeResource(false, true).then<void>([&future, resourceAccess]() { future.setFinished(); }).exec(); |
@@ -95,7 +94,7 @@ KAsync::Job<void> ResourceControl::inspect(const Inspection &inspectionCommand) | |||
95 | 94 | ||
96 | auto time = QSharedPointer<QTime>::create(); | 95 | auto time = QSharedPointer<QTime>::create(); |
97 | time->start(); | 96 | time->start(); |
98 | Trace() << "Sending inspection " << resource; | 97 | SinkTrace() << "Sending inspection " << resource; |
99 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); | 98 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); |
100 | resourceAccess->open(); | 99 | resourceAccess->open(); |
101 | auto notifier = QSharedPointer<Sink::Notifier>::create(resourceAccess); | 100 | auto notifier = QSharedPointer<Sink::Notifier>::create(resourceAccess); |
@@ -104,7 +103,7 @@ KAsync::Job<void> ResourceControl::inspect(const Inspection &inspectionCommand) | |||
104 | .template then<void>([resourceAccess, notifier, id, time](KAsync::Future<void> &future) { | 103 | .template then<void>([resourceAccess, notifier, id, time](KAsync::Future<void> &future) { |
105 | notifier->registerHandler([&future, id, time](const Notification ¬ification) { | 104 | notifier->registerHandler([&future, id, time](const Notification ¬ification) { |
106 | if (notification.id == id) { | 105 | if (notification.id == id) { |
107 | Trace() << "Inspection complete." << Log::TraceTime(time->elapsed()); | 106 | SinkTrace() << "Inspection complete." << Log::TraceTime(time->elapsed()); |
108 | if (notification.code) { | 107 | if (notification.code) { |
109 | future.setError(-1, "Inspection returned an error: " + notification.message); | 108 | future.setError(-1, "Inspection returned an error: " + notification.message); |
110 | } else { | 109 | } else { |
diff --git a/common/resourcefacade.cpp b/common/resourcefacade.cpp index 0bcc6b9..bdb5841 100644 --- a/common/resourcefacade.cpp +++ b/common/resourcefacade.cpp | |||
@@ -28,6 +28,8 @@ | |||
28 | 28 | ||
29 | using namespace Sink; | 29 | using namespace Sink; |
30 | 30 | ||
31 | SINK_DEBUG_AREA("ResourceFacade") | ||
32 | |||
31 | template<typename DomainType> | 33 | template<typename DomainType> |
32 | ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier; | 34 | ConfigNotifier LocalStorageFacade<DomainType>::sConfigNotifier; |
33 | 35 | ||
@@ -67,7 +69,7 @@ LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query, | |||
67 | const auto type = entries.value(res); | 69 | const auto type = entries.value(res); |
68 | 70 | ||
69 | if (query.propertyFilter.contains("type") && query.propertyFilter.value("type").value.toByteArray() != type) { | 71 | if (query.propertyFilter.contains("type") && query.propertyFilter.value("type").value.toByteArray() != type) { |
70 | Trace() << "Skipping due to type."; | 72 | SinkTrace() << "Skipping due to type."; |
71 | continue; | 73 | continue; |
72 | } | 74 | } |
73 | if (!query.ids.isEmpty() && !query.ids.contains(res)) { | 75 | if (!query.ids.isEmpty() && !query.ids.contains(res)) { |
@@ -75,10 +77,10 @@ LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query, | |||
75 | } | 77 | } |
76 | const auto configurationValues = mConfigStore.get(res); | 78 | const auto configurationValues = mConfigStore.get(res); |
77 | if (!matchesFilter(query.propertyFilter, configurationValues)){ | 79 | if (!matchesFilter(query.propertyFilter, configurationValues)){ |
78 | Trace() << "Skipping due to filter."; | 80 | SinkTrace() << "Skipping due to filter."; |
79 | continue; | 81 | continue; |
80 | } | 82 | } |
81 | Trace() << "Found match " << res; | 83 | SinkTrace() << "Found match " << res; |
82 | auto entity = readFromConfig<DomainType>(mConfigStore, res, type); | 84 | auto entity = readFromConfig<DomainType>(mConfigStore, res, type); |
83 | updateStatus(*entity); | 85 | updateStatus(*entity); |
84 | mResultProvider->add(entity); | 86 | mResultProvider->add(entity); |
@@ -137,7 +139,7 @@ void LocalStorageQueryRunner<DomainType>::setStatusUpdater(const std::function<v | |||
137 | template<typename DomainType> | 139 | template<typename DomainType> |
138 | void LocalStorageQueryRunner<DomainType>::statusChanged(const QByteArray &identifier) | 140 | void LocalStorageQueryRunner<DomainType>::statusChanged(const QByteArray &identifier) |
139 | { | 141 | { |
140 | Trace() << "Status changed " << identifier; | 142 | SinkTrace() << "Status changed " << identifier; |
141 | auto entity = readFromConfig<DomainType>(mConfigStore, identifier, ApplicationDomain::getTypeName<DomainType>()); | 143 | auto entity = readFromConfig<DomainType>(mConfigStore, identifier, ApplicationDomain::getTypeName<DomainType>()); |
142 | updateStatus(*entity); | 144 | updateStatus(*entity); |
143 | mResultProvider->modify(entity); | 145 | mResultProvider->modify(entity); |
@@ -195,7 +197,7 @@ KAsync::Job<void> LocalStorageFacade<DomainType>::modify(const DomainType &domai | |||
195 | return KAsync::start<void>([domainObject, this]() { | 197 | return KAsync::start<void>([domainObject, this]() { |
196 | const QByteArray identifier = domainObject.identifier(); | 198 | const QByteArray identifier = domainObject.identifier(); |
197 | if (identifier.isEmpty()) { | 199 | if (identifier.isEmpty()) { |
198 | Warning() << "We need an \"identifier\" property to identify the entity to configure."; | 200 | SinkWarning() << "We need an \"identifier\" property to identify the entity to configure."; |
199 | return; | 201 | return; |
200 | } | 202 | } |
201 | auto changedProperties = domainObject.changedProperties(); | 203 | auto changedProperties = domainObject.changedProperties(); |
@@ -221,10 +223,10 @@ KAsync::Job<void> LocalStorageFacade<DomainType>::remove(const DomainType &domai | |||
221 | return KAsync::start<void>([domainObject, this]() { | 223 | return KAsync::start<void>([domainObject, this]() { |
222 | const QByteArray identifier = domainObject.identifier(); | 224 | const QByteArray identifier = domainObject.identifier(); |
223 | if (identifier.isEmpty()) { | 225 | if (identifier.isEmpty()) { |
224 | Warning() << "We need an \"identifier\" property to identify the entity to configure"; | 226 | SinkWarning() << "We need an \"identifier\" property to identify the entity to configure"; |
225 | return; | 227 | return; |
226 | } | 228 | } |
227 | Trace() << "Removing: " << identifier; | 229 | SinkTrace() << "Removing: " << identifier; |
228 | mConfigStore.remove(identifier); | 230 | mConfigStore.remove(identifier); |
229 | sConfigNotifier.remove(QSharedPointer<DomainType>::create(domainObject)); | 231 | sConfigNotifier.remove(QSharedPointer<DomainType>::create(domainObject)); |
230 | }); | 232 | }); |
@@ -259,7 +261,7 @@ QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain | |||
259 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource.identifier(), ResourceConfig::getResourceType(resource.identifier())); | 261 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource.identifier(), ResourceConfig::getResourceType(resource.identifier())); |
260 | if (!monitoredResources->contains(resource.identifier())) { | 262 | if (!monitoredResources->contains(resource.identifier())) { |
261 | auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess](const Notification ¬ification) { | 263 | auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess](const Notification ¬ification) { |
262 | Trace() << "Received notification in facade: " << notification.type; | 264 | SinkTrace() << "Received notification in facade: " << notification.type; |
263 | if (notification.type == Notification::Status) { | 265 | if (notification.type == Notification::Status) { |
264 | runner->statusChanged(resource.identifier()); | 266 | runner->statusChanged(resource.identifier()); |
265 | } | 267 | } |
diff --git a/common/sourcewriteback.cpp b/common/sourcewriteback.cpp index a277606..7d21ea6 100644 --- a/common/sourcewriteback.cpp +++ b/common/sourcewriteback.cpp | |||
@@ -26,6 +26,8 @@ | |||
26 | #define ENTITY_TYPE_MAIL "mail" | 26 | #define ENTITY_TYPE_MAIL "mail" |
27 | #define ENTITY_TYPE_FOLDER "folder" | 27 | #define ENTITY_TYPE_FOLDER "folder" |
28 | 28 | ||
29 | SINK_DEBUG_AREA("sourcewriteback") | ||
30 | |||
29 | using namespace Sink; | 31 | using namespace Sink; |
30 | 32 | ||
31 | SourceWriteBack::SourceWriteBack(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) | 33 | SourceWriteBack::SourceWriteBack(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) |
@@ -55,14 +57,14 @@ RemoteIdMap &SourceWriteBack::syncStore() | |||
55 | 57 | ||
56 | KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArray &key, const QByteArray &value) | 58 | KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArray &key, const QByteArray &value) |
57 | { | 59 | { |
58 | Trace() << "Replaying" << type << key; | 60 | SinkTrace() << "Replaying" << type << key; |
59 | 61 | ||
60 | Sink::EntityBuffer buffer(value); | 62 | Sink::EntityBuffer buffer(value); |
61 | const Sink::Entity &entity = buffer.entity(); | 63 | const Sink::Entity &entity = buffer.entity(); |
62 | const auto metadataBuffer = Sink::EntityBuffer::readBuffer<Sink::Metadata>(entity.metadata()); | 64 | const auto metadataBuffer = Sink::EntityBuffer::readBuffer<Sink::Metadata>(entity.metadata()); |
63 | Q_ASSERT(metadataBuffer); | 65 | Q_ASSERT(metadataBuffer); |
64 | if (!metadataBuffer->replayToSource()) { | 66 | if (!metadataBuffer->replayToSource()) { |
65 | Trace() << "Change is coming from the source"; | 67 | SinkTrace() << "Change is coming from the source"; |
66 | return KAsync::null<void>(); | 68 | return KAsync::null<void>(); |
67 | } | 69 | } |
68 | Q_ASSERT(!mSyncStore); | 70 | Q_ASSERT(!mSyncStore); |
@@ -81,11 +83,11 @@ KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArr | |||
81 | if (operation != Sink::Operation_Creation) { | 83 | if (operation != Sink::Operation_Creation) { |
82 | oldRemoteId = syncStore().resolveLocalId(type, uid); | 84 | oldRemoteId = syncStore().resolveLocalId(type, uid); |
83 | if (oldRemoteId.isEmpty()) { | 85 | if (oldRemoteId.isEmpty()) { |
84 | Warning() << "Couldn't find the remote id for: " << type << uid; | 86 | SinkWarning() << "Couldn't find the remote id for: " << type << uid; |
85 | return KAsync::error<void>(1, "Couldn't find the remote id."); | 87 | return KAsync::error<void>(1, "Couldn't find the remote id."); |
86 | } | 88 | } |
87 | } | 89 | } |
88 | Trace() << "Replaying " << key << type << uid << oldRemoteId; | 90 | SinkTrace() << "Replaying " << key << type << uid << oldRemoteId; |
89 | 91 | ||
90 | KAsync::Job<QByteArray> job = KAsync::null<QByteArray>(); | 92 | KAsync::Job<QByteArray> job = KAsync::null<QByteArray>(); |
91 | if (type == ENTITY_TYPE_FOLDER) { | 93 | if (type == ENTITY_TYPE_FOLDER) { |
@@ -98,24 +100,24 @@ KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArr | |||
98 | 100 | ||
99 | return job.then<void, QByteArray>([this, operation, type, uid, oldRemoteId](const QByteArray &remoteId) { | 101 | return job.then<void, QByteArray>([this, operation, type, uid, oldRemoteId](const QByteArray &remoteId) { |
100 | if (operation == Sink::Operation_Creation) { | 102 | if (operation == Sink::Operation_Creation) { |
101 | Trace() << "Replayed creation with remote id: " << remoteId; | 103 | SinkTrace() << "Replayed creation with remote id: " << remoteId; |
102 | if (remoteId.isEmpty()) { | 104 | if (remoteId.isEmpty()) { |
103 | Warning() << "Returned an empty remoteId from the creation"; | 105 | SinkWarning() << "Returned an empty remoteId from the creation"; |
104 | } else { | 106 | } else { |
105 | syncStore().recordRemoteId(type, uid, remoteId); | 107 | syncStore().recordRemoteId(type, uid, remoteId); |
106 | } | 108 | } |
107 | } else if (operation == Sink::Operation_Modification) { | 109 | } else if (operation == Sink::Operation_Modification) { |
108 | Trace() << "Replayed modification with remote id: " << remoteId; | 110 | SinkTrace() << "Replayed modification with remote id: " << remoteId; |
109 | if (remoteId.isEmpty()) { | 111 | if (remoteId.isEmpty()) { |
110 | Warning() << "Returned an empty remoteId from the creation"; | 112 | SinkWarning() << "Returned an empty remoteId from the creation"; |
111 | } else { | 113 | } else { |
112 | syncStore().updateRemoteId(type, uid, remoteId); | 114 | syncStore().updateRemoteId(type, uid, remoteId); |
113 | } | 115 | } |
114 | } else if (operation == Sink::Operation_Removal) { | 116 | } else if (operation == Sink::Operation_Removal) { |
115 | Trace() << "Replayed removal with remote id: " << oldRemoteId; | 117 | SinkTrace() << "Replayed removal with remote id: " << oldRemoteId; |
116 | syncStore().removeRemoteId(type, uid, oldRemoteId); | 118 | syncStore().removeRemoteId(type, uid, oldRemoteId); |
117 | } else { | 119 | } else { |
118 | ErrorMsg() << "Unkown operation" << operation; | 120 | SinkError() << "Unkown operation" << operation; |
119 | } | 121 | } |
120 | 122 | ||
121 | mSyncStore.clear(); | 123 | mSyncStore.clear(); |
@@ -123,7 +125,7 @@ KAsync::Job<void> SourceWriteBack::replay(const QByteArray &type, const QByteArr | |||
123 | mTransaction.abort(); | 125 | mTransaction.abort(); |
124 | mSyncTransaction.commit(); | 126 | mSyncTransaction.commit(); |
125 | }, [this](int errorCode, const QString &errorMessage) { | 127 | }, [this](int errorCode, const QString &errorMessage) { |
126 | Warning() << "Failed to replay change: " << errorMessage; | 128 | SinkWarning() << "Failed to replay change: " << errorMessage; |
127 | mSyncStore.clear(); | 129 | mSyncStore.clear(); |
128 | mEntityStore.clear(); | 130 | mEntityStore.clear(); |
129 | mTransaction.abort(); | 131 | mTransaction.abort(); |
diff --git a/common/specialpurposepreprocessor.cpp b/common/specialpurposepreprocessor.cpp index 2892105..0985880 100644 --- a/common/specialpurposepreprocessor.cpp +++ b/common/specialpurposepreprocessor.cpp | |||
@@ -5,6 +5,8 @@ | |||
5 | 5 | ||
6 | using namespace Sink; | 6 | using namespace Sink; |
7 | 7 | ||
8 | SINK_DEBUG_AREA("SpecialPurposeProcessor") | ||
9 | |||
8 | static QHash<QByteArray, QString> specialPurposeFolders() | 10 | static QHash<QByteArray, QString> specialPurposeFolders() |
9 | { | 11 | { |
10 | QHash<QByteArray, QString> hash; | 12 | QHash<QByteArray, QString> hash; |
@@ -53,7 +55,7 @@ QByteArray SpecialPurposeProcessor::ensureFolder(Sink::Storage::Transaction &tra | |||
53 | return false; | 55 | return false; |
54 | }); | 56 | }); |
55 | if (!mSpecialPurposeFolders.contains(specialPurpose)) { | 57 | if (!mSpecialPurposeFolders.contains(specialPurpose)) { |
56 | Trace() << "Failed to find a drafts folder, creating a new one"; | 58 | SinkTrace() << "Failed to find a drafts folder, creating a new one"; |
57 | auto folder = ApplicationDomain::Folder::create(mResourceInstanceIdentifier); | 59 | auto folder = ApplicationDomain::Folder::create(mResourceInstanceIdentifier); |
58 | folder.setSpecialPurpose(QByteArrayList() << specialPurpose); | 60 | folder.setSpecialPurpose(QByteArrayList() << specialPurpose); |
59 | folder.setName(sSpecialPurposeFolders.value(specialPurpose)); | 61 | folder.setName(sSpecialPurposeFolders.value(specialPurpose)); |
diff --git a/common/storage_common.cpp b/common/storage_common.cpp index 6982a4c..1f2594e 100644 --- a/common/storage_common.cpp +++ b/common/storage_common.cpp | |||
@@ -24,6 +24,8 @@ | |||
24 | #include "log.h" | 24 | #include "log.h" |
25 | #include <QUuid> | 25 | #include <QUuid> |
26 | 26 | ||
27 | SINK_DEBUG_AREA("storage") | ||
28 | |||
27 | namespace Sink { | 29 | namespace Sink { |
28 | 30 | ||
29 | static const char *s_internalPrefix = "__internal"; | 31 | static const char *s_internalPrefix = "__internal"; |
@@ -31,7 +33,7 @@ static const int s_internalPrefixSize = strlen(s_internalPrefix); | |||
31 | 33 | ||
32 | void errorHandler(const Storage::Error &error) | 34 | void errorHandler(const Storage::Error &error) |
33 | { | 35 | { |
34 | Warning() << "Database error in " << error.store << ", code " << error.code << ", message: " << error.message; | 36 | SinkWarning() << "Database error in " << error.store << ", code " << error.code << ", message: " << error.message; |
35 | } | 37 | } |
36 | 38 | ||
37 | std::function<void(const Storage::Error &error)> Storage::basicErrorHandler() | 39 | std::function<void(const Storage::Error &error)> Storage::basicErrorHandler() |
@@ -67,7 +69,7 @@ qint64 Storage::maxRevision(const Sink::Storage::Transaction &transaction) | |||
67 | }, | 69 | }, |
68 | [](const Error &error) { | 70 | [](const Error &error) { |
69 | if (error.code != Sink::Storage::NotFound) { | 71 | if (error.code != Sink::Storage::NotFound) { |
70 | Warning() << "Coultn'd find the maximum revision."; | 72 | SinkWarning() << "Coultn'd find the maximum revision."; |
71 | } | 73 | } |
72 | }); | 74 | }); |
73 | return r; | 75 | return r; |
@@ -88,7 +90,7 @@ qint64 Storage::cleanedUpRevision(const Sink::Storage::Transaction &transaction) | |||
88 | }, | 90 | }, |
89 | [](const Error &error) { | 91 | [](const Error &error) { |
90 | if (error.code != Sink::Storage::NotFound) { | 92 | if (error.code != Sink::Storage::NotFound) { |
91 | Warning() << "Coultn'd find the maximum revision."; | 93 | SinkWarning() << "Coultn'd find the maximum revision."; |
92 | } | 94 | } |
93 | }); | 95 | }); |
94 | return r; | 96 | return r; |
@@ -103,7 +105,7 @@ QByteArray Storage::getUidFromRevision(const Sink::Storage::Transaction &transac | |||
103 | uid = value; | 105 | uid = value; |
104 | return false; | 106 | return false; |
105 | }, | 107 | }, |
106 | [revision](const Error &error) { Warning() << "Coultn'd find uid for revision: " << revision << error.message; }); | 108 | [revision](const Error &error) { SinkWarning() << "Coultn'd find uid for revision: " << revision << error.message; }); |
107 | return uid; | 109 | return uid; |
108 | } | 110 | } |
109 | 111 | ||
@@ -116,7 +118,7 @@ QByteArray Storage::getTypeFromRevision(const Sink::Storage::Transaction &transa | |||
116 | type = value; | 118 | type = value; |
117 | return false; | 119 | return false; |
118 | }, | 120 | }, |
119 | [revision](const Error &error) { Warning() << "Coultn'd find type for revision " << revision; }); | 121 | [revision](const Error &error) { SinkWarning() << "Coultn'd find type for revision " << revision; }); |
120 | return type; | 122 | return type; |
121 | } | 123 | } |
122 | 124 | ||
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index 352e250..79f4465 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp | |||
@@ -34,10 +34,8 @@ | |||
34 | #include <lmdb.h> | 34 | #include <lmdb.h> |
35 | #include "log.h" | 35 | #include "log.h" |
36 | 36 | ||
37 | #undef Trace | 37 | SINK_DEBUG_AREA("storage") |
38 | #define Trace() Trace_area("storage." + d->storageRoot.toLatin1() + '/' + d->name.toLatin1()) | 38 | // SINK_DEBUG_COMPONENT(d->storageRoot.toLatin1() + '/' + d->name.toLatin1()) |
39 | #undef Warning | ||
40 | #define Warning() Warning_area("storage") | ||
41 | 39 | ||
42 | namespace Sink { | 40 | namespace Sink { |
43 | 41 | ||
@@ -354,7 +352,7 @@ qint64 Storage::NamedDatabase::getSize() | |||
354 | MDB_stat stat; | 352 | MDB_stat stat; |
355 | rc = mdb_stat(d->transaction, d->dbi, &stat); | 353 | rc = mdb_stat(d->transaction, d->dbi, &stat); |
356 | if (rc) { | 354 | if (rc) { |
357 | Warning() << "Something went wrong " << QByteArray(mdb_strerror(rc)); | 355 | SinkWarning() << "Something went wrong " << QByteArray(mdb_strerror(rc)); |
358 | } | 356 | } |
359 | // std::cout << "overflow_pages: " << stat.ms_overflow_pages << std::endl; | 357 | // std::cout << "overflow_pages: " << stat.ms_overflow_pages << std::endl; |
360 | // std::cout << "page size: " << stat.ms_psize << std::endl; | 358 | // std::cout << "page size: " << stat.ms_psize << std::endl; |
@@ -482,7 +480,7 @@ static bool ensureCorrectDb(Storage::NamedDatabase &database, const QByteArray & | |||
482 | bool openedTheWrongDatabase = false; | 480 | bool openedTheWrongDatabase = false; |
483 | auto count = database.scan("__internal_dbname", [db, &openedTheWrongDatabase](const QByteArray &key, const QByteArray &value) ->bool { | 481 | auto count = database.scan("__internal_dbname", [db, &openedTheWrongDatabase](const QByteArray &key, const QByteArray &value) ->bool { |
484 | if (value != db) { | 482 | if (value != db) { |
485 | Warning() << "Opened the wrong database, got " << value << " instead of " << db; | 483 | SinkWarning() << "Opened the wrong database, got " << value << " instead of " << db; |
486 | openedTheWrongDatabase = true; | 484 | openedTheWrongDatabase = true; |
487 | } | 485 | } |
488 | return false; | 486 | return false; |
@@ -505,7 +503,7 @@ bool Storage::Transaction::validateNamedDatabases() | |||
505 | for (const auto &dbName : databases) { | 503 | for (const auto &dbName : databases) { |
506 | auto db = openDatabase(dbName); | 504 | auto db = openDatabase(dbName); |
507 | if (!db) { | 505 | if (!db) { |
508 | Warning() << "Failed to open the database: " << dbName; | 506 | SinkWarning() << "Failed to open the database: " << dbName; |
509 | return false; | 507 | return false; |
510 | } | 508 | } |
511 | } | 509 | } |
@@ -527,7 +525,7 @@ Storage::NamedDatabase Storage::Transaction::openDatabase(const QByteArray &db, | |||
527 | } | 525 | } |
528 | auto database = Storage::NamedDatabase(p); | 526 | auto database = Storage::NamedDatabase(p); |
529 | if (!ensureCorrectDb(database, db, d->requestedRead)) { | 527 | if (!ensureCorrectDb(database, db, d->requestedRead)) { |
530 | Warning() << "Failed to open the database" << db; | 528 | SinkWarning() << "Failed to open the database" << db; |
531 | return Storage::NamedDatabase(); | 529 | return Storage::NamedDatabase(); |
532 | } | 530 | } |
533 | return database; | 531 | return database; |
@@ -536,7 +534,7 @@ Storage::NamedDatabase Storage::Transaction::openDatabase(const QByteArray &db, | |||
536 | QList<QByteArray> Storage::Transaction::getDatabaseNames() const | 534 | QList<QByteArray> Storage::Transaction::getDatabaseNames() const |
537 | { | 535 | { |
538 | if (!d) { | 536 | if (!d) { |
539 | Warning() << "Invalid transaction"; | 537 | SinkWarning() << "Invalid transaction"; |
540 | return QList<QByteArray>(); | 538 | return QList<QByteArray>(); |
541 | } | 539 | } |
542 | 540 | ||
@@ -559,12 +557,12 @@ QList<QByteArray> Storage::Transaction::getDatabaseNames() const | |||
559 | rc = 0; | 557 | rc = 0; |
560 | } | 558 | } |
561 | if (rc) { | 559 | if (rc) { |
562 | Warning() << "Failed to get a value" << rc; | 560 | SinkWarning() << "Failed to get a value" << rc; |
563 | } | 561 | } |
564 | } | 562 | } |
565 | mdb_cursor_close(cursor); | 563 | mdb_cursor_close(cursor); |
566 | } else { | 564 | } else { |
567 | Warning() << "Failed to open db" << rc << QByteArray(mdb_strerror(rc)); | 565 | SinkWarning() << "Failed to open db" << rc << QByteArray(mdb_strerror(rc)); |
568 | } | 566 | } |
569 | return list; | 567 | return list; |
570 | } | 568 | } |
@@ -611,7 +609,7 @@ Storage::Private::Private(const QString &s, const QString &n, AccessMode m) : st | |||
611 | int rc = 0; | 609 | int rc = 0; |
612 | if ((rc = mdb_env_create(&env))) { | 610 | if ((rc = mdb_env_create(&env))) { |
613 | // TODO: handle error | 611 | // TODO: handle error |
614 | Warning() << "mdb_env_create: " << rc << " " << mdb_strerror(rc); | 612 | SinkWarning() << "mdb_env_create: " << rc << " " << mdb_strerror(rc); |
615 | } else { | 613 | } else { |
616 | mdb_env_set_maxdbs(env, 50); | 614 | mdb_env_set_maxdbs(env, 50); |
617 | unsigned int flags = MDB_NOTLS; | 615 | unsigned int flags = MDB_NOTLS; |
@@ -619,7 +617,7 @@ Storage::Private::Private(const QString &s, const QString &n, AccessMode m) : st | |||
619 | flags |= MDB_RDONLY; | 617 | flags |= MDB_RDONLY; |
620 | } | 618 | } |
621 | if ((rc = mdb_env_open(env, fullPath.toStdString().data(), flags, 0664))) { | 619 | if ((rc = mdb_env_open(env, fullPath.toStdString().data(), flags, 0664))) { |
622 | Warning() << "mdb_env_open: " << rc << " " << mdb_strerror(rc); | 620 | SinkWarning() << "mdb_env_open: " << rc << " " << mdb_strerror(rc); |
623 | mdb_env_close(env); | 621 | mdb_env_close(env); |
624 | env = 0; | 622 | env = 0; |
625 | } else { | 623 | } else { |
@@ -681,7 +679,7 @@ qint64 Storage::diskUsage() const | |||
681 | { | 679 | { |
682 | QFileInfo info(d->storageRoot + '/' + d->name + "/data.mdb"); | 680 | QFileInfo info(d->storageRoot + '/' + d->name + "/data.mdb"); |
683 | if (!info.exists()) { | 681 | if (!info.exists()) { |
684 | Warning() << "Tried to get filesize for non-existant file: " << info.path(); | 682 | SinkWarning() << "Tried to get filesize for non-existant file: " << info.path(); |
685 | } | 683 | } |
686 | return info.size(); | 684 | return info.size(); |
687 | } | 685 | } |
@@ -691,7 +689,7 @@ void Storage::removeFromDisk() const | |||
691 | const QString fullPath(d->storageRoot + '/' + d->name); | 689 | const QString fullPath(d->storageRoot + '/' + d->name); |
692 | QMutexLocker locker(&d->sMutex); | 690 | QMutexLocker locker(&d->sMutex); |
693 | QDir dir(fullPath); | 691 | QDir dir(fullPath); |
694 | Trace() << "Removing database from disk: " << fullPath; | 692 | SinkTrace() << "Removing database from disk: " << fullPath; |
695 | if (!dir.removeRecursively()) { | 693 | if (!dir.removeRecursively()) { |
696 | Error error(d->name.toLatin1(), ErrorCodes::GenericError, QString("Failed to remove directory %1 %2").arg(d->storageRoot).arg(d->name).toLatin1()); | 694 | Error error(d->name.toLatin1(), ErrorCodes::GenericError, QString("Failed to remove directory %1 %2").arg(d->storageRoot).arg(d->name).toLatin1()); |
697 | defaultErrorHandler()(error); | 695 | defaultErrorHandler()(error); |
diff --git a/common/store.cpp b/common/store.cpp index 1162a18..a58287b 100644 --- a/common/store.cpp +++ b/common/store.cpp | |||
@@ -36,8 +36,7 @@ | |||
36 | #include "storage.h" | 36 | #include "storage.h" |
37 | #include "log.h" | 37 | #include "log.h" |
38 | 38 | ||
39 | #undef DEBUG_AREA | 39 | SINK_DEBUG_AREA("store") |
40 | #define DEBUG_AREA "client.store" | ||
41 | 40 | ||
42 | namespace Sink { | 41 | namespace Sink { |
43 | 42 | ||
@@ -88,24 +87,24 @@ static QMap<QByteArray, QByteArray> getResources(const QList<QByteArray> &resour | |||
88 | } | 87 | } |
89 | resources.insert(res, configuredResources.value(res)); | 88 | resources.insert(res, configuredResources.value(res)); |
90 | } else { | 89 | } else { |
91 | Warning() << "Resource is not existing: " << res; | 90 | SinkWarning() << "Resource is not existing: " << res; |
92 | } | 91 | } |
93 | } | 92 | } |
94 | } | 93 | } |
95 | Trace() << "Found resources: " << resources; | 94 | SinkTrace() << "Found resources: " << resources; |
96 | return resources; | 95 | return resources; |
97 | } | 96 | } |
98 | 97 | ||
99 | template <class DomainType> | 98 | template <class DomainType> |
100 | QSharedPointer<QAbstractItemModel> Store::loadModel(Query query) | 99 | QSharedPointer<QAbstractItemModel> Store::loadModel(Query query) |
101 | { | 100 | { |
102 | Trace() << "Query: " << ApplicationDomain::getTypeName<DomainType>(); | 101 | SinkTrace() << "Query: " << ApplicationDomain::getTypeName<DomainType>(); |
103 | Trace() << " Requested: " << query.requestedProperties; | 102 | SinkTrace() << " Requested: " << query.requestedProperties; |
104 | Trace() << " Filter: " << query.propertyFilter; | 103 | SinkTrace() << " Filter: " << query.propertyFilter; |
105 | Trace() << " Parent: " << query.parentProperty; | 104 | SinkTrace() << " Parent: " << query.parentProperty; |
106 | Trace() << " Ids: " << query.ids; | 105 | SinkTrace() << " Ids: " << query.ids; |
107 | Trace() << " IsLive: " << query.liveQuery; | 106 | SinkTrace() << " IsLive: " << query.liveQuery; |
108 | Trace() << " Sorting: " << query.sortProperty; | 107 | SinkTrace() << " Sorting: " << query.sortProperty; |
109 | auto model = QSharedPointer<ModelResult<DomainType, typename DomainType::Ptr>>::create(query, query.requestedProperties); | 108 | auto model = QSharedPointer<ModelResult<DomainType, typename DomainType::Ptr>>::create(query, query.requestedProperties); |
110 | 109 | ||
111 | //* Client defines lifetime of model | 110 | //* Client defines lifetime of model |
@@ -123,16 +122,16 @@ QSharedPointer<QAbstractItemModel> Store::loadModel(Query query) | |||
123 | const auto resourceType = resources.value(resourceInstanceIdentifier); | 122 | const auto resourceType = resources.value(resourceInstanceIdentifier); |
124 | auto facade = FacadeFactory::instance().getFacade<DomainType>(resourceType, resourceInstanceIdentifier); | 123 | auto facade = FacadeFactory::instance().getFacade<DomainType>(resourceType, resourceInstanceIdentifier); |
125 | if (facade) { | 124 | if (facade) { |
126 | Trace() << "Trying to fetch from resource " << resourceInstanceIdentifier; | 125 | SinkTrace() << "Trying to fetch from resource " << resourceInstanceIdentifier; |
127 | auto result = facade->load(query); | 126 | auto result = facade->load(query); |
128 | if (result.second) { | 127 | if (result.second) { |
129 | aggregatingEmitter->addEmitter(result.second); | 128 | aggregatingEmitter->addEmitter(result.second); |
130 | } else { | 129 | } else { |
131 | Warning() << "Null emitter for resource " << resourceInstanceIdentifier; | 130 | SinkWarning() << "Null emitter for resource " << resourceInstanceIdentifier; |
132 | } | 131 | } |
133 | result.first.template then<void>([&future]() { future.setFinished(); }).exec(); | 132 | result.first.template then<void>([&future]() { future.setFinished(); }).exec(); |
134 | } else { | 133 | } else { |
135 | Trace() << "Couldn' find a facade for " << resourceInstanceIdentifier; | 134 | SinkTrace() << "Couldn' find a facade for " << resourceInstanceIdentifier; |
136 | // Ignore the error and carry on | 135 | // Ignore the error and carry on |
137 | future.setFinished(); | 136 | future.setFinished(); |
138 | } | 137 | } |
@@ -164,7 +163,7 @@ KAsync::Job<void> Store::create(const DomainType &domainObject) | |||
164 | { | 163 | { |
165 | // Potentially move to separate thread as well | 164 | // Potentially move to separate thread as well |
166 | auto facade = getFacade<DomainType>(domainObject.resourceInstanceIdentifier()); | 165 | auto facade = getFacade<DomainType>(domainObject.resourceInstanceIdentifier()); |
167 | return facade->create(domainObject).template then<void>([facade]() {}, [](int errorCode, const QString &error) { Warning() << "Failed to create"; }); | 166 | return facade->create(domainObject).template then<void>([facade]() {}, [](int errorCode, const QString &error) { SinkWarning() << "Failed to create"; }); |
168 | } | 167 | } |
169 | 168 | ||
170 | template <class DomainType> | 169 | template <class DomainType> |
@@ -172,7 +171,7 @@ KAsync::Job<void> Store::modify(const DomainType &domainObject) | |||
172 | { | 171 | { |
173 | // Potentially move to separate thread as well | 172 | // Potentially move to separate thread as well |
174 | auto facade = getFacade<DomainType>(domainObject.resourceInstanceIdentifier()); | 173 | auto facade = getFacade<DomainType>(domainObject.resourceInstanceIdentifier()); |
175 | return facade->modify(domainObject).template then<void>([facade]() {}, [](int errorCode, const QString &error) { Warning() << "Failed to modify"; }); | 174 | return facade->modify(domainObject).template then<void>([facade]() {}, [](int errorCode, const QString &error) { SinkWarning() << "Failed to modify"; }); |
176 | } | 175 | } |
177 | 176 | ||
178 | template <class DomainType> | 177 | template <class DomainType> |
@@ -180,7 +179,7 @@ KAsync::Job<void> Store::remove(const DomainType &domainObject) | |||
180 | { | 179 | { |
181 | // Potentially move to separate thread as well | 180 | // Potentially move to separate thread as well |
182 | auto facade = getFacade<DomainType>(domainObject.resourceInstanceIdentifier()); | 181 | auto facade = getFacade<DomainType>(domainObject.resourceInstanceIdentifier()); |
183 | return facade->remove(domainObject).template then<void>([facade]() {}, [](int errorCode, const QString &error) { Warning() << "Failed to remove"; }); | 182 | return facade->remove(domainObject).template then<void>([facade]() {}, [](int errorCode, const QString &error) { SinkWarning() << "Failed to remove"; }); |
184 | } | 183 | } |
185 | 184 | ||
186 | KAsync::Job<void> Store::removeDataFromDisk(const QByteArray &identifier) | 185 | KAsync::Job<void> Store::removeDataFromDisk(const QByteArray &identifier) |
@@ -188,28 +187,28 @@ KAsync::Job<void> Store::removeDataFromDisk(const QByteArray &identifier) | |||
188 | // All databases are going to become invalid, nuke the environments | 187 | // All databases are going to become invalid, nuke the environments |
189 | // TODO: all clients should react to a notification the resource | 188 | // TODO: all clients should react to a notification the resource |
190 | Sink::Storage::clearEnv(); | 189 | Sink::Storage::clearEnv(); |
191 | Trace() << "Remove data from disk " << identifier; | 190 | SinkTrace() << "Remove data from disk " << identifier; |
192 | auto time = QSharedPointer<QTime>::create(); | 191 | auto time = QSharedPointer<QTime>::create(); |
193 | time->start(); | 192 | time->start(); |
194 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(identifier, ResourceConfig::getResourceType(identifier)); | 193 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(identifier, ResourceConfig::getResourceType(identifier)); |
195 | resourceAccess->open(); | 194 | resourceAccess->open(); |
196 | return resourceAccess->sendCommand(Sink::Commands::RemoveFromDiskCommand) | 195 | return resourceAccess->sendCommand(Sink::Commands::RemoveFromDiskCommand) |
197 | .then<void>([resourceAccess, time]() { Trace() << "Remove from disk complete." << Log::TraceTime(time->elapsed()); }); | 196 | .then<void>([resourceAccess, time]() { SinkTrace() << "Remove from disk complete." << Log::TraceTime(time->elapsed()); }); |
198 | } | 197 | } |
199 | 198 | ||
200 | KAsync::Job<void> Store::synchronize(const Sink::Query &query) | 199 | KAsync::Job<void> Store::synchronize(const Sink::Query &query) |
201 | { | 200 | { |
202 | Trace() << "synchronize" << query.resources; | 201 | SinkTrace() << "synchronize" << query.resources; |
203 | auto resources = getResources(query.resources, query.accounts).keys(); | 202 | auto resources = getResources(query.resources, query.accounts).keys(); |
204 | //FIXME only necessary because each doesn't propagate errors | 203 | //FIXME only necessary because each doesn't propagate errors |
205 | auto error = new bool; | 204 | auto error = new bool; |
206 | return KAsync::iterate(resources) | 205 | return KAsync::iterate(resources) |
207 | .template each<void, QByteArray>([query, error](const QByteArray &resource, KAsync::Future<void> &future) { | 206 | .template each<void, QByteArray>([query, error](const QByteArray &resource, KAsync::Future<void> &future) { |
208 | Trace() << "Synchronizing " << resource; | 207 | SinkTrace() << "Synchronizing " << resource; |
209 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); | 208 | auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource, ResourceConfig::getResourceType(resource)); |
210 | resourceAccess->open(); | 209 | resourceAccess->open(); |
211 | resourceAccess->synchronizeResource(true, false).then<void>([resourceAccess, &future]() {Trace() << "synced."; future.setFinished(); }, | 210 | resourceAccess->synchronizeResource(true, false).then<void>([resourceAccess, &future]() {SinkTrace() << "synced."; future.setFinished(); }, |
212 | [&future, error](int errorCode, QString msg) { *error = true; Warning() << "Error during sync."; future.setError(errorCode, msg); }).exec(); | 211 | [&future, error](int errorCode, QString msg) { *error = true; SinkWarning() << "Error during sync."; future.setError(errorCode, msg); }).exec(); |
213 | }).then<void>([error](KAsync::Future<void> &future) { | 212 | }).then<void>([error](KAsync::Future<void> &future) { |
214 | if (*error) { | 213 | if (*error) { |
215 | future.setError(1, "Error during sync."); | 214 | future.setError(1, "Error during sync."); |
@@ -306,25 +305,25 @@ QList<DomainType> Store::read(const Sink::Query &q) | |||
306 | auto resources = getResources(query.resources, query.accounts, ApplicationDomain::getTypeName<DomainType>()); | 305 | auto resources = getResources(query.resources, query.accounts, ApplicationDomain::getTypeName<DomainType>()); |
307 | auto aggregatingEmitter = AggregatingResultEmitter<typename DomainType::Ptr>::Ptr::create(); | 306 | auto aggregatingEmitter = AggregatingResultEmitter<typename DomainType::Ptr>::Ptr::create(); |
308 | aggregatingEmitter->onAdded([&list](const typename DomainType::Ptr &value){ | 307 | aggregatingEmitter->onAdded([&list](const typename DomainType::Ptr &value){ |
309 | Trace() << "Found value: " << value->identifier(); | 308 | SinkTrace() << "Found value: " << value->identifier(); |
310 | list << *value; | 309 | list << *value; |
311 | }); | 310 | }); |
312 | for (const auto resourceInstanceIdentifier : resources.keys()) { | 311 | for (const auto resourceInstanceIdentifier : resources.keys()) { |
313 | const auto resourceType = resources.value(resourceInstanceIdentifier); | 312 | const auto resourceType = resources.value(resourceInstanceIdentifier); |
314 | Trace() << "Looking for " << resourceType << resourceInstanceIdentifier; | 313 | SinkTrace() << "Looking for " << resourceType << resourceInstanceIdentifier; |
315 | auto facade = FacadeFactory::instance().getFacade<DomainType>(resourceType, resourceInstanceIdentifier); | 314 | auto facade = FacadeFactory::instance().getFacade<DomainType>(resourceType, resourceInstanceIdentifier); |
316 | if (facade) { | 315 | if (facade) { |
317 | Trace() << "Trying to fetch from resource " << resourceInstanceIdentifier; | 316 | SinkTrace() << "Trying to fetch from resource " << resourceInstanceIdentifier; |
318 | auto result = facade->load(query); | 317 | auto result = facade->load(query); |
319 | if (result.second) { | 318 | if (result.second) { |
320 | aggregatingEmitter->addEmitter(result.second); | 319 | aggregatingEmitter->addEmitter(result.second); |
321 | } else { | 320 | } else { |
322 | Warning() << "Null emitter for resource " << resourceInstanceIdentifier; | 321 | SinkWarning() << "Null emitter for resource " << resourceInstanceIdentifier; |
323 | } | 322 | } |
324 | result.first.exec(); | 323 | result.first.exec(); |
325 | aggregatingEmitter->fetch(typename DomainType::Ptr()); | 324 | aggregatingEmitter->fetch(typename DomainType::Ptr()); |
326 | } else { | 325 | } else { |
327 | Trace() << "Couldn't find a facade for " << resourceInstanceIdentifier; | 326 | SinkTrace() << "Couldn't find a facade for " << resourceInstanceIdentifier; |
328 | // Ignore the error and carry on | 327 | // Ignore the error and carry on |
329 | } | 328 | } |
330 | } | 329 | } |
diff --git a/common/synchronizer.cpp b/common/synchronizer.cpp index 1374d00..2d4fb8d 100644 --- a/common/synchronizer.cpp +++ b/common/synchronizer.cpp | |||
@@ -29,6 +29,8 @@ | |||
29 | #include "modifyentity_generated.h" | 29 | #include "modifyentity_generated.h" |
30 | #include "deleteentity_generated.h" | 30 | #include "deleteentity_generated.h" |
31 | 31 | ||
32 | SINK_DEBUG_AREA("synchronizer") | ||
33 | |||
32 | using namespace Sink; | 34 | using namespace Sink; |
33 | 35 | ||
34 | Synchronizer::Synchronizer(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) | 36 | Synchronizer::Synchronizer(const QByteArray &resourceType, const QByteArray &resourceInstanceIdentifier) |
@@ -37,7 +39,7 @@ Synchronizer::Synchronizer(const QByteArray &resourceType, const QByteArray &res | |||
37 | mResourceType(resourceType), | 39 | mResourceType(resourceType), |
38 | mResourceInstanceIdentifier(resourceInstanceIdentifier) | 40 | mResourceInstanceIdentifier(resourceInstanceIdentifier) |
39 | { | 41 | { |
40 | Trace() << "Starting synchronizer: " << resourceType << resourceInstanceIdentifier; | 42 | SinkTrace() << "Starting synchronizer: " << resourceType << resourceInstanceIdentifier; |
41 | } | 43 | } |
42 | 44 | ||
43 | Synchronizer::~Synchronizer() | 45 | Synchronizer::~Synchronizer() |
@@ -129,11 +131,11 @@ void Synchronizer::scanForRemovals(const QByteArray &bufferType, const std::func | |||
129 | entryGenerator([this, bufferType, &exists](const QByteArray &key) { | 131 | entryGenerator([this, bufferType, &exists](const QByteArray &key) { |
130 | auto sinkId = Sink::Storage::uidFromKey(key); | 132 | auto sinkId = Sink::Storage::uidFromKey(key); |
131 | const auto remoteId = syncStore().resolveLocalId(bufferType, sinkId); | 133 | const auto remoteId = syncStore().resolveLocalId(bufferType, sinkId); |
132 | Trace() << "Checking for removal " << key << remoteId; | 134 | SinkTrace() << "Checking for removal " << key << remoteId; |
133 | // If we have no remoteId, the entity hasn't been replayed to the source yet | 135 | // If we have no remoteId, the entity hasn't been replayed to the source yet |
134 | if (!remoteId.isEmpty()) { | 136 | if (!remoteId.isEmpty()) { |
135 | if (!exists(remoteId)) { | 137 | if (!exists(remoteId)) { |
136 | Trace() << "Found a removed entity: " << sinkId; | 138 | SinkTrace() << "Found a removed entity: " << sinkId; |
137 | deleteEntity(sinkId, Sink::Storage::maxRevision(transaction()), bufferType, | 139 | deleteEntity(sinkId, Sink::Storage::maxRevision(transaction()), bufferType, |
138 | [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::DeleteEntityCommand, buffer); }); | 140 | [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::DeleteEntityCommand, buffer); }); |
139 | } | 141 | } |
@@ -143,14 +145,14 @@ void Synchronizer::scanForRemovals(const QByteArray &bufferType, const std::func | |||
143 | 145 | ||
144 | void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray &remoteId, const Sink::ApplicationDomain::ApplicationDomainType &entity) | 146 | void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray &remoteId, const Sink::ApplicationDomain::ApplicationDomainType &entity) |
145 | { | 147 | { |
146 | Trace() << "Create or modify" << bufferType << remoteId; | 148 | SinkTrace() << "Create or modify" << bufferType << remoteId; |
147 | auto mainDatabase = Storage::mainDatabase(transaction(), bufferType); | 149 | auto mainDatabase = Storage::mainDatabase(transaction(), bufferType); |
148 | const auto sinkId = syncStore().resolveRemoteId(bufferType, remoteId); | 150 | const auto sinkId = syncStore().resolveRemoteId(bufferType, remoteId); |
149 | const auto found = mainDatabase.contains(sinkId); | 151 | const auto found = mainDatabase.contains(sinkId); |
150 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(mResourceType, bufferType); | 152 | auto adaptorFactory = Sink::AdaptorFactoryRegistry::instance().getFactory(mResourceType, bufferType); |
151 | Q_ASSERT(adaptorFactory); | 153 | Q_ASSERT(adaptorFactory); |
152 | if (!found) { | 154 | if (!found) { |
153 | Trace() << "Found a new entity: " << remoteId; | 155 | SinkTrace() << "Found a new entity: " << remoteId; |
154 | createEntity( | 156 | createEntity( |
155 | sinkId, bufferType, entity, *adaptorFactory, [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::CreateEntityCommand, buffer); }); | 157 | sinkId, bufferType, entity, *adaptorFactory, [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::CreateEntityCommand, buffer); }); |
156 | } else { // modification | 158 | } else { // modification |
@@ -159,17 +161,17 @@ void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray | |||
159 | bool changed = false; | 161 | bool changed = false; |
160 | for (const auto &property : entity.changedProperties()) { | 162 | for (const auto &property : entity.changedProperties()) { |
161 | if (entity.getProperty(property) != current->getProperty(property)) { | 163 | if (entity.getProperty(property) != current->getProperty(property)) { |
162 | Trace() << "Property changed " << sinkId << property; | 164 | SinkTrace() << "Property changed " << sinkId << property; |
163 | changed = true; | 165 | changed = true; |
164 | } | 166 | } |
165 | } | 167 | } |
166 | if (changed) { | 168 | if (changed) { |
167 | Trace() << "Found a modified entity: " << remoteId; | 169 | SinkTrace() << "Found a modified entity: " << remoteId; |
168 | modifyEntity(sinkId, Sink::Storage::maxRevision(transaction()), bufferType, entity, *adaptorFactory, | 170 | modifyEntity(sinkId, Sink::Storage::maxRevision(transaction()), bufferType, entity, *adaptorFactory, |
169 | [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::ModifyEntityCommand, buffer); }); | 171 | [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::ModifyEntityCommand, buffer); }); |
170 | } | 172 | } |
171 | } else { | 173 | } else { |
172 | Warning() << "Failed to get current entity"; | 174 | SinkWarning() << "Failed to get current entity"; |
173 | } | 175 | } |
174 | } | 176 | } |
175 | } | 177 | } |
@@ -178,7 +180,7 @@ template<typename DomainType> | |||
178 | void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray &remoteId, const DomainType &entity, const QHash<QByteArray, Sink::Query::Comparator> &mergeCriteria) | 180 | void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray &remoteId, const DomainType &entity, const QHash<QByteArray, Sink::Query::Comparator> &mergeCriteria) |
179 | { | 181 | { |
180 | 182 | ||
181 | Trace() << "Create or modify" << bufferType << remoteId; | 183 | SinkTrace() << "Create or modify" << bufferType << remoteId; |
182 | auto mainDatabase = Storage::mainDatabase(transaction(), bufferType); | 184 | auto mainDatabase = Storage::mainDatabase(transaction(), bufferType); |
183 | const auto sinkId = syncStore().resolveRemoteId(bufferType, remoteId); | 185 | const auto sinkId = syncStore().resolveRemoteId(bufferType, remoteId); |
184 | const auto found = mainDatabase.contains(sinkId); | 186 | const auto found = mainDatabase.contains(sinkId); |
@@ -192,17 +194,17 @@ void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray | |||
192 | reader.query(query, | 194 | reader.query(query, |
193 | [this, bufferType, remoteId, &merge](const DomainType &o) -> bool{ | 195 | [this, bufferType, remoteId, &merge](const DomainType &o) -> bool{ |
194 | merge = true; | 196 | merge = true; |
195 | Trace() << "Merging local entity with remote entity: " << o.identifier() << remoteId; | 197 | SinkTrace() << "Merging local entity with remote entity: " << o.identifier() << remoteId; |
196 | syncStore().recordRemoteId(bufferType, o.identifier(), remoteId); | 198 | syncStore().recordRemoteId(bufferType, o.identifier(), remoteId); |
197 | return false; | 199 | return false; |
198 | }); | 200 | }); |
199 | if (!merge) { | 201 | if (!merge) { |
200 | Trace() << "Found a new entity: " << remoteId; | 202 | SinkTrace() << "Found a new entity: " << remoteId; |
201 | createEntity( | 203 | createEntity( |
202 | sinkId, bufferType, entity, *adaptorFactory, [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::CreateEntityCommand, buffer); }); | 204 | sinkId, bufferType, entity, *adaptorFactory, [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::CreateEntityCommand, buffer); }); |
203 | } | 205 | } |
204 | } else { | 206 | } else { |
205 | Trace() << "Found a new entity: " << remoteId; | 207 | SinkTrace() << "Found a new entity: " << remoteId; |
206 | createEntity( | 208 | createEntity( |
207 | sinkId, bufferType, entity, *adaptorFactory, [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::CreateEntityCommand, buffer); }); | 209 | sinkId, bufferType, entity, *adaptorFactory, [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::CreateEntityCommand, buffer); }); |
208 | } | 210 | } |
@@ -212,17 +214,17 @@ void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray | |||
212 | bool changed = false; | 214 | bool changed = false; |
213 | for (const auto &property : entity.changedProperties()) { | 215 | for (const auto &property : entity.changedProperties()) { |
214 | if (entity.getProperty(property) != current->getProperty(property)) { | 216 | if (entity.getProperty(property) != current->getProperty(property)) { |
215 | Trace() << "Property changed " << sinkId << property; | 217 | SinkTrace() << "Property changed " << sinkId << property; |
216 | changed = true; | 218 | changed = true; |
217 | } | 219 | } |
218 | } | 220 | } |
219 | if (changed) { | 221 | if (changed) { |
220 | Trace() << "Found a modified entity: " << remoteId; | 222 | SinkTrace() << "Found a modified entity: " << remoteId; |
221 | modifyEntity(sinkId, Sink::Storage::maxRevision(transaction()), bufferType, entity, *adaptorFactory, | 223 | modifyEntity(sinkId, Sink::Storage::maxRevision(transaction()), bufferType, entity, *adaptorFactory, |
222 | [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::ModifyEntityCommand, buffer); }); | 224 | [this](const QByteArray &buffer) { enqueueCommand(Sink::Commands::ModifyEntityCommand, buffer); }); |
223 | } | 225 | } |
224 | } else { | 226 | } else { |
225 | Warning() << "Failed to get current entity"; | 227 | SinkWarning() << "Failed to get current entity"; |
226 | } | 228 | } |
227 | } | 229 | } |
228 | } | 230 | } |
@@ -239,7 +241,7 @@ void Synchronizer::modify(const DomainType &entity) | |||
239 | 241 | ||
240 | KAsync::Job<void> Synchronizer::synchronize() | 242 | KAsync::Job<void> Synchronizer::synchronize() |
241 | { | 243 | { |
242 | Trace() << "Synchronizing"; | 244 | SinkTrace() << "Synchronizing"; |
243 | mSyncInProgress = true; | 245 | mSyncInProgress = true; |
244 | mMessageQueue->startTransaction(); | 246 | mMessageQueue->startTransaction(); |
245 | return synchronizeWithSource().then<void>([this]() { | 247 | return synchronizeWithSource().then<void>([this]() { |
@@ -265,7 +267,7 @@ void Synchronizer::commit() | |||
265 | Sink::Storage::Transaction &Synchronizer::transaction() | 267 | Sink::Storage::Transaction &Synchronizer::transaction() |
266 | { | 268 | { |
267 | if (!mTransaction) { | 269 | if (!mTransaction) { |
268 | Trace() << "Starting transaction"; | 270 | SinkTrace() << "Starting transaction"; |
269 | mTransaction = mStorage.createTransaction(Sink::Storage::ReadOnly); | 271 | mTransaction = mStorage.createTransaction(Sink::Storage::ReadOnly); |
270 | } | 272 | } |
271 | return mTransaction; | 273 | return mTransaction; |
@@ -274,7 +276,7 @@ Sink::Storage::Transaction &Synchronizer::transaction() | |||
274 | Sink::Storage::Transaction &Synchronizer::syncTransaction() | 276 | Sink::Storage::Transaction &Synchronizer::syncTransaction() |
275 | { | 277 | { |
276 | if (!mSyncTransaction) { | 278 | if (!mSyncTransaction) { |
277 | Trace() << "Starting transaction"; | 279 | SinkTrace() << "Starting transaction"; |
278 | mSyncTransaction = mSyncStorage.createTransaction(Sink::Storage::ReadWrite); | 280 | mSyncTransaction = mSyncStorage.createTransaction(Sink::Storage::ReadWrite); |
279 | } | 281 | } |
280 | return mSyncTransaction; | 282 | return mSyncTransaction; |
diff --git a/common/test.cpp b/common/test.cpp index c7d84cc..99e51c8 100644 --- a/common/test.cpp +++ b/common/test.cpp | |||
@@ -28,6 +28,8 @@ | |||
28 | #include "query.h" | 28 | #include "query.h" |
29 | #include "resourceconfig.h" | 29 | #include "resourceconfig.h" |
30 | 30 | ||
31 | SINK_DEBUG_AREA("test") | ||
32 | |||
31 | using namespace Sink; | 33 | using namespace Sink; |
32 | 34 | ||
33 | void Sink::Test::initTest() | 35 | void Sink::Test::initTest() |
@@ -103,7 +105,7 @@ public: | |||
103 | { | 105 | { |
104 | auto resultProvider = new Sink::ResultProvider<typename T::Ptr>(); | 106 | auto resultProvider = new Sink::ResultProvider<typename T::Ptr>(); |
105 | resultProvider->onDone([resultProvider]() { | 107 | resultProvider->onDone([resultProvider]() { |
106 | Trace() << "Result provider is done"; | 108 | SinkTrace() << "Result provider is done"; |
107 | delete resultProvider; | 109 | delete resultProvider; |
108 | }); | 110 | }); |
109 | // We have to do it this way, otherwise we're not setting the fetcher right | 111 | // We have to do it this way, otherwise we're not setting the fetcher right |
@@ -111,11 +113,11 @@ public: | |||
111 | 113 | ||
112 | resultProvider->setFetcher([query, resultProvider, this](const typename T::Ptr &parent) { | 114 | resultProvider->setFetcher([query, resultProvider, this](const typename T::Ptr &parent) { |
113 | if (parent) { | 115 | if (parent) { |
114 | Trace() << "Running the fetcher " << parent->identifier(); | 116 | SinkTrace() << "Running the fetcher " << parent->identifier(); |
115 | } else { | 117 | } else { |
116 | Trace() << "Running the fetcher."; | 118 | SinkTrace() << "Running the fetcher."; |
117 | } | 119 | } |
118 | Trace() << "-------------------------."; | 120 | SinkTrace() << "-------------------------."; |
119 | for (const auto &res : mTestAccount->entities<T>()) { | 121 | for (const auto &res : mTestAccount->entities<T>()) { |
120 | qDebug() << "Parent filter " << query.propertyFilter.value("parent").value.toByteArray() << res->identifier() << res->getProperty("parent").toByteArray(); | 122 | qDebug() << "Parent filter " << query.propertyFilter.value("parent").value.toByteArray() << res->identifier() << res->getProperty("parent").toByteArray(); |
121 | auto parentProperty = res->getProperty("parent").toByteArray(); | 123 | auto parentProperty = res->getProperty("parent").toByteArray(); |
diff --git a/common/typeindex.cpp b/common/typeindex.cpp index 05bbf5c..78195d3 100644 --- a/common/typeindex.cpp +++ b/common/typeindex.cpp | |||
@@ -22,8 +22,7 @@ | |||
22 | #include "index.h" | 22 | #include "index.h" |
23 | #include <QDateTime> | 23 | #include <QDateTime> |
24 | 24 | ||
25 | #undef DEBUG_AREA | 25 | SINK_DEBUG_AREA("typeindex") |
26 | #define DEBUG_AREA "common.typeindex" | ||
27 | 26 | ||
28 | static QByteArray getByteArray(const QVariant &value) | 27 | static QByteArray getByteArray(const QVariant &value) |
29 | { | 28 | { |
@@ -63,7 +62,7 @@ template <> | |||
63 | void TypeIndex::addProperty<QByteArray>(const QByteArray &property) | 62 | void TypeIndex::addProperty<QByteArray>(const QByteArray &property) |
64 | { | 63 | { |
65 | auto indexer = [this, property](const QByteArray &identifier, const QVariant &value, Sink::Storage::Transaction &transaction) { | 64 | auto indexer = [this, property](const QByteArray &identifier, const QVariant &value, Sink::Storage::Transaction &transaction) { |
66 | // Trace() << "Indexing " << mType + ".index." + property << value.toByteArray(); | 65 | // SinkTrace() << "Indexing " << mType + ".index." + property << value.toByteArray(); |
67 | Index(indexName(property), transaction).add(getByteArray(value), identifier); | 66 | Index(indexName(property), transaction).add(getByteArray(value), identifier); |
68 | }; | 67 | }; |
69 | mIndexer.insert(property, indexer); | 68 | mIndexer.insert(property, indexer); |
@@ -74,7 +73,7 @@ template <> | |||
74 | void TypeIndex::addProperty<QString>(const QByteArray &property) | 73 | void TypeIndex::addProperty<QString>(const QByteArray &property) |
75 | { | 74 | { |
76 | auto indexer = [this, property](const QByteArray &identifier, const QVariant &value, Sink::Storage::Transaction &transaction) { | 75 | auto indexer = [this, property](const QByteArray &identifier, const QVariant &value, Sink::Storage::Transaction &transaction) { |
77 | // Trace() << "Indexing " << mType + ".index." + property << value.toByteArray(); | 76 | // SinkTrace() << "Indexing " << mType + ".index." + property << value.toByteArray(); |
78 | Index(indexName(property), transaction).add(getByteArray(value), identifier); | 77 | Index(indexName(property), transaction).add(getByteArray(value), identifier); |
79 | }; | 78 | }; |
80 | mIndexer.insert(property, indexer); | 79 | mIndexer.insert(property, indexer); |
@@ -85,7 +84,7 @@ template <> | |||
85 | void TypeIndex::addProperty<QDateTime>(const QByteArray &property) | 84 | void TypeIndex::addProperty<QDateTime>(const QByteArray &property) |
86 | { | 85 | { |
87 | auto indexer = [this, property](const QByteArray &identifier, const QVariant &value, Sink::Storage::Transaction &transaction) { | 86 | auto indexer = [this, property](const QByteArray &identifier, const QVariant &value, Sink::Storage::Transaction &transaction) { |
88 | // Trace() << "Indexing " << mType + ".index." + property << date.toString(); | 87 | // SinkTrace() << "Indexing " << mType + ".index." + property << date.toString(); |
89 | Index(indexName(property), transaction).add(getByteArray(value), identifier); | 88 | Index(indexName(property), transaction).add(getByteArray(value), identifier); |
90 | }; | 89 | }; |
91 | mIndexer.insert(property, indexer); | 90 | mIndexer.insert(property, indexer); |
@@ -143,12 +142,12 @@ ResultSet TypeIndex::query(const Sink::Query &query, QSet<QByteArray> &appliedFi | |||
143 | if (query.propertyFilter.contains(it.key()) && query.sortProperty == it.value()) { | 142 | if (query.propertyFilter.contains(it.key()) && query.sortProperty == it.value()) { |
144 | Index index(indexName(it.key(), it.value()), transaction); | 143 | Index index(indexName(it.key(), it.value()), transaction); |
145 | const auto lookupKey = getByteArray(query.propertyFilter.value(it.key()).value); | 144 | const auto lookupKey = getByteArray(query.propertyFilter.value(it.key()).value); |
146 | Trace() << "looking for " << lookupKey; | 145 | SinkTrace() << "looking for " << lookupKey; |
147 | index.lookup(lookupKey, [&](const QByteArray &value) { keys << value; }, | 146 | index.lookup(lookupKey, [&](const QByteArray &value) { keys << value; }, |
148 | [it](const Index::Error &error) { Warning() << "Error in index: " << error.message << it.key() << it.value(); }, true); | 147 | [it](const Index::Error &error) { SinkWarning() << "Error in index: " << error.message << it.key() << it.value(); }, true); |
149 | appliedFilters << it.key(); | 148 | appliedFilters << it.key(); |
150 | appliedSorting = it.value(); | 149 | appliedSorting = it.value(); |
151 | Trace() << "Index lookup on " << it.key() << it.value() << " found " << keys.size() << " keys."; | 150 | SinkTrace() << "Index lookup on " << it.key() << it.value() << " found " << keys.size() << " keys."; |
152 | return ResultSet(keys); | 151 | return ResultSet(keys); |
153 | } | 152 | } |
154 | } | 153 | } |
@@ -157,12 +156,12 @@ ResultSet TypeIndex::query(const Sink::Query &query, QSet<QByteArray> &appliedFi | |||
157 | Index index(indexName(property), transaction); | 156 | Index index(indexName(property), transaction); |
158 | const auto lookupKey = getByteArray(query.propertyFilter.value(property).value); | 157 | const auto lookupKey = getByteArray(query.propertyFilter.value(property).value); |
159 | index.lookup( | 158 | index.lookup( |
160 | lookupKey, [&](const QByteArray &value) { keys << value; }, [property](const Index::Error &error) { Warning() << "Error in index: " << error.message << property; }); | 159 | lookupKey, [&](const QByteArray &value) { keys << value; }, [property](const Index::Error &error) { SinkWarning() << "Error in index: " << error.message << property; }); |
161 | appliedFilters << property; | 160 | appliedFilters << property; |
162 | Trace() << "Index lookup on " << property << " found " << keys.size() << " keys."; | 161 | SinkTrace() << "Index lookup on " << property << " found " << keys.size() << " keys."; |
163 | return ResultSet(keys); | 162 | return ResultSet(keys); |
164 | } | 163 | } |
165 | } | 164 | } |
166 | Trace() << "No matching index"; | 165 | SinkTrace() << "No matching index"; |
167 | return ResultSet(keys); | 166 | return ResultSet(keys); |
168 | } | 167 | } |
diff --git a/examples/dummyresource/resourcefactory.cpp b/examples/dummyresource/resourcefactory.cpp index 21a76ad..0f7463f 100644 --- a/examples/dummyresource/resourcefactory.cpp +++ b/examples/dummyresource/resourcefactory.cpp | |||
@@ -48,6 +48,8 @@ | |||
48 | #define ENTITY_TYPE_MAIL "mail" | 48 | #define ENTITY_TYPE_MAIL "mail" |
49 | #define ENTITY_TYPE_FOLDER "folder" | 49 | #define ENTITY_TYPE_FOLDER "folder" |
50 | 50 | ||
51 | SINK_DEBUG_AREA("dummyresource") | ||
52 | |||
51 | class DummySynchronizer : public Sink::Synchronizer { | 53 | class DummySynchronizer : public Sink::Synchronizer { |
52 | public: | 54 | public: |
53 | 55 | ||
@@ -105,12 +107,12 @@ class DummySynchronizer : public Sink::Synchronizer { | |||
105 | auto entity = createEntity(remoteId, it.value()); | 107 | auto entity = createEntity(remoteId, it.value()); |
106 | createOrModify(bufferType, remoteId, *entity); | 108 | createOrModify(bufferType, remoteId, *entity); |
107 | } | 109 | } |
108 | Trace() << "Sync of " << count << " entities of type " << bufferType << " done." << Sink::Log::TraceTime(time->elapsed()); | 110 | SinkTrace() << "Sync of " << count << " entities of type " << bufferType << " done." << Sink::Log::TraceTime(time->elapsed()); |
109 | } | 111 | } |
110 | 112 | ||
111 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE | 113 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE |
112 | { | 114 | { |
113 | Log() << " Synchronizing with the source"; | 115 | SinkLog() << " Synchronizing with the source"; |
114 | return KAsync::start<void>([this]() { | 116 | return KAsync::start<void>([this]() { |
115 | synchronize(ENTITY_TYPE_EVENT, DummyStore::instance().events(), [this](const QByteArray &ridBuffer, const QMap<QString, QVariant> &data) { | 117 | synchronize(ENTITY_TYPE_EVENT, DummyStore::instance().events(), [this](const QByteArray &ridBuffer, const QMap<QString, QVariant> &data) { |
116 | return createEvent(ridBuffer, data); | 118 | return createEvent(ridBuffer, data); |
@@ -121,7 +123,7 @@ class DummySynchronizer : public Sink::Synchronizer { | |||
121 | synchronize(ENTITY_TYPE_FOLDER, DummyStore::instance().folders(), [this](const QByteArray &ridBuffer, const QMap<QString, QVariant> &data) { | 123 | synchronize(ENTITY_TYPE_FOLDER, DummyStore::instance().folders(), [this](const QByteArray &ridBuffer, const QMap<QString, QVariant> &data) { |
122 | return createFolder(ridBuffer, data); | 124 | return createFolder(ridBuffer, data); |
123 | }); | 125 | }); |
124 | Log() << "Done Synchronizing"; | 126 | SinkLog() << "Done Synchronizing"; |
125 | }); | 127 | }); |
126 | } | 128 | } |
127 | 129 | ||
@@ -147,7 +149,7 @@ DummyResource::~DummyResource() | |||
147 | 149 | ||
148 | KAsync::Job<void> DummyResource::synchronizeWithSource() | 150 | KAsync::Job<void> DummyResource::synchronizeWithSource() |
149 | { | 151 | { |
150 | Trace() << "Synchronize with source and sending a notification about it"; | 152 | SinkTrace() << "Synchronize with source and sending a notification about it"; |
151 | Sink::Notification n; | 153 | Sink::Notification n; |
152 | n.id = "connected"; | 154 | n.id = "connected"; |
153 | n.type = Sink::Notification::Status; | 155 | n.type = Sink::Notification::Status; |
@@ -160,7 +162,7 @@ KAsync::Job<void> DummyResource::synchronizeWithSource() | |||
160 | KAsync::Job<void> DummyResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) | 162 | KAsync::Job<void> DummyResource::inspect(int inspectionType, const QByteArray &inspectionId, const QByteArray &domainType, const QByteArray &entityId, const QByteArray &property, const QVariant &expectedValue) |
161 | { | 163 | { |
162 | 164 | ||
163 | Trace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; | 165 | SinkTrace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; |
164 | if (property == "testInspection") { | 166 | if (property == "testInspection") { |
165 | if (expectedValue.toBool()) { | 167 | if (expectedValue.toBool()) { |
166 | //Success | 168 | //Success |
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index e23add8..92f64bf 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp | |||
@@ -54,8 +54,7 @@ | |||
54 | #define ENTITY_TYPE_MAIL "mail" | 54 | #define ENTITY_TYPE_MAIL "mail" |
55 | #define ENTITY_TYPE_FOLDER "folder" | 55 | #define ENTITY_TYPE_FOLDER "folder" |
56 | 56 | ||
57 | #undef DEBUG_AREA | 57 | SINK_DEBUG_AREA("imapresource") |
58 | #define DEBUG_AREA "resource.imap" | ||
59 | 58 | ||
60 | using namespace Imap; | 59 | using namespace Imap; |
61 | using namespace Sink; | 60 | using namespace Sink; |
@@ -95,7 +94,7 @@ public: | |||
95 | 94 | ||
96 | QByteArray createFolder(const QString &folderName, const QString &folderPath, const QString &parentFolderRid, const QByteArray &icon) | 95 | QByteArray createFolder(const QString &folderName, const QString &folderPath, const QString &parentFolderRid, const QByteArray &icon) |
97 | { | 96 | { |
98 | Trace() << "Creating folder: " << folderName << parentFolderRid; | 97 | SinkTrace() << "Creating folder: " << folderName << parentFolderRid; |
99 | const auto remoteId = folderPath.toUtf8(); | 98 | const auto remoteId = folderPath.toUtf8(); |
100 | const auto bufferType = ENTITY_TYPE_FOLDER; | 99 | const auto bufferType = ENTITY_TYPE_FOLDER; |
101 | Sink::ApplicationDomain::Folder folder; | 100 | Sink::ApplicationDomain::Folder folder; |
@@ -118,7 +117,7 @@ public: | |||
118 | void synchronizeFolders(const QVector<Folder> &folderList) | 117 | void synchronizeFolders(const QVector<Folder> &folderList) |
119 | { | 118 | { |
120 | const QByteArray bufferType = ENTITY_TYPE_FOLDER; | 119 | const QByteArray bufferType = ENTITY_TYPE_FOLDER; |
121 | Trace() << "Found folders " << folderList.size(); | 120 | SinkTrace() << "Found folders " << folderList.size(); |
122 | 121 | ||
123 | scanForRemovals(bufferType, | 122 | scanForRemovals(bufferType, |
124 | [this, &bufferType](const std::function<void(const QByteArray &)> &callback) { | 123 | [this, &bufferType](const std::function<void(const QByteArray &)> &callback) { |
@@ -154,7 +153,7 @@ public: | |||
154 | time->start(); | 153 | time->start(); |
155 | const QByteArray bufferType = ENTITY_TYPE_MAIL; | 154 | const QByteArray bufferType = ENTITY_TYPE_MAIL; |
156 | 155 | ||
157 | Trace() << "Importing new mail." << path; | 156 | SinkTrace() << "Importing new mail." << path; |
158 | 157 | ||
159 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); | 158 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); |
160 | 159 | ||
@@ -163,7 +162,7 @@ public: | |||
163 | count++; | 162 | count++; |
164 | const auto remoteId = assembleMailRid(folderLocalId, message.uid); | 163 | const auto remoteId = assembleMailRid(folderLocalId, message.uid); |
165 | 164 | ||
166 | Trace() << "Found a mail " << remoteId << message.msg->subject(true)->asUnicodeString() << message.flags; | 165 | SinkTrace() << "Found a mail " << remoteId << message.msg->subject(true)->asUnicodeString() << message.flags; |
167 | 166 | ||
168 | auto mail = Sink::ApplicationDomain::Mail::create(mResourceInstanceIdentifier); | 167 | auto mail = Sink::ApplicationDomain::Mail::create(mResourceInstanceIdentifier); |
169 | mail.setFolder(folderLocalId); | 168 | mail.setFolder(folderLocalId); |
@@ -174,7 +173,7 @@ public: | |||
174 | createOrModify(bufferType, remoteId, mail); | 173 | createOrModify(bufferType, remoteId, mail); |
175 | } | 174 | } |
176 | const auto elapsed = time->elapsed(); | 175 | const auto elapsed = time->elapsed(); |
177 | Log() << "Synchronized " << count << " mails in " << path << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; | 176 | SinkLog() << "Synchronized " << count << " mails in " << path << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; |
178 | } | 177 | } |
179 | 178 | ||
180 | void synchronizeRemovals(const QString &path, const QSet<qint64> &messages) | 179 | void synchronizeRemovals(const QString &path, const QSet<qint64> &messages) |
@@ -183,7 +182,7 @@ public: | |||
183 | time->start(); | 182 | time->start(); |
184 | const QByteArray bufferType = ENTITY_TYPE_MAIL; | 183 | const QByteArray bufferType = ENTITY_TYPE_MAIL; |
185 | 184 | ||
186 | Trace() << "Finding removed mail."; | 185 | SinkTrace() << "Finding removed mail."; |
187 | 186 | ||
188 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); | 187 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); |
189 | 188 | ||
@@ -196,7 +195,7 @@ public: | |||
196 | callback(sinkId); | 195 | callback(sinkId); |
197 | }, | 196 | }, |
198 | [&](const Index::Error &error) { | 197 | [&](const Index::Error &error) { |
199 | Warning() << "Error in index: " << error.message << property; | 198 | SinkWarning() << "Error in index: " << error.message << property; |
200 | }); | 199 | }); |
201 | }, | 200 | }, |
202 | [messages, path, &count](const QByteArray &remoteId) -> bool { | 201 | [messages, path, &count](const QByteArray &remoteId) -> bool { |
@@ -209,24 +208,24 @@ public: | |||
209 | ); | 208 | ); |
210 | 209 | ||
211 | const auto elapsed = time->elapsed(); | 210 | const auto elapsed = time->elapsed(); |
212 | Log() << "Removed " << count << " mails in " << path << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; | 211 | SinkLog() << "Removed " << count << " mails in " << path << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; |
213 | } | 212 | } |
214 | 213 | ||
215 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE | 214 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE |
216 | { | 215 | { |
217 | Log() << " Synchronizing"; | 216 | SinkLog() << " Synchronizing"; |
218 | return KAsync::start<void>([this](KAsync::Future<void> future) { | 217 | return KAsync::start<void>([this](KAsync::Future<void> future) { |
219 | Trace() << "Connecting to:" << mServer << mPort; | 218 | SinkTrace() << "Connecting to:" << mServer << mPort; |
220 | Trace() << "as:" << mUser; | 219 | SinkTrace() << "as:" << mUser; |
221 | ImapServerProxy imap(mServer, mPort); | 220 | ImapServerProxy imap(mServer, mPort); |
222 | auto loginFuture = imap.login(mUser, mPassword).exec(); | 221 | auto loginFuture = imap.login(mUser, mPassword).exec(); |
223 | loginFuture.waitForFinished(); | 222 | loginFuture.waitForFinished(); |
224 | if (loginFuture.errorCode()) { | 223 | if (loginFuture.errorCode()) { |
225 | Warning() << "Login failed."; | 224 | SinkWarning() << "Login failed."; |
226 | future.setError(1, "Login failed"); | 225 | future.setError(1, "Login failed"); |
227 | return; | 226 | return; |
228 | } else { | 227 | } else { |
229 | Trace() << "Login was successful"; | 228 | SinkTrace() << "Login was successful"; |
230 | } | 229 | } |
231 | 230 | ||
232 | QVector<Folder> folderList; | 231 | QVector<Folder> folderList; |
@@ -238,11 +237,11 @@ public: | |||
238 | }).exec(); | 237 | }).exec(); |
239 | folderFuture.waitForFinished(); | 238 | folderFuture.waitForFinished(); |
240 | if (folderFuture.errorCode()) { | 239 | if (folderFuture.errorCode()) { |
241 | Warning() << "Folder sync failed."; | 240 | SinkWarning() << "Folder sync failed."; |
242 | future.setError(1, "Folder list sync failed"); | 241 | future.setError(1, "Folder list sync failed"); |
243 | return; | 242 | return; |
244 | } else { | 243 | } else { |
245 | Trace() << "Folder sync was successful"; | 244 | SinkTrace() << "Folder sync was successful"; |
246 | } | 245 | } |
247 | 246 | ||
248 | for (const auto &folder : folderList) { | 247 | for (const auto &folder : folderList) { |
@@ -251,7 +250,7 @@ public: | |||
251 | } | 250 | } |
252 | QSet<qint64> uids; | 251 | QSet<qint64> uids; |
253 | auto messagesFuture = imap.fetchMessages(folder, [this, folder, &uids](const QVector<Message> &messages) { | 252 | auto messagesFuture = imap.fetchMessages(folder, [this, folder, &uids](const QVector<Message> &messages) { |
254 | Trace() << "Synchronizing mails" << folder.normalizedPath(); | 253 | SinkTrace() << "Synchronizing mails" << folder.normalizedPath(); |
255 | for (const auto &msg : messages) { | 254 | for (const auto &msg : messages) { |
256 | uids << msg.uid; | 255 | uids << msg.uid; |
257 | } | 256 | } |
@@ -260,16 +259,16 @@ public: | |||
260 | messagesFuture.waitForFinished(); | 259 | messagesFuture.waitForFinished(); |
261 | commit(); | 260 | commit(); |
262 | if (messagesFuture.errorCode()) { | 261 | if (messagesFuture.errorCode()) { |
263 | Warning() << "Folder sync failed: " << folder.normalizedPath(); | 262 | SinkWarning() << "Folder sync failed: " << folder.normalizedPath(); |
264 | continue; | 263 | continue; |
265 | } | 264 | } |
266 | //Remove what there is to remove | 265 | //Remove what there is to remove |
267 | synchronizeRemovals(folder.normalizedPath(), uids); | 266 | synchronizeRemovals(folder.normalizedPath(), uids); |
268 | commit(); | 267 | commit(); |
269 | Trace() << "Folder synchronized: " << folder.normalizedPath(); | 268 | SinkTrace() << "Folder synchronized: " << folder.normalizedPath(); |
270 | } | 269 | } |
271 | 270 | ||
272 | Log() << "Done Synchronizing"; | 271 | SinkLog() << "Done Synchronizing"; |
273 | future.setFinished(); | 272 | future.setFinished(); |
274 | }); | 273 | }); |
275 | } | 274 | } |
@@ -310,7 +309,7 @@ public: | |||
310 | .then<void, qint64>([imap, mailbox, rid, mail](qint64 uid) { | 309 | .then<void, qint64>([imap, mailbox, rid, mail](qint64 uid) { |
311 | const auto remoteId = assembleMailRid(mail, uid); | 310 | const auto remoteId = assembleMailRid(mail, uid); |
312 | //FIXME this get's called after the final error handler? WTF? | 311 | //FIXME this get's called after the final error handler? WTF? |
313 | Trace() << "Finished creating a new mail: " << remoteId; | 312 | SinkTrace() << "Finished creating a new mail: " << remoteId; |
314 | *rid = remoteId; | 313 | *rid = remoteId; |
315 | }).then<QByteArray>([rid, imap]() { //FIXME fix KJob so we don't need this extra clause | 314 | }).then<QByteArray>([rid, imap]() { //FIXME fix KJob so we don't need this extra clause |
316 | return *rid; | 315 | return *rid; |
@@ -319,19 +318,19 @@ public: | |||
319 | const auto folderId = folderIdFromMailRid(oldRemoteId); | 318 | const auto folderId = folderIdFromMailRid(oldRemoteId); |
320 | const QString mailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, folderId); | 319 | const QString mailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, folderId); |
321 | const auto uid = uidFromMailRid(oldRemoteId); | 320 | const auto uid = uidFromMailRid(oldRemoteId); |
322 | Trace() << "Removing a mail: " << oldRemoteId << "in the mailbox: " << mailbox; | 321 | SinkTrace() << "Removing a mail: " << oldRemoteId << "in the mailbox: " << mailbox; |
323 | KIMAP::ImapSet set; | 322 | KIMAP::ImapSet set; |
324 | set.add(uid); | 323 | set.add(uid); |
325 | return login.then(imap->remove(mailbox, set)) | 324 | return login.then(imap->remove(mailbox, set)) |
326 | .then<QByteArray>([imap, oldRemoteId]() { | 325 | .then<QByteArray>([imap, oldRemoteId]() { |
327 | Trace() << "Finished removing a mail: " << oldRemoteId; | 326 | SinkTrace() << "Finished removing a mail: " << oldRemoteId; |
328 | return QByteArray(); | 327 | return QByteArray(); |
329 | }); | 328 | }); |
330 | } else if (operation == Sink::Operation_Modification) { | 329 | } else if (operation == Sink::Operation_Modification) { |
331 | const QString mailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, mail.getFolder()); | 330 | const QString mailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, mail.getFolder()); |
332 | const auto uid = uidFromMailRid(oldRemoteId); | 331 | const auto uid = uidFromMailRid(oldRemoteId); |
333 | 332 | ||
334 | Trace() << "Modifying a mail: " << oldRemoteId << " in the mailbox: " << mailbox << changedProperties; | 333 | SinkTrace() << "Modifying a mail: " << oldRemoteId << " in the mailbox: " << mailbox << changedProperties; |
335 | 334 | ||
336 | QByteArrayList flags; | 335 | QByteArrayList flags; |
337 | if (!mail.getUnread()) { | 336 | if (!mail.getUnread()) { |
@@ -344,7 +343,7 @@ public: | |||
344 | const bool messageMoved = changedProperties.contains(ApplicationDomain::Mail::Folder::name); | 343 | const bool messageMoved = changedProperties.contains(ApplicationDomain::Mail::Folder::name); |
345 | const bool messageChanged = changedProperties.contains(ApplicationDomain::Mail::MimeMessage::name); | 344 | const bool messageChanged = changedProperties.contains(ApplicationDomain::Mail::MimeMessage::name); |
346 | if (messageChanged || messageMoved) { | 345 | if (messageChanged || messageMoved) { |
347 | Trace() << "Replacing message."; | 346 | SinkTrace() << "Replacing message."; |
348 | const auto folderId = folderIdFromMailRid(oldRemoteId); | 347 | const auto folderId = folderIdFromMailRid(oldRemoteId); |
349 | const QString oldMailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, folderId); | 348 | const QString oldMailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, folderId); |
350 | QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); | 349 | QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); |
@@ -355,7 +354,7 @@ public: | |||
355 | return login.then(imap->append(mailbox, content, flags, internalDate)) | 354 | return login.then(imap->append(mailbox, content, flags, internalDate)) |
356 | .then<void, qint64>([imap, mailbox, rid, mail](qint64 uid) { | 355 | .then<void, qint64>([imap, mailbox, rid, mail](qint64 uid) { |
357 | const auto remoteId = assembleMailRid(mail, uid); | 356 | const auto remoteId = assembleMailRid(mail, uid); |
358 | Trace() << "Finished creating a modified mail: " << remoteId; | 357 | SinkTrace() << "Finished creating a modified mail: " << remoteId; |
359 | *rid = remoteId; | 358 | *rid = remoteId; |
360 | }) | 359 | }) |
361 | .then(imap->remove(oldMailbox, set)) | 360 | .then(imap->remove(oldMailbox, set)) |
@@ -363,13 +362,13 @@ public: | |||
363 | return *rid; | 362 | return *rid; |
364 | }); | 363 | }); |
365 | } else { | 364 | } else { |
366 | Trace() << "Updating flags only."; | 365 | SinkTrace() << "Updating flags only."; |
367 | KIMAP::ImapSet set; | 366 | KIMAP::ImapSet set; |
368 | set.add(uid); | 367 | set.add(uid); |
369 | return login.then(imap->select(mailbox)) | 368 | return login.then(imap->select(mailbox)) |
370 | .then(imap->storeFlags(set, flags)) | 369 | .then(imap->storeFlags(set, flags)) |
371 | .then<void>([imap, mailbox]() { | 370 | .then<void>([imap, mailbox]() { |
372 | Trace() << "Finished modifying mail"; | 371 | SinkTrace() << "Finished modifying mail"; |
373 | }) | 372 | }) |
374 | .then<QByteArray>([oldRemoteId, imap]() { | 373 | .then<QByteArray>([oldRemoteId, imap]() { |
375 | return oldRemoteId; | 374 | return oldRemoteId; |
@@ -388,11 +387,11 @@ public: | |||
388 | if (!folder.getParent().isEmpty()) { | 387 | if (!folder.getParent().isEmpty()) { |
389 | parentFolder = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, folder.getParent()); | 388 | parentFolder = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, folder.getParent()); |
390 | } | 389 | } |
391 | Trace() << "Creating a new folder: " << parentFolder << folder.getName(); | 390 | SinkTrace() << "Creating a new folder: " << parentFolder << folder.getName(); |
392 | auto rid = QSharedPointer<QByteArray>::create(); | 391 | auto rid = QSharedPointer<QByteArray>::create(); |
393 | auto createFolder = login.then<QString>(imap->createSubfolder(parentFolder, folder.getName())) | 392 | auto createFolder = login.then<QString>(imap->createSubfolder(parentFolder, folder.getName())) |
394 | .then<void, QString>([imap, rid](const QString &createdFolder) { | 393 | .then<void, QString>([imap, rid](const QString &createdFolder) { |
395 | Trace() << "Finished creating a new folder: " << createdFolder; | 394 | SinkTrace() << "Finished creating a new folder: " << createdFolder; |
396 | *rid = createdFolder.toUtf8(); | 395 | *rid = createdFolder.toUtf8(); |
397 | }); | 396 | }); |
398 | if (folder.getSpecialPurpose().isEmpty()) { | 397 | if (folder.getSpecialPurpose().isEmpty()) { |
@@ -414,15 +413,15 @@ public: | |||
414 | for (const auto &purpose : folder.getSpecialPurpose()) { | 413 | for (const auto &purpose : folder.getSpecialPurpose()) { |
415 | if (specialPurposeFolders->contains(purpose)) { | 414 | if (specialPurposeFolders->contains(purpose)) { |
416 | auto f = specialPurposeFolders->value(purpose); | 415 | auto f = specialPurposeFolders->value(purpose); |
417 | Trace() << "Merging specialpurpose folder with: " << f << " with purpose: " << purpose; | 416 | SinkTrace() << "Merging specialpurpose folder with: " << f << " with purpose: " << purpose; |
418 | *rid = f.toUtf8(); | 417 | *rid = f.toUtf8(); |
419 | return KAsync::null<void>(); | 418 | return KAsync::null<void>(); |
420 | } | 419 | } |
421 | } | 420 | } |
422 | Trace() << "No match found for merging, creating a new folder"; | 421 | SinkTrace() << "No match found for merging, creating a new folder"; |
423 | return imap->createSubfolder(parentFolder, folder.getName()) | 422 | return imap->createSubfolder(parentFolder, folder.getName()) |
424 | .then<void, QString>([imap, rid](const QString &createdFolder) { | 423 | .then<void, QString>([imap, rid](const QString &createdFolder) { |
425 | Trace() << "Finished creating a new folder: " << createdFolder; | 424 | SinkTrace() << "Finished creating a new folder: " << createdFolder; |
426 | *rid = createdFolder.toUtf8(); | 425 | *rid = createdFolder.toUtf8(); |
427 | }); | 426 | }); |
428 | 427 | ||
@@ -433,18 +432,18 @@ public: | |||
433 | return mergeJob; | 432 | return mergeJob; |
434 | } | 433 | } |
435 | } else if (operation == Sink::Operation_Removal) { | 434 | } else if (operation == Sink::Operation_Removal) { |
436 | Trace() << "Removing a folder: " << oldRemoteId; | 435 | SinkTrace() << "Removing a folder: " << oldRemoteId; |
437 | return login.then<void>(imap->remove(oldRemoteId)) | 436 | return login.then<void>(imap->remove(oldRemoteId)) |
438 | .then<QByteArray>([oldRemoteId, imap]() { | 437 | .then<QByteArray>([oldRemoteId, imap]() { |
439 | Trace() << "Finished removing a folder: " << oldRemoteId; | 438 | SinkTrace() << "Finished removing a folder: " << oldRemoteId; |
440 | return QByteArray(); | 439 | return QByteArray(); |
441 | }); | 440 | }); |
442 | } else if (operation == Sink::Operation_Modification) { | 441 | } else if (operation == Sink::Operation_Modification) { |
443 | Trace() << "Renaming a folder: " << oldRemoteId << folder.getName(); | 442 | SinkTrace() << "Renaming a folder: " << oldRemoteId << folder.getName(); |
444 | auto rid = QSharedPointer<QByteArray>::create(); | 443 | auto rid = QSharedPointer<QByteArray>::create(); |
445 | return login.then<QString>(imap->renameSubfolder(oldRemoteId, folder.getName())) | 444 | return login.then<QString>(imap->renameSubfolder(oldRemoteId, folder.getName())) |
446 | .then<void, QString>([imap, rid](const QString &createdFolder) { | 445 | .then<void, QString>([imap, rid](const QString &createdFolder) { |
447 | Trace() << "Finished renaming a folder: " << createdFolder; | 446 | SinkTrace() << "Finished renaming a folder: " << createdFolder; |
448 | *rid = createdFolder.toUtf8(); | 447 | *rid = createdFolder.toUtf8(); |
449 | }) | 448 | }) |
450 | .then<QByteArray>([rid](){ | 449 | .then<QByteArray>([rid](){ |
@@ -515,7 +514,7 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
515 | auto entityStore = QSharedPointer<Sink::EntityStore>::create(mResourceType, mResourceInstanceIdentifier, transaction); | 514 | auto entityStore = QSharedPointer<Sink::EntityStore>::create(mResourceType, mResourceInstanceIdentifier, transaction); |
516 | auto syncStore = QSharedPointer<Sink::RemoteIdMap>::create(synchronizationTransaction); | 515 | auto syncStore = QSharedPointer<Sink::RemoteIdMap>::create(synchronizationTransaction); |
517 | 516 | ||
518 | Trace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; | 517 | SinkTrace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; |
519 | 518 | ||
520 | if (domainType == ENTITY_TYPE_MAIL) { | 519 | if (domainType == ENTITY_TYPE_MAIL) { |
521 | const auto mail = entityStore->read<Sink::ApplicationDomain::Mail>(entityId); | 520 | const auto mail = entityStore->read<Sink::ApplicationDomain::Mail>(entityId); |
@@ -523,11 +522,11 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
523 | const auto folderRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, mail.getFolder()); | 522 | const auto folderRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_FOLDER, mail.getFolder()); |
524 | const auto mailRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_MAIL, mail.identifier()); | 523 | const auto mailRemoteId = syncStore->resolveLocalId(ENTITY_TYPE_MAIL, mail.identifier()); |
525 | if (mailRemoteId.isEmpty() || folderRemoteId.isEmpty()) { | 524 | if (mailRemoteId.isEmpty() || folderRemoteId.isEmpty()) { |
526 | Warning() << "Missing remote id for folder or mail. " << mailRemoteId << folderRemoteId; | 525 | SinkWarning() << "Missing remote id for folder or mail. " << mailRemoteId << folderRemoteId; |
527 | return KAsync::error<void>(); | 526 | return KAsync::error<void>(); |
528 | } | 527 | } |
529 | const auto uid = uidFromMailRid(mailRemoteId); | 528 | const auto uid = uidFromMailRid(mailRemoteId); |
530 | Trace() << "Mail remote id: " << folderRemoteId << mailRemoteId << mail.identifier() << folder.identifier(); | 529 | SinkTrace() << "Mail remote id: " << folderRemoteId << mailRemoteId << mail.identifier() << folder.identifier(); |
531 | 530 | ||
532 | KIMAP::ImapSet set; | 531 | KIMAP::ImapSet set; |
533 | set.add(uid); | 532 | set.add(uid); |
@@ -538,8 +537,8 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
538 | scope.mode = KIMAP::FetchJob::FetchScope::Full; | 537 | scope.mode = KIMAP::FetchJob::FetchScope::Full; |
539 | auto imap = QSharedPointer<ImapServerProxy>::create(mServer, mPort); | 538 | auto imap = QSharedPointer<ImapServerProxy>::create(mServer, mPort); |
540 | auto messageByUid = QSharedPointer<QHash<qint64, Imap::Message>>::create(); | 539 | auto messageByUid = QSharedPointer<QHash<qint64, Imap::Message>>::create(); |
541 | Trace() << "Connecting to:" << mServer << mPort; | 540 | SinkTrace() << "Connecting to:" << mServer << mPort; |
542 | Trace() << "as:" << mUser; | 541 | SinkTrace() << "as:" << mUser; |
543 | auto inspectionJob = imap->login(mUser, mPassword) | 542 | auto inspectionJob = imap->login(mUser, mPassword) |
544 | .then<void>(imap->select(folderRemoteId)) | 543 | .then<void>(imap->select(folderRemoteId)) |
545 | .then<void>(imap->fetch(set, scope, [imap, messageByUid](const QVector<Imap::Message> &messages) { | 544 | .then<void>(imap->fetch(set, scope, [imap, messageByUid](const QVector<Imap::Message> &messages) { |
@@ -574,8 +573,8 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
574 | if (inspectionType == Sink::ResourceControl::Inspection::ExistenceInspectionType) { | 573 | if (inspectionType == Sink::ResourceControl::Inspection::ExistenceInspectionType) { |
575 | return inspectionJob.then<void, KAsync::Job<void>>([=]() { | 574 | return inspectionJob.then<void, KAsync::Job<void>>([=]() { |
576 | if (!messageByUid->contains(uid)) { | 575 | if (!messageByUid->contains(uid)) { |
577 | Warning() << "Existing messages are: " << messageByUid->keys(); | 576 | SinkWarning() << "Existing messages are: " << messageByUid->keys(); |
578 | Warning() << "We're looking for: " << uid; | 577 | SinkWarning() << "We're looking for: " << uid; |
579 | return KAsync::error<void>(1, "Couldn't find message: " + mailRemoteId); | 578 | return KAsync::error<void>(1, "Couldn't find message: " + mailRemoteId); |
580 | } | 579 | } |
581 | return KAsync::null<void>(); | 580 | return KAsync::null<void>(); |
@@ -587,7 +586,7 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
587 | const auto folder = entityStore->read<Sink::ApplicationDomain::Folder>(entityId); | 586 | const auto folder = entityStore->read<Sink::ApplicationDomain::Folder>(entityId); |
588 | 587 | ||
589 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { | 588 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { |
590 | Log() << "Inspecting cache integrity" << remoteId; | 589 | SinkLog() << "Inspecting cache integrity" << remoteId; |
591 | 590 | ||
592 | int expectedCount = 0; | 591 | int expectedCount = 0; |
593 | Index index("mail.index.folder", transaction); | 592 | Index index("mail.index.folder", transaction); |
@@ -595,7 +594,7 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
595 | expectedCount++; | 594 | expectedCount++; |
596 | }, | 595 | }, |
597 | [&](const Index::Error &error) { | 596 | [&](const Index::Error &error) { |
598 | Warning() << "Error in index: " << error.message << property; | 597 | SinkWarning() << "Error in index: " << error.message << property; |
599 | }); | 598 | }); |
600 | 599 | ||
601 | auto set = KIMAP::ImapSet::fromImapSequenceSet("1:*"); | 600 | auto set = KIMAP::ImapSet::fromImapSequenceSet("1:*"); |
@@ -630,10 +629,10 @@ KAsync::Job<void> ImapResource::inspect(int inspectionType, const QByteArray &in | |||
630 | *folderByName << f.pathParts.last(); | 629 | *folderByName << f.pathParts.last(); |
631 | } | 630 | } |
632 | })) | 631 | })) |
633 | .then<void, KAsync::Job<void>>([folderByName, folderByPath, folder, remoteId, imap]() { | 632 | .then<void, KAsync::Job<void>>([this, folderByName, folderByPath, folder, remoteId, imap]() { |
634 | if (!folderByName->contains(folder.getName())) { | 633 | if (!folderByName->contains(folder.getName())) { |
635 | Warning() << "Existing folders are: " << *folderByPath; | 634 | SinkWarning() << "Existing folders are: " << *folderByPath; |
636 | Warning() << "We're looking for: " << folder.getName(); | 635 | SinkWarning() << "We're looking for: " << folder.getName(); |
637 | return KAsync::error<void>(1, "Wrong folder name: " + remoteId); | 636 | return KAsync::error<void>(1, "Wrong folder name: " + remoteId); |
638 | } | 637 | } |
639 | return KAsync::null<void>(); | 638 | return KAsync::null<void>(); |
diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index 1b0a2ec..73ec654 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp | |||
@@ -37,6 +37,8 @@ | |||
37 | 37 | ||
38 | #include "log.h" | 38 | #include "log.h" |
39 | 39 | ||
40 | SINK_DEBUG_AREA("imapserverproxy") | ||
41 | |||
40 | using namespace Imap; | 42 | using namespace Imap; |
41 | 43 | ||
42 | const char* Imap::Flags::Seen = "\\Seen"; | 44 | const char* Imap::Flags::Seen = "\\Seen"; |
@@ -54,16 +56,16 @@ static KAsync::Job<T> runJob(KJob *job, const std::function<T(KJob*)> &f) | |||
54 | { | 56 | { |
55 | return KAsync::start<T>([job, f](KAsync::Future<T> &future) { | 57 | return KAsync::start<T>([job, f](KAsync::Future<T> &future) { |
56 | QObject::connect(job, &KJob::result, [&future, f](KJob *job) { | 58 | QObject::connect(job, &KJob::result, [&future, f](KJob *job) { |
57 | Trace() << "Job done: " << job->metaObject()->className(); | 59 | SinkTrace() << "Job done: " << job->metaObject()->className(); |
58 | if (job->error()) { | 60 | if (job->error()) { |
59 | Warning() << "Job failed: " << job->errorString(); | 61 | SinkWarning() << "Job failed: " << job->errorString(); |
60 | future.setError(job->error(), job->errorString()); | 62 | future.setError(job->error(), job->errorString()); |
61 | } else { | 63 | } else { |
62 | future.setValue(f(job)); | 64 | future.setValue(f(job)); |
63 | future.setFinished(); | 65 | future.setFinished(); |
64 | } | 66 | } |
65 | }); | 67 | }); |
66 | Trace() << "Starting job: " << job->metaObject()->className(); | 68 | SinkTrace() << "Starting job: " << job->metaObject()->className(); |
67 | job->start(); | 69 | job->start(); |
68 | }); | 70 | }); |
69 | } | 71 | } |
@@ -72,15 +74,15 @@ static KAsync::Job<void> runJob(KJob *job) | |||
72 | { | 74 | { |
73 | return KAsync::start<void>([job](KAsync::Future<void> &future) { | 75 | return KAsync::start<void>([job](KAsync::Future<void> &future) { |
74 | QObject::connect(job, &KJob::result, [&future](KJob *job) { | 76 | QObject::connect(job, &KJob::result, [&future](KJob *job) { |
75 | Trace() << "Job done: " << job->metaObject()->className(); | 77 | SinkTrace() << "Job done: " << job->metaObject()->className(); |
76 | if (job->error()) { | 78 | if (job->error()) { |
77 | Warning() << "Job failed: " << job->errorString(); | 79 | SinkWarning() << "Job failed: " << job->errorString(); |
78 | future.setError(job->error(), job->errorString()); | 80 | future.setError(job->error(), job->errorString()); |
79 | } else { | 81 | } else { |
80 | future.setFinished(); | 82 | future.setFinished(); |
81 | } | 83 | } |
82 | }); | 84 | }); |
83 | Trace() << "Starting job: " << job->metaObject()->className(); | 85 | SinkTrace() << "Starting job: " << job->metaObject()->className(); |
84 | job->start(); | 86 | job->start(); |
85 | }); | 87 | }); |
86 | } | 88 | } |
@@ -117,11 +119,11 @@ KAsync::Job<void> ImapServerProxy::login(const QString &username, const QString | |||
117 | auto namespaceJob = new KIMAP::NamespaceJob(mSession); | 119 | auto namespaceJob = new KIMAP::NamespaceJob(mSession); |
118 | 120 | ||
119 | return runJob(loginJob).then(runJob(capabilitiesJob)).then<void>([this](){ | 121 | return runJob(loginJob).then(runJob(capabilitiesJob)).then<void>([this](){ |
120 | Trace() << "Supported capabilities: " << mCapabilities; | 122 | SinkTrace() << "Supported capabilities: " << mCapabilities; |
121 | QStringList requiredExtensions = QStringList() << "UIDPLUS" << "NAMESPACE"; | 123 | QStringList requiredExtensions = QStringList() << "UIDPLUS" << "NAMESPACE"; |
122 | for (const auto &requiredExtension : requiredExtensions) { | 124 | for (const auto &requiredExtension : requiredExtensions) { |
123 | if (!mCapabilities.contains(requiredExtension)) { | 125 | if (!mCapabilities.contains(requiredExtension)) { |
124 | Warning() << "Server doesn't support required capability: " << requiredExtension; | 126 | SinkWarning() << "Server doesn't support required capability: " << requiredExtension; |
125 | //TODO fail the job | 127 | //TODO fail the job |
126 | } | 128 | } |
127 | } | 129 | } |
@@ -138,9 +140,9 @@ KAsync::Job<void> ImapServerProxy::login(const QString &username, const QString | |||
138 | mUserNamespaces << ns.name; | 140 | mUserNamespaces << ns.name; |
139 | mUserNamespaceSeparator = ns.separator; | 141 | mUserNamespaceSeparator = ns.separator; |
140 | } | 142 | } |
141 | Trace() << "Found personal namespaces: " << mPersonalNamespaces << mPersonalNamespaceSeparator; | 143 | SinkTrace() << "Found personal namespaces: " << mPersonalNamespaces << mPersonalNamespaceSeparator; |
142 | Trace() << "Found shared namespaces: " << mSharedNamespaces << mSharedNamespaceSeparator; | 144 | SinkTrace() << "Found shared namespaces: " << mSharedNamespaces << mSharedNamespaceSeparator; |
143 | Trace() << "Found user namespaces: " << mUserNamespaces << mUserNamespaceSeparator; | 145 | SinkTrace() << "Found user namespaces: " << mUserNamespaces << mUserNamespaceSeparator; |
144 | }); | 146 | }); |
145 | } | 147 | } |
146 | 148 | ||
@@ -291,8 +293,8 @@ KAsync::Job<QList<qint64>> ImapServerProxy::fetchHeaders(const QString &mailbox) | |||
291 | const QMap<qint64,KIMAP::MessageAttribute> &attrs, | 293 | const QMap<qint64,KIMAP::MessageAttribute> &attrs, |
292 | const QMap<qint64,KIMAP::MessageFlags> &flags, | 294 | const QMap<qint64,KIMAP::MessageFlags> &flags, |
293 | const QMap<qint64,KIMAP::MessagePtr> &messages) { | 295 | const QMap<qint64,KIMAP::MessagePtr> &messages) { |
294 | Trace() << "Received " << uids.size() << " headers from " << mailbox; | 296 | SinkTrace() << "Received " << uids.size() << " headers from " << mailbox; |
295 | Trace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); | 297 | SinkTrace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); |
296 | 298 | ||
297 | //TODO based on the data available here, figure out which messages to actually fetch | 299 | //TODO based on the data available here, figure out which messages to actually fetch |
298 | //(we only fetched headers and structure so far) | 300 | //(we only fetched headers and structure so far) |
@@ -344,7 +346,7 @@ KAsync::Job<QString> ImapServerProxy::createSubfolder(const QString &parentMailb | |||
344 | } else { | 346 | } else { |
345 | *folder = parentMailbox + mPersonalNamespaceSeparator + folderName; | 347 | *folder = parentMailbox + mPersonalNamespaceSeparator + folderName; |
346 | } | 348 | } |
347 | Trace() << "Creating subfolder: " << *folder; | 349 | SinkTrace() << "Creating subfolder: " << *folder; |
348 | return create(*folder); | 350 | return create(*folder); |
349 | }) | 351 | }) |
350 | .then<QString>([=]() { | 352 | .then<QString>([=]() { |
@@ -360,7 +362,7 @@ KAsync::Job<QString> ImapServerProxy::renameSubfolder(const QString &oldMailbox, | |||
360 | auto parts = oldMailbox.split(mPersonalNamespaceSeparator); | 362 | auto parts = oldMailbox.split(mPersonalNamespaceSeparator); |
361 | parts.removeLast(); | 363 | parts.removeLast(); |
362 | *folder = parts.join(mPersonalNamespaceSeparator) + mPersonalNamespaceSeparator + newName; | 364 | *folder = parts.join(mPersonalNamespaceSeparator) + mPersonalNamespaceSeparator + newName; |
363 | Trace() << "Renaming subfolder: " << oldMailbox << *folder; | 365 | SinkTrace() << "Renaming subfolder: " << oldMailbox << *folder; |
364 | return rename(oldMailbox, *folder); | 366 | return rename(oldMailbox, *folder); |
365 | }) | 367 | }) |
366 | .then<QString>([=]() { | 368 | .then<QString>([=]() { |
@@ -370,14 +372,14 @@ KAsync::Job<QString> ImapServerProxy::renameSubfolder(const QString &oldMailbox, | |||
370 | 372 | ||
371 | KAsync::Job<void> ImapServerProxy::fetchFolders(std::function<void(const QVector<Folder> &)> callback) | 373 | KAsync::Job<void> ImapServerProxy::fetchFolders(std::function<void(const QVector<Folder> &)> callback) |
372 | { | 374 | { |
373 | Trace() << "Fetching folders"; | 375 | SinkTrace() << "Fetching folders"; |
374 | return list(KIMAP::ListJob::IncludeUnsubscribed, [callback](const QList<KIMAP::MailBoxDescriptor> &mailboxes, const QList<QList<QByteArray> > &flags){ | 376 | return list(KIMAP::ListJob::IncludeUnsubscribed, [callback](const QList<KIMAP::MailBoxDescriptor> &mailboxes, const QList<QList<QByteArray> > &flags){ |
375 | QVector<Folder> list; | 377 | QVector<Folder> list; |
376 | for (int i = 0; i < mailboxes.size(); i++) { | 378 | for (int i = 0; i < mailboxes.size(); i++) { |
377 | const auto mailbox = mailboxes[i]; | 379 | const auto mailbox = mailboxes[i]; |
378 | const auto mailboxFlags = flags[i]; | 380 | const auto mailboxFlags = flags[i]; |
379 | bool noselect = mailboxFlags.contains(QByteArray(FolderFlags::Noselect).toLower()) || mailboxFlags.contains(QByteArray(FolderFlags::Noselect)); | 381 | bool noselect = mailboxFlags.contains(QByteArray(FolderFlags::Noselect).toLower()) || mailboxFlags.contains(QByteArray(FolderFlags::Noselect)); |
380 | Log() << "Found mailbox: " << mailbox.name << mailboxFlags << FolderFlags::Noselect << noselect; | 382 | SinkLog() << "Found mailbox: " << mailbox.name << mailboxFlags << FolderFlags::Noselect << noselect; |
381 | list << Folder{mailbox.name.split(mailbox.separator), mailbox.name, mailbox.separator, noselect}; | 383 | list << Folder{mailbox.name.split(mailbox.separator), mailbox.name, mailbox.separator, noselect}; |
382 | } | 384 | } |
383 | callback(list); | 385 | callback(list); |
@@ -395,9 +397,9 @@ KAsync::Job<void> ImapServerProxy::fetchMessages(const Folder &folder, std::func | |||
395 | Q_ASSERT(!mPersonalNamespaceSeparator.isNull()); | 397 | Q_ASSERT(!mPersonalNamespaceSeparator.isNull()); |
396 | return select(mailboxFromFolder(folder)).then<void, KAsync::Job<void>>([this, callback, folder]() -> KAsync::Job<void> { | 398 | return select(mailboxFromFolder(folder)).then<void, KAsync::Job<void>>([this, callback, folder]() -> KAsync::Job<void> { |
397 | return fetchHeaders(mailboxFromFolder(folder)).then<void, KAsync::Job<void>, QList<qint64>>([this, callback](const QList<qint64> &uidsToFetch){ | 399 | return fetchHeaders(mailboxFromFolder(folder)).then<void, KAsync::Job<void>, QList<qint64>>([this, callback](const QList<qint64> &uidsToFetch){ |
398 | Trace() << "Uids to fetch: " << uidsToFetch; | 400 | SinkTrace() << "Uids to fetch: " << uidsToFetch; |
399 | if (uidsToFetch.isEmpty()) { | 401 | if (uidsToFetch.isEmpty()) { |
400 | Trace() << "Nothing to fetch"; | 402 | SinkTrace() << "Nothing to fetch"; |
401 | callback(QVector<Message>()); | 403 | callback(QVector<Message>()); |
402 | return KAsync::null<void>(); | 404 | return KAsync::null<void>(); |
403 | } | 405 | } |
diff --git a/examples/imapresource/tests/imapserverproxytest.cpp b/examples/imapresource/tests/imapserverproxytest.cpp index 6819685..d9af453 100644 --- a/examples/imapresource/tests/imapserverproxytest.cpp +++ b/examples/imapresource/tests/imapserverproxytest.cpp | |||
@@ -12,6 +12,8 @@ | |||
12 | 12 | ||
13 | using namespace Imap; | 13 | using namespace Imap; |
14 | 14 | ||
15 | SINK_DEBUG_AREA("imapserverproxytest") | ||
16 | |||
15 | /** | 17 | /** |
16 | */ | 18 | */ |
17 | class ImapServerProxyTest : public QObject | 19 | class ImapServerProxyTest : public QObject |
@@ -81,8 +83,8 @@ private slots: | |||
81 | const QMap<qint64,KIMAP::MessageAttribute> &attrs, | 83 | const QMap<qint64,KIMAP::MessageAttribute> &attrs, |
82 | const QMap<qint64,KIMAP::MessageFlags> &flags, | 84 | const QMap<qint64,KIMAP::MessageFlags> &flags, |
83 | const QMap<qint64,KIMAP::MessagePtr> &messages) { | 85 | const QMap<qint64,KIMAP::MessagePtr> &messages) { |
84 | Trace() << "Received " << uids.size() << " messages from " << mailbox; | 86 | SinkTrace() << "Received " << uids.size() << " messages from " << mailbox; |
85 | Trace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); | 87 | SinkTrace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); |
86 | count += uids.size(); | 88 | count += uids.size(); |
87 | })); | 89 | })); |
88 | 90 | ||
@@ -106,8 +108,8 @@ private slots: | |||
106 | const QMap<qint64,KIMAP::MessageAttribute> &attrs, | 108 | const QMap<qint64,KIMAP::MessageAttribute> &attrs, |
107 | const QMap<qint64,KIMAP::MessageFlags> &flags, | 109 | const QMap<qint64,KIMAP::MessageFlags> &flags, |
108 | const QMap<qint64,KIMAP::MessagePtr> &messages) { | 110 | const QMap<qint64,KIMAP::MessagePtr> &messages) { |
109 | Trace() << "Received " << uids.size() << " messages from " << mailbox; | 111 | SinkTrace() << "Received " << uids.size() << " messages from " << mailbox; |
110 | Trace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); | 112 | SinkTrace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); |
111 | count += uids.size(); | 113 | count += uids.size(); |
112 | })); | 114 | })); |
113 | 115 | ||
diff --git a/examples/maildirresource/facade.cpp b/examples/maildirresource/facade.cpp index d8fc02d..256b255 100644 --- a/examples/maildirresource/facade.cpp +++ b/examples/maildirresource/facade.cpp | |||
@@ -38,11 +38,11 @@ MaildirResourceMailFacade::MaildirResourceMailFacade(const QByteArray &instanceI | |||
38 | const auto folderPath = parts.join('/'); | 38 | const auto folderPath = parts.join('/'); |
39 | const auto path = folderPath + "/cur/"; | 39 | const auto path = folderPath + "/cur/"; |
40 | 40 | ||
41 | Trace() << "Looking for mail in: " << path << key; | 41 | SinkTrace_("", "maildirfacade") << "Looking for mail in: " << path << key; |
42 | QDir dir(path); | 42 | QDir dir(path); |
43 | const QFileInfoList list = dir.entryInfoList(QStringList() << (key+"*"), QDir::Files); | 43 | const QFileInfoList list = dir.entryInfoList(QStringList() << (key+"*"), QDir::Files); |
44 | if (list.size() != 1) { | 44 | if (list.size() != 1) { |
45 | Warning() << "Failed to find message " << path << key << list.size(); | 45 | SinkWarning_("", "maildirfacade") << "Failed to find message " << path << key << list.size(); |
46 | value.setProperty("mimeMessage", QVariant()); | 46 | value.setProperty("mimeMessage", QVariant()); |
47 | } else { | 47 | } else { |
48 | value.setProperty("mimeMessage", list.at(0).filePath()); | 48 | value.setProperty("mimeMessage", list.at(0).filePath()); |
diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index e1fcfdf..d7a6fff 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp | |||
@@ -51,8 +51,7 @@ | |||
51 | #define ENTITY_TYPE_MAIL "mail" | 51 | #define ENTITY_TYPE_MAIL "mail" |
52 | #define ENTITY_TYPE_FOLDER "folder" | 52 | #define ENTITY_TYPE_FOLDER "folder" |
53 | 53 | ||
54 | #undef DEBUG_AREA | 54 | SINK_DEBUG_AREA("maildirresource") |
55 | #define DEBUG_AREA "resource.maildir" | ||
56 | 55 | ||
57 | using namespace Sink; | 56 | using namespace Sink; |
58 | 57 | ||
@@ -65,8 +64,8 @@ static QString getFilePathFromMimeMessagePath(const QString &mimeMessagePath) | |||
65 | QDir dir(path); | 64 | QDir dir(path); |
66 | const QFileInfoList list = dir.entryInfoList(QStringList() << (key+"*"), QDir::Files); | 65 | const QFileInfoList list = dir.entryInfoList(QStringList() << (key+"*"), QDir::Files); |
67 | if (list.size() != 1) { | 66 | if (list.size() != 1) { |
68 | Warning() << "Failed to find message " << mimeMessagePath; | 67 | SinkWarning() << "Failed to find message " << mimeMessagePath; |
69 | Warning() << "Failed to find message " << path; | 68 | SinkWarning() << "Failed to find message " << path; |
70 | return QString(); | 69 | return QString(); |
71 | } | 70 | } |
72 | return list.first().filePath(); | 71 | return list.first().filePath(); |
@@ -115,7 +114,7 @@ public: | |||
115 | const auto path = getPath(folder, transaction); | 114 | const auto path = getPath(folder, transaction); |
116 | KPIM::Maildir maildir(path, false); | 115 | KPIM::Maildir maildir(path, false); |
117 | if (!maildir.isValid(true)) { | 116 | if (!maildir.isValid(true)) { |
118 | Warning() << "Maildir is not existing: " << path; | 117 | SinkWarning() << "Maildir is not existing: " << path; |
119 | } | 118 | } |
120 | auto identifier = maildir.addEntryFromPath(oldPath); | 119 | auto identifier = maildir.addEntryFromPath(oldPath); |
121 | return path + "/" + identifier; | 120 | return path + "/" + identifier; |
@@ -124,7 +123,7 @@ public: | |||
124 | const auto path = getPath(folder, transaction); | 123 | const auto path = getPath(folder, transaction); |
125 | KPIM::Maildir maildir(path, false); | 124 | KPIM::Maildir maildir(path, false); |
126 | if (!maildir.isValid(true)) { | 125 | if (!maildir.isValid(true)) { |
127 | Warning() << "Maildir is not existing: " << path; | 126 | SinkWarning() << "Maildir is not existing: " << path; |
128 | } | 127 | } |
129 | auto oldIdentifier = KPIM::Maildir::getKeyFromFile(oldPath); | 128 | auto oldIdentifier = KPIM::Maildir::getKeyFromFile(oldPath); |
130 | auto pathParts = oldPath.split('/'); | 129 | auto pathParts = oldPath.split('/'); |
@@ -135,7 +134,7 @@ public: | |||
135 | } | 134 | } |
136 | KPIM::Maildir oldMaildir(oldDirectory, false); | 135 | KPIM::Maildir oldMaildir(oldDirectory, false); |
137 | if (!oldMaildir.isValid(false)) { | 136 | if (!oldMaildir.isValid(false)) { |
138 | Warning() << "Maildir is not existing: " << path; | 137 | SinkWarning() << "Maildir is not existing: " << path; |
139 | } | 138 | } |
140 | auto identifier = oldMaildir.moveEntryTo(oldIdentifier, maildir); | 139 | auto identifier = oldMaildir.moveEntryTo(oldIdentifier, maildir); |
141 | return path + "/" + identifier; | 140 | return path + "/" + identifier; |
@@ -158,7 +157,7 @@ public: | |||
158 | const bool mimeMessageChanged = mimeMessage.isValid() && mimeMessage.toString() != oldEntity.getProperty("mimeMessage").toString(); | 157 | const bool mimeMessageChanged = mimeMessage.isValid() && mimeMessage.toString() != oldEntity.getProperty("mimeMessage").toString(); |
159 | const bool folderChanged = newFolder.isValid() && newFolder.toString() != oldEntity.getProperty("mimeMessage").toString(); | 158 | const bool folderChanged = newFolder.isValid() && newFolder.toString() != oldEntity.getProperty("mimeMessage").toString(); |
160 | if (mimeMessageChanged || folderChanged) { | 159 | if (mimeMessageChanged || folderChanged) { |
161 | Trace() << "Moving mime message: " << mimeMessageChanged << folderChanged; | 160 | SinkTrace() << "Moving mime message: " << mimeMessageChanged << folderChanged; |
162 | auto newPath = moveMessage(mimeMessage.toString(), newEntity.getProperty("folder").toByteArray(), transaction); | 161 | auto newPath = moveMessage(mimeMessage.toString(), newEntity.getProperty("folder").toByteArray(), transaction); |
163 | if (newPath != oldEntity.getProperty("mimeMessage").toString()) { | 162 | if (newPath != oldEntity.getProperty("mimeMessage").toString()) { |
164 | const auto oldPath = getFilePathFromMimeMessagePath(oldEntity.getProperty("mimeMessage").toString()); | 163 | const auto oldPath = getFilePathFromMimeMessagePath(oldEntity.getProperty("mimeMessage").toString()); |
@@ -278,7 +277,7 @@ public: | |||
278 | { | 277 | { |
279 | const QByteArray bufferType = ENTITY_TYPE_FOLDER; | 278 | const QByteArray bufferType = ENTITY_TYPE_FOLDER; |
280 | QStringList folderList = listAvailableFolders(); | 279 | QStringList folderList = listAvailableFolders(); |
281 | Trace() << "Found folders " << folderList; | 280 | SinkTrace() << "Found folders " << folderList; |
282 | 281 | ||
283 | scanForRemovals(bufferType, | 282 | scanForRemovals(bufferType, |
284 | [this, &bufferType](const std::function<void(const QByteArray &)> &callback) { | 283 | [this, &bufferType](const std::function<void(const QByteArray &)> &callback) { |
@@ -304,23 +303,23 @@ public: | |||
304 | 303 | ||
305 | void synchronizeMails(const QString &path) | 304 | void synchronizeMails(const QString &path) |
306 | { | 305 | { |
307 | Trace() << "Synchronizing mails" << path; | 306 | SinkTrace() << "Synchronizing mails" << path; |
308 | auto time = QSharedPointer<QTime>::create(); | 307 | auto time = QSharedPointer<QTime>::create(); |
309 | time->start(); | 308 | time->start(); |
310 | const QByteArray bufferType = ENTITY_TYPE_MAIL; | 309 | const QByteArray bufferType = ENTITY_TYPE_MAIL; |
311 | 310 | ||
312 | KPIM::Maildir maildir(path, true); | 311 | KPIM::Maildir maildir(path, true); |
313 | if (!maildir.isValid()) { | 312 | if (!maildir.isValid()) { |
314 | Warning() << "Failed to sync folder."; | 313 | SinkWarning() << "Failed to sync folder."; |
315 | return; | 314 | return; |
316 | } | 315 | } |
317 | 316 | ||
318 | Trace() << "Importing new mail."; | 317 | SinkTrace() << "Importing new mail."; |
319 | maildir.importNewMails(); | 318 | maildir.importNewMails(); |
320 | 319 | ||
321 | auto listingPath = maildir.pathToCurrent(); | 320 | auto listingPath = maildir.pathToCurrent(); |
322 | auto entryIterator = QSharedPointer<QDirIterator>::create(listingPath, QDir::Files); | 321 | auto entryIterator = QSharedPointer<QDirIterator>::create(listingPath, QDir::Files); |
323 | Trace() << "Looking into " << listingPath; | 322 | SinkTrace() << "Looking into " << listingPath; |
324 | 323 | ||
325 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); | 324 | const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, path.toUtf8()); |
326 | 325 | ||
@@ -332,7 +331,7 @@ public: | |||
332 | callback(sinkId); | 331 | callback(sinkId); |
333 | }, | 332 | }, |
334 | [&](const Index::Error &error) { | 333 | [&](const Index::Error &error) { |
335 | Warning() << "Error in index: " << error.message << property; | 334 | SinkWarning() << "Error in index: " << error.message << property; |
336 | }); | 335 | }); |
337 | }, | 336 | }, |
338 | [](const QByteArray &remoteId) -> bool { | 337 | [](const QByteArray &remoteId) -> bool { |
@@ -350,7 +349,7 @@ public: | |||
350 | const auto flags = maildir.readEntryFlags(fileName); | 349 | const auto flags = maildir.readEntryFlags(fileName); |
351 | const auto maildirKey = maildir.getKeyFromFile(fileName); | 350 | const auto maildirKey = maildir.getKeyFromFile(fileName); |
352 | 351 | ||
353 | Trace() << "Found a mail " << filePath << " : " << fileName; | 352 | SinkTrace() << "Found a mail " << filePath << " : " << fileName; |
354 | 353 | ||
355 | Sink::ApplicationDomain::Mail mail; | 354 | Sink::ApplicationDomain::Mail mail; |
356 | mail.setProperty("folder", folderLocalId); | 355 | mail.setProperty("folder", folderLocalId); |
@@ -362,12 +361,12 @@ public: | |||
362 | createOrModify(bufferType, remoteId, mail); | 361 | createOrModify(bufferType, remoteId, mail); |
363 | } | 362 | } |
364 | const auto elapsed = time->elapsed(); | 363 | const auto elapsed = time->elapsed(); |
365 | Log() << "Synchronized " << count << " mails in " << listingPath << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; | 364 | SinkLog() << "Synchronized " << count << " mails in " << listingPath << Sink::Log::TraceTime(elapsed) << " " << elapsed/qMax(count, 1) << " [ms/mail]"; |
366 | } | 365 | } |
367 | 366 | ||
368 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE | 367 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE |
369 | { | 368 | { |
370 | Log() << " Synchronizing"; | 369 | SinkLog() << " Synchronizing"; |
371 | return KAsync::start<void, KAsync::Job<void> >([this]() { | 370 | return KAsync::start<void, KAsync::Job<void> >([this]() { |
372 | KPIM::Maildir maildir(mMaildirPath, true); | 371 | KPIM::Maildir maildir(mMaildirPath, true); |
373 | if (!maildir.isValid(false)) { | 372 | if (!maildir.isValid(false)) { |
@@ -381,7 +380,7 @@ public: | |||
381 | //Don't let the transaction grow too much | 380 | //Don't let the transaction grow too much |
382 | commit(); | 381 | commit(); |
383 | } | 382 | } |
384 | Log() << "Done Synchronizing"; | 383 | SinkLog() << "Done Synchronizing"; |
385 | return KAsync::null<void>(); | 384 | return KAsync::null<void>(); |
386 | }); | 385 | }); |
387 | } | 386 | } |
@@ -402,15 +401,15 @@ public: | |||
402 | { | 401 | { |
403 | if (operation == Sink::Operation_Creation) { | 402 | if (operation == Sink::Operation_Creation) { |
404 | const auto remoteId = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); | 403 | const auto remoteId = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); |
405 | Trace() << "Mail created: " << remoteId; | 404 | SinkTrace() << "Mail created: " << remoteId; |
406 | return KAsync::start<QByteArray>([=]() -> QByteArray { | 405 | return KAsync::start<QByteArray>([=]() -> QByteArray { |
407 | return remoteId.toUtf8(); | 406 | return remoteId.toUtf8(); |
408 | }); | 407 | }); |
409 | } else if (operation == Sink::Operation_Removal) { | 408 | } else if (operation == Sink::Operation_Removal) { |
410 | Trace() << "Removing a mail: " << oldRemoteId; | 409 | SinkTrace() << "Removing a mail: " << oldRemoteId; |
411 | return KAsync::null<QByteArray>(); | 410 | return KAsync::null<QByteArray>(); |
412 | } else if (operation == Sink::Operation_Modification) { | 411 | } else if (operation == Sink::Operation_Modification) { |
413 | Trace() << "Modifying a mail: " << oldRemoteId; | 412 | SinkTrace() << "Modifying a mail: " << oldRemoteId; |
414 | const auto remoteId = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); | 413 | const auto remoteId = getFilePathFromMimeMessagePath(mail.getMimeMessagePath()); |
415 | return KAsync::start<QByteArray>([=]() -> QByteArray { | 414 | return KAsync::start<QByteArray>([=]() -> QByteArray { |
416 | return remoteId.toUtf8(); | 415 | return remoteId.toUtf8(); |
@@ -425,7 +424,7 @@ public: | |||
425 | auto folderName = folder.getName(); | 424 | auto folderName = folder.getName(); |
426 | //FIXME handle non toplevel folders | 425 | //FIXME handle non toplevel folders |
427 | auto path = mMaildirPath + "/" + folderName; | 426 | auto path = mMaildirPath + "/" + folderName; |
428 | Trace() << "Creating a new folder: " << path; | 427 | SinkTrace() << "Creating a new folder: " << path; |
429 | KPIM::Maildir maildir(path, false); | 428 | KPIM::Maildir maildir(path, false); |
430 | maildir.create(); | 429 | maildir.create(); |
431 | return KAsync::start<QByteArray>([=]() -> QByteArray { | 430 | return KAsync::start<QByteArray>([=]() -> QByteArray { |
@@ -433,12 +432,12 @@ public: | |||
433 | }); | 432 | }); |
434 | } else if (operation == Sink::Operation_Removal) { | 433 | } else if (operation == Sink::Operation_Removal) { |
435 | const auto path = oldRemoteId; | 434 | const auto path = oldRemoteId; |
436 | Trace() << "Removing a folder: " << path; | 435 | SinkTrace() << "Removing a folder: " << path; |
437 | KPIM::Maildir maildir(path, false); | 436 | KPIM::Maildir maildir(path, false); |
438 | maildir.remove(); | 437 | maildir.remove(); |
439 | return KAsync::null<QByteArray>(); | 438 | return KAsync::null<QByteArray>(); |
440 | } else if (operation == Sink::Operation_Modification) { | 439 | } else if (operation == Sink::Operation_Modification) { |
441 | Warning() << "Folder modifications are not implemented"; | 440 | SinkWarning() << "Folder modifications are not implemented"; |
442 | return KAsync::start<QByteArray>([=]() -> QByteArray { | 441 | return KAsync::start<QByteArray>([=]() -> QByteArray { |
443 | return oldRemoteId; | 442 | return oldRemoteId; |
444 | }); | 443 | }); |
@@ -472,7 +471,7 @@ MaildirResource::MaildirResource(const QByteArray &instanceIdentifier, const QSh | |||
472 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new FolderPreprocessor(mMaildirPath) << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); | 471 | setupPreprocessors(ENTITY_TYPE_FOLDER, QVector<Sink::Preprocessor*>() << new FolderPreprocessor(mMaildirPath) << new DefaultIndexUpdater<Sink::ApplicationDomain::Folder>); |
473 | 472 | ||
474 | KPIM::Maildir dir(mMaildirPath, true); | 473 | KPIM::Maildir dir(mMaildirPath, true); |
475 | Trace() << "Started maildir resource for maildir: " << mMaildirPath; | 474 | SinkTrace() << "Started maildir resource for maildir: " << mMaildirPath; |
476 | { | 475 | { |
477 | auto draftsFolder = dir.addSubFolder("Drafts"); | 476 | auto draftsFolder = dir.addSubFolder("Drafts"); |
478 | auto remoteId = synchronizer->createFolder(draftsFolder, "folder", QByteArrayList() << "drafts"); | 477 | auto remoteId = synchronizer->createFolder(draftsFolder, "folder", QByteArrayList() << "drafts"); |
@@ -503,7 +502,7 @@ KAsync::Job<void> MaildirResource::inspect(int inspectionType, const QByteArray | |||
503 | auto entityStore = QSharedPointer<EntityStore>::create(mResourceType, mResourceInstanceIdentifier, transaction); | 502 | auto entityStore = QSharedPointer<EntityStore>::create(mResourceType, mResourceInstanceIdentifier, transaction); |
504 | auto syncStore = QSharedPointer<RemoteIdMap>::create(synchronizationTransaction); | 503 | auto syncStore = QSharedPointer<RemoteIdMap>::create(synchronizationTransaction); |
505 | 504 | ||
506 | Trace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; | 505 | SinkTrace() << "Inspecting " << inspectionType << domainType << entityId << property << expectedValue; |
507 | 506 | ||
508 | if (domainType == ENTITY_TYPE_MAIL) { | 507 | if (domainType == ENTITY_TYPE_MAIL) { |
509 | auto mail = entityStore->read<Sink::ApplicationDomain::Mail>(entityId); | 508 | auto mail = entityStore->read<Sink::ApplicationDomain::Mail>(entityId); |
@@ -542,7 +541,7 @@ KAsync::Job<void> MaildirResource::inspect(int inspectionType, const QByteArray | |||
542 | auto folder = entityStore->read<Sink::ApplicationDomain::Folder>(entityId); | 541 | auto folder = entityStore->read<Sink::ApplicationDomain::Folder>(entityId); |
543 | 542 | ||
544 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { | 543 | if (inspectionType == Sink::ResourceControl::Inspection::CacheIntegrityInspectionType) { |
545 | Trace() << "Inspecting cache integrity" << remoteId; | 544 | SinkTrace() << "Inspecting cache integrity" << remoteId; |
546 | if (!QDir(remoteId).exists()) { | 545 | if (!QDir(remoteId).exists()) { |
547 | return KAsync::error<void>(1, "The directory is not existing: " + remoteId); | 546 | return KAsync::error<void>(1, "The directory is not existing: " + remoteId); |
548 | } | 547 | } |
@@ -553,14 +552,14 @@ KAsync::Job<void> MaildirResource::inspect(int inspectionType, const QByteArray | |||
553 | expectedCount++; | 552 | expectedCount++; |
554 | }, | 553 | }, |
555 | [&](const Index::Error &error) { | 554 | [&](const Index::Error &error) { |
556 | Warning() << "Error in index: " << error.message << property; | 555 | SinkWarning() << "Error in index: " << error.message << property; |
557 | }); | 556 | }); |
558 | 557 | ||
559 | QDir dir(remoteId + "/cur"); | 558 | QDir dir(remoteId + "/cur"); |
560 | const QFileInfoList list = dir.entryInfoList(QDir::Files); | 559 | const QFileInfoList list = dir.entryInfoList(QDir::Files); |
561 | if (list.size() != expectedCount) { | 560 | if (list.size() != expectedCount) { |
562 | for (const auto &fileInfo : list) { | 561 | for (const auto &fileInfo : list) { |
563 | Warning() << "Found in cache: " << fileInfo.fileName(); | 562 | SinkWarning() << "Found in cache: " << fileInfo.fileName(); |
564 | } | 563 | } |
565 | return KAsync::error<void>(1, QString("Wrong number of files; found %1 instead of %2.").arg(list.size()).arg(expectedCount)); | 564 | return KAsync::error<void>(1, QString("Wrong number of files; found %1 instead of %2.").arg(list.size()).arg(expectedCount)); |
566 | } | 565 | } |
diff --git a/examples/mailtransportresource/mailtransportresource.cpp b/examples/mailtransportresource/mailtransportresource.cpp index 1e93bdf..a729d4d 100644 --- a/examples/mailtransportresource/mailtransportresource.cpp +++ b/examples/mailtransportresource/mailtransportresource.cpp | |||
@@ -44,6 +44,8 @@ | |||
44 | 44 | ||
45 | #define ENTITY_TYPE_MAIL "mail" | 45 | #define ENTITY_TYPE_MAIL "mail" |
46 | 46 | ||
47 | SINK_DEBUG_AREA("mailtransportresource") | ||
48 | |||
47 | using namespace Sink; | 49 | using namespace Sink; |
48 | 50 | ||
49 | //TODO fold into synchronizer | 51 | //TODO fold into synchronizer |
@@ -58,7 +60,7 @@ public: | |||
58 | KAsync::Job<QByteArray> replay(const ApplicationDomain::Mail &mail, Sink::Operation operation, const QByteArray &oldRemoteId, const QList<QByteArray> &changedProperties) Q_DECL_OVERRIDE | 60 | KAsync::Job<QByteArray> replay(const ApplicationDomain::Mail &mail, Sink::Operation operation, const QByteArray &oldRemoteId, const QList<QByteArray> &changedProperties) Q_DECL_OVERRIDE |
59 | { | 61 | { |
60 | if (operation == Sink::Operation_Creation) { | 62 | if (operation == Sink::Operation_Creation) { |
61 | Trace() << "Dispatching message."; | 63 | SinkTrace() << "Dispatching message."; |
62 | // return send(mail, mSettings); | 64 | // return send(mail, mSettings); |
63 | } else if (operation == Sink::Operation_Removal) { | 65 | } else if (operation == Sink::Operation_Removal) { |
64 | } else if (operation == Sink::Operation_Modification) { | 66 | } else if (operation == Sink::Operation_Modification) { |
@@ -86,9 +88,9 @@ public: | |||
86 | msg->setHead(KMime::CRLFtoLF(data)); | 88 | msg->setHead(KMime::CRLFtoLF(data)); |
87 | msg->parse(); | 89 | msg->parse(); |
88 | if (settings.testMode) { | 90 | if (settings.testMode) { |
89 | Log() << "I would totally send that mail, but I'm in test mode." << mail.identifier(); | 91 | SinkLog() << "I would totally send that mail, but I'm in test mode." << mail.identifier(); |
90 | auto path = resourceStorageLocation(mResourceInstanceIdentifier) + "/test/"; | 92 | auto path = resourceStorageLocation(mResourceInstanceIdentifier) + "/test/"; |
91 | Trace() << path; | 93 | SinkTrace() << path; |
92 | QDir dir; | 94 | QDir dir; |
93 | dir.mkpath(path); | 95 | dir.mkpath(path); |
94 | QFile f(path+ mail.identifier()); | 96 | QFile f(path+ mail.identifier()); |
@@ -97,9 +99,9 @@ public: | |||
97 | f.close(); | 99 | f.close(); |
98 | } else { | 100 | } else { |
99 | if (MailTransport::sendMessage(msg, settings.server.toUtf8(), settings.username.toUtf8(), settings.password.toUtf8(), settings.cacert.toUtf8())) { | 101 | if (MailTransport::sendMessage(msg, settings.server.toUtf8(), settings.username.toUtf8(), settings.password.toUtf8(), settings.cacert.toUtf8())) { |
100 | Log() << "Sent message successfully"; | 102 | SinkLog() << "Sent message successfully"; |
101 | } else { | 103 | } else { |
102 | Log() << "Failed to send message"; | 104 | SinkLog() << "Failed to send message"; |
103 | return KAsync::error<void>(1, "Failed to send the message."); | 105 | return KAsync::error<void>(1, "Failed to send the message."); |
104 | } | 106 | } |
105 | } | 107 | } |
@@ -108,13 +110,13 @@ public: | |||
108 | 110 | ||
109 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE | 111 | KAsync::Job<void> synchronizeWithSource() Q_DECL_OVERRIDE |
110 | { | 112 | { |
111 | Log() << " Synchronizing"; | 113 | SinkLog() << " Synchronizing"; |
112 | return KAsync::start<void>([this](KAsync::Future<void> future) { | 114 | return KAsync::start<void>([this](KAsync::Future<void> future) { |
113 | Sink::Query query; | 115 | Sink::Query query; |
114 | QList<ApplicationDomain::Mail> toSend; | 116 | QList<ApplicationDomain::Mail> toSend; |
115 | Log() << " Looking for mail"; | 117 | SinkLog() << " Looking for mail"; |
116 | store().reader<ApplicationDomain::Mail>().query(query, [&](const ApplicationDomain::Mail &mail) -> bool { | 118 | store().reader<ApplicationDomain::Mail>().query(query, [&](const ApplicationDomain::Mail &mail) -> bool { |
117 | Trace() << "Found mail: " << mail.identifier(); | 119 | SinkTrace() << "Found mail: " << mail.identifier(); |
118 | if (!mail.getSent()) { | 120 | if (!mail.getSent()) { |
119 | toSend << mail; | 121 | toSend << mail; |
120 | } | 122 | } |
diff --git a/synchronizer/main.cpp b/synchronizer/main.cpp index b3decf6..e9dd6cb 100644 --- a/synchronizer/main.cpp +++ b/synchronizer/main.cpp | |||
@@ -34,8 +34,7 @@ | |||
34 | #include "log.h" | 34 | #include "log.h" |
35 | #include "test.h" | 35 | #include "test.h" |
36 | 36 | ||
37 | #undef DEBUG_AREA | 37 | SINK_DEBUG_AREA("main") |
38 | #define DEBUG_AREA "resource" | ||
39 | 38 | ||
40 | static Listener *listener = nullptr; | 39 | static Listener *listener = nullptr; |
41 | 40 | ||
@@ -149,13 +148,13 @@ int main(int argc, char *argv[]) | |||
149 | arguments << argv[i]; | 148 | arguments << argv[i]; |
150 | } | 149 | } |
151 | if (arguments.contains("--test")) { | 150 | if (arguments.contains("--test")) { |
152 | Log() << "Running in test-mode"; | 151 | SinkLog() << "Running in test-mode"; |
153 | arguments.removeAll("--test"); | 152 | arguments.removeAll("--test"); |
154 | Sink::Test::setTestModeEnabled(true); | 153 | Sink::Test::setTestModeEnabled(true); |
155 | } | 154 | } |
156 | 155 | ||
157 | if (arguments.count() < 3) { | 156 | if (arguments.count() < 3) { |
158 | Warning() << "Not enough args passed, no resource loaded."; | 157 | SinkWarning() << "Not enough args passed, no resource loaded."; |
159 | return app.exec(); | 158 | return app.exec(); |
160 | } | 159 | } |
161 | 160 | ||
@@ -163,12 +162,12 @@ int main(int argc, char *argv[]) | |||
163 | const QByteArray resourceType = arguments.at(2); | 162 | const QByteArray resourceType = arguments.at(2); |
164 | app.setApplicationName(instanceIdentifier); | 163 | app.setApplicationName(instanceIdentifier); |
165 | Sink::Log::setPrimaryComponent(instanceIdentifier); | 164 | Sink::Log::setPrimaryComponent(instanceIdentifier); |
166 | Log() << "Starting: " << instanceIdentifier; | 165 | SinkLog() << "Starting: " << instanceIdentifier; |
167 | 166 | ||
168 | QLockFile lockfile(instanceIdentifier + ".lock"); | 167 | QLockFile lockfile(instanceIdentifier + ".lock"); |
169 | lockfile.setStaleLockTime(500); | 168 | lockfile.setStaleLockTime(500); |
170 | if (!lockfile.tryLock(0)) { | 169 | if (!lockfile.tryLock(0)) { |
171 | Warning() << "Failed to acquire exclusive lock on socket."; | 170 | SinkWarning() << "Failed to acquire exclusive lock on socket."; |
172 | return -1; | 171 | return -1; |
173 | } | 172 | } |
174 | 173 | ||
@@ -178,6 +177,6 @@ int main(int argc, char *argv[]) | |||
178 | QObject::connect(listener, &Listener::noClients, &app, &QCoreApplication::quit); | 177 | QObject::connect(listener, &Listener::noClients, &app, &QCoreApplication::quit); |
179 | 178 | ||
180 | auto ret = app.exec(); | 179 | auto ret = app.exec(); |
181 | Log() << "Exiting: " << instanceIdentifier; | 180 | SinkLog() << "Exiting: " << instanceIdentifier; |
182 | return ret; | 181 | return ret; |
183 | } | 182 | } |
diff --git a/tests/clientapitest.cpp b/tests/clientapitest.cpp index 8c5866d..ec74cbd 100644 --- a/tests/clientapitest.cpp +++ b/tests/clientapitest.cpp | |||
@@ -9,6 +9,8 @@ | |||
9 | #include "resultprovider.h" | 9 | #include "resultprovider.h" |
10 | #include "facadefactory.h" | 10 | #include "facadefactory.h" |
11 | 11 | ||
12 | SINK_DEBUG_AREA("clientapitest") | ||
13 | |||
12 | template <typename T> | 14 | template <typename T> |
13 | class TestDummyResourceFacade : public Sink::StoreFacade<T> | 15 | class TestDummyResourceFacade : public Sink::StoreFacade<T> |
14 | { | 16 | { |
@@ -44,7 +46,7 @@ public: | |||
44 | { | 46 | { |
45 | auto resultProvider = new Sink::ResultProvider<typename T::Ptr>(); | 47 | auto resultProvider = new Sink::ResultProvider<typename T::Ptr>(); |
46 | resultProvider->onDone([resultProvider]() { | 48 | resultProvider->onDone([resultProvider]() { |
47 | Trace() << "Result provider is done"; | 49 | SinkTrace() << "Result provider is done"; |
48 | delete resultProvider; | 50 | delete resultProvider; |
49 | }); | 51 | }); |
50 | // We have to do it this way, otherwise we're not setting the fetcher right | 52 | // We have to do it this way, otherwise we're not setting the fetcher right |
@@ -52,11 +54,11 @@ public: | |||
52 | 54 | ||
53 | resultProvider->setFetcher([query, resultProvider, this](const typename T::Ptr &parent) { | 55 | resultProvider->setFetcher([query, resultProvider, this](const typename T::Ptr &parent) { |
54 | if (parent) { | 56 | if (parent) { |
55 | Trace() << "Running the fetcher " << parent->identifier(); | 57 | SinkTrace() << "Running the fetcher " << parent->identifier(); |
56 | } else { | 58 | } else { |
57 | Trace() << "Running the fetcher."; | 59 | SinkTrace() << "Running the fetcher."; |
58 | } | 60 | } |
59 | Trace() << "-------------------------."; | 61 | SinkTrace() << "-------------------------."; |
60 | for (const auto &res : results) { | 62 | for (const auto &res : results) { |
61 | qDebug() << "Parent filter " << query.propertyFilter.value("parent").value.toByteArray() << res->identifier() << res->getProperty("parent").toByteArray(); | 63 | qDebug() << "Parent filter " << query.propertyFilter.value("parent").value.toByteArray() << res->identifier() << res->getProperty("parent").toByteArray(); |
62 | auto parentProperty = res->getProperty("parent").toByteArray(); | 64 | auto parentProperty = res->getProperty("parent").toByteArray(); |
diff --git a/tests/mailsynctest.cpp b/tests/mailsynctest.cpp index 953adbf..4401f27 100644 --- a/tests/mailsynctest.cpp +++ b/tests/mailsynctest.cpp | |||
@@ -31,6 +31,8 @@ | |||
31 | using namespace Sink; | 31 | using namespace Sink; |
32 | using namespace Sink::ApplicationDomain; | 32 | using namespace Sink::ApplicationDomain; |
33 | 33 | ||
34 | SINK_DEBUG_AREA("mailsynctest") | ||
35 | |||
34 | void MailSyncTest::initTestCase() | 36 | void MailSyncTest::initTestCase() |
35 | { | 37 | { |
36 | Test::initTest(); | 38 | Test::initTest(); |
@@ -73,7 +75,7 @@ void MailSyncTest::testListFolders() | |||
73 | for (const auto &folder : folders) { | 75 | for (const auto &folder : folders) { |
74 | names << folder->getName(); | 76 | names << folder->getName(); |
75 | } | 77 | } |
76 | Trace() << "base folder: " << names; | 78 | SinkTrace() << "base folder: " << names; |
77 | baseCount = folders.size(); | 79 | baseCount = folders.size(); |
78 | }); | 80 | }); |
79 | VERIFYEXEC(job); | 81 | VERIFYEXEC(job); |
diff --git a/tests/mailtest.cpp b/tests/mailtest.cpp index 8031cf1..0537175 100644 --- a/tests/mailtest.cpp +++ b/tests/mailtest.cpp | |||
@@ -31,6 +31,8 @@ | |||
31 | using namespace Sink; | 31 | using namespace Sink; |
32 | using namespace Sink::ApplicationDomain; | 32 | using namespace Sink::ApplicationDomain; |
33 | 33 | ||
34 | SINK_DEBUG_AREA("mailtest") | ||
35 | |||
34 | void MailTest::initTestCase() | 36 | void MailTest::initTestCase() |
35 | { | 37 | { |
36 | Test::initTest(); | 38 | Test::initTest(); |
@@ -251,7 +253,7 @@ void MailTest::testMoveMail() | |||
251 | auto mail = *mails.first(); | 253 | auto mail = *mails.first(); |
252 | modifiedMail = mail; | 254 | modifiedMail = mail; |
253 | QCOMPARE(mail.getFolder(), folder.identifier()); | 255 | QCOMPARE(mail.getFolder(), folder.identifier()); |
254 | Warning() << "path: " << mail.getMimeMessagePath(); | 256 | SinkWarning() << "path: " << mail.getMimeMessagePath(); |
255 | QVERIFY(QFile(mail.getMimeMessagePath()).exists()); | 257 | QVERIFY(QFile(mail.getMimeMessagePath()).exists()); |
256 | }); | 258 | }); |
257 | VERIFYEXEC(job); | 259 | VERIFYEXEC(job); |
@@ -270,7 +272,7 @@ void MailTest::testMoveMail() | |||
270 | auto mail = *mails.first(); | 272 | auto mail = *mails.first(); |
271 | QCOMPARE(mail.getFolder(), folder1.identifier()); | 273 | QCOMPARE(mail.getFolder(), folder1.identifier()); |
272 | QVERIFY(QFile(mail.getMimeMessagePath()).exists()); | 274 | QVERIFY(QFile(mail.getMimeMessagePath()).exists()); |
273 | Trace() << "Mime message path: " << mail.getMimeMessagePath(); | 275 | SinkTrace() << "Mime message path: " << mail.getMimeMessagePath(); |
274 | }); | 276 | }); |
275 | VERIFYEXEC(job); | 277 | VERIFYEXEC(job); |
276 | } | 278 | } |
diff --git a/tests/messagequeuetest.cpp b/tests/messagequeuetest.cpp index 484ff86..a8d0d4d 100644 --- a/tests/messagequeuetest.cpp +++ b/tests/messagequeuetest.cpp | |||
@@ -8,6 +8,8 @@ | |||
8 | #include "messagequeue.h" | 8 | #include "messagequeue.h" |
9 | #include "log.h" | 9 | #include "log.h" |
10 | 10 | ||
11 | SINK_DEBUG_AREA("messagequeuetest") | ||
12 | |||
11 | /** | 13 | /** |
12 | * Test of the messagequeue implementation. | 14 | * Test of the messagequeue implementation. |
13 | */ | 15 | */ |
@@ -80,7 +82,7 @@ private slots: | |||
80 | } | 82 | } |
81 | 83 | ||
82 | while (!queue.isEmpty()) { | 84 | while (!queue.isEmpty()) { |
83 | Log() << "start"; | 85 | SinkLog() << "start"; |
84 | const auto expected = values.dequeue(); | 86 | const auto expected = values.dequeue(); |
85 | bool gotValue = false; | 87 | bool gotValue = false; |
86 | bool gotError = false; | 88 | bool gotError = false; |