ed001d7f69
Allow site administrators to place an upper bound on how much CPU time will be spent evaluating rules for a single change. This covers not just the project rules, but also all filters up to All-Projects. Reduction counting and not wall-clock time is used to be fair to rules that are running on a temporarily overloaded system. It also permits builtin predicates that are expensive like commit_edits/2 to count only once per result made to Prolog, and not charge time waiting for JGit to populate the PatchListCache. The default is configured to be 100,000 reductions. This value was experimentally determined on a Intel Core i7 running at 2.3 GHz and Java 1.6.0_37. On that system reaching the limit of reductions and aborting an infinite loop in a user predicate takes about 14 ms. Any rules taking 14 ms to run will add ~350 ms to the latency of the All > Open changes screen. Because of this, Administrators already have sufficient incentives to keep rule running time low. Change-Id: I2cd5660fc556e6aeeb61606a850ce45c98157c96
225 lines
5.2 KiB
Python
225 lines
5.2 KiB
Python
CONSTANTS_SRC = [
|
|
'src/main/java/com/google/gerrit/server/documentation/Constants.java',
|
|
]
|
|
|
|
SRCS = glob(
|
|
['src/main/java/**/*.java'],
|
|
excludes = CONSTANTS_SRC,
|
|
)
|
|
RESOURCES = glob(['src/main/resources/**/*'])
|
|
|
|
java_library(
|
|
name = 'constants',
|
|
srcs = CONSTANTS_SRC,
|
|
visibility = ['PUBLIC'],
|
|
)
|
|
|
|
# TODO(sop) break up gerrit-server java_library(), its too big
|
|
java_library(
|
|
name = 'server',
|
|
srcs = SRCS,
|
|
resources = RESOURCES,
|
|
deps = [
|
|
':constants',
|
|
'//gerrit-antlr:query_exception',
|
|
'//gerrit-antlr:query_parser',
|
|
'//gerrit-common:annotations',
|
|
'//gerrit-common:server',
|
|
'//gerrit-extension-api:api',
|
|
'//gerrit-patch-commonsnet:commons-net',
|
|
'//gerrit-patch-jgit:server',
|
|
'//gerrit-prettify:server',
|
|
'//gerrit-reviewdb:server',
|
|
'//gerrit-util-cli:cli',
|
|
'//gerrit-util-ssl:ssl',
|
|
'//lib:args4j',
|
|
'//lib:automaton',
|
|
'//lib:gson',
|
|
'//lib:guava',
|
|
'//lib:gwtjsonrpc',
|
|
'//lib:gwtorm',
|
|
'//lib:jsch',
|
|
'//lib:juniversalchardet',
|
|
'//lib:mime-util',
|
|
'//lib:parboiled-core',
|
|
'//lib:pegdown',
|
|
'//lib:protobuf',
|
|
'//lib:velocity',
|
|
'//lib/antlr:java_runtime',
|
|
'//lib/auto:auto-value',
|
|
'//lib/commons:codec',
|
|
'//lib/commons:dbcp',
|
|
'//lib/commons:lang',
|
|
'//lib/commons:net',
|
|
'//lib/commons:validator',
|
|
'//lib/guice:guice',
|
|
'//lib/guice:guice-assistedinject',
|
|
'//lib/guice:guice-servlet',
|
|
'//lib/jgit:jgit',
|
|
'//lib/jgit:jgit-archive',
|
|
'//lib/joda:joda-time',
|
|
'//lib/log:api',
|
|
'//lib/log:log4j',
|
|
'//lib/lucene:analyzers-common',
|
|
'//lib/lucene:core',
|
|
'//lib/lucene:query-parser',
|
|
'//lib/ow2:ow2-asm',
|
|
'//lib/ow2:ow2-asm-tree',
|
|
'//lib/ow2:ow2-asm-util',
|
|
'//lib/prolog:prolog-cafe',
|
|
],
|
|
provided_deps = [
|
|
'//lib:servlet-api-3_1',
|
|
'//lib/bouncycastle:bcprov',
|
|
'//lib/bouncycastle:bcpg',
|
|
'//lib/bouncycastle:bcpkix',
|
|
],
|
|
visibility = ['PUBLIC'],
|
|
)
|
|
|
|
java_sources(
|
|
name = 'server-src',
|
|
srcs = SRCS + RESOURCES,
|
|
visibility = ['PUBLIC'],
|
|
)
|
|
|
|
TESTUTIL = glob([
|
|
'src/test/java/com/google/gerrit/testutil/**/*.java',
|
|
'src/test/java/com/google/gerrit/server/project/Util.java',
|
|
])
|
|
java_library(
|
|
name = 'testutil',
|
|
srcs = TESTUTIL,
|
|
deps = [
|
|
':server',
|
|
'//gerrit-common:server',
|
|
'//gerrit-cache-h2:cache-h2',
|
|
'//gerrit-lucene:lucene',
|
|
'//gerrit-reviewdb:server',
|
|
'//lib:guava',
|
|
'//lib:gwtorm',
|
|
'//lib:h2',
|
|
'//lib:junit',
|
|
'//lib/guice:guice',
|
|
'//lib/guice:guice-servlet',
|
|
'//lib/jgit:jgit',
|
|
'//lib/jgit:junit',
|
|
'//lib/log:impl_log4j',
|
|
'//lib/log:log4j',
|
|
],
|
|
exported_deps = [
|
|
'//lib/easymock:easymock',
|
|
'//lib/powermock:powermock-api-easymock',
|
|
'//lib/powermock:powermock-api-support',
|
|
'//lib/powermock:powermock-core',
|
|
'//lib/powermock:powermock-module-junit4',
|
|
'//lib/powermock:powermock-module-junit4-common',
|
|
],
|
|
visibility = ['PUBLIC'],
|
|
)
|
|
|
|
PROLOG_TEST_CASE = [
|
|
'src/test/java/com/google/gerrit/rules/PrologTestCase.java',
|
|
]
|
|
PROLOG_TESTS = glob(
|
|
['src/test/java/com/google/gerrit/rules/**/*.java'],
|
|
excludes = PROLOG_TEST_CASE,
|
|
)
|
|
|
|
java_library(
|
|
name = 'prolog_test_case',
|
|
srcs = PROLOG_TEST_CASE,
|
|
deps = [
|
|
':server',
|
|
'//gerrit-common:server',
|
|
'//lib:junit',
|
|
'//lib/guice:guice',
|
|
'//lib/prolog:prolog-cafe',
|
|
],
|
|
)
|
|
|
|
java_test(
|
|
name = 'prolog_tests',
|
|
srcs = PROLOG_TESTS,
|
|
resources = glob(['src/test/resources/com/google/gerrit/rules/**/*']),
|
|
deps = [
|
|
':prolog_test_case',
|
|
':server',
|
|
':testutil',
|
|
'//gerrit-common:server',
|
|
'//gerrit-reviewdb:server',
|
|
'//gerrit-server/src/main/prolog:common',
|
|
'//lib:guava',
|
|
'//lib:gwtorm',
|
|
'//lib:junit',
|
|
'//lib:truth',
|
|
'//lib/jgit:jgit',
|
|
'//lib/guice:guice',
|
|
'//lib/prolog:prolog-cafe',
|
|
],
|
|
)
|
|
|
|
QUERY_TESTS = glob(
|
|
['src/test/java/com/google/gerrit/server/query/**/*.java'],
|
|
)
|
|
|
|
java_test(
|
|
name = 'query_tests',
|
|
srcs = QUERY_TESTS,
|
|
deps = [
|
|
':server',
|
|
':testutil',
|
|
'//gerrit-antlr:query_exception',
|
|
'//gerrit-antlr:query_parser',
|
|
'//gerrit-common:annotations',
|
|
'//gerrit-common:server',
|
|
'//gerrit-extension-api:api',
|
|
'//gerrit-reviewdb:server',
|
|
'//gerrit-server/src/main/prolog:common',
|
|
'//lib:guava',
|
|
'//lib:gwtorm',
|
|
'//lib:junit',
|
|
'//lib:truth',
|
|
'//lib/antlr:java_runtime',
|
|
'//lib/guice:guice',
|
|
'//lib/jgit:jgit',
|
|
'//lib/jgit:junit',
|
|
'//lib/joda:joda-time',
|
|
],
|
|
source_under_test = [':server'],
|
|
)
|
|
|
|
java_test(
|
|
name = 'server_tests',
|
|
labels = ['server'],
|
|
srcs = glob(
|
|
['src/test/java/**/*.java'],
|
|
excludes = TESTUTIL + PROLOG_TESTS + PROLOG_TEST_CASE + QUERY_TESTS
|
|
),
|
|
deps = [
|
|
':server',
|
|
':testutil',
|
|
'//gerrit-antlr:query_exception',
|
|
'//gerrit-common:annotations',
|
|
'//gerrit-common:server',
|
|
'//gerrit-extension-api:api',
|
|
'//gerrit-reviewdb:server',
|
|
'//gerrit-server/src/main/prolog:common',
|
|
'//lib:args4j',
|
|
'//lib:guava',
|
|
'//lib:gwtorm',
|
|
'//lib:junit',
|
|
'//lib:truth',
|
|
'//lib/guice:guice',
|
|
'//lib/guice:guice-assistedinject',
|
|
'//lib/jgit:jgit',
|
|
'//lib/jgit:junit',
|
|
'//lib/joda:joda-time',
|
|
'//lib:parboiled-core',
|
|
'//lib:parboiled-java',
|
|
'//lib/prolog:prolog-cafe',
|
|
],
|
|
source_under_test = [':server'],
|
|
visibility = ['//tools/eclipse:classpath'],
|
|
)
|