# Gerrit 2.13

Download: **[2.13.5](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.5.war)**
| [2.13.4](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.4.war)
| [2.13.3](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.3.war)
| [2.13.2](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.2.war)
| [2.13.1](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.1.war)
| [2.13](https://gerrit-releases.storage.googleapis.com/gerrit-2.13.war)

Documentation: **[2.13.5](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.5/index.html)**
| [2.13.4](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.4/index.html)
| [2.13.3](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.3/index.html)
| [2.13.2](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.2/index.html)
| [2.13.1](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13.1/index.html)
| [2.13](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/index.html)

[TOC]

## Release Highlights

* Support for Large File Storage (LFS)
* Metrics interface
* Hooks plugin
* Secondary index for accounts
* File annotations (blame) in side-by-side diff

## Important Notes

### Schema Changes

This release contains schema changes. To upgrade:

``` sh
  java -jar gerrit.war init -d site_path
```

### Online Reindexing

To use online reindexing for the `changes` secondary index when upgrading
to 2.13.x, the server must first be upgraded to 2.8 (or 2.9) and then through
2.10, 2.11 and 2.12. Skipping a version will prevent the online reindexer from
working.

Gerrit 2.13 introduces a new secondary index for accounts, and this must be
indexed offline before starting Gerrit:

``` sh
  java -jar gerrit.war reindex --index accounts -d site_path
```

If reindexing will be done offline, you may ignore these warnings and upgrade
directly to 2.13.x using the following command that will reindex both `changes`
and `accounts` secondary indexes:

``` sh
  java -jar gerrit.war reindex -d site_path
```

### Hooks Plugin

The server side hooks functionality is moved to a core plugin. Sites
that make use of server side hooks must install this plugin during site init.

## New Features

### Large File Storage (LFS)

Gerrit provides an [extension point](https://gerrit-review.googlesource.com/Documentation/2.13/dev-plugins.html#lfs-extension)
that enables development of plugins implementing the
[LFS protocol](https://github.com/github/git-lfs/blob/master/docs/api/v1/http-v1-batch.md).

By setting
[`lfs.plugin`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#lfs.plugin)
the administrator can configure the name of the plugin which handles LFS requests.

### Access control for git submodule subscriptions

To prevent potential security breaches as described in
[issue 3311](https://bugs.chromium.org/p/gerrit/issues/detail?id=3311), it is now
only possible for a project to subscribe to a submodule if the submodule
explicitly allows itself to be subscribed.

Please see the
[submodules user guide](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-submodules.html)
for details.

Note that when upgrading from an earlier version of Gerrit, permissions for
any existing subscriptions will be automatically added during the database
schema migration.

### Metrics

Metrics about Gerrit's internal state can be sent to external
monitoring systems.

Plugins can provide implementations of the metrics interface to
report metrics to different monitoring systems. The following
plugins are available:

* [JMX](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-jmx)

* [Graphite](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-graphite)

* [Elastic Search](https://gerrit-review.googlesource.com/#/admin/projects/plugins/metrics-reporter-elasticsearch)

Plugins can also provide their own metrics.

See the
[metrics documentation](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/metrics.html)
for further details.

### Hooks

Server side hooks are moved to the
[hooks plugin](https://gerrit-review.googlesource.com/#/admin/projects/plugins/hooks).
Sites that make use of server side hooks should install this
plugin. After installing the plugin, no additional configuration is needed.
The plugin uses the same configuration settings in `gerrit.config`.

### Secondary Index

* The secondary index now supports indexing of accounts.

  The
  [reindex program](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/pgm-reindex.html)
  by default reindexes all changes and accounts. A new
  option allows to explicitly specify whether to reindex changes or accounts.

  The `suggest.fullTextSearch`, `suggest.fullTextSearchMaxMatches` and
  `suggest.fullTextSearchRefresh` configuration options are removed. Full text
  search is supported by default with the account secondary index.

* New ssh command to
[reindex changes](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/cmd-index-changes.html).

### User Interface

* The UI can now be loaded in an iFrame by enabling
[`gerrit.canLoadInIFrame`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#gerrit.canLoadInIFrame)
in the site configuration.

#### Change Screen

* [Issue 106](https://bugs.chromium.org/p/gerrit/issues/detail?id=106):
Allow to select merge commit's parent for diff base in change screen.

* [Issue 3035](https://bugs.chromium.org/p/gerrit/issues/detail?id=3035):
Allow to remove specific votes from a change, while leaving the reviewer on the
change.

* [Issue 3487](https://bugs.chromium.org/p/gerrit/issues/detail?id=3487):
Use 'Ctrl-Alt-e' instead of 'e' to open edit mode.

#### Diff Screens

* Add all syntax highlighting available in CodeMirror.

* Improve search experience in diff screen.

  Ctrl-F, Ctrl-G and Shift-Ctrl-G now bind to the search dialog box provided by
  CodeMirror's search add-on. Enter and Shift-Enter navigate among the search
  results from the CodeMirror search, just like they do in a normal browser
  search. Esc now clears the search result.

  If the user sets `Render` to `Slow` in the diff preferences and the file is less
  than 4000 lines (huge), then Ctrl-F, Ctrl-G and Shift-Ctrl-G fall back to the
  browser search.

* [Issue 2968](https://bugs.chromium.org/p/gerrit/issues/detail?id=2968):
Allow to go back to change list by keyboard shortcut from diff screens.

* Blame annotations.

  By enabling
  [`change.allowBlame`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#change.allowBlame),
  blame annotations can be shown in the side-by-side diff
  screen gutter. Clicking the annotation opens the relevant change.

#### User Preferences

* [Issue 989](https://bugs.chromium.org/p/gerrit/issues/detail?id=989):
New option to control email notifications.

  Users can now choose between 'Enabled', 'Disabled' and 'CC Me on Comments I Write'.

* New option to control adding 'Signed-off-by' footer in commit message of new changes
created online.

* New option to control auto-indent width in inline editor.

* [Issue 890](https://bugs.chromium.org/p/gerrit/issues/detail?id=890):
New diff option to control whether to skip unchanged files when navigating to
the previous or the next file.

### Changes

In order to avoid potentially confusing behavior, when submitting changes in a
batch, submit type rules may not be used to mix submit types on a single branch,
and trying to submit such a batch will fail.

### REST API

#### Accounts

* [Issue 3766](https://bugs.chromium.org/p/gerrit/issues/detail?id=3766):
Allow users with the
['ModifyAccount' capability](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/access-control.html#capability_modifyAccount)
to get the preferences for other users via the
[Get User Preferences endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-user-preferences).

* Rename 'Suggest Account' to
['Query Account'](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#query-account)
and add support for arbitrary account queries.

  The `_more_accounts` flag is set on the last result when there are more results
  than the limit. The `DETAILS` and `ALL_EMAILS` options may be set to control
  whether the results should include details (full name, email, username, avatars)
  and all emails, respectively.

* New endpoint:
[Get Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-watched-projects).

* New endpoint:
[Set Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#set-watched-projects).

* New endpoint:
[Delete Watched Projects](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#delete-watched-projects).

* New endpoint:
[Get Star Labels from Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-stars).

* New endpoint:
[Update Star Labels on Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#set-stars).

* New endpoint:
[Get OAuth Access Token](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#get-oauth-token).

* New endpoint:
[List Contributor Agreements](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#list-contributor-agreements).

* New endpoint:
[Sign Contributor Agreement](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-accounts.html#sign-contributor-agreement).

#### Changes

* [Issue 3579](https://bugs.chromium.org/p/gerrit/issues/detail?id=3579):
Append submitted info to ChangeInfo.

* New endpoint:
[Move Change](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-changes.html#move-change).

#### Groups

* Add `-s` as an alias for `--suggest` on the
[Suggest Group endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-groups.html#suggest-group).

#### Projects

* Add `async` option to the
[Run GC endpoint](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#run-gc)
to allow garbage collection to run asynchronously.

* New endpoint:
[List Access Rights](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#get-access).

* New endpoint:
[Add, Update and Delete Access Rights](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#set-access).

* New endpoint:
[Create Tag](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#create-tag).

* New endpoint:
[Get Mergeable Information](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/rest-api-projects.html#get-mergeable-info).

### Plugins

* Secure settings

  Plugins may now store secure settings in `etc/$PLUGIN.secure.config` where they
  will be decoded by the Secure Store implementation.

* Exported dependencies

  Gson is now an exported dependency. Plugins no longer need to explicitly add
  a dependency on it.

### Misc

* New project option to reject implicit merge commits.

  The 'Reject Implicit Merges' option can be enabled to prevent non-merge commits
  from implicitly bringing unwanted changes into a branch. This can happen for
  example when a commit is made based on one branch but is mistakenly pushed to
  another, for example based on `refs/heads/master` but pushed to `refs/for/stable`.

* New
[Add Patch Set capability](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/access-control.html#category_add_patch_set)
to control who is allowed to upload a new patch set to an existing change.

* [Issue 4015](https://bugs.chromium.org/p/gerrit/issues/detail?id=4015):
Allow setting a
[comment message](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-upload.html#message)
when uploading a change.

* Allow to specify
[who should be notified by email](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/user-upload.html#notify)
when uploading a change.

* [Issue 3220](https://bugs.chromium.org/p/gerrit/issues/detail?id=3220):
Append approval info to every comment-added stream event and hook.

* The `administrateServer` capability can be assigned to groups by setting
[`capability.administrateServer`](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#capability.administrateServer)
in the site configuration.

  Configuring this option can be a useful fail-safe to recover a server in the
  event an administrator removed all groups from the `administrateServer`
  capability, or to ensure that specific groups always have administration
  capabilities.

* New configuration options to configure JGit repository cache parameters.

  [core.repositoryCacheCleanupDelay](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#core.repositoryCacheCleanupDelay)
  and [core.repositoryCacheExpireAfter](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/config-gerrit.html#core.repositoryCacheExpireAfter)
  can be configured.

* Accept `-b` as an alias of `--batch` in the
[init program](https://gerrit-documentation.storage.googleapis.com/Documentation/2.13/pgm-init.html).

## Bugfixes

* Don't add the same SSH key multiple times.

  If an already existing SSH key was added, a duplicate entry was added to the
  list of user's SSH keys.

* Respect the 'Require a valid contributor agreement to upload' setting
when creating changes via the UI.

  If a user had not signed a CLA, it was still possible for them to create a new
  change with the 'Revert' or 'Cherry Pick' button.

* Make Lucene index more stable when being interrupted.

* Don't show the `start` and `idle` columns in the `show-connections`
output when the ssh backend is NIO2.

  The NIO2 backend doesn't provide the start and idle times, and the
  values being displayed were just dummy values. Now these values are
  only displayed for the MINA backend.

* [Issue 4150](https://bugs.chromium.org/p/gerrit/issues/detail?id=4150):
Deleting a draft inline comment no longer causes the change's `Updated` field to
be bumped.

* [Issue 4099](https://bugs.chromium.org/p/gerrit/issues/detail?id=4099):
Fix SubmitWholeTopic does not update subscriptions.

* [Issue 3603](https://bugs.chromium.org/p/gerrit/issues/detail?id=3603):
Fix editing a submodule via inline edit.

* [Issue 4069](https://bugs.chromium.org/p/gerrit/issues/detail?id=4069):
Fix highlights in scrollbar overview ruler not moved when extending the
displayed area.

* [Issue 3446](https://bugs.chromium.org/p/gerrit/issues/detail?id=3446):
Respect the `Skip Deleted` diff preference.

* [Issue 3445](https://bugs.chromium.org/p/gerrit/issues/detail?id=3445):
Respect the `Skip Uncommented` diff preference.

* [Issue 4051](https://bugs.chromium.org/p/gerrit/issues/detail?id=4051):
Fix empty `From` email header.

* [Issue 3423](https://bugs.chromium.org/p/gerrit/issues/detail?id=3423):
Fix intraline diff for added spaces.

* [Issue 1867](https://bugs.chromium.org/p/gerrit/issues/detail?id=1867):
Remove `no changes made` error case when the only difference between a new
commit and the previous patch set of the change is the committer.

* [Issue 3831](https://bugs.chromium.org/p/gerrit/issues/detail?id=3831):
Prevent creating groups with the same name as a system group.

* [Issue 3754](https://bugs.chromium.org/p/gerrit/issues/detail?id=3754):
Fix `View All Accounts` permission to allow accounts REST endpoint to access
email info.

* Make `gitweb.type` default to `disabled` when not explicitly set.

  Previously the behavior was not documented and it would default to type
  `gitweb`. In cases where there was no gitweb config at all, this would
  result in broken links due to `null` being used as the URL.

* [Issue 4488](https://bugs.chromium.org/p/gerrit/issues/detail?id=4488):
Improve error message when `Change-Id` line is missing in commit message.

  The error message now includes the sha1 of the commit, so that it is
  easier to track down which commit failed validation when multiple commits
  are pushed at the same time.

* Don't check mergeability of draft changes.

  Draft changes can be deleted but not abandoned so there is no way for
  an administrator to get rid of the them on behalf of the users. This can
  become a problem when there many draft changes because the mergeability
  check can be costly.

  The mergeability check is no longer done for draft changes, but will be
  done when the draft change is published.

* Fix internal server error when plugin-provided file history weblink
is null.

  It is valid for a plugin to provide a null weblink, but doing so resulted
  in an internal server error.

## Dependency Updates

* Add dependency on blame-cache 0.1-9

* Add dependency on guava-retrying 2.0.0

* Add dependency on jsr305 3.0.1

* Add dependency on metrics-core 3.1.2

* Upgrade auto-value to 1.3-rc1

* Upgrade commons-net to 3.5

* Upgrade CodeMirror to 5.17.0

* Upgrade Guava to 19.0

* Upgrade Gson to 2.7

* Upgrade Guice to 4.1.0

* Upgrade gwtjsonrpc to 1.9

* Upgrade gwtorm to 1.15

* Upgrade javassist to 3.20.0-GA

* Upgrade Jetty to 9.2.14.v20151106

* Upgrade JGit to 4.5.0.201609210915-r

* Upgrade joda-convert to 1.8.1

* Upgrade joda-time to 2.9.4

* Upgrade Lucene to 5.5.0

* Upgrade mina to 2.0.10

* Upgrade sshd-core to 1.2.0


## Bugfix Releases

### 2.13.5 {#2.13.5}

* [Issue 5200](https://bugs.chromium.org/p/gerrit/issues/detail?id=5200):
Ensure that indexes are closed properly on shutdown.

  The indexes were not closed on shutdown, which caused data to be lost
  due to not being flushed to disk.

* Enable the 'Delete Edit' button for merged changes.

  If a merged change has an edit revision, it should still be possible
  to delete the edit.

* Do not check visibility of parent project when creating a new project.

  A project can be visible to a user but not necessarily its parent. To
  be consistent, a user with create-project permission should be able to
  create a project with a parent that exists even if the parent is not
  visible to the user.

* Fix 'Can't insert change/patch set' error when prior patch set has no
parent, but next patch set has 1 parent.

* [Issue 5179](https://bugs.chromium.org/p/gerrit/issues/detail?id=5179):
Make startup timeout configurable.

  By setting `container.startupTimeout` it is possible to configure the
  maximum time to wait for the `gerrit.sh start` command to run a new
  Gerrit daemon successfully.

* [Issue 4715](https://bugs.chromium.org/p/gerrit/issues/detail?id=4715):
Add missing reviewers visibility check for suggestions from account index.

* Fix Gitweb HTTP URL generation.

  The generated Gitweb URL contained an invalid 'p' character, and did
  not require authentication for projects not visible to anonymous users.

### 2.13.4 {#2.13.4}

* [Issue 5090](https://bugs.chromium.org/p/gerrit/issues/detail?id=5090):
Fix overwriting of another user's account external Id.

* [Issue 4909](https://bugs.chromium.org/p/gerrit/issues/detail?id=4909):
Fix broken Gitweb weblink for config history on project access page.

* [Issue 4908](https://bugs.chromium.org/p/gerrit/issues/detail?id=4908):
Add back support for parent revision weblinks.

  Support for weblinks for the parent revision(s) was removed in 2.13 but
  this functionality is still wanted by some users. Support is added back,
  by allowing plugins to provide a specific link for parent revisions. For
  the built-in Gitweb links, the link template provided by the `revision`
  setting is used.

* Add DB connection pool verification.

  There was no verification of the connection pool, so a broken connection
  would result in an internal server error when trying to read a change
  from the database.

* Add support for moving a change's destination branch with the SSH `review`
command.

  Version 2.13 introduced the 'move change' REST endpoint, but support via ssh
  was omitted.

* Add REST endpoint to reindex a single account.

  The new endpoint is useful to manually reindex a single account that has
  become stale in the index.

### 2.13.3 {#2.13.3}

* [Issue 4633](https://bugs.chromium.org/p/gerrit/issues/detail?id=4633):
Filter out unrelated projects when getting project watches from index.

* [Issue 4848](https://bugs.chromium.org/p/gerrit/issues/detail?id=4848):
Upgrade Postgresql JDBC driver to 9.4.1211.jre7.

  Older versions of Postgresql JDBC driver rely on finalize() methods in
  order to avoid leaking unclosed database objects. Given finalize
  methods are unpredictable (no guarantee about prompt execution, if at
  all), in some high load environments this could lead to a memory leak
  with millions of JDBC objects pending finalization.

* [Issue 4841](https://bugs.chromium.org/p/gerrit/issues/detail?id=4841):
Hooks plugin: Make sure `GIT_DIR` environment variable is set in `ref-update`
hook.

* [Issue 4911](https://bugs.chromium.org/p/gerrit/issues/detail?id=4911):
Fix internal server error when providing an invalid Change-Id to the
index ssh command.

* [Issue 4643](https://bugs.chromium.org/p/gerrit/issues/detail?id=4643):
Strip newlines out of ssh public keys.

  If an ssh public key contained newlines, each line was migrated to the
  git backend as a separate key, each of which was considered invalid. Now,
  newlines are stripped out. Note that this fix is not effective for sites
  that have already been migrated to 2.13.x from an earlier version.

* Restore the `--format` option on the list plugins REST API endpoint.

  Removing the `--format` option from the REST API had the side effect of
  also removing it from the corresponding ssh command, which was a breaking
  change for some users.

* Fix classpath collision with Servlet API for GWT plugins.

* Hooks plugin: Always return the output from the `ref-update` hook.

  The output of the `ref-update` hook is now sent back to the client.

* Fix migration to schema version 127 on case-sensitive file systems.

* Fix internal server error when using `has:draft` search predicate.

* Fix internal server error caused by plugin returning null for
external included-in.

* Fix internal server error in `set-members` command when a group
to be added is not visible to the caller.

* Fix reindexing change by ssh command.

  When reindexing a change by ssh, the change was loaded from the
  index rather than from the database.

* Export prolog runtime in plugin API.


### 2.13.2 {#2.13.2}

* Allow to delete caches if not empty when initializing site during upgrade.

  Caches may be stale during upgrade, so the init program now offers to
  delete them.

  A new `--delete-caches` option is added to allow force delete of all
  caches.

* [Issue 4797](https://bugs.chromium.org/p/gerrit/issues/detail?id=4797):
Fix internal server error in OAuth extension point when E-Mail is not set.

* [Issue 4784](https://bugs.chromium.org/p/gerrit/issues/detail?id=4784):
Allow to edit user name for OAuth providers that don't expose user names.

* [Issue 4627](https://bugs.chromium.org/p/gerrit/issues/detail?id=4627):
Fix internal server error in OAuth extension point when user name is not set.

* [Issue 4466](https://bugs.chromium.org/p/gerrit/issues/detail?id=4466):
Fix deadlock during Lucene index shutdown.

* Index account on account creation

  This prevents creation of new accounts on every logout/login sequence.

* Add support for Microsoft Internet Explorer 10 and 11, and Microsoft Edge.

* [Issue 4630](https://bugs.chromium.org/p/gerrit/issues/detail?id=4630):
Fix server error when navigating up to change while 'Working' is displayed.

* [Issue 4631](https://bugs.chromium.org/p/gerrit/issues/detail?id=4631):
Read project watches from database.

  Project watches were being read from the git backend by default, but the
  migration to git is not yet completed.

* [Issue 4632](https://bugs.chromium.org/p/gerrit/issues/detail?id=4632):
Fix server error when deleting multiple SSH keys from the Web UI.

  Attempting to delete multiple keys in parallel resulted in a lock failure
  when removing the keys from the git backend.

* [Issue 4645](https://bugs.chromium.org/p/gerrit/issues/detail?id=4645):
Fix malformed account suggestions.

  If the query contained several query terms and one of the query terms was
  a substring of 'strong', the suggestion was malformed.

* Hooks plugin: Fix incorrect value passed to `--change-url` parameter.

  The URL was being generated using the change's Change-Id rather than the
  change number.

* Replication plugin: Fix Guava ProvisionException when replicating from slave.

* Check for CLA when creating project config changes from the web UI.

  If contributor agreements were enabled and required for a project, and
  the user had not signed a CLA, it was still possible to upload changes
  for review on `refs/meta/config` by making changes in the project access
  editor and pressing 'Save for Review'.

* Fix server errors in 'Set Access' and 'Get Access' REST enpoints.

* Stability improvements in event dispatch mechanism.

### 2.13.1 {#2.13.1}

* [Issue 4618](https://bugs.chromium.org/p/gerrit/issues/detail?id=4618):
Fix internal server error after online reindexing completed.

* Fix internal server error when cloning from slaves and not all refs are
visible.

* Fix JSON deserialization error causing stream event client to no longer receive
events.
