{"_class":"hudson.model.FreeStyleBuild","actions":[{"_class":"hudson.model.CauseAction","causes":[{"_class":"hudson.triggers.SCMTrigger$SCMTriggerCause","shortDescription":"Started by an SCM change"}]},{},{"_class":"com.nirima.jenkins.plugins.docker.action.DockerBuildAction"},{},{},{"_class":"hudson.plugins.git.util.BuildData","buildsByBranchName":{"origin/stable-3.9":{"_class":"hudson.plugins.git.util.Build","buildNumber":3,"buildResult":null,"marked":{"SHA1":"a01a6fa86c8b1cb1c46f02b26fc497bc165c4426","branch":[{"SHA1":"a01a6fa86c8b1cb1c46f02b26fc497bc165c4426","name":"origin/stable-3.9"}]},"revision":{"SHA1":"a01a6fa86c8b1cb1c46f02b26fc497bc165c4426","branch":[{"SHA1":"a01a6fa86c8b1cb1c46f02b26fc497bc165c4426","name":"origin/stable-3.9"}]}}},"lastBuiltRevision":{"SHA1":"a01a6fa86c8b1cb1c46f02b26fc497bc165c4426","branch":[{"SHA1":"a01a6fa86c8b1cb1c46f02b26fc497bc165c4426","name":"origin/stable-3.9"}]},"remoteUrls":["https://gerrit.googlesource.com/a/plugins/aws-dynamodb-refdb","https://gerrit.googlesource.com/a/gerrit"],"scmName":""},{},{},{},{"_class":"org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"}],"artifacts":[{"displayPath":"aws-dynamodb-refdb.jar","fileName":"aws-dynamodb-refdb.jar","relativePath":"bazel-bin/plugins/aws-dynamodb-refdb/aws-dynamodb-refdb.jar"},{"displayPath":"aws-dynamodb-refdb.jar-version","fileName":"aws-dynamodb-refdb.jar-version","relativePath":"bazel-bin/plugins/aws-dynamodb-refdb/aws-dynamodb-refdb.jar-version"},{"displayPath":"aws-dynamodb-refdb.json","fileName":"aws-dynamodb-refdb.json","relativePath":"bazel-bin/plugins/aws-dynamodb-refdb/aws-dynamodb-refdb.json"}],"building":false,"description":null,"displayName":"#3","duration":427669,"estimatedDuration":427669,"executor":null,"fullDisplayName":"plugin-aws-dynamodb-refdb-bazel-stable-3.9 #3","id":"3","inProgress":false,"keepLog":false,"number":3,"queueId":153129,"result":"SUCCESS","timestamp":1750059021114,"url":"https://gerrit-ci.gerritforge.com/job/plugin-aws-dynamodb-refdb-bazel-stable-3.9/3/","builtOn":"docker-00cnpzzpcug02","changeSet":{"_class":"hudson.plugins.git.GitChangeSetList","items":[{"_class":"hudson.plugins.git.GitChangeSet","affectedPaths":["Jenkinsfile"],"commitId":"db1de2bcf0d94d2c109e319fa05539c026d04777","timestamp":1748598930000,"author":{"absoluteUrl":"https://gerrit-ci.gerritforge.com/user/syntonyze","fullName":"Antonio Barone"},"authorEmail":"syntonyze@gmail.com","comment":"Verify formatting using GJF 1.7\u000a\u000aChange I216f69ea set the default formatting version to GJF 1.24.0,\u000ahowever older branches are still formatted with GJF 1.7.\u000a\u000aExplicitly set the GJF version to 1.7 so that we can still have\u000asuccessful validation for older branches.\u000a\u000aChange-Id: I180d68cee70c7351d2ffbaaf1fc84eb1e0047907\u000a","date":"2025-05-30 09:55:30 +0000","id":"db1de2bcf0d94d2c109e319fa05539c026d04777","msg":"Verify formatting using GJF 1.7","paths":[{"editType":"edit","file":"Jenkinsfile"}]},{"_class":"hudson.plugins.git.GitChangeSet","affectedPaths":["src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabase.java","src/test/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabaseIT.java"],"commitId":"f2a5d4fcdeee7fb20e01dffa673b5cace544e87a","timestamp":1748599600000,"author":{"absoluteUrl":"https://gerrit-ci.gerritforge.com/user/syntonyze","fullName":"Antonio Barone"},"authorEmail":"syntonyze@gmail.com","comment":"Handle project deletion\u000a\u000aHandle the removal of a project with a soft-delete approach.  Rather\u000athan executing a table scan that might be heavy from a latency and from\u000aa RCUs consumption prospective, we flag the existing items as obsolete\u000aby bumping up a project version refSpec in the form of `|project-name`,\u000ato which we associate the current version `version`.\u000a\u000aThis way, deleting a project is just as simple as bumping up its version\u000avalue.\u000a\u000aWe then prepend the current version to the refSpec when looking up\u000aitems, so that we can easily ignore obsolete entries.\u000a\u000aFor example, if a project `foo` is deleted a new entry is created as\u000asuch:\u000a\u000a| refPath | refValue |\u000a| |foo    | 1        |\u000a\u000aIf then a new project is created, new refSpecs will be prefixed with the\u000anew project version:\u000a\u000a| refPath                  | refValue    |\u000a| |1/foo/refs/heads/master | 3355b5b8b73 |\u000a\u000aWe selected the pipe symbol (|) as a prefix because it is prohibited in\u000arepository names, ensuring no ambiguity arises with actual repository\u000anames.\u000a\u000aChange-Id: I2cfdf2e812c9e68735b66eef3b756ec6084bf697\u000a","date":"2025-05-30 10:06:40 +0000","id":"f2a5d4fcdeee7fb20e01dffa673b5cace544e87a","msg":"Handle project deletion","paths":[{"editType":"edit","file":"src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabase.java"},{"editType":"edit","file":"src/test/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabaseIT.java"}]},{"_class":"hudson.plugins.git.GitChangeSet","affectedPaths":["src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabase.java"],"commitId":"aef2b566589c3c5a00475082e432d4190c7ab191","timestamp":1748599629000,"author":{"absoluteUrl":"https://gerrit-ci.gerritforge.com/user/syntonyze","fullName":"Antonio Barone"},"authorEmail":"syntonyze@gmail.com","comment":"Rename getPathFromDynamoDB to getItemFromDynamoDB\u000a\u000aThe name is more representative of what the method actually does.\u000a\u000aChange-Id: I5ff4af6d8655abffe057bbc02c09c3167aee37d5\u000a","date":"2025-05-30 03:07:09 -0700","id":"aef2b566589c3c5a00475082e432d4190c7ab191","msg":"Rename getPathFromDynamoDB to getItemFromDynamoDB","paths":[{"editType":"edit","file":"src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabase.java"}]},{"_class":"hudson.plugins.git.GitChangeSet","affectedPaths":["src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/ProjectVersionCacheModule.java","src/test/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabaseIT.java","src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabase.java","src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/Module.java"],"commitId":"9b7600c91d0f1c2b98079cf0dfdd115a71fa3858","timestamp":1748599635000,"author":{"absoluteUrl":"https://gerrit-ci.gerritforge.com/user/syntonyze","fullName":"Antonio Barone"},"authorEmail":"syntonyze@gmail.com","comment":"Introduce projectVersion cache\u000a\u000aIntroduces a caching mechanism to reduce the number of requests to\u000aDynamoDB by storing the current life version of a project.\u000a\u000aCherry-picked from bae28b0cca4900dacbedce70c745df8834633222.\u000aAdapted DynamoDBRefDatabaseIT test to avoid compilation error:\u000a\u000acannot infer type arguments for TypeLiteral<T>\u000a'<>' with anonymous inner classes is not supported in -source 8\u000a\u000aChange-Id: Ia260b0c7a684b3314bd32562eb0602fd4d54a20e\u000a","date":"2025-05-30 03:07:15 -0700","id":"9b7600c91d0f1c2b98079cf0dfdd115a71fa3858","msg":"Introduce projectVersion cache","paths":[{"editType":"edit","file":"src/test/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabaseIT.java"},{"editType":"edit","file":"src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/Module.java"},{"editType":"add","file":"src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/ProjectVersionCacheModule.java"},{"editType":"edit","file":"src/main/java/com/googlesource/gerrit/plugins/validation/dfsrefdb/dynamodb/DynamoDBRefDatabase.java"}]},{"_class":"hudson.plugins.git.GitChangeSet","affectedPaths":["src/main/resources/Documentation/config.md"],"commitId":"a628572dbf288c0935b3902cdfe190705f37b221","timestamp":1748599640000,"author":{"absoluteUrl":"https://gerrit-ci.gerritforge.com/user/syntonyze","fullName":"Antonio Barone"},"authorEmail":"syntonyze@gmail.com","comment":"Clarify constraints of project deletions\u000a\u000aUpdate the documentation clarifying that project deletion and\u000are-creation (with the same name) has to wait for the cache TTL to expire\u000aafter a duration of 60 seconds.\u000a\u000aChange-Id: I55910af11366926fa1df87f813f431bdc1c5ff1b\u000a","date":"2025-05-30 03:07:20 -0700","id":"a628572dbf288c0935b3902cdfe190705f37b221","msg":"Clarify constraints of project deletions","paths":[{"editType":"edit","file":"src/main/resources/Documentation/config.md"}]}],"kind":"git"},"culprits":[{"absoluteUrl":"https://gerrit-ci.gerritforge.com/user/syntonyze","fullName":"Antonio Barone"}]}