{"action":"created","comment":{"url":"https://api.github.com/repos/codice/ddf/pulls/comments/86187621","pull_request_review_id":6857693,"id":86187621,"diff_hunk":"@@ -188,11 +189,11 @@ public final Attribute getAttribute(String name) {\n         if (Metacard.ID.equals(name)) {\n             return this.id;\n         }\n-        for (Attribute attribute : attributes) {\n-            if (attribute == null || StringUtils.isEmpty(attribute.getName())) {\n-                continue;\n-            } else if (name.equals(attribute.getName())) {\n-                return attribute;\n+        for (Attribute attribute : Collections.unmodifiableList(attributes)) {","path":"catalog/transformer/catalog-transformer-xml/src/main/java/ddf/catalog/transformer/xml/adapter/AdaptedMetacard.java","position":17,"original_position":17,"commit_id":"f419da9a5ded373c96443776ae505a9ca0fb6df4","original_commit_id":"f419da9a5ded373c96443776ae505a9ca0fb6df4","user":{"login":"coyotesqrl","id":1469860,"avatar_url":"https://avatars.githubusercontent.com/u/1469860?v=3","gravatar_id":"","url":"https://api.github.com/users/coyotesqrl","html_url":"https://github.com/coyotesqrl","followers_url":"https://api.github.com/users/coyotesqrl/followers","following_url":"https://api.github.com/users/coyotesqrl/following{/other_user}","gists_url":"https://api.github.com/users/coyotesqrl/gists{/gist_id}","starred_url":"https://api.github.com/users/coyotesqrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coyotesqrl/subscriptions","organizations_url":"https://api.github.com/users/coyotesqrl/orgs","repos_url":"https://api.github.com/users/coyotesqrl/repos","events_url":"https://api.github.com/users/coyotesqrl/events{/privacy}","received_events_url":"https://api.github.com/users/coyotesqrl/received_events","type":"User","site_admin":false},"body":"To avoid `ConcurrentModificationExceptions` caused by other threads modifying the attributes on this metacard while it is being iterated.","created_at":"2016-11-02T16:44:09Z","updated_at":"2016-11-02T16:44:09Z","html_url":"https://github.com/codice/ddf/pull/1379#discussion_r86187621","pull_request_url":"https://api.github.com/repos/codice/ddf/pulls/1379","_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments/86187621"},"html":{"href":"https://github.com/codice/ddf/pull/1379#discussion_r86187621"},"pull_request":{"href":"https://api.github.com/repos/codice/ddf/pulls/1379"}}},"pull_request":{"url":"https://api.github.com/repos/codice/ddf/pulls/1379","id":91051996,"html_url":"https://github.com/codice/ddf/pull/1379","diff_url":"https://github.com/codice/ddf/pull/1379.diff","patch_url":"https://github.com/codice/ddf/pull/1379.patch","issue_url":"https://api.github.com/repos/codice/ddf/issues/1379","number":1379,"state":"open","locked":false,"title":"DDF-2556: Corrected caching logic to clone metacards on cache ingest","user":{"login":"jlcsmith","id":4503545,"avatar_url":"https://avatars.githubusercontent.com/u/4503545?v=3","gravatar_id":"","url":"https://api.github.com/users/jlcsmith","html_url":"https://github.com/jlcsmith","followers_url":"https://api.github.com/users/jlcsmith/followers","following_url":"https://api.github.com/users/jlcsmith/following{/other_user}","gists_url":"https://api.github.com/users/jlcsmith/gists{/gist_id}","starred_url":"https://api.github.com/users/jlcsmith/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jlcsmith/subscriptions","organizations_url":"https://api.github.com/users/jlcsmith/orgs","repos_url":"https://api.github.com/users/jlcsmith/repos","events_url":"https://api.github.com/users/jlcsmith/events{/privacy}","received_events_url":"https://api.github.com/users/jlcsmith/received_events","type":"User","site_admin":false},"body":"#### What does this PR do?\n- Added defensive copy of metacards on CacheBulkProcessor.add()\n- Added .equals() to MetacardImpl and fixed .hashCode()\n- Updated MetacardImpl to use ConcurrentHashMap\n#### Who is reviewing it (please choose AT LEAST two reviewers that need to approve the PR before it can get merged)?\n\n@bdeining @rzwiefel @lcrosenbu @kcwire \n#### Select at least one member from relevant component team(s) from below (at least one component team member needs to approve the PR).\n\n[Solr](https://github.com/orgs/codice/teams/solr)\n[Core APIs](https://github.com/orgs/codice/teams/core-apis)\n#### Choose 2 committers to review/merge the PR (please choose ONLY two committers from below, delete the rest).\n\n@pklinef\n@coyotesqrl \n#### How should this be tested? (List steps with links to updated documentation)\n\nFull clean build - verify unit and integration tests pass.\n\nThe issue was originally triggered with the Catalog UI.  \n- Add the Catalog UI app\n- add a federated source (CSW loopback for example)\n- ingest some data\n- perform a federated search from the Catalog UI.  \n- Verify no caching exceptions in the log. \n- Verify the cache is populated (search --cache *)\n#### Any background context you want to provide?\n#### What are the relevant tickets?\n\nhttps://codice.atlassian.net/browse/DDF-2556\n#### Screenshots (if appropriate)\n#### Checklist:\n- [ ] Documentation Updated\n- [ ] Change Log Updated\n- [X] Update / Add Unit Tests\n- [ ] Update / Add Integration Tests\n","created_at":"2016-10-26T17:36:07Z","updated_at":"2016-11-02T16:44:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8306b87f2c0a799c904f0bf64f57381d336e7799","assignee":{"login":"pklinef","id":700518,"avatar_url":"https://avatars.githubusercontent.com/u/700518?v=3","gravatar_id":"","url":"https://api.github.com/users/pklinef","html_url":"https://github.com/pklinef","followers_url":"https://api.github.com/users/pklinef/followers","following_url":"https://api.github.com/users/pklinef/following{/other_user}","gists_url":"https://api.github.com/users/pklinef/gists{/gist_id}","starred_url":"https://api.github.com/users/pklinef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pklinef/subscriptions","organizations_url":"https://api.github.com/users/pklinef/orgs","repos_url":"https://api.github.com/users/pklinef/repos","events_url":"https://api.github.com/users/pklinef/events{/privacy}","received_events_url":"https://api.github.com/users/pklinef/received_events","type":"User","site_admin":false},"assignees":[{"login":"pklinef","id":700518,"avatar_url":"https://avatars.githubusercontent.com/u/700518?v=3","gravatar_id":"","url":"https://api.github.com/users/pklinef","html_url":"https://github.com/pklinef","followers_url":"https://api.github.com/users/pklinef/followers","following_url":"https://api.github.com/users/pklinef/following{/other_user}","gists_url":"https://api.github.com/users/pklinef/gists{/gist_id}","starred_url":"https://api.github.com/users/pklinef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pklinef/subscriptions","organizations_url":"https://api.github.com/users/pklinef/orgs","repos_url":"https://api.github.com/users/pklinef/repos","events_url":"https://api.github.com/users/pklinef/events{/privacy}","received_events_url":"https://api.github.com/users/pklinef/received_events","type":"User","site_admin":false},{"login":"coyotesqrl","id":1469860,"avatar_url":"https://avatars.githubusercontent.com/u/1469860?v=3","gravatar_id":"","url":"https://api.github.com/users/coyotesqrl","html_url":"https://github.com/coyotesqrl","followers_url":"https://api.github.com/users/coyotesqrl/followers","following_url":"https://api.github.com/users/coyotesqrl/following{/other_user}","gists_url":"https://api.github.com/users/coyotesqrl/gists{/gist_id}","starred_url":"https://api.github.com/users/coyotesqrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coyotesqrl/subscriptions","organizations_url":"https://api.github.com/users/coyotesqrl/orgs","repos_url":"https://api.github.com/users/coyotesqrl/repos","events_url":"https://api.github.com/users/coyotesqrl/events{/privacy}","received_events_url":"https://api.github.com/users/coyotesqrl/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/codice/ddf/pulls/1379/commits","review_comments_url":"https://api.github.com/repos/codice/ddf/pulls/1379/comments","review_comment_url":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codice/ddf/issues/1379/comments","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/f419da9a5ded373c96443776ae505a9ca0fb6df4","head":{"label":"jlcsmith:cache-bulk-create-fix","ref":"cache-bulk-create-fix","sha":"f419da9a5ded373c96443776ae505a9ca0fb6df4","user":{"login":"jlcsmith","id":4503545,"avatar_url":"https://avatars.githubusercontent.com/u/4503545?v=3","gravatar_id":"","url":"https://api.github.com/users/jlcsmith","html_url":"https://github.com/jlcsmith","followers_url":"https://api.github.com/users/jlcsmith/followers","following_url":"https://api.github.com/users/jlcsmith/following{/other_user}","gists_url":"https://api.github.com/users/jlcsmith/gists{/gist_id}","starred_url":"https://api.github.com/users/jlcsmith/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jlcsmith/subscriptions","organizations_url":"https://api.github.com/users/jlcsmith/orgs","repos_url":"https://api.github.com/users/jlcsmith/repos","events_url":"https://api.github.com/users/jlcsmith/events{/privacy}","received_events_url":"https://api.github.com/users/jlcsmith/received_events","type":"User","site_admin":false},"repo":{"id":40322675,"name":"ddf","full_name":"jlcsmith/ddf","owner":{"login":"jlcsmith","id":4503545,"avatar_url":"https://avatars.githubusercontent.com/u/4503545?v=3","gravatar_id":"","url":"https://api.github.com/users/jlcsmith","html_url":"https://github.com/jlcsmith","followers_url":"https://api.github.com/users/jlcsmith/followers","following_url":"https://api.github.com/users/jlcsmith/following{/other_user}","gists_url":"https://api.github.com/users/jlcsmith/gists{/gist_id}","starred_url":"https://api.github.com/users/jlcsmith/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jlcsmith/subscriptions","organizations_url":"https://api.github.com/users/jlcsmith/orgs","repos_url":"https://api.github.com/users/jlcsmith/repos","events_url":"https://api.github.com/users/jlcsmith/events{/privacy}","received_events_url":"https://api.github.com/users/jlcsmith/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jlcsmith/ddf","description":"The Distributed Data Framework - Distribution, SDK, and Test","fork":true,"url":"https://api.github.com/repos/jlcsmith/ddf","forks_url":"https://api.github.com/repos/jlcsmith/ddf/forks","keys_url":"https://api.github.com/repos/jlcsmith/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jlcsmith/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jlcsmith/ddf/teams","hooks_url":"https://api.github.com/repos/jlcsmith/ddf/hooks","issue_events_url":"https://api.github.com/repos/jlcsmith/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/jlcsmith/ddf/events","assignees_url":"https://api.github.com/repos/jlcsmith/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/jlcsmith/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/jlcsmith/ddf/tags","blobs_url":"https://api.github.com/repos/jlcsmith/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jlcsmith/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jlcsmith/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/jlcsmith/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jlcsmith/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/jlcsmith/ddf/languages","stargazers_url":"https://api.github.com/repos/jlcsmith/ddf/stargazers","contributors_url":"https://api.github.com/repos/jlcsmith/ddf/contributors","subscribers_url":"https://api.github.com/repos/jlcsmith/ddf/subscribers","subscription_url":"https://api.github.com/repos/jlcsmith/ddf/subscription","commits_url":"https://api.github.com/repos/jlcsmith/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/jlcsmith/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/jlcsmith/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/jlcsmith/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/jlcsmith/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/jlcsmith/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jlcsmith/ddf/merges","archive_url":"https://api.github.com/repos/jlcsmith/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jlcsmith/ddf/downloads","issues_url":"https://api.github.com/repos/jlcsmith/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/jlcsmith/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/jlcsmith/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/jlcsmith/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jlcsmith/ddf/labels{/name}","releases_url":"https://api.github.com/repos/jlcsmith/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/jlcsmith/ddf/deployments","created_at":"2015-08-06T19:17:14Z","updated_at":"2016-02-08T21:38:24Z","pushed_at":"2016-11-01T22:00:03Z","git_url":"git://github.com/jlcsmith/ddf.git","ssh_url":"git@github.com:jlcsmith/ddf.git","clone_url":"https://github.com/jlcsmith/ddf.git","svn_url":"https://github.com/jlcsmith/ddf","homepage":"","size":151130,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"codice:master","ref":"master","sha":"7e8fa0c938da55a637f2bda32a8b74525a9429b2","user":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"repo":{"id":15173563,"name":"ddf","full_name":"codice/ddf","owner":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codice/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":false,"url":"https://api.github.com/repos/codice/ddf","forks_url":"https://api.github.com/repos/codice/ddf/forks","keys_url":"https://api.github.com/repos/codice/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codice/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codice/ddf/teams","hooks_url":"https://api.github.com/repos/codice/ddf/hooks","issue_events_url":"https://api.github.com/repos/codice/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/codice/ddf/events","assignees_url":"https://api.github.com/repos/codice/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/codice/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/codice/ddf/tags","blobs_url":"https://api.github.com/repos/codice/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codice/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codice/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/codice/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/codice/ddf/languages","stargazers_url":"https://api.github.com/repos/codice/ddf/stargazers","contributors_url":"https://api.github.com/repos/codice/ddf/contributors","subscribers_url":"https://api.github.com/repos/codice/ddf/subscribers","subscription_url":"https://api.github.com/repos/codice/ddf/subscription","commits_url":"https://api.github.com/repos/codice/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/codice/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/codice/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/codice/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/codice/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/codice/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codice/ddf/merges","archive_url":"https://api.github.com/repos/codice/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codice/ddf/downloads","issues_url":"https://api.github.com/repos/codice/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/codice/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/codice/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/codice/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codice/ddf/labels{/name}","releases_url":"https://api.github.com/repos/codice/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/codice/ddf/deployments","created_at":"2013-12-13T20:38:28Z","updated_at":"2016-10-24T13:15:51Z","pushed_at":"2016-11-02T16:28:21Z","git_url":"git://github.com/codice/ddf.git","ssh_url":"git@github.com:codice/ddf.git","clone_url":"https://github.com/codice/ddf.git","svn_url":"https://github.com/codice/ddf","homepage":"http://ddf.codice.org","size":295300,"stargazers_count":48,"watchers_count":48,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":96,"mirror_url":null,"open_issues_count":27,"forks":96,"open_issues":27,"watchers":48,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/1379"},"html":{"href":"https://github.com/codice/ddf/pull/1379"},"issue":{"href":"https://api.github.com/repos/codice/ddf/issues/1379"},"comments":{"href":"https://api.github.com/repos/codice/ddf/issues/1379/comments"},"review_comments":{"href":"https://api.github.com/repos/codice/ddf/pulls/1379/comments"},"review_comment":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codice/ddf/pulls/1379/commits"},"statuses":{"href":"https://api.github.com/repos/codice/ddf/statuses/f419da9a5ded373c96443776ae505a9ca0fb6df4"}}}}
{"actor":{"display_login":"coyotesqrl"}}