Introduce the apply-objects REST-API for the whole '/meta' chain

When the parent commit of a '/meta' chain of NoteDb changes is missing
falling back to the Git fetch command would not help, because of the
inability of the Git fetch negotiation to find a common base.
Replication is not transactional and not guaranteed to succeed which
may lead some refs being left behind with missing parent commits.

The Git fetch negotiation is the process where the two peers are
trying to agree on a common base to use for producing a packfile with
the delta from there. However, the common base may not exist for
the '/meta' chain of commits because every NoteDb ref starts from
a brand new base and the parent commits are missing.
JGit client isn't able to communicate this hint to the server-side
and would instead start a long negotiation phase that is eventually
destinated to fail.

Introduce a new apply-objects REST-API that is capable of applying
an entire chain of commits on the linear '/meta' ref chain so that the
Git fetch can be avoided altogether.

Bug: Issue 16052
Change-Id: I7cfbeeaba2fe6190b99fe78c7631bb884abe321f
21 files changed
tree: 9c5070d289e05f0ca2b44aa55550c227a838806c
  1. src/
  2. BUILD
  3. Jenkinsfile
  4. LICENSE