Giter Club home page Giter Club logo

search-for-stash-issues's Introduction

NOTICE: We've now moved all issue tracking to JIRA, to open an issue, look here.

Smarter Search for Bitbucket

Smarter Search for Bitbucket is a code, file and commit search service for Atlassian's Bitbucket. It's powered by Elasticsearch, which can be configured to be an external or internal Bitbucket service.

Table of Contents


Installation Requirements

Smarter Search for Bitbucket requires that your server use git 1.8.5 or higher.

Smarter Search for Bitbucket is powered by Elasticsearch. Either an internal or external node can be used. This node handles all search requests and all repository indexing.

If you want to use an external node, you must use Elasticsearch 2.1.1. ####Internal Node By default, Smarter Search for Bitbucket spawns an internal elasticsearch node. The initial indexing of large repositories can potentially require a large portion of RAM. It is recommended to allocate Bitbucket 6GB of RAM for optimal performance. For instructions on changing the amount of memory available to Bitbucket, take a look at Altassian's documentation here.

As an example benchmark, Smarter Search for Bitbucket indexed the Linux code base which is approximately 15 million lines of code and half a million commits in 2-3 minutes with 6 GB of ram on non SSD harddives with an internal node. That said, it is recommended that for large codebases you use an external Elasticsearch node. For any concerns or questions, feel free to contact us.

####External Node For Bitbucket instances with large codebases and a lot of indexing, it's recommended to setup a separate Elasticsearch service. This will reduce the strain on Bitbucket for indexing, and should significantly improve performance. You can configure an external node in the settings page.


Installing

####Internal Node After installing the plugin in your bitbucket instance, you must enable indexing and trigger a reindex:

  1. Go to Smarter Search for Bitbucket Global Settings page in the Bitbucket admin panel.
  2. Enable Indexing by clicking the check box.
  3. Click Save and Reindex to save the settings and subsequently reindex all repositories.

####External Node You must first setup an external Elasticsearch cluster. For help on that, look here. Make sure you install the Delete By Query plugin as well. The scripts we've included will do this for you. Smarter Search for Bitbucket has a configuration page in the global settings to use to point to your Elasticsearch instance.

enter image description here

For testing purposes, we've provided some scripts for installing and running an elasticsearch instance. You can obtain an instance of Elasticsearch by running the provided bin/install-elasticsearch-instance.sh script. To run an Elasticsearch instance, run bin/invoke-es.sh. Make sure that elasticearch.yml is in the directory you are invoking Elasticsearch in so that the Elasticsearch configuration is picked up.

Once the node is setup, you must configure Smarter Search for Bitbucket:

  1. Go to Smarter Search for Bitbucket Global Settings page in the Bitbucket admin panel.
  2. Enable Indexing by clicking the check box.
  3. Uncheck the Internal ES Node checkbox.
  4. Click Save and Reindex to save the settings and subsequently reindex all repositories.

Smarter Search for Bitbucket will then start indexing all of your bitbucket repositories in the background. It will take a few seconds to a few minutes to finish depending on the number and size of your repositories. For large Bitbucket instances, it is recommend indexing to be done during non peak hours.

By default, only the master and develop branches are indexed. Individual repo admins may modify these settings. See below for instructions.


Features

Since Smarter Search for Bitbucket is powered by Elasticsearch. It utilizes Elasticsearch's powerful Query String Syntax. This includes support for wildcards, regular expressions, fuzziness, and much more.

There are also many advanced filtering options. Here is a brief summary:

Option Description
Search code, filenames and commits Filter results to only code, commits, or filenames
Project keys Filter results to specific projects
Repository slugs Filter results to certain slugs.
Ref names Filter results to certain refs
File extensions Filter results to certain file extentions
Author/editor names or emails Filter results to a specific author
Committed on or after/before (Commits only) Filter results to a certain date range.

Administration

Smarter Search for Bitbucket has advanced configuration settings. These settings should only be adjusted by advanced users.

Setting Description
Internal ES Node Check this box to use an internal elasticsearch service.
Indexing Check this box to enable indexing of new source code & commits
Indexing Concurrency Limit Maximum number of concurrent indexing jobs
Max Filesize Maximum size (in bytes) of source code files to index
Search Timeout Timeout (in ms) of all search requests
Unhighlighted Extensions Comma-separated list of file extensions to exclude from syntax highlighting
Preview Limit Maximum number of lines to display for file previews
Match Limit Maximum number of lines to display for file matches
Fragment Limit Maximum number of match fragments to display for file matches
Page Size Number of results to display per page
Commit Hash Boost Boosting factor of results with matching commit hashes (relative to source code matches)
Commit Subject Boost Boosting factor of results with matching commit subjects
Commit Body Boost Boosting factor of results with matching commit message bodies
Filename Boost Boosting factor of results with matching file names

Repository Settings

By default, only master and develop are indexed. Individual repo admins may modify these settings as follows:

  • Go to the Smarter Search for Bitbucket Repository Settings page in your repository settings panel.
  • Change the ref regex to match your desired branches.
  • Click Save or Save and Reindex to save the settings and subsequently reindex all repositories.

For example if we wanted to add the branch my-branch, we would modify the regex to look like :

HEAD|(refs/heads/(master|develop|my-branch))

You can also disable indexing for a specific repository.

Plugin Logging

The plugin has a robust logging system. The following log files exist for the plugin in the <bitbucket-home>/home/logs/ folder:

Log file Type of logs
sfb-plugin.log All logs of nominal plugin operations, with any errors.
sfb-plugin-debug.log All logs of nominal plugin operations, as well as debugging logs.
sfb-elasticsearch.log Logs for only the internal Elasticsearch node.
sfb-elasticsearch-debug.log Logs for only the internal Elasticsearch node, as well as debugging logs.
It is important to note that debug log information will not be recorded unless debug logging has been turned on in Bitbucket's settings.

FAQ

####Assuming I use the embedded Elasticsearch

#####a. What is the added load on my server? Initial indexing can potentially require large amounts of ram. We recommend allocating at least 6GB to the Bitbucket instance. As an example benchmark, our plugin indexed the Linux code base which is approximately 15 million lines of code and half a million commits in 2-3 minutes with 6GB of ram on non SSD harddrives with an internal node. Most of the strain on the system is generated by the initial indexing.

#####b. Are there special HW requirements to support it? No, but SSD's improve indexing speed tremendously.

If I use the global search, will it apply permissions restrictions (meaning if I have no access to a project/repository it will omit them from results)?

Repository permissions are applied to search results.

How do I control the Elasticsearch process?

The internal node is embedded in the Bitbucket JVM. You can manually trigger indexing operations by going to global settings or the individual settings of the repository. If you want to see detailed logs on the Bitbucket side, just take a look at the logs. If you want even more detailed logs, you have to enable debug mode.

How can I re-index all?

Go to the admin panel in Bitbucket, there should be a Search Global Settings option now under addons. Click Reindex all and it will trigger a reindex. Make sure indexing is enabled.

How can I know indexing status?

There currently isn't a last indexed status feature built in. This is something that's on our road-map.

After a code change, how soon should I expect the search to find it?

All pushed changes generate events that our event handlers capture. It should be a matter of seconds until its indexed.

How much disk space is used by this add-on?

The indexer will pull Bitbucket repositories to the temp folder when it wants to index. So the repo will temporarily be stored on the server. The Elasticsearch node will worst case use around the same amount of space as Bitbucket is using to store repositories, so double your current disk-space to be safe.

Is there an API I can use for queries?

You plugin currently does not have an API, but the Elasticsearch node does. You cannot currently query the internal node because of security reasons. You must use an external node if you want to query the node. Check here for more info on querying Elasticsearch.

Please tell me, for every new commit, is the entire project indexed, or just the changes files in that commit?

For every new commit, the plugin will do a diff of the changes and then apply those changes to the index. It doesn't reindex the whole repository because it doesn't have to.

Which version of Elasticsearch do I need for an external node?

You currently must use Elastichsearch version 1.5.2. We are planning on adding Elasticsearch 2.0 support in the near future.


Reporting a Bug

If you encounter a bug, please open an issue here, and then send us the logs detailed in Plugin Logging to support.

Contact Us

If you want to get help, request a feature or report a bug, please email us at contact us or open an issue. We'd love to hear from you!

search-for-stash-issues's People

Contributors

mdavoodi avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

mmielke-ciena

search-for-stash-issues's Issues

Show last indexed time

Currently the plugin does not show when the last time a repository index was run. This information should be shown so that the user knows that the results they're seeing might not be up to date.

Support searching diffs

Some users have reported that fisheye indexes diffs which gives it an advantage over the Search for Bitbucket plugin. We need to look at the exact feature parity to see what the exact differences are.

Smarter Search Addon not worked with Bitbucket Server last Version

Hello Developers,

I use Bitbucket Server in the very latest version under CentOS 7.3. Unfortunately this add-on can not be activated.

It is displayed, I must look in the logs because of error messages.

Can you confirm that the addon works on Linux?

Thanks in advance.

Consolidate Elasticsearch nodes

Currently we spin up our own elasticsearch node instead of using the one Atlassian spins up. It would be convenient and cleaner if we just used Atlassians.

Index repositories on plugin enabling instead of requiring Admin to start indexing

The reason we didn't make it happen on enable and disable is because for very large bitbucket repositories, indexing can be an expensive operation. To the point where it is lagging Bitbucket. This is why we left it in control of the user. Some users also want to configure an external node
and if index on enabling, then we don't allow them a chance for them to set that up.

Batch modify branch indexing schemes

Currently the default branch indexing scheme can be configured on a repository level, but for large organizations it's difficult to configure this scheme for each individual repository.

There should be an easy way to configure the indexing schemes on either a project or global level.

Searching will throw a 500 error if searching on a machine that has no index.

INFO] [talledLocalContainer] org.elasticsearch.indices.IndexMissingException: [scs-search] missing
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.convertFromWildcards(MetaData.java:795) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.concreteIndices(MetaData.java:667) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.(TransportSearchTypeAction.java:113) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:64) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:61) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:51) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:101) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:124) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:113) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.handleRequest(MessageChannelHandler.java:217) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:111) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) ~[na:na]
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_60]
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_60]
[INFO] [talledLocalContainer] ... 1 frame trimmed
[INFO] [talledLocalContainer] Sep 26, 2015 1:38:14 PM org.apache.catalina.core.ApplicationContext log
[INFO] [talledLocalContainer] SEVERE: Unhandled exception occurred whilst decorating page
[INFO] [talledLocalContainer] org.elasticsearch.indices.IndexMissingException: [scs-search] missing
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.convertFromWildcards(MetaData.java:795)
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.concreteIndices(MetaData.java:667)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.(TransportSearchTypeAction.java:113)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:70)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:64)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:61)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:51)
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:101)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43)
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:124)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:113)
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.handleRequest(MessageChannelHandler.java:217)
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:111)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745)
[INFO] [talledLocalContainer]
[INFO] [talledLocalContainer] 2015-09-26 13:38:14,470 ERROR [http-nio-7990-exec-5] o.a.c.c.C.[.[.[/bitbucket].[plugins] Servlet.service() for servlet [plugins] in context with path [/bitbucket] threw exception
[INFO] [talledLocalContainer] org.elasticsearch.indices.IndexMissingException: [scs-search] missing
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.convertFromWildcards(MetaData.java:795) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.concreteIndices(MetaData.java:667) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.(TransportSearchTypeAction.java:113) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:64) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:61) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:51) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:101) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:124) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:113) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.handleRequest(MessageChannelHandler.java:217) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:111) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) ~[na:na]
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_60]
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60]
[INFO] [talledLocalContainer] ... 1 frame trimmed
[INFO] [talledLocalContainer] Sep 26, 2015 1:38:14 PM org.apache.catalina.core.StandardWrapperValve invoke
[INFO] [talledLocalContainer] SEVERE: Servlet.service() for servlet [plugins] in context with path [/bitbucket] threw exception
[INFO] [talledLocalContainer] org.elasticsearch.indices.IndexMissingException: [scs-search] missing
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.convertFromWildcards(MetaData.java:795)
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.concreteIndices(MetaData.java:667)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.(TransportSearchTypeAction.java:113)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:70)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:64)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:61)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:51)
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:101)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43)
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:124)
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:113)
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.handleRequest(MessageChannelHandler.java:217)
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:111)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745)
[INFO] [talledLocalContainer]
[INFO] [talledLocalContainer] 2015-09-26 13:38:14,528 ERROR [http-nio-7990-exec-5] @1AUCTB0x818x1540x0 1tc9fk7 127.0.0.1 "GET /mvc/error500 HTTP/1.1" c.a.s.i.web.ErrorPageController There was an unhandled exception loading [/bitbucket/plugins/servlet/codesearch/search]
[INFO] [talledLocalContainer] org.elasticsearch.indices.IndexMissingException: [scs-search] missing
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.convertFromWildcards(MetaData.java:795) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.cluster.metadata.MetaData.concreteIndices(MetaData.java:667) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.(TransportSearchTypeAction.java:113) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.(TransportSearchQueryThenFetchAction.java:64) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:61) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction.doExecute(TransportSearchQueryThenFetchAction.java:51) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:101) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:43) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:65) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:124) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.action.search.TransportSearchAction$TransportHandler.messageReceived(TransportSearchAction.java:113) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.handleRequest(MessageChannelHandler.java:217) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:111) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:74) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[na:na]
[INFO] [talledLocalContainer] at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) ~[na:na]
[INFO] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_60]
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_60]
[INFO] [talledLocalContainer] ... 1 frame trimmed

Skip repository if no default branch is defined

Currently indexing will be halted if a repository does not have a default branch. We need to skip the repository if it doesn't have a branch.

13:58:34.492 [Thread-237] WARN c.m.s.s.admin.GlobalSettingsServlet - Caught exception while reindexing com.atlassian.bitbucket.repository.NoDefaultBranchException: No default branch is defined at com.atlassian.stash.internal.scm.git.RawGitAgent.getHead(RawGitAgent.java:136) ~[na:na] at com.atlassian.stash.internal.scm.git.DefaultGitCommandFactory.branches(DefaultGitCommandFactory.java:109) ~[na:na] at com.atlassian.stash.internal.scm.git.DefaultGitCommandFactory.branches(DefaultGitCommandFactory.java:61) ~[na:na] at com.atlassian.stash.internal.scm.PluginScmCommandFactory.branches(PluginScmCommandFactory.java:46) ~[bitbucket-service-impl-4.4.1.jar:na] at com.atlassian.stash.internal.repository.DefaultRefService.getBranches(DefaultRefService.java:160) ~[bitbucket-service-impl-4.4.1.jar:na] at sun.reflect.GeneratedMethodAccessor710.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_74] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at com.atlassian.stash.internal.aop.ProfilingAspect.profileMethod(ProfilingAspect.java:48) ~[bitbucket-platform-4.4.1.jar:na] at sun.reflect.GeneratedMethodAccessor144.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_74] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at com.atlassian.stash.internal.aop.ThrottledAspect.throttle(ThrottledAspect.java:52) ~[bitbucket-platform-4.4.1.jar:na] at sun.reflect.GeneratedMethodAccessor706.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_74] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:64) ~[spring-security-core-3.2.7.RELEASE.jar:3.2.7.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) ~[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:125) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at com.sun.proxy.$Proxy239.getBranches(Unknown Source) ~[na:na] at sun.reflect.GeneratedMethodAccessor710.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_74] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74] at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) ~[atlassian-plugins-core-4.1.1.jar:na] at com.sun.proxy.$Proxy326.getBranches(Unknown Source) ~[na:na] at sun.reflect.GeneratedMethodAccessor710.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_74] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74] at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136) ~[atlassian-plugins-osgi-bridge-4.1.1.jar:na] at com.sun.proxy.$Proxy326.getBranches(Unknown Source) ~[na:na] at com.mohamicorp.stash.searchforstash.repository.RepositoryServiceManagerImpl.getBranchMap(RepositoryServiceManagerImpl.java:78) ~[plugin.495922907779022355.search-for-stash-2.2_1460749823000.jar:na] at com.mohamicorp.stash.searchforstash.updater.SearchUpdaterImpl.reindexAll(SearchUpdaterImpl.java:673) ~[plugin.495922907779022355.search-for-stash-2.2_1460749823000.jar:na] at com.mohamicorp.stash.searchforstash.admin.GlobalSettingsServlet$1$1.perform(GlobalSettingsServlet.java:316) ~[plugin.495922907779022355.search-for-stash-2.2_1460749823000.jar:na] at com.mohamicorp.stash.searchforstash.admin.GlobalSettingsServlet$1$1.perform(GlobalSettingsServlet.java:312) ~[plugin.495922907779022355.search-for-stash-2.2_1460749823000.jar:na] at com.atlassian.stash.internal.user.DefaultEscalatedSecurityContext.call(DefaultEscalatedSecurityContext.java:51) ~[bitbucket-service-impl-4.4.1.jar:na] at com.mohamicorp.stash.searchforstash.admin.GlobalSettingsServlet$1.run(GlobalSettingsServlet.java:312) ~[plugin.495922907779022355.search-for-stash-2.2_1460749823000.jar:na] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_74]

Context aware title bar searches

When we use the search box from the title bar, and pre-select a search options as: project, repository, pull request, commits, based on the currently viewed page.

ES not running on localhost:9300

I have a ES service running on it's own dedicated server, as opposed to localhost:9300 I can't find a way to setup the FQDN and port for the ES endpoint. Where do I find this?

Support setting default search content

Users can get overwhelmed by whats returned by the search results now that there are so many things being indexed. Having even a simple cookie would make users lives a lot easier.

Improve results indexing analyzer

We're currently using a very basic elasticsearch analyzer, theres a lot of improvements that we could make to help increase the accuracy of results.

Support literal search for special characters

Currently if a user searches for something like "setUp(", the search will not consider the parenthesis as part of the search since it's a reserved character in the lucene syntax language.

This is also something that Atlassian's default search does not support. It would be nice and very useful to start supporting these sort of characters.

Repository dropdown search needs better accuracy.

Type in the name of a respository – we have hundreds. The little drop down that shows just repositories seems to get updated a few times before the ‘perfect match’ comes out on top.

We can update the analyzer to help filter results better. We can also change the dropdown so it wont start querying until multiple characters have been entered.

Add type filter bar

Add a bar to be able to filter through result types. I'm imaging something similar to github.

Add repository name indexing

The new search bar integration got rid of repository name searches. We need to add that back in to get on feature parity.

UI overhaul

It would be nice to get the UI to fit the Atlassian style more.

NPE trying to enable search for stash

I'm using Bit Bucket 4.3.1, and trying to enable this plugin I get a Null Pointer Exception:

2016-01-25 06:32:49,842 ERROR [http-nio-127.0.0.1-8803-exec-6] prez @17K2I0Xx392x140x0 1248jwp 2001:470:8:79b:390f:e670:1670:82ff,127.0.0.1 "PUT /rest/plugins/1.0/com.mohamicorp.stash.search-for-stash-key HTTP/1.0" c.a.p.manager.DefaultPluginManager There was an error loading the descriptor 'Search' of plugin 'com.mohamicorp.stash.search-for-stash'. Disabling.
java.lang.NullPointerException: null
at com.atlassian.stash.internal.plugin.StashWebFragmentHelper.loadComponent(StashWebFragmentHelper.java:80) ~[bitbucket-platform-4.3.1.jar:na]
at com.atlassian.stash.internal.plugin.StashWebFragmentHelper.loadCondition(StashWebFragmentHelper.java:47) ~[bitbucket-platform-4.3.1.jar:na]
at com.atlassian.plugin.web.descriptors.AbstractWebFragmentModuleDescriptor$1.create(AbstractWebFragmentModuleDescriptor.java:169) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.ConditionElementParser.makeConditionImplementation(ConditionElementParser.java:86) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.ConditionElementParser.makeConditionImplementation(ConditionElementParser.java:29) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.baseconditions.AbstractConditionElementParser.makeCondition(AbstractConditionElementParser.java:116) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.ConditionElementParser.makeCondition(ConditionElementParser.java:73) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.ConditionElementParser.makeCondition(ConditionElementParser.java:29) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.baseconditions.AbstractConditionElementParser.makeConditions(AbstractConditionElementParser.java:100) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.ConditionElementParser.makeConditions(ConditionElementParser.java:65) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.ConditionElementParser.makeConditions(ConditionElementParser.java:29) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.baseconditions.AbstractConditionElementParser.makeConditions(AbstractConditionElementParser.java:57) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.ConditionElementParser.makeConditions(ConditionElementParser.java:57) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.AbstractWebFragmentModuleDescriptor.makeConditions(AbstractWebFragmentModuleDescriptor.java:72) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.AbstractWebFragmentModuleDescriptor.enabled(AbstractWebFragmentModuleDescriptor.java:128) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.plugin.web.descriptors.DefaultWebItemModuleDescriptor.enabled(DefaultWebItemModuleDescriptor.java:72) ~[atlassian-plugins-webfragment-4.0.1.jar:na]
at com.atlassian.stash.internal.plugin.StashWebItemModuleDescriptor.enabled(StashWebItemModuleDescriptor.java:38) ~[bitbucket-platform-4.3.1.jar:na]
at com.atlassian.plugin.manager.DefaultPluginManager.notifyModuleEnabled(DefaultPluginManager.java:2168) [atlassian-plugins-core-4.0.4.jar:na]
at com.atlassian.plugin.manager.DefaultPluginManager.enableConfiguredPluginModule(DefaultPluginManager.java:1850) [atlassian-plugins-core-4.0.4.jar:na]
at com.atlassian.plugin.manager.DefaultPluginManager.enableConfiguredPluginModules(DefaultPluginManager.java:1822) [atlassian-plugins-core-4.0.4.jar:na]
at com.atlassian.plugin.manager.DefaultPluginManager.enablePlugins(DefaultPluginManager.java:1761) [atlassian-plugins-core-4.0.4.jar:na]
at com.atlassian.stash.internal.plugin.ClusteredPluginController.enablePlugins(ClusteredPluginController.java:55) [bitbucket-platform-4.3.1.jar:na]
at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:30) [atlassian-plugins-core-4.0.4.jar:na]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at com.atlassian.upm.core.impl.PluginEnablementServiceImpl$1.doInTransaction(PluginEnablementServiceImpl.java:87) [plugin.1639948702790444917.atlassian-universal-plugin-manager-plugin-2.20.5_1453533943000.jar:na]
at com.atlassian.upm.core.impl.PluginEnablementServiceImpl$1.doInTransaction(PluginEnablementServiceImpl.java:63) [plugin.1639948702790444917.atlassian-universal-plugin-manager-plugin-2.20.5_1453533943000.jar:na]
at com.atlassian.sal.core.transaction.HostContextTransactionTemplate$1.doInTransaction(HostContextTransactionTemplate.java:21) [sal-core-3.0.5.jar:na]
at com.atlassian.stash.internal.sal.spi.HostContextAccessorImpl.doInTransaction(HostContextAccessorImpl.java:54) [bitbucket-platform-4.3.1.jar:na]
at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:30) [atlassian-plugins-core-4.0.4.jar:na]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at com.atlassian.sal.core.transaction.HostContextTransactionTemplate.execute(HostContextTransactionTemplate.java:18) [sal-core-3.0.5.jar:na]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57) [gemini-blueprint-core-2.0.0.BUILD-atlassian-m002.jar:2.0.0.BUILD-atlassian-m002]
at com.atlassian.upm.core.impl.PluginEnablementServiceImpl.enablePlugin(PluginEnablementServiceImpl.java:62) [plugin.1639948702790444917.atlassian-universal-plugin-manager-plugin-2.20.5_1453533943000.jar:na]
at com.atlassian.upm.core.rest.resources.PluginResource.put(PluginResource.java:122) [plugin.1639948702790444917.atlassian-universal-plugin-manager-plugin-2.20.5_1453533943000.jar:na]
at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:26) [applinks-plugin-5.0.5_1453291510000.jar:na]
at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:26) [applinks-plugin-5.0.5_1453291510000.jar:na]
at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:26) [applinks-plugin-5.0.5_1453291510000.jar:na]
at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:26) [applinks-plugin-5.0.5_1453291510000.jar:na]
at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:26) [applinks-plugin-5.0.5_1453291510000.jar:na]
at com.atlassian.plugin.connect.plugin.auth.scope.ApiScopingFilter.doFilter(ApiScopingFilter.java:89) [atlassian-connect-plugin-1.1.65-bitbucket-03.jar:na]
at com.atlassian.stash.internal.spring.security.StashAuthenticationFilter.doFilter(StashAuthenticationFilter.java:88) [StashAuthenticationFilter.class:na]
at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doInsideSpringSecurityChain(BeforeLoginPluginAuthenticationFilter.java:109) [BeforeLoginPluginAuthenticationFilter.class:na]
at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doFilter(BeforeLoginPluginAuthenticationFilter.java:75) [BeforeLoginPluginAuthenticationFilter.class:na]
at com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:94) [atlassian-trusted-apps-core-4.2.0.jar:na]
at com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:67) [atlassian-oauth-service-provider-plugin-2.0.3_1453291510000.jar:na]
at com.atlassian.core.filters.ServletContextThreadLocalFilter.doFilter(ServletContextThreadLocalFilter.java:21) [atlassian-core-4.6.19.jar:na]
at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) [atlassian-core-4.6.19.jar:na]
at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.doFilter(ThreeLeggedAuthFilter.java:122) [atlassian-connect-plugin-1.1.65-bitbucket-03.jar:na]
at com.atlassian.plugin.connect.plugin.auth.oauth.OAuth2LOFilter.doFilter(OAuth2LOFilter.java:82) [atlassian-connect-plugin-1.1.65-bitbucket-03.jar:na]
at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32) [jwt-plugin-1.5.5_1453291510000.jar:na]
at com.atlassian.analytics.client.filter.DefaultAnalyticsFilter.doFilter(DefaultAnalyticsFilter.java:36) [analytics-client-4.3.9_1453291510000.jar:na]
at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:32) [analytics-client-4.3.9_1453291510000.jar:na]
at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doBeforeBeforeLoginFilters(BeforeLoginPluginAuthenticationFilter.java:87) [BeforeLoginPluginAuthenticationFilter.class:na]
at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doFilter(BeforeLoginPluginAuthenticationFilter.java:73) [BeforeLoginPluginAuthenticationFilter.class:na]
at com.atlassian.stash.internal.request.DefaultRequestManager.doAsRequest(DefaultRequestManager.java:85) ~[bitbucket-service-impl-4.3.1.jar:na]
at com.atlassian.stash.internal.hazelcast.ConfigurableWebFilter.doFilter(ConfigurableWebFilter.java:38) ~[ConfigurableWebFilter.class:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_65]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_65]
... 299 frames trimmed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.