Hello! I'd like to apply for my module S3 File System to be upgraded to full project status.
Overview
S3 File System is a replacement for the public file system for sites which are load balanced across multiple servers. It stores uploaded files in Amazon's Simple Storage Service (S3) (or a compatible alternative service) rather than saving them to the server's local filesystem.
S3 File System is inspired by justafish's AmazonS3 module, but it has been re-written from the ground up to provide dramatic performance improvements through more intensive use of caching, as well as several other new features and refinements, with new ones being added almost daily. justafish has endorsed my fork.
Project Page
https://drupal.org/sandbox/coredumperror/2097947
Git Repository
git clone --branch 7.x-1.x http://git.drupal.org/sandbox/coredumperror/2097947.git s3fs
Project Reviews
https://drupal.org/node/2102553#comment-7955227
https://drupal.org/node/2085833#comment-7958155
https://drupal.org/node/2116509#comment-8008635
Other Considerations
This module is actively in use on my employer's primary website.
I took over as the primary developer for the Date iCal module earlier this year, after it had been abandoned. Since then, I have worked diligently to fix bugs and add new features, as well as resolve issues posted to the ticket queue in a timely manner.
| Comment | File | Size | Author |
|---|---|---|---|
| #12 | coder-results.txt | 15.95 KB | klausi |
Comments
Comment #1
PA robot commentedThere are some errors reported by automated review tools, did you already check them? See http://pareview.sh/pareview/httpgitdrupalorgsandboxcoredumperror2097947git
I'm a robot and this is an automated message from Project Applications Scraper.
Comment #2
coredumperror commentedI've corrected as many of the problems reported by pareview as I could. The vast majority that remain are complaints about my use of spaces on blank lines to match the indentation level of the code, and class methods whose names I can't change because they implement a specific interface.
Comment #3
christianadamski commentedHi,
this looks mighty impressive. :)
It's pretty hard to test, given I have no access to S3. pareview.sh has a lot to complain about. Mostly "Whitespace found at end of line" which seems picky, but has a reason when people later write patches for your module, as those whitespaces will cause noise in patches.
Also I see you wrote your own tests. I guess it's fine, as you also state a good reason, but as pareview points out, it is a really good idea, to prefix functions with your module name, else a collision in function names is trouble waiting to happen.
Or maybe remove the tests directory entirely. At least on drupal.org.
Comment #4
coredumperror commentedThe test code doesn't get loaded by anything (it's only meant to be executed from the command line), so if the function names ever collide with another module's, it'll be easy to change them. But I guess it's just petulance on my part to leave them named in a potential colideable way, so I'll go ahead and fix that.
What do you mean by "noise" in patches?
Comment #5
christianadamski commentedMaybe remove the entire tests directory? It comes down to the question, if the test file will be helpful to anybody else. If you would assume so, then leave it in.
About that whitespace/patch thing. There is an explaination somewhere, but I can't find it. What can happen is, that my editor removes these whitespaces automatically, while they are still in. If I then create a small one line patch, it would become huge, because alle the removed whitespaces would show up as changes in the patch file.
Don't get me wrong: even some core modules do not respect this completely, but it's a nice guesture...
Comment #6
coredumperror commentedIf you made a patch for my module and the file is huge because your editor made dozens of changes that you didn't tell it to make, that's a problem with your tools, not my code.
The tests are there for regression testing. I re-run that script before committing, to make sure my changes didn't break anything. However, I did recently realize that it might be possible to re-engineer the tests as a drupal web test. But that'd be a pretty low priority task, since they work fine the way they are.
Comment #6.0
coredumperror commentedCleanup
Comment #6.1
coredumperror commentedReformatted and updated
Comment #7
PA robot commentedWe are currently quite busy with all the project applications and we prefer projects with a review bonus. Please help reviewing and put yourself on the high priority list, then we will take a look at your project right away :-)
Also, you should get your friends, colleagues or other community members involved to review this application. Let them go through the review checklist and post a comment that sets this issue to "needs work" (they found some problems with the project) or "reviewed & tested by the community" (they found no major flaws).
I'm a robot and this is an automated message from Project Applications Scraper.
Comment #8
gwb commentedWe've been following this module for a while. It is a fork that was created in response to performance issues with the original Amazon S3 module and their decision not to make the changes that this module makes.
This module radically improves performance. We found the original essentially unusable in our setup.
We are currently using this in production.
Comment #8.0
gwb commentedAdded "Other considerations"
Comment #9
Anonymous (not verified) commentedHave been using this replacement for a while now. Makes an enormous difference when running migrations that upload files to S3. Definitely recommended as an improvement on the original S3 module.
Comment #9.0
Anonymous (not verified) commentedadded a project review. 2 to go.
Comment #10
jiisuominen commentedYeah!
Have to +1 on this. I've swapped over to this module on couple of production sites, and it's working like a charm. Original was pretty much useless in my use case, mainly because of the speed, or lack thereof.
To full project!
Comment #10.0
jiisuominen commentedAdded a second review.
Comment #10.1
coredumperror commentedFixed links for review bonus
Comment #11
coredumperror commentedI finished my third review, so I'm adding the "PAReview: review bonus" tag.
Comment #12
klausiReview of the 7.x-1.x branch:
This automated report was generated with PAReview.sh, your friendly project application review script. You can also use the online version to check your project. You have to get a review bonus to get a review from me.
manual review:
Otherwise looks pretty good. The wrong usage of filter_xss() is a blocker right now, you need to know when to sanitize text and when not. Removing review bonus tag, you can add it again if you have done another 3 reviews of other projects.
Comment #12.0
klausiAdded third review for review bonus
Comment #13
coredumperror commentedThank you for the detailed manual review!
1. Sure. The primary difference is that while AmazonS3 caches the metadata about files in S3 as an afterthought (the author wrote the caching code as a performance hack after releasing the module), S3 File System is build around the cache from the ground up, which affords it far superior performance. I've updated the project page to reflect this.
2. Getting rid of the spaces from blank lines will cause huge problems for me, because I use the same tool (Eclipse) for all my PHP work. I current have Eclipse set to remove trailing whitespace only from non-blank lines, because that's how I like to code. Changing that setting will cause thousands of spurious commit changes to my other code, which is collaborated on by half a dozen other programmers. Leaving it intact, however, will only mildly annoy a small handful of people who have have overly aggressive text editors.
3. Great; there are a ton of those in S3 File System.
4. Yes, I depend on that module, but that TODO is there to remind me that once I upgrade s3fs to use AWS SDK for PHP 2, I will have to roll the functionality from the awssdk module into my own, since that module doesn't support the new SDK. I also want to move away from depending on that module simply because it gives me more control over the update process.
5 & 6. Alright, I'll refactor that when I get in to work next week. I was not aware of that golden rule.
7. I can see the merit of this, but doesn't it also violate the camelcase naming convention? I've made the fix, regardless.
8. Thanks for catching that. I was not aware of the correct way to do class properties.
9. OK, I'll refactor that.
Comment #14
coredumperror commentedI finally got the time to make the changes you pointed out. I believe that S3 File System is now ready for promotion to a full project.
Comment #15
kscheirers3/files/styles/%image_style. Drupal after 7.20 now uses tokens to ensure that image style requests are legitimate, otherwise this can be considered a vector for denial of service attack.Setting to needs work for the security issue, otherwise looks great!
----
Top Shelf Modules - Crafted, Curated, Contributed.
Comment #16
coredumperror commentedAlright, I made the whitespace change. There are still issues reported by the tool, though, so I'm going to respond to each one to say why they don't count.
tests/s3fs_tests.php:
First off, this is strictly a test file, which is never loaded by Drupal (it's only run from the command line). I think this omits it from consideration, but whatever. I fixed everything I could, anyway.
"Unused global variable $_s3fs_debug" - This variable is used in the stream wrapper code.
"global variables should start with a single underscore" - False positive: the variables it's complaining about are $argv and $argc.
"Use the function ip_address() instead of $_SERVER['REMOTE_ADDR']" - False positive: I'm setting $_SERVER['REMOTE_ADDR']), not using it.
s3fs.api.php:
The comment length error here is something I can't fix: it's a really long URL.
s3fs.module:
The XHTML thing is just confusing. What's it even asking for??
"Class name must begin with a capital letter" conflicts with the "Class name must be prefixed with the project name" rule.
s3fsStreamWrapper.inc:
"Class name must begin with a capital letter" - Again with the conflicting class-naming rules. Perhaps someone should fix that?
"Public method name "s3fsStreamWrapper::stream_open" is not in lowerCamel format, it must not contain underscores" - I can't do anything about these errors, because I'm coding to an interface.
As for the "security issue" with my custom image_style_deliver function, the core Image module does this exactly the same way. I just copy-pasted its implementation for
image_style_deliver()with minor edits, and didn't change the "access callback" value or alter the token validation at all.S3FS_VERSION is currently unused by the code (though once I make an official release, I plan to work it in somewhere), but the system table suggestion you made doesn't fulfill the need that I have for it. In my work on Date iCal, I've gotten into the habit of using a similar defined value to help me find out which version of the software my users are running when they report an issue. Pulling that data from the system table isn't useful because the value in the table doesn't update unless I write a new update hook, and update hooks are only useful if a schema change is needed. I release new versions of my modules on a fairly regular basis, most of which do not require schema changes.
And finally, I need to get this off my chest...
This whole process has left me feeling very negatively toward the Drupal.org authorities. I took over as the maintainer for Date iCal (a module used by thousands of sites) nearly a year ago, and since then I've been extremely active. My users have mentioned time and again that they are very happy with my responsiveness on the issue queue and my helpfulness in solving their problems. The fact that I'm being stonewalled on getting full project status because of what I consider ridiculously trivial issues is making me quite incensed. I've been as polite and respectful despite this, and I hope that I can be shown the same respect in the future. Thank you.
Comment #17
kscheirer@coredumperror - sorry you feel this process has involved stonewalling you, that's certainly not our intent. There's a lively discussion about this going on here https://groups.drupal.org/node/374478 in the code-review group. It is true that we're a lot stricter in the project application queue! I was trying to say you don't have to make the whitespace change, but thanks for doing so anyway. Our list of issues to check on each application is available in that group and here http://pareview.sh/pachecklist.
Your function s3fs_image_style_deliver() is largely the same as Image module's, so you're right, this is not a security issue.
----
Top Shelf Modules - Crafted, Curated, Contributed.
Comment #18
klausimanual review:
But otherwise looks good to me, so ...
Thanks for your contribution, coredumperror!
I updated your account so you can promote this to a full project and also create new projects as either a sandbox or a "full" project.
Here are some recommended readings to help with excellent maintainership:
You can find lots more contributors chatting on IRC in #drupal-contribute. So, come hang out and stay involved!
Thanks, also, for your patience with the review process. Anyone is welcome to participate in the review process. Please consider reviewing other projects that are pending review. I encourage you to learn more about that process and join the group of reviewers.
Thanks to the dedicated reviewer(s) as well.
Comment #19
coredumperror commentedThank you!!