Skip to content

Commit 91e417b

Browse files
committed
Fix issues with bulk keys removal
1 parent 9aace2a commit 91e417b

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed

3rdparty/qredisclient

src/app/models/treeoperations.cpp

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -221,32 +221,48 @@ void TreeOperations::deleteDbKey(ConnectionsTree::KeyItem& key,
221221
[this, &key](RedisClient::Response) {
222222
key.setRemoved();
223223
QRegExp filter(key.getFullPath(), Qt::CaseSensitive, QRegExp::Wildcard);
224-
emit m_events->closeDbKeys(m_connection, key.getDbIndex(), filter);
224+
if (m_events) m_events->closeDbKeys(m_connection, key.getDbIndex(), filter);
225225
},
226226
[this, callback](const QString& err) {
227227
QString errorMsg =
228228
QCoreApplication::translate("RDM", "Delete key error: %1").arg(err);
229229
callback(errorMsg);
230-
m_events->error(errorMsg);
230+
if (m_events) m_events->error(errorMsg);
231231
});
232232
}
233233

234234
void TreeOperations::deleteDbKeys(ConnectionsTree::DatabaseItem& db) {
235-
requestBulkOperation(db, BulkOperations::Manager::Operation::DELETE_KEYS,
236-
[this, &db](QRegExp filter, int, const QStringList&) {
237-
db.reload();
238-
emit m_events->closeDbKeys(m_connection,
239-
db.getDbIndex(), filter);
240-
});
235+
auto self = sharedFromThis().toWeakRef();
236+
requestBulkOperation(
237+
db, BulkOperations::Manager::Operation::DELETE_KEYS,
238+
[self, this, &db](QRegExp filter, int, const QStringList&) {
239+
if (!self) {
240+
return;
241+
}
242+
243+
db.reload();
244+
245+
if (m_events) {
246+
emit m_events->closeDbKeys(m_connection, db.getDbIndex(), filter);
247+
}
248+
});
241249
}
242250

243251
void TreeOperations::deleteDbNamespace(ConnectionsTree::NamespaceItem& ns) {
244-
requestBulkOperation(ns, BulkOperations::Manager::Operation::DELETE_KEYS,
245-
[this, &ns](QRegExp filter, int, const QStringList&) {
246-
ns.setRemoved();
247-
emit m_events->closeDbKeys(m_connection,
248-
ns.getDbIndex(), filter);
249-
});
252+
auto self = sharedFromThis().toWeakRef();
253+
requestBulkOperation(
254+
ns, BulkOperations::Manager::Operation::DELETE_KEYS,
255+
[this, self, &ns](QRegExp filter, int, const QStringList&) {
256+
if (!self) {
257+
return;
258+
}
259+
260+
ns.setRemoved();
261+
262+
if (m_events) {
263+
emit m_events->closeDbKeys(m_connection, ns.getDbIndex(), filter);
264+
}
265+
});
250266
}
251267

252268
void TreeOperations::setTTL(ConnectionsTree::AbstractNamespaceItem& ns) {

src/modules/bulk-operations/operations/deleteoperation.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,17 @@ void BulkOperations::DeleteOperation::deleteKeys(
5959
int expectedResponses = rawCmds.size();
6060

6161
m_connection->pipelinedCmd(
62-
rawCmds, this, -1,
62+
rawCmds, this, m_dbIndex,
6363
[this, expectedResponses, callback](const RedisClient::Response &r,
6464
QString err) {
6565
if (!err.isEmpty()) {
6666
return processError(err);
6767
}
6868

69+
if (r.isErrorMessage()) {
70+
return processError(r.value().toByteArray());
71+
}
72+
6973
QMutexLocker l(&m_processedKeysMutex);
7074
QVariant incrResult = r.value();
7175

0 commit comments

Comments
 (0)