Skip to content

Commit 2eebac4

Browse files
committed
fixes #1412 Timeout on search user/search dialog on large database
1 parent 146d528 commit 2eebac4

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

bot/storage-mongo/src/main/kotlin/UserTimelineMongoDAO.kt

+20-8
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import ai.tock.bot.mongo.ClientIdCol_.Companion.UserIds
4444
import ai.tock.bot.mongo.DialogCol_.Companion.GroupId
4545
import ai.tock.bot.mongo.DialogCol_.Companion.PlayerIds
4646
import ai.tock.bot.mongo.DialogCol_.Companion.Stories
47+
import ai.tock.bot.mongo.DialogCol_.Companion.Test
4748
import ai.tock.bot.mongo.DialogCol_.Companion._id
4849
import ai.tock.bot.mongo.DialogTextCol_.Companion.Date
4950
import ai.tock.bot.mongo.DialogTextCol_.Companion.DialogId
@@ -69,13 +70,16 @@ import com.github.salomonbrys.kodein.instance
6970
import com.mongodb.ReadPreference.secondaryPreferred
7071
import com.mongodb.client.model.IndexOptions
7172
import com.mongodb.client.model.ReplaceOptions
73+
import java.time.Instant
74+
import java.time.Instant.now
75+
import java.time.ZoneOffset
76+
import java.util.concurrent.TimeUnit.DAYS
7277
import mu.KotlinLogging
7378
import org.litote.kmongo.Id
7479
import org.litote.kmongo.MongoOperator.and
7580
import org.litote.kmongo.MongoOperator.gt
7681
import org.litote.kmongo.MongoOperator.or
7782
import org.litote.kmongo.MongoOperator.type
78-
import org.litote.kmongo.`in`
7983
import org.litote.kmongo.addEachToSet
8084
import org.litote.kmongo.addToSet
8185
import org.litote.kmongo.aggregate
@@ -92,6 +96,7 @@ import org.litote.kmongo.findOne
9296
import org.litote.kmongo.findOneById
9397
import org.litote.kmongo.getCollection
9498
import org.litote.kmongo.gt
99+
import org.litote.kmongo.`in`
95100
import org.litote.kmongo.json
96101
import org.litote.kmongo.limit
97102
import org.litote.kmongo.lt
@@ -106,10 +111,6 @@ import org.litote.kmongo.sort
106111
import org.litote.kmongo.toId
107112
import org.litote.kmongo.updateOneById
108113
import org.litote.kmongo.upsert
109-
import java.time.Instant
110-
import java.time.Instant.now
111-
import java.time.ZoneOffset
112-
import java.util.concurrent.TimeUnit.DAYS
113114

114115
/**
115116
*
@@ -154,8 +155,15 @@ internal object UserTimelineMongoDAO : UserTimelineDAO, UserReportDAO, DialogRep
154155
indexOptions = IndexOptions()
155156
.expireAfter(longProperty("tock_bot_timeline_index_ttl_days", 365), DAYS)
156157
)
158+
userTimelineCol.ensureIndex(
159+
Namespace,
160+
ApplicationIds,
161+
UserTimelineCol_.UserPreferences.test,
162+
LastUpdateDate
163+
)
157164
dialogCol.ensureIndex(PlayerIds.id, Namespace)
158165
dialogCol.ensureIndex(PlayerIds.clientId)
166+
dialogCol.ensureIndex(ApplicationIds, Test, DialogCol_.LastUpdateDate)
159167
dialogCol.ensureIndex(
160168
DialogCol_.LastUpdateDate,
161169
indexOptions = ttlIndexOptions
@@ -170,8 +178,6 @@ internal object UserTimelineMongoDAO : UserTimelineDAO, UserReportDAO, DialogRep
170178
)
171179
dialogCol.ensureIndex(GroupId)
172180

173-
dialogTextCol.ensureIndex(Text)
174-
dialogTextCol.ensureIndex(Text)
175181
dialogTextCol.ensureUniqueIndex(Text, DialogId)
176182
dialogTextCol.ensureIndex(
177183
Date,
@@ -263,6 +269,7 @@ internal object UserTimelineMongoDAO : UserTimelineDAO, UserReportDAO, DialogRep
263269
saveNlpStats(it.toActionId(), dialog.id, it.nlpStats!!)
264270
}
265271
}
272+
266273
is SendSentence -> {
267274
if (it.messages.isNotEmpty()) {
268275
saveConnectorMessage(it.toActionId(), dialog.id, it.messages)
@@ -271,6 +278,7 @@ internal object UserTimelineMongoDAO : UserTimelineDAO, UserReportDAO, DialogRep
271278
saveNlpStats(it.toActionId(), dialog.id, it.nlpStats!!)
272279
}
273280
}
281+
274282
else -> {
275283
/*do nothing*/
276284
}
@@ -527,7 +535,11 @@ internal object UserTimelineMongoDAO : UserTimelineDAO, UserReportDAO, DialogRep
527535
val count = c.countDocuments(filter)
528536
return if (count > start) {
529537
val list = c.find(filter)
530-
.skip(start.toInt()).limit(size).descendingSort(LastUpdateDate).map { it.toUserReport() }.toList()
538+
.skip(start.toInt())
539+
.limit(size)
540+
.descendingSort(LastUpdateDate)
541+
.map { it.toUserReport() }
542+
.toList()
531543
UserReportQueryResult(count, start, start + list.size, list)
532544
} else {
533545
UserReportQueryResult(0, 0, 0, emptyList())

0 commit comments

Comments
 (0)