We use ScheduledThreadPoolExecutor#terminated to manage cleanup of
WorkQueue. Callers of unregisterWorkQueue should just delete the call.
Change-Id: I0208c8643bd71eb287ff553f80e7ffe547f3ffbe
* Update plugins/replication from branch 'master'
- Add support for direct replication to another Gerrit instance
Currently when replicating to another Gerrit instance replication plugin
requires also system SSH access in order to create, delete and update
HEAD reference of replicated project. For those three operations plugin
will execute system commands over SSH.
When other site of replication is also a Gerrit server we can use its
SSH API to perform operations mentioned above. Then we drop dependency
on system SSH access.
In order to set up a SSH connection between two Gerrit instances, one
must generate ssh-key-pair with empty passphrase. Then this key-pair can
be set to be used for connecting to explicitly configured destination
host.
TEST PLAN:
To test this patch it is recommended to generate new ssh-key-pair and
configure the ssh client like follows:
* ssh-keygen -f ~/.ssh/empty-passphrase
* echo "Host localhost\n\tPort 29419\n\tIdentityFile ~/.ssh/empty-passphrase" >> ~/.ssh/config
Then set up a second Gerrit instance (set up sshd to listen on port
29419) which will be the replication destination and create
replication user with public ssh-key from ~/.ssh/empty-passphrase.pub.
On the replication master server etc/replication.config needs to be
adjusted as well:
[remote "other-gerrit"]
url = ssh://$replication_user@localhost:29419/${name}.git
adminUrl = gerrit+ssh://$replication_user@localhost:29419/
After starting both instances creating a project in the master will
result in the same project created on the replication destination.
Of course Gerrit access rights still apply, therefore $replication_user
should have create project capability and push rights.
Change-Id: I677f7bd1164be259916c8cebdd4ddeee469402a3
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
* Update plugins/replication from branch 'master'
- Extract ssh related code into SshHelper class
Move ssh related code out from ReplicationQueue into separate class
SshHelper. Later on the same code could be used to interact with other
git server that does not support shell access, but allow to execute
build in commands (like eg. Gerrit does).
Change-Id: I07c142a58571f71bf8765d956c6050b36d2e44fc
* Update plugins/replication from branch 'master'
- Add notify replication failed for TRANSPORT_ERROR & REPOSITORY_MISSING
We send replication started notification for each attempt to push.
If the push fails with a reason TRANSPORT_ERROR or REPOSITORY_MISSING,
it will be retried until it succeed (endless loop in case
TRANSPORT_ERROR that occurs forever).
For each new re-try we will send another replication started
notification for that branch, but we will miss the notification
about failed attempt completed. This patch adds the missing
notification.
This fixes notification on push to replica that is down.
Change-Id: I6d5d06fbc081df2d9a32973af73f6a2136d51731
Signed-off-by: Eryk Szymanski <eryksz@gmail.com>
* Update plugins/replication from branch 'master'
- Merge branch 'stable-2.14'
* stable-2.14:
Fix replication retries when maxRetries is set to 0
Change-Id: I3d2986f1707bf1b60675ea28fe3dbcc8dfb04681
- Fix replication retries when maxRetries is set to 0
maxRetries defaults to 0 which means retry indefinitely but it was not
retrying.
Change-Id: I6c8d8d6b1511d67b647f25193dcfe860687eea76
* Update plugins/replication from branch 'master'
- Add --now switch to start replication right away
When starting replication from the command line, each replication task
is scheduled with the per remote replicationDelay. This delay is
considered a batching mechanism for user driven events. However,
scripts may desire to trigger replication without caring about batching.
In particular, a script may want to replicate a bunch of updates to many
projects serially for throttling reasons using the --wait option.
However, with a long list of projects to replicate the per project
replication delay can quickly add up to a lot of wasted time (too much
throttling). By adding a --now option which starts replicating without
delay, it is possible for a script to control (generally along with the
--wait option) replication throttling very accurately.
Change-Id: I35b4386f53112ffa7c886ad345e5fabb97273aa9
The cookbook-plugin was made read-only with the intention of replacing
it with a new examples plugin.
Remove the submodule before any futher changes are made in core Gerrit
that will end up causing build problems due to interface changes.
Change-Id: Id8536dc9c3750eecd76bdf61e1d24af92333ce25
* Update plugins/replication from branch 'master'
- Remove ops from pending when max retries reached
When a push operation is not retried anymore, remove it from
the pending queue as well and log the error on replication.log.
Failing to do so, it would result in the destination to refrain from
retrying again at then next Gerrit event.
Change-Id: I1f3dd4011e2822a2e0b52037fcb130e820af156f
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
* Update plugins/replication from branch 'master'
- Set max retries to avoid queue congestion
When servers have *a lot* of remote slaves, some of them
unstable and potentially offline, a maximum retry policy is
needed to prevent push events to stay in the replication queue
and getting rescheduled forever.
Keep backward-compatible configuration by setting maxRetry
by default to zero, which means disabled.
Change-Id: I060cc7bc3a4d1089b0815db02d2e1430f83a2015
* Update plugins/hooks from branch 'master'
- Rework ref-update hook to use RefOperationValidationListener
Instead of being invoked on every commit received, the ref-update hook
is now invoked before the ref update operation is finalized. Note that
the hook is no longer invoked on commits pushed for review or on changes
that are merged. It is invoked for creation/deletion of refs, and for
ref updates caused by direct pushes (i.e. bypassing review).
The previous behavior of the ref-update hook is moved into a new hook
named commit-received. A new parameter '--cmdref' is added, and the
special handling of 'refs/for' and 'refs/changes' is removed.
Also-By: David Pursehouse <dpursehouse@collab.net>
Bug: Issue 5739
Change-Id: I24d8580aef463f8bfb078d90a4e9e2ce6e8b9b93
Current implementation integrates only CORE_PLUGINS into
release.war however BUCK based build used to also include
CUSTOM_PLUGINS.
Change-Id: I779059ae705d1d0ea8d01857dd0567038dab79b8
Signed-off-by: Jacek Centkowski <jcentkowski@collab.net>
Signed-off-by: David Pursehouse <dpursehouse@collab.net>
* changes:
Migrate external IDs to NoteDb (part 1)
gerrit-server: use hashed passwords for HTTP.
AccountByEmailCacheImpl: Consider emails from all external IDs on load
* submodules:
* Update plugins/cookbook-plugin from branch 'master'
- Merge "Remove for HTTP digest auth from examples."
- Remove for HTTP digest auth from examples.
Change-Id: I495ee8140cbe2ae12510a4d4cbc2c8360b135b33
* Update plugins/hooks from branch 'master'
- HookTask: Reduce amount of INFO logging emitted when running hooks
Reduce the log level of the hook's exit code and output to debug.
Change-Id: I80b6569696407296843eb4ae1d85e53301511d97
* Update plugins/commit-message-length-validator from branch 'master'
- Update default values to match 50/72 rule
The 50/72 rule was laid out by tpope in 2008 (see
www.tpope.net/node/106), and has gained wide acceptance
in the git community. It makes sense to enforce it by
default, since the values are configurable anyway.
Change-Id: I472ddbd2caf7cd1036f8ce2953380445bca8712a
* Update plugins/hooks from branch 'master'
- Refactor to pass injected instances through HookArgs
Instead of injecting the SitePath and GitRepositoryManager in all the
places they're used, inject them only in HookFactory and pass them
around through HookArgs.
Make objects package visible in HookArgs so that they can be accessed
directly rather than through getter methods.
Change-Id: I0cee06e4928748e7dba0315653def894d27244de
* submodules:
* Update plugins/reviewnotes from branch 'master'
- Assign unused Future return value to a variable
Error Prone plans to make this pattern into a compile error; this avoids
future breakage.
Change-Id: I6a023f22f472941854a6729f6450b9b70a020069
* submodules:
* Update plugins/hooks from branch 'master'
- Format all Java files with google-java-format
Change-Id: Ic726e55d416c3ceda674111b20fdc985c857c245
* Update plugins/reviewnotes from branch 'master'
- Format all Java files with google-java-format
Change-Id: I05b6a2e93015e8a5a5e93cf64ad15b710e86b5c9
* Update plugins/commit-message-length-validator from branch 'master'
- Format all Java files with google-java-format
Change-Id: Ibc2af6488f1b117ba3f94613309c8c69f1ed6dc1
* Update plugins/cookbook-plugin from branch 'master'
- Format all Java files with google-java-format
Change-Id: Id46240f027c75888265c1f878df52817cd50ec8a
* Update plugins/replication from branch 'master'
- Merge "Format all Java files with google-java-format"
- Format all Java files with google-java-format
Change-Id: I7884ab98ed1d2baa1776b2bb032ce338e8f88bc9
* Update plugins/singleusergroup from branch 'master'
- Format all Java files with google-java-format
Change-Id: I504a6177f9fded8bee1a8d6d3a7ab4f983d63853
* Update plugins/download-commands from branch 'master'
- Format all Java files with google-java-format
Change-Id: Iec0368bf90d394e0a98662e535ac082ad45f3bbb
* Update plugins/replication from branch 'master'
- Merge branch 'stable-2.13'
* stable-2.13:
ReplicationMetrics: Make members private final
Change-Id: Icf7dd3f5c9dd518c8984546aba9708525a428f79
- ReplicationMetrics: Make members private final
These members should only be accessed through the public methods:
- start(...), to create/start a new timer context
- record(...), to record the retry/delay values
Mark the members as private final to prevent unintended access.
Change-Id: I69a7e3b13ba4c344f3176528306163ebef07653c
When building a Gerrit plugin in-tree, allow to add extra dependencies
to the WORKSPACE file.
The only operation required will be the overwrite of the
plugins/external_plugin_deps.bzl file with the one provided by the
plugin.
Bug: Issue 5305
Change-Id: I07e4538f9f81ef923a4ca1aeceaee75d8429434e
* Update plugins/singleusergroup from branch 'master'
- Actually remove Buck based build
Accidentaly, the wrong file was removed. It was supposed to remove BUCK
and not BUILD.
This partially reverts commit 6800d41177013999c7259b387314d812cb51bcce.
Change-Id: Ia131c160a614b7d6dae242def0ace2203dde1230
Guava team recommends MultimapBuilder over specific Multimap
implementations, so callers don't have to know the specific key/value
behaviors of the individual implementations. The static factory
methods in the implementations will be removed in a later version.
LinkedListMultimap and LinkedHashMultimap are not affected, since
MultimapBuilder lacks support for specifying linked entries, and thus
the factory methods are not in immediate danger of deletion.
Change-Id: I7744db687da84a7beae31d1cb8953e782ed23c1d
Guava team recommends using the subinterfaces of Multimap, for the
same reasons they recommend using Set and List rather than Collection:
it documents expectations about ordering, uniqueness, and behavior of
equals. Do this across the board in Gerrit.
Mostly this is straightforward and I tried to exactly match existing
behavior where possible. However, there were a few wrinkles, where
different callers passed different subtypes to the same method.
The main one is arguments to ParameterParser#parse and
splitQueryString, where some callers used SetMultimaps (perhaps
semi-intentionally, or perhaps misunderstanding the nature of
HashMultimap). For the purposes of parameter parsing, a ListMultimap
makes more sense, because it preserves argument order and repetition.
Another instance is a couple places in ReceiveCommits and downstream
where there were SetMultimap<?, Ref>. Since Refs do not implement
equals, this is effectively the same thing as a ListMultimap, and
changing the interface no longer misleads readers into thinking there
might be some deduplication happening.
Finally, this change includes a breaking API change to the return
type of ExternalIncludedIn#getIncludedIn.
Change-Id: I5f1d15e27a32e534a6aaefe204e7a31815f4c8d7
The account data is moved from ReviewDb into git.
Change-Id: I643827179b24601b138f394cfff5890f919b9da9
Signed-off-by: Edwin Kempin <ekempin@google.com>
* changes:
Only generate SSH test keys if we run SSH tests
Add @UseSsh Annotation and GERRIT_USE_SSH flag
* submodules:
* Update plugins/cookbook-plugin from branch 'master'
- Add @UseSsh to CookbookIT
Change-Id: I5245a09a0dd3593db6d80fab260369044692cd7a
* Update plugins/cookbook-plugin from branch 'master'
- Bazel: Increase time limit for tests to 300 seconds
20 seconds (small size) doesn't seem to be enough on the CI: [1].
[1] https://gerrit-ci.gerritforge.com/job/Gerrit-verifier/1526/consoleText
Change-Id: I41dd945f425510c49603dafb3c2835a5ad9453d7
* Update plugins/cookbook-plugin from branch 'master'
- Merge branch 'stable-2.13'
* stable-2.13:
HelloWebLink: Make the dummy image more visible
Change-Id: I5291aabcf3c57f76fe17c65a770c09fe80022412
- HelloWebLink: Make the dummy image more visible
Change-Id: If2b80d5fd2f719ebd1db4c9b15f5c8e50f5cda3f
Short circuit the plugin loading phase from the unit tests by passing
the module names from the manifest file.
This allows us to avoid building and deploying the plugin JAR from
within build tool chain.
To use the simplified plugin bootstrap tests, plugin test class must
be inherited from the LightweightPluginDaemonTest class and must be
annotated with @TestPlugin annotation:
@TestPlugin(
name = "cookbook",
sysModule = "com.googlesource.gerrit.plugins.cookbook.Module",
httpModule = "com.googlesource.gerrit.plugins.cookbook.HttpModule",
sshModule = "com.googlesource.gerrit.plugins.cookbook.SshModule"
)
public class CookbookIT extends LightweightPluginDaemonTest {
@Test
public void revisionTest() throws Exception {
createChange();
RestResponse response =
adminRestSession.post("/changes/1/revisions/1/cookbook~hello-revision");
assertThat(response.getEntityContent())
.contains("Hello admin from change 1, patch set 1!");
}
}
Inspired-By: Dave Borowitz <dborowitz@google.com>
Change-Id: I689bb71413ecfbbf99f72730b0d2617bf526d9dd
* submodules:
* Update plugins/replication from branch 'master'
- Remove test prefix from test methods in replication plugin
We previously used 'test' to prefix tests but have decided to stop this.
This change removes the prefix from all test code.
Change-Id: I42e6191ece7872f4647e425e3ca0acf8c6452412
Reformat the Bazel build files with the buildifier tool [1].
The style is different for Bazel files. Most notably, indentation level
is 4 spaces instead of 2, and " is used instead of '.
[1] https://github.com/bazelbuild/buildifier
Change-Id: I95c0c6f11b6d76572797853b4ebb5cee5ebd3c98
* Update plugins/replication from branch 'master'
- Add ReplicationScheduledEvent to indicate ref replication is scheduled.
Assure that event is posted only once each time a ref is scheduled.
Covers the corner case when the ref is added to already scheduled push.
Change-Id: I175940f8d4c6b9164c41bbec8c52d221ec30001b
Signed-off-by: Eryk Szymanski <eryksz@gmail.com>
* Update plugins/cookbook-plugin from branch 'master'
- Bazel: Run plugin tests non-hermetically
The plugin tests required the plugin to be built and installed to the
test site (controlled by the test), so that this implementation is by
design non hermeticized so we can't run in the sandbox.
Change-Id: I39b981aaa4c6063f34e97db59a34b6a0f238e28b
* Update plugins/cookbook-plugin from branch 'master'
- Implement bazel build
Tests are still failing as acceptance test framework wasn't migrated
to Bazel yet.
Change-Id: I4f48925df31a9a79da631b0a9ccd2b724a674270