@@ -70,6 +70,8 @@ class IndexService(ctx: ServiceContext[IndexServiceArgs]) extends Service(ctx) w
70
70
var reader = DirectoryReader .open(ctx.args.writer, true )
71
71
var updateSeq = getCommittedSeq
72
72
var pendingSeq = updateSeq
73
+ var purgeSeq = getCommittedPurgeSeq
74
+ var pendingPurgeSeq = purgeSeq
73
75
var committing = false
74
76
var forceRefresh = false
75
77
@@ -97,6 +99,8 @@ class IndexService(ctx: ServiceContext[IndexServiceArgs]) extends Service(ctx) w
97
99
group2(request)
98
100
case ' get_update_seq =>
99
101
(' ok , updateSeq)
102
+ case ' get_purge_seq =>
103
+ (' ok , purgeSeq)
100
104
case UpdateDocMsg (id : String , doc : Document ) =>
101
105
logger.debug(" Updating %s" .format(id))
102
106
updateTimer.time {
@@ -117,6 +121,11 @@ class IndexService(ctx: ServiceContext[IndexServiceArgs]) extends Service(ctx) w
117
121
pendingSeq = newSeq
118
122
logger.debug(" Pending sequence is now %d" .format(newSeq))
119
123
' ok
124
+ case SetPurgeSeqMsg (newSeq : Long ) =>
125
+ pendingPurgeSeq = newSeq
126
+ logger.debug(" Pending purge sequence is now %d" .format(newSeq))
127
+ commit(pendingSeq, pendingPurgeSeq)
128
+ ' ok
120
129
case ' info =>
121
130
(' ok , getInfo)
122
131
}
@@ -148,12 +157,13 @@ class IndexService(ctx: ServiceContext[IndexServiceArgs]) extends Service(ctx) w
148
157
}
149
158
exit(' deleted )
150
159
case ' maybe_commit =>
151
- commit(pendingSeq)
152
- case (' committed , newSeq : Long ) =>
153
- updateSeq = newSeq
160
+ commit(pendingSeq, pendingPurgeSeq)
161
+ case (' committed , newUpdateSeq : Long , newPurgeSeq : Long ) =>
162
+ updateSeq = newUpdateSeq
163
+ purgeSeq = newPurgeSeq
154
164
forceRefresh = true
155
165
committing = false
156
- logger.info (" Committed sequence %d" .format(newSeq ))
166
+ logger.debug (" Committed sequence %d and %d " .format(newUpdateSeq, newPurgeSeq ))
157
167
case ' commit_failed =>
158
168
committing = false
159
169
}
@@ -175,18 +185,19 @@ class IndexService(ctx: ServiceContext[IndexServiceArgs]) extends Service(ctx) w
175
185
}
176
186
}
177
187
178
- private def commit (newSeq : Long ) {
179
- if (! committing && newSeq > updateSeq) {
188
+ private def commit (newUpdateSeq : Long , newPurgeSeq : Long ) {
189
+ if (! committing && (newUpdateSeq > updateSeq || newPurgeSeq > purgeSeq) ) {
180
190
committing = true
181
191
val index = self
182
192
node.spawn((_) => {
183
193
ctx.args.writer.setCommitData(ctx.args.writer.getCommitData +
184
- (" update_seq" -> newSeq.toString))
194
+ (" update_seq" -> newUpdateSeq.toString) +
195
+ (" purge_seq" -> newPurgeSeq.toString))
185
196
try {
186
197
commitTimer.time {
187
198
ctx.args.writer.commit()
188
199
}
189
- index ! (' committed , newSeq )
200
+ index ! (' committed , newUpdateSeq, newPurgeSeq )
190
201
} catch {
191
202
case e : AlreadyClosedException =>
192
203
logger.error(" Commit failed to closed writer" , e)
@@ -569,7 +580,8 @@ class IndexService(ctx: ServiceContext[IndexServiceArgs]) extends Service(ctx) w
569
580
(' doc_count , reader.numDocs),
570
581
(' doc_del_count , reader.numDeletedDocs),
571
582
(' pending_seq , pendingSeq),
572
- (' committed_seq , getCommittedSeq)
583
+ (' committed_seq , getCommittedSeq),
584
+ (' purge_seq , pendingPurgeSeq)
573
585
)
574
586
}
575
587
@@ -590,6 +602,16 @@ class IndexService(ctx: ServiceContext[IndexServiceArgs]) extends Service(ctx) w
590
602
}
591
603
}
592
604
605
+ private def getCommittedPurgeSeq = {
606
+ val commitData = ctx.args.writer.getCommitData
607
+ commitData.get(" purge_seq" ) match {
608
+ case null =>
609
+ 0L
610
+ case seq =>
611
+ seq.toLong
612
+ }
613
+ }
614
+
593
615
private def parseSort (v : Any ): Sort = v match {
594
616
case ' relevance =>
595
617
Sort .RELEVANCE
0 commit comments