{"action":"created","issue":{"url":"https://api.github.com/repos/Unidata/thredds/issues/261","labels_url":"https://api.github.com/repos/Unidata/thredds/issues/261/labels{/name}","comments_url":"https://api.github.com/repos/Unidata/thredds/issues/261/comments","events_url":"https://api.github.com/repos/Unidata/thredds/issues/261/events","html_url":"https://github.com/Unidata/thredds/pull/261","id":113949328,"number":261,"title":"S3: Handle case when a \"directory\" is a valid object.","user":{"login":"dopplershift","id":221526,"avatar_url":"https://avatars.githubusercontent.com/u/221526?v=3","gravatar_id":"","url":"https://api.github.com/users/dopplershift","html_url":"https://github.com/dopplershift","followers_url":"https://api.github.com/users/dopplershift/followers","following_url":"https://api.github.com/users/dopplershift/following{/other_user}","gists_url":"https://api.github.com/users/dopplershift/gists{/gist_id}","starred_url":"https://api.github.com/users/dopplershift/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dopplershift/subscriptions","organizations_url":"https://api.github.com/users/dopplershift/orgs","repos_url":"https://api.github.com/users/dopplershift/repos","events_url":"https://api.github.com/users/dopplershift/events{/privacy}","received_events_url":"https://api.github.com/users/dopplershift/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/Unidata/thredds/labels/S3","name":"S3","color":"d4c5f9"}],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/Unidata/thredds/milestones/1","html_url":"https://github.com/Unidata/thredds/milestones/Final%20push%20for%20new%20features%20on%20the%20v4%20branch","labels_url":"https://api.github.com/repos/Unidata/thredds/milestones/1/labels","id":1277907,"number":1,"title":"Final push for new features on the v4 branch","description":"This is the last planned release of the 4 branch to include new features. >=4.7.1 will be bug fixes only. Note that starting with version 5, the THREDDS group will begin using [semantic versioning](http://semver.org/) for releases.","creator":{"login":"lesserwhirls","id":67096,"avatar_url":"https://avatars.githubusercontent.com/u/67096?v=3","gravatar_id":"","url":"https://api.github.com/users/lesserwhirls","html_url":"https://github.com/lesserwhirls","followers_url":"https://api.github.com/users/lesserwhirls/followers","following_url":"https://api.github.com/users/lesserwhirls/following{/other_user}","gists_url":"https://api.github.com/users/lesserwhirls/gists{/gist_id}","starred_url":"https://api.github.com/users/lesserwhirls/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lesserwhirls/subscriptions","organizations_url":"https://api.github.com/users/lesserwhirls/orgs","repos_url":"https://api.github.com/users/lesserwhirls/repos","events_url":"https://api.github.com/users/lesserwhirls/events{/privacy}","received_events_url":"https://api.github.com/users/lesserwhirls/received_events","type":"User","site_admin":false},"open_issues":11,"closed_issues":7,"state":"open","created_at":"2015-08-28T16:39:01Z","updated_at":"2015-10-29T20:24:43Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2015-10-28T23:41:23Z","updated_at":"2015-10-29T20:24:43Z","closed_at":"2015-10-29T20:24:43Z","pull_request":{"url":"https://api.github.com/repos/Unidata/thredds/pulls/261","html_url":"https://github.com/Unidata/thredds/pull/261","diff_url":"https://github.com/Unidata/thredds/pull/261.diff","patch_url":"https://github.com/Unidata/thredds/pull/261.patch"},"body":"On S3, a prefix that we consider a directory can have an object\r\nattached to it--even a 0 byte one. This breaks the crawling logic\r\ndeciding whether to treat something as a collection or not.\r\n\r\nWe consider a file as a valid S3 object, whereas a directory is not. However, on S3, while the keys look hierarchical they're not really; the key '2009/' can map to an object and then we can still have files under '2015/10/20/foobar'. We solve this by filtering '2009/' from the list of objects under the prefix '2009/'; it is doubtful that a \"directory\" would ever have valid data itself that a user would want to serve. This eliminates a confusing case for when a placeholder key was created in the S3 bucket."},"comment":{"url":"https://api.github.com/repos/Unidata/thredds/issues/comments/152307990","html_url":"https://github.com/Unidata/thredds/pull/261#issuecomment-152307990","issue_url":"https://api.github.com/repos/Unidata/thredds/issues/261","id":152307990,"user":{"login":"cwardgar","id":6147419,"avatar_url":"https://avatars.githubusercontent.com/u/6147419?v=3","gravatar_id":"","url":"https://api.github.com/users/cwardgar","html_url":"https://github.com/cwardgar","followers_url":"https://api.github.com/users/cwardgar/followers","following_url":"https://api.github.com/users/cwardgar/following{/other_user}","gists_url":"https://api.github.com/users/cwardgar/gists{/gist_id}","starred_url":"https://api.github.com/users/cwardgar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cwardgar/subscriptions","organizations_url":"https://api.github.com/users/cwardgar/orgs","repos_url":"https://api.github.com/users/cwardgar/repos","events_url":"https://api.github.com/users/cwardgar/events{/privacy}","received_events_url":"https://api.github.com/users/cwardgar/received_events","type":"User","site_admin":false},"created_at":"2015-10-29T20:24:43Z","updated_at":"2015-10-29T20:24:43Z","body":"Superseded by #263."}}