Skip to content

Commit 63dbdfd

Browse files
committed
Reindex tickets on server start if no index exists
Check if tickets need to be reindexed when the server starts. This is the case if no ticket index exists. In that case the ticket index is built. This is done during the start of the `ITicketService`. For this the interface of `ITicketService` needed to change. The `start` method was defined abstract and the specific ticket services had to implement it. None does any real starting stuff in it. The `start` method is now final. It calls a new abstract method `onStart` which the specific ticket services need to implement. In the existing implementations I just changed `start` to `onStart`.
1 parent 197ddd2 commit 63dbdfd

11 files changed

+58
-21
lines changed

src/main/java/com/gitblit/tickets/BranchTicketService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,8 @@ public BranchTicketService(
110110
}
111111

112112
@Override
113-
public BranchTicketService start() {
113+
public void onStart() {
114114
log.info("{} started", getClass().getSimpleName());
115-
return this;
116115
}
117116

118117
@Override

src/main/java/com/gitblit/tickets/FileTicketService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,8 @@ public FileTicketService(
8080
}
8181

8282
@Override
83-
public FileTicketService start() {
83+
public void onStart() {
8484
log.info("{} started", getClass().getSimpleName());
85-
return this;
8685
}
8786

8887
@Override

src/main/java/com/gitblit/tickets/ITicketService.java

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,24 @@ public ITicketService(
181181
* @since 1.4.0
182182
*/
183183
@Override
184-
public abstract ITicketService start();
184+
public final ITicketService start() {
185+
onStart();
186+
if (shouldReindex()) {
187+
log.info("Re-indexing all tickets...");
188+
// long startTime = System.currentTimeMillis();
189+
reindex();
190+
// float duration = (System.currentTimeMillis() - startTime) / 1000f;
191+
// log.info("Built Lucene index over all tickets in {} secs", duration);
192+
}
193+
return this;
194+
}
195+
196+
/**
197+
* Start the specific ticket service implementation.
198+
*
199+
* @since 1.9.0
200+
*/
201+
public abstract void onStart();
185202

186203
/**
187204
* Stop the service.
@@ -196,6 +213,12 @@ public final ITicketService stop() {
196213
return this;
197214
}
198215

216+
/**
217+
* Closes any open resources used by this service.
218+
* @since 1.4.0
219+
*/
220+
protected abstract void close();
221+
199222
/**
200223
* Creates a ticket notifier. The ticket notifier is not thread-safe!
201224
* @since 1.4.0
@@ -273,12 +296,6 @@ public boolean hasTickets(RepositoryModel repository) {
273296
return indexer.hasTickets(repository);
274297
}
275298

276-
/**
277-
* Closes any open resources used by this service.
278-
* @since 1.4.0
279-
*/
280-
protected abstract void close();
281-
282299
/**
283300
* Reset all caches in the service.
284301
* @since 1.4.0
@@ -1343,6 +1360,18 @@ public List<QueryResult> queryFor(String query, int page, int pageSize, String s
13431360
return indexer.queryFor(query, page, pageSize, sortBy, descending);
13441361
}
13451362

1363+
1364+
/**
1365+
* Checks tickets should get re-indexed.
1366+
*
1367+
* @return true if tickets should get re-indexed, false otherwise.
1368+
*/
1369+
private boolean shouldReindex()
1370+
{
1371+
return indexer.shouldReindex();
1372+
}
1373+
1374+
13461375
/**
13471376
* Destroys an existing index and reindexes all tickets.
13481377
* This operation may be expensive and time-consuming.

src/main/java/com/gitblit/tickets/NullTicketService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,8 @@ public boolean isReady() {
6161
}
6262

6363
@Override
64-
public NullTicketService start() {
64+
public void onStart() {
6565
log.info("{} started", getClass().getSimpleName());
66-
return this;
6766
}
6867

6968
@Override

src/main/java/com/gitblit/tickets/RedisTicketService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,11 @@ public RedisTicketService(
8383
}
8484

8585
@Override
86-
public RedisTicketService start() {
86+
public void onStart() {
8787
log.info("{} started", getClass().getSimpleName());
8888
if (!isReady()) {
8989
log.warn("{} is not ready!", getClass().getSimpleName());
9090
}
91-
return this;
9291
}
9392

9493
@Override

src/main/java/com/gitblit/tickets/TicketIndexer.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,18 @@ public boolean deleteAll(RepositoryModel repository) {
226226
return false;
227227
}
228228

229+
/**
230+
* Checks if a tickets index exists, that is compatible with Lucene.INDEX_VERSION
231+
* and the Lucene codec version.
232+
*
233+
* @return true if no tickets index is found, false otherwise.
234+
*
235+
* @since 1.9.0
236+
*/
237+
boolean shouldReindex() {
238+
return ! this.indexStore.hasIndex();
239+
}
240+
229241
/**
230242
* Bulk Add/Update tickets in the Lucene index
231243
*
@@ -665,4 +677,4 @@ private int unpackInt(Document doc, Lucene lucene) {
665677
int i = Integer.parseInt(val);
666678
return i;
667679
}
668-
}
680+
}

src/main/java/com/gitblit/utils/LuceneIndexStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public boolean hasIndex()
9292
{
9393
return indexFolder.exists() &&
9494
indexFolder.isDirectory() &&
95-
(indexFolder.list().length > 1);
95+
(indexFolder.list().length > 1); // Must have more than 'write.lock'
9696
}
9797

9898
}

src/test/java/com/gitblit/tests/BranchTicketServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ protected ITicketService getService(boolean deleteAll) throws Exception {
5959
IUserManager userManager = new UserManager(runtimeManager, pluginManager).start();
6060
IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, pluginManager, userManager).start();
6161

62-
BranchTicketService service = new BranchTicketService(
62+
BranchTicketService service = (BranchTicketService) new BranchTicketService(
6363
runtimeManager,
6464
pluginManager,
6565
notificationManager,

src/test/java/com/gitblit/tests/FileTicketServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ protected ITicketService getService(boolean deleteAll) throws Exception {
5858
IUserManager userManager = new UserManager(runtimeManager, pluginManager).start();
5959
IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, pluginManager, userManager).start();
6060

61-
FileTicketService service = new FileTicketService(
61+
FileTicketService service = (FileTicketService) new FileTicketService(
6262
runtimeManager,
6363
pluginManager,
6464
notificationManager,

src/test/java/com/gitblit/tests/RedisTicketServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ protected ITicketService getService(boolean deleteAll) throws Exception {
6666
IUserManager userManager = new UserManager(runtimeManager, pluginManager).start();
6767
IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, pluginManager, userManager).start();
6868

69-
RedisTicketService service = new RedisTicketService(
69+
RedisTicketService service = (RedisTicketService) new RedisTicketService(
7070
runtimeManager,
7171
pluginManager,
7272
notificationManager,

src/test/java/com/gitblit/tests/UITicketTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ protected ITicketService getService(boolean deleteAll) throws Exception {
8383
IUserManager userManager = new UserManager(runtimeManager, pluginManager).start();
8484
IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, pluginManager, userManager).start();
8585

86-
BranchTicketService service = new BranchTicketService(
86+
BranchTicketService service = (BranchTicketService) new BranchTicketService(
8787
runtimeManager,
8888
pluginManager,
8989
notificationManager,

0 commit comments

Comments
 (0)