Rate this page:
Bitbucket Server has a lightweight indexing process that occurs every time new commits are pushed to its repositories. Commit indexer plugin modules let you extend the indexing pipeline and store additional indexed data. This allows your plugin to, for example, watch commit messages or other commit metadata for particular content or efficiently store additional information about commits for later retrieval.
Example commit indexers might include:
Commit indexers should be fast. The indexing process is applied to every commit pushed to Bitbucket Server, so long-running
or computationally expensive indexing operations can have a serious impact on server performance. Where possible,
indexers should avoid making database queries or calling service methods which might fork git
processes. If those
types of operations are required for the indexer to work, look for ways to do that processing in batches to reduce
the overhead from repeatedly accessing the database or spawning new processes.
Commit indexers may be invoked concurrently, so they should avoid storing local state. Indexers are provided with a
simple key/value store
that can be used to store such state in a way that is associated with a specific indexing run. State stored in the
IndexingContext
is not added to the CommitIndex
!
To add new properties to the index, you must call CommitIndex.addProperty(String, String, String)
.
Key/value pairs stored in the IndexingContext
are discarded when the indexing run completes.
See the CommitIndexer
documentation for more details.
onAfterIndexing
callback, or scheduling additional
bulk processing in the ofAfterIndexing
callback.The root element for the Commit Indexer plugin module is <commit-indexer/>
. It allows the following attributes for
configuration:
Name | Required | Description | Default |
---|---|---|---|
key | Yes | The identifier of the plugin module. This key must be unique within the plugin where it is defined. | N/A |
class | Yes | The fully qualified Java class name of the indexer. This class must implement CommitIndexer. | N/A |
Here is an example atlassian-plugin.xml
file containing a single commit indexer:
1 2 3 4 5 6 7 8 9
<atlassian-plugin name="My Commit Indexer" key="example.plugin.indexer" plugins-version="2">
<plugin-info>
<description>My Commit Indexer Test</description>
<vendor name="My Company" url="http://www.mycompany.com"/>
<version>1.0</version>
</plugin-info>
<commit-indexer key="myCommitIndexer" class="com.mycompany.example.plugin.MyCommitIndexer"/>
</atlassian-plugin>
And here's an example CommitIndexer
implementation that indexes whether commits have been committed by an author from Atlassian:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
public class MyCommitIndexer implements CommitIndexer {
private final CommitIndex index;
public MyCommitIndexer(CommitIndex index) {
this.index = index;
}
@Nonnull
@Override
public String getId() {
// must be unique across *all* indexers
return "atlassian-author-indexer";
}
@Override
public boolean isEnabledForRepository(@Nonnull Repository repository) {
// allows conditionally indexing repositories
return true;
}
@Override
public void onAfterIndexing(@Nonnull IndexingContext context) {
// no-op, no tear down required
}
@Override
public void onBeforeIndexing(@Nonnull IndexingContext context) {
// no-op, no setup required
}
@Override
public void onCommitAdded(@Nonnull Commit commit, @Nonnull IndexingContext context) {
// set the 'byAtlassian' property if the author's email address ends in '@atlassian.com'
String email = commit.getAuthor().getEmailAddress();
if (email != null && email.endsWith("@atlassian.com")) {
index.addProperty(commit.getId(), "byAtlassian", "true");
}
}
@Override
public void onCommitRemoved(@Nonnull Commit commit, @Nonnull IndexingContext context) {
// no-op, no clean up required - indexed properties are generally cleaned up automatically
}
}
Usually the methods on CommitIndex
and CommitService
are sufficient for dealing with properties. However, the Commit Property Config Plugin Module
can be used to automatically decorate commits returned by Bitbucket Server's Java API and
REST API with properties indexed
by your plugin.
Rate this page: