Enable dynamodb global-refdb Remove zookeeper refdb and replace it with dynamodb also taking care of creating the relevant DynamoDB tables on request. The DynamoDB refdb is now used for both multi-site and high-availability plugin. Bug: Issue 15127 Change-Id: I5012c15ae2c06ecc55cc2693fc516ce34842a58e
diff --git a/.gitignore b/.gitignore index bec44c7..0bf1d7a 100644 --- a/.gitignore +++ b/.gitignore
@@ -5,6 +5,5 @@ gerrit.config secure.config replication.config -zookeeper-refdb.config .idea **/*.pem
diff --git a/Makefile.common b/Makefile.common index 05f6679..371001e 100644 --- a/Makefile.common +++ b/Makefile.common
@@ -23,6 +23,7 @@ aws s3 cp ../common-templates/cf-primary-asg.yml s3://$(TEMPLATE_BUCKET_NAME)/ aws s3 cp ../common-templates/cf-efs-stack.yml s3://$(TEMPLATE_BUCKET_NAME)/ aws s3 cp ../common-templates/cf-ecs-service-cpu-autoscaling.yml s3://$(TEMPLATE_BUCKET_NAME)/ + aws s3 cp ../common-templates/cf-dynamodb-stack.yml s3://$(TEMPLATE_BUCKET_NAME)/ set-optional-params-metrics-cloudwatch: ifdef METRICS_CLOUDWATCH_ENABLED @@ -62,10 +63,6 @@ ifdef MULTISITE_ENABLED $(eval MULTISITE_OPTIONAL_PARAMS := ParameterKey=MultiSiteEnabled,ParameterValue=$(MULTISITE_ENABLED)) $(eval MULTISITE_OPTIONAL_PARAMS := $(MULTISITE_OPTIONAL_PARAMS) ParameterKey=MultiSiteKafkaBrokers,ParameterValue=\"$(MULTISITE_KAFKA_BROKERS)\") - $(eval MULTISITE_OPTIONAL_PARAMS := $(MULTISITE_OPTIONAL_PARAMS) ParameterKey=MultiSiteZookeeperConnectString,ParameterValue=$(MULTISITE_ZOOKEEPER_CONNECT_STRING)) -endif -ifdef MULTISITE_ZOOKEEPER_ROOT_NODE - $(eval MULTISITE_OPTIONAL_PARAMS := $(MULTISITE_OPTIONAL_PARAMS) ParameterKey=MultiSiteZookeeperRootNode,ParameterValue=$(MULTISITE_ZOOKEEPER_ROOT_NODE)) endif set-ldap-account-pattern:
diff --git a/common-templates/cf-dynamodb-stack.yml b/common-templates/cf-dynamodb-stack.yml new file mode 100644 index 0000000..7494aac --- /dev/null +++ b/common-templates/cf-dynamodb-stack.yml
@@ -0,0 +1,60 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: DynamoDB tables for refs-db validation +Parameters: + DynamoDBLocksTableName: + Description: The name of the DynamoDB locks table + Type: String + DynamoDBRefsTableName: + Description: The name of the DynamoDB refs table + Type: String + +Mappings: + DynamoDB: + CapacityUnits: + Read: 10 + Write: 10 + +Resources: + RefsDbTable: + Type: AWS::DynamoDB::Table + Properties: + TableName: !Ref DynamoDBRefsTableName + AttributeDefinitions: + - AttributeName: refPath + AttributeType: S + KeySchema: + - AttributeName: refPath + KeyType: HASH + ProvisionedThroughput: + ReadCapacityUnits: !FindInMap ['DynamoDB', 'CapacityUnits', 'Read'] + WriteCapacityUnits: !FindInMap ['DynamoDB', 'CapacityUnits', 'Write'] + + LocksTable: + Type: AWS::DynamoDB::Table + Properties: + TableName: !Ref DynamoDBLocksTableName + AttributeDefinitions: + - AttributeName: lockKey + AttributeType: S + - AttributeName: lockValue + AttributeType: S + KeySchema: + - AttributeName: lockKey + KeyType: HASH + - AttributeName: lockValue + KeyType: RANGE + ProvisionedThroughput: + ReadCapacityUnits: !FindInMap ['DynamoDB', 'CapacityUnits', 'Read'] + WriteCapacityUnits: !FindInMap ['DynamoDB', 'CapacityUnits', 'Write'] + +Outputs: + RefsDbTable: + Description: The refs-db table + Value: !Ref RefsDbTable + Export: + Name: !Join [ ':', [ !Ref 'AWS::StackName', 'RefsDbTable' ] ] + LocksTable: + Description: The locks-db table + Value: !Ref LocksTable + Export: + Name: !Join [ ':', [ !Ref 'AWS::StackName', 'LocksTable' ] ] \ No newline at end of file
diff --git a/common-templates/cf-gerrit-task-execution-role.yml b/common-templates/cf-gerrit-task-execution-role.yml index 65c0fc7..2c748d0 100644 --- a/common-templates/cf-gerrit-task-execution-role.yml +++ b/common-templates/cf-gerrit-task-execution-role.yml
@@ -31,6 +31,17 @@ - 'logs:PutLogEvents' # Allow the ECS tasks to push metrics to CloudWatch - 'cloudwatch:PutMetricData' + # Allow the ECS tasks to perform CRUD actions to dynamodb table: + # Used for global refs-db operations. + - 'dynamodb:DeleteItem' + - 'dynamodb:CreateTable' + - 'dynamodb:DescribeTable' + - 'dynamodb:GetItem' + - 'dynamodb:ListTables' + - 'dynamodb:PutItem' + - 'dynamodb:Query' + - 'dynamodb:Scan' + - 'dynamodb:UpdateItem' Resource: '*' - PolicyName: AmazonECSTaskSecretManagerRolePolicy PolicyDocument:
diff --git a/dual-primary/Makefile b/dual-primary/Makefile index 9007fe5..c61e8d0 100644 --- a/dual-primary/Makefile +++ b/dual-primary/Makefile
@@ -15,7 +15,10 @@ SINGLE_SITE_PLUGINS=javamelody high-availability healthcheck metrics-reporter-cloudwatch -MULTI_SITE_PLUGINS=$(SINGLE_SITE_PLUGINS) multi-site kafka-events websession-broker zookeeper-refdb~zk-3.5 +HA_SITE_PLUGINS=$(SINGLE_SITE_PLUGINS) aws-dynamodb-refdb +HA_SITE_PLUGINS_LIBS_LINKS=high-availability + +MULTI_SITE_PLUGINS=$(SINGLE_SITE_PLUGINS) multi-site kafka-events websession-broker MULTI_SITE_PLUGINS_LIBS_LINKS=multi-site replication MULTI_SITE_MAVEN_LIBS=events-broker~$(EVENTSBROKER_LIB_VER) @@ -54,7 +57,8 @@ set-optional-params-for-replica-filesystem \ set-optional-params-for-replica-auto-scaling-capacity \ set-optional-params-for-replica-capacity-provider \ - set-optional-network-params + set-optional-network-params \ + set-optional-refs-db-params ifdef CLUSTER_INSTANCE_TYPE $(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=InstanceType,ParameterValue=$(CLUSTER_INSTANCE_TYPE)) endif @@ -79,6 +83,9 @@ ifdef LOAD_BALANCER_SCHEME $(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=PrimariesGerritLoadBalancerScheme,ParameterValue=$(LOAD_BALANCER_SCHEME)) endif +ifdef CREATE_REFS_DB_TABLES + $(eval CLUSTER_OPTIONAL_PARAMS := $(CLUSTER_OPTIONAL_PARAMS) ParameterKey=CreateRefsDBTables,ParameterValue=$(CREATE_REFS_DB_TABLES)) +endif $(AWS_FC_COMMAND) create-stack \ --stack-name $(CLUSTER_STACK_NAME) \ @@ -94,12 +101,14 @@ $(GERRIT_OPTIONAL_PRIMARY_VOLUME) \ $(GERRIT_OPTIONAL_PARAMS_REPLICA_FILESYSTEM) \ $(GERRIT_OPTIONAL_PARAMS_REPLICA_AUTO_SCALING_CAPACITY) \ - $(GERRIT_OPTIONAL_PARAMS_REPLICA_CAPACITY_PROVIDER) + $(GERRIT_OPTIONAL_PARAMS_REPLICA_CAPACITY_PROVIDER) \ + $(REFS_DB_OPTIONAL_PARAMS) service-primary-1: set-optional-params-metrics-cloudwatch set-optional-params-smtp \ set-optional-params-multisite set-ldap-account-pattern \ set-optional-gerrit-ulimits set-optional-jgit-conf \ - set-high-availability-optional-params + set-high-availability-optional-params \ + set-optional-refs-db-params ifdef GERRIT_PRIMARY1_INSTANCE_ID $(eval PRIMARY1_SERVICE_OPTIONAL_PARAMS := $(PRIMARY1_SERVICE_OPTIONAL_PARAMS) ParameterKey=InstanceId,ParameterValue=$(GERRIT_PRIMARY1_INSTANCE_ID)) endif @@ -150,12 +159,14 @@ $(LDAP_ACCOUNT_PATTERN_PARAM) \ $(METRICS_CW_OPTIONAL_PARAMS) \ $(SMTP_OPTIONAL_PARAMS) \ - $(GERRIT_ULIMITS) + $(GERRIT_ULIMITS) \ + $(REFS_DB_OPTIONAL_PARAMS) service-primary-2: set-optional-params-metrics-cloudwatch set-optional-params-smtp \ set-optional-params-multisite set-ldap-account-pattern \ set-optional-gerrit-ulimits set-optional-jgit-conf \ - set-high-availability-optional-params + set-high-availability-optional-params \ + set-optional-refs-db-params ifdef GERRIT_PRIMARY2_INSTANCE_ID $(eval PRIMARY2_SERVICE_OPTIONAL_PARAMS := $(PRIMARY2_SERVICE_OPTIONAL_PARAMS) ParameterKey=InstanceId,ParameterValue=$(GERRIT_PRIMARY2_INSTANCE_ID)) endif @@ -207,7 +218,8 @@ $(LDAP_ACCOUNT_PATTERN_PARAM) \ $(METRICS_CW_OPTIONAL_PARAMS) \ $(SMTP_OPTIONAL_PARAMS) \ - $(GERRIT_ULIMITS) + $(GERRIT_ULIMITS) \ + $(REFS_DB_OPTIONAL_PARAMS) service-replication: $(AWS_FC_COMMAND) create-stack \ @@ -498,7 +510,7 @@ $(optional_git_gc_targets_deletion) \ delete-cluster wait-for-cluster-deletion -delete-all-including-retained-stack: confirm-persistent-stack-deletion delete-all delete-git-primary-persistent-stack delete-git-replica-persistent-stack delete-network-persistent-stack +delete-all-including-retained-stack: confirm-persistent-stack-deletion delete-all delete-git-primary-persistent-stack delete-git-replica-persistent-stack delete-network-persistent-stack delete-dynamodb-persistent-stack delete-git-primary-persistent-stack: @@ -521,7 +533,7 @@ ifeq ($(MULTISITE_ENABLED),true) $(MAKE) -C ../gerrit gerrit-publish RECIPE=dual-primary PLUGINS="$(MULTI_SITE_PLUGINS)" PLUGINS_LIBS_LINKS="$(MULTI_SITE_PLUGINS_LIBS_LINKS)" MAVEN_LIBS="$(MULTI_SITE_MAVEN_LIBS)" else - $(MAKE) -C ../gerrit gerrit-publish RECIPE=dual-primary PLUGINS="$(SINGLE_SITE_PLUGINS)" + $(MAKE) -C ../gerrit gerrit-publish RECIPE=dual-primary PLUGINS="$(HA_SITE_PLUGINS)" PLUGINS_LIBS_LINKS="$(HA_SITE_PLUGINS_LIBS_LINKS)" endif haproxy-publish: @@ -541,3 +553,28 @@ ifdef AUTOREINDEX_POLL_INTERVAL $(eval HA_OPTIONAL_PARAMS := ParameterKey=AutoReindexPollInterval,ParameterValue=$(AUTOREINDEX_POLL_INTERVAL)) endif + +set-optional-refs-db-params: + $(eval REFS_DB_OPTIONAL_PARAMS=) +ifdef DYNAMODB_LOCKS_TABLE_NAME + $(eval REFS_DB_OPTIONAL_PARAMS := $(REFS_DB_OPTIONAL_PARAMS) ParameterKey=DynamoDBLocksTableName,ParameterValue=$(DYNAMODB_LOCKS_TABLE_NAME)) +endif +ifdef DYNAMODB_REFS_TABLE_NAME + $(eval REFS_DB_OPTIONAL_PARAMS := $(REFS_DB_OPTIONAL_PARAMS) ParameterKey=DynamoDBRefsTableName,ParameterValue=$(DYNAMODB_REFS_TABLE_NAME)) +endif + +delete-dynamodb-persistent-stack: + $(eval DYNAMODB_STACK_NAME=$(shell $(AWS_FC_COMMAND) list-stacks --stack-status-filter CREATE_COMPLETE --query "StackSummaries[*].StackName" | jq -r '.[]| select(startswith("$(CLUSTER_STACK_NAME)-DynamoDBPersistentStack"))')) + + $(if $(DYNAMODB_STACK_NAME), \ + $(AWS_FC_COMMAND) delete-stack \ + --stack-name $(DYNAMODB_STACK_NAME) \ + --region $(AWS_REGION) && \ + echo "*** Wait for DynamoDB stack '$(DYNAMODB_STACK_NAME)' deletion" && \ + $(AWS_FC_COMMAND) wait stack-delete-complete \ + --stack-name $(DYNAMODB_STACK_NAME) \ + --region $(AWS_REGION) && \ + echo "*** DynamoDB stack '$(DYNAMODB_STACK_NAME)' deleted" \ + , \ + echo "No DynamoDB stack found. Nothing to do." \ + ) \ No newline at end of file
diff --git a/dual-primary/README.md b/dual-primary/README.md index f08f391..1155491 100644 --- a/dual-primary/README.md +++ b/dual-primary/README.md
@@ -98,6 +98,10 @@ SUBNET2_CIDR=10.0.32.0/24 ``` +Note that if the refs-db dynamodb tables were created as part of the initial +stack (`CREATE_REFS_DB_TABLES` was set to `true`), you will need to explicitly +set it to `false` to avoid attempting to create the same tables again. + 3. Deploy the *green* stack: ```bash @@ -211,6 +215,19 @@ Default: `10m` high-availability docs [here](https://gerrit.googlesource.com/plugins/high-availability/+/refs/heads/master/src/main/resources/Documentation/config.md) +* `DYNAMODB_LOCKS_TABLE_NAME`. Optional. The name of the dynamoDB table used to + store distribute locking. + Default: `locksTable` + See DynamoDB lock client [here](https://github.com/awslabs/amazon-dynamodb-lock-client) + +* `DYNAMODB_REFS_TABLE_NAME`. Optional. The name of the dynamoDB table used to + store git refs and their associated sha1. + Default: `refsDb` + +* `CREATE_REFS_DB_TABLES`. Optional. Whether to create the DynamoDB refs and + lock tables. + Default: `false` + ##### Shared filesystem for replicas Similarly to primary nodes, replicas share a data via an EFS filesystem which is @@ -356,7 +373,7 @@ for more information on this. ##### Requirements -* Kafka brokers and Zookeeper are required by this recipe and are expected to exist +* Kafka brokers and DynamoDB are required by this recipe and are expected to exist and accessible with server-side TLS security enabled by the primary instances resulting from the deployment of this recipe. * Replication service must be enabled to allow syncing of Git data. @@ -365,15 +382,9 @@ * `MULTISITE_ENABLED`: Optional. Whether this Gerrit is part of a multi-site cluster deployment. "false" by default. -* `MULTISITE_ZOOKEEPER_CONNECT_STRING`: Required when "MULTISITE_ENABLED=true". -Connection string to Zookeeper. * `MULTISITE_KAFKA_BROKERS`: Required when "MULTISITE_ENABLED=true". Comma separated list of Kafka broker hosts (host:port) to use for publishing events to the message broker. -* `MULTISITE_ZOOKEEPER_ROOT_NODE` Optional. Root node to use in Zookeeper to -store/retrieve information. -Constraint: a slash-separated ('/') string not starting with a slash ('/') -"gerrit/multi-site" by default. * `MULTISITE_GLOBAL_PROJECTS`: Optional. Comma separated list of patterns (see [projects.pattern](https://gerrit.googlesource.com/plugins/multi-site/+/refs/heads/stable-3.2/src/main/resources/Documentation/config.md)) to specify which projects are available across all sites. This parametes applies to both multi-site and replication service remote destinations. @@ -433,10 +444,12 @@ * EFS stack * VPC and subnets (if created as part of this deployment, rather than externally provided) +* Refs-DB DynamoDB stack (if created as part of this deployment, rather than + externally provided)) Note that you can completely delete the stack, including explicitly retained -resources such as the EFS Git filesystem, VPC and subnets, by issuing the more -aggressive command: +resources such as the EFS Git filesystem, VPC and subnets and DynamoDB stack by +issuing the more aggressive command: ``` make [AWS_REGION=a-valid-aws-region] [AWS_PREFIX=some-cluster-prefix] delete-all-including-retained-stack
diff --git a/dual-primary/cf-cluster.yml b/dual-primary/cf-cluster.yml index 620dd01..2560cd2 100644 --- a/dual-primary/cf-cluster.yml +++ b/dual-primary/cf-cluster.yml
@@ -163,8 +163,22 @@ PrimariesGerritCertificateArn: Description: SSL Certificates ARN for the load balancer serving requests to the primary gerrit instances Type: String + DynamoDBLocksTableName: + Description: The name of the DynamoDB locks table + Type: String + Default: 'locksTable' + DynamoDBRefsTableName: + Description: The name of the DynamoDB refs table + Type: String + Default: 'refsDb' + CreateRefsDBTables: + Description: Whether to create DynamoDB tables for refs-db + Type: String + Default: false + AllowedValues: [true, false] Conditions: + ShouldCreateDynamoDBTables: !Equals [!Ref CreateRefsDBTables, "true"] isProvisionedThroughput: !Equals [!Ref PrimaryFileSystemThroughputMode, "provisioned"] CreatePrimaryEFS: !Equals [!Ref PrimaryFileSystemID, ""] CreateReplicaEFS: !Equals [!Ref ReplicaFileSystemID, ""] @@ -459,6 +473,9 @@ - 'ecr:GetDownloadUrlForLayer' - 'ec2:AttachVolume' - 'ec2:DescribeVolumes' + - "dynamodb:CreateTable" + - "dynamodb:DeleteTable" + - "dynamodb:ListTables" Resource: '*' PrimaryGitFileSystemPermanentStack: @@ -513,6 +530,17 @@ Subnet2CIDR: !Ref 'Subnet2CIDR' Subnet2AZProp: !Ref 'Subnet2AZProp' + DynamoDBPersistentStack: + Type: AWS::CloudFormation::Stack + DeletionPolicy: Retain + Condition: ShouldCreateDynamoDBTables + Properties: + TemplateURL: !Join [ '', ['https://', !Ref TemplateBucketName, '.s3.amazonaws.com/cf-dynamodb-stack.yml'] ] + TimeoutInMinutes: '25' + Parameters: + DynamoDBRefsTableName: !Ref DynamoDBRefsTableName + DynamoDBLocksTableName: !Ref DynamoDBLocksTableName + Outputs: ClusterName: Description: The name of the ECS cluster
diff --git a/dual-primary/cf-service-primary.yml b/dual-primary/cf-service-primary.yml index d08c07a..d865835 100644 --- a/dual-primary/cf-service-primary.yml +++ b/dual-primary/cf-service-primary.yml
@@ -172,16 +172,14 @@ Description: Comma separated list of Kafka broker hosts (host:port) to use for publishing events to the message broker Type: CommaDelimitedList Default: '' - MultiSiteZookeeperConnectString: - Description: Connection string to Zookeeper + DynamoDBLocksTableName: + Description: The name of the DynamoDB locks table Type: String - Default: '' - MultiSiteZookeeperRootNode: - Description: Root node to use in Zookeeper to store/retrieve information + Default: 'locksTable' + DynamoDBRefsTableName: + Description: The name of the DynamoDB refs table Type: String - ConstraintDescription: Choose a slash-separated ('/') string not starting with a slash ('/') - AllowedPattern: '^[^\/].*' - Default: 'gerrit/multi-site' + Default: 'refsDb' AutoReindexPollInterval: Description: Interval between reindexing of all changes, accounts and groups. Type: String @@ -334,10 +332,12 @@ Value: !Ref MultiSiteEnabled - Name: MULTISITE_KAFKA_BROKERS Value: !Join [',', !Ref MultiSiteKafkaBrokers] - - Name: MULTISITE_ZOOKEEPER_CONNECT_STRING - Value: !Ref MultiSiteZookeeperConnectString - - Name: MULTISITE_ZOOKEEPER_ROOT_NODE - Value: !Ref MultiSiteZookeeperRootNode + - Name: REFS_DB_ENABLED + Value: true + - Name: DYNAMODB_LOCKS_TABLE_NAME + Value: !Ref DynamoDBLocksTableName + - Name: DYNAMODB_REFS_TABLE_NAME + Value: !Ref DynamoDBRefsTableName Ulimits: - Name: nofile HardLimit: !Ref FileDescriptorsHardLimit
diff --git a/dual-primary/setup.env.template b/dual-primary/setup.env.template index c282ff6..b1314ed 100644 --- a/dual-primary/setup.env.template +++ b/dual-primary/setup.env.template
@@ -1,7 +1,5 @@ MULTISITE_ENABLED:=false -MULTISITE_ZOOKEEPER_CONNECT_STRING:=zookeeper-yourcompany.com:2181 MULTISITE_KAFKA_BROKERS:=kafka0-yourcompany.com:9092,kafka1-yourcompany.com:9092 -MULTISITE_ZOOKEEPER_ROOT_NODE:=gerrit/multi-site CLUSTER_INSTANCE_TYPE:=m4.2xlarge SERVICE_PRIMARY1_STACK_NAME:=$(AWS_PREFIX)-service-primary-1 @@ -97,4 +95,8 @@ # Existing SUBNET2 settings SUBNET2_CIDR= SUBNET2_ID= -SUBNET2_AZ= \ No newline at end of file +SUBNET2_AZ= + +DYNAMODB_LOCKS_TABLE_NAME=$(AWS_PREFIX)-locksTable +DYNAMODB_REFS_TABLE_NAME=$(AWS_PREFIX)-refsDb +CREATE_REFS_DB_TABLES=false \ No newline at end of file
diff --git a/gerrit/entrypoint.sh b/gerrit/entrypoint.sh index a5e1128..4aa5446 100755 --- a/gerrit/entrypoint.sh +++ b/gerrit/entrypoint.sh
@@ -10,8 +10,8 @@ echo "Ensure primary specific plugins and libraries are not installed:" for jar in "lib/multi-site.jar" "plugins/multi-site.jar" "lib/replication.jar" \ - "lib/events-broker.jar" "plugins/kafka-events.jar" "plugins/zookeeper-refdb.jar" \ - "plugins/websession-broker.jar" "plugins/high-availability.jar" + "lib/events-broker.jar" "plugins/kafka-events.jar" "plugins/aws-dynamodb-refdb.jar" \ + "plugins/websession-broker.jar" "plugins/high-availability.jar" "lib/high-availability.jar" do echo "rm -f /var/gerrit/$jar" rm -f /var/gerrit/"$jar"
diff --git a/gerrit/etc/gerrit.config.template b/gerrit/etc/gerrit.config.template index 0cccdc9..7488c31 100644 --- a/gerrit/etc/gerrit.config.template +++ b/gerrit/etc/gerrit.config.template
@@ -8,6 +8,9 @@ installDbModule = com.googlesource.gerrit.plugins.multisite.GitModule installModule = com.googlesource.gerrit.plugins.multisite.Module installModule = com.gerritforge.gerrit.eventbroker.BrokerApiModule +{% elif REFS_DB_ENABLED is defined and REFS_DB_ENABLED == "true" %} + installDbModule = com.ericsson.gerrit.plugins.highavailability.ValidationModule + installModule = com.gerritforge.gerrit.globalrefdb.validation.LibModule {% endif %} [core] packedGitLimit = {{ JGIT_CACHE_SIZE }} @@ -104,3 +107,9 @@ maxRequestSize = 10485760 securityProtocol = SSL {% endif %} + +{% if (MULTISITE_ENABLED is defined and MULTISITE_ENABLED == "true") or (REFS_DB_ENABLED is defined and REFS_DB_ENABLED == "true") %} +[plugin "aws-dynamodb-refdb"] + locksTableName = {{ DYNAMODB_LOCKS_TABLE_NAME }} + refsDbTableName = {{ DYNAMODB_REFS_TABLE_NAME }} +{% endif %} \ No newline at end of file
diff --git a/gerrit/etc/high-availability.config.template b/gerrit/etc/high-availability.config.template index db00a79..8a3b635 100644 --- a/gerrit/etc/high-availability.config.template +++ b/gerrit/etc/high-availability.config.template
@@ -14,5 +14,7 @@ {% if MULTISITE_ENABLED is defined and MULTISITE_ENABLED == "true" %} [websession] synchronize = false -{% endif %} - +{% elif REFS_DB_ENABLED is defined and REFS_DB_ENABLED == "true" %} +[ref-database] + enabled = true +{% endif %} \ No newline at end of file
diff --git a/gerrit/etc/zookeeper-refdb.config.template b/gerrit/etc/zookeeper-refdb.config.template deleted file mode 100644 index 7e0b649..0000000 --- a/gerrit/etc/zookeeper-refdb.config.template +++ /dev/null
@@ -1,4 +0,0 @@ -[ref-database "zookeeper"] - connectString = {{ MULTISITE_ZOOKEEPER_CONNECT_STRING }} - sslConnection = true - rootNode = {{ MULTISITE_ZOOKEEPER_ROOT_NODE }} \ No newline at end of file
diff --git a/gerrit/setup_gerrit.py b/gerrit/setup_gerrit.py index 5af5795..74ecdba 100755 --- a/gerrit/setup_gerrit.py +++ b/gerrit/setup_gerrit.py
@@ -169,7 +169,10 @@ 'METRICS_CLOUDWATCH_DRY_RUN': os.getenv('METRICS_CLOUDWATCH_DRY_RUN'), 'METRICS_CLOUDWATCH_EXCLUDE_METRICS_LIST': os.getenv('METRICS_CLOUDWATCH_EXCLUDE_METRICS_LIST'), 'MULTISITE_ENABLED': os.getenv('MULTISITE_ENABLED'), - 'MULTISITE_KAFKA_BROKERS': os.getenv('MULTISITE_KAFKA_BROKERS') + 'MULTISITE_KAFKA_BROKERS': os.getenv('MULTISITE_KAFKA_BROKERS'), + 'REFS_DB_ENABLED': os.getenv('REFS_DB_ENABLED'), + 'DYNAMODB_LOCKS_TABLE_NAME': os.getenv('DYNAMODB_LOCKS_TABLE_NAME'), + 'DYNAMODB_REFS_TABLE_NAME': os.getenv('DYNAMODB_REFS_TABLE_NAME'), }) f.write(template.render(config_for_template)) @@ -214,22 +217,11 @@ f.write(template.render( HA_PEER_URL=os.getenv('HA_PEER_URL'), HA_AUTOREINDEX_POLL_INTERVAL=os.getenv('HA_AUTOREINDEX_POLL_INTERVAL'), - MULTISITE_ENABLED=os.getenv('MULTISITE_ENABLED') + MULTISITE_ENABLED=os.getenv('MULTISITE_ENABLED'), + REFS_DB_ENABLED=os.getenv('REFS_DB_ENABLED') )) if setupMultiSite: - CONFIGURATION_FILE = "zookeeper-refdb.config" - CONFIGURATION_TARGET = GERRIT_CONFIG_DIRECTORY + CONFIGURATION_FILE - TEMPLATE_FILE = CONFIGURATION_FILE + ".template" - - print("*** "+ CONFIGURATION_TARGET) - template = env.get_template("zookeeper-refdb.config.template") - with open(CONFIGURATION_TARGET, 'w', encoding='utf-8') as f: - f.write(template.render( - MULTISITE_ZOOKEEPER_CONNECT_STRING=os.getenv('MULTISITE_ZOOKEEPER_CONNECT_STRING'), - MULTISITE_ZOOKEEPER_ROOT_NODE=os.getenv('MULTISITE_ZOOKEEPER_ROOT_NODE') - )) - CONFIGURATION_TARGET = GERRIT_CONFIG_DIRECTORY + "multi-site.config" print("*** "+ CONFIGURATION_TARGET)