owncloud / core

:cloud: ownCloud web server core (Files, DAV, etc.)
https://owncloud.com
GNU Affero General Public License v3.0
8.36k stars 2.06k forks source link

Global and per group disk quota [$40] #1347

Closed hoerup closed 3 years ago

hoerup commented 11 years ago

It would be nice if I can set a disk quota per group (eg tot total amount of disk space used by group may not exceed xx GB) and a global MAX usage to prevent the disk form filling completely.

PVince81 commented 7 years ago

Ah, and for a "Global" quota it would use the same approach (GlobalQuota storage wrapper) but be much easier to implement as it would just get the total used space from "oc_filecache" for all users, using a query like https://github.com/owncloud/core/blob/v9.1.3/lib/private/legacy/util.php#L201.

If someone is interested in starting with this, maybe the global quota would be a good starting point to get the basics. Then move on to group quota with the acquired knowledge.

ShamimIslam commented 7 years ago

But see, that's just it. I don't want advice on how to implement something. I want to know how it all hangs together. I want to be able to see all the parts graphically so I can trace to where I need to go. I don't want someone to educate me on thier way of doing things. I want someone to provide me with clear concise documentation that allows me to browse the code, class by class, method by method so I can see how it fits.

Not all of us learn the same way. When someone "instructs me," I feel blind because I am not able to see the entire constellation of artifacts. I learn by reading the manual end to end and I can hold it all in my hand so to speak. Identifying where to go is a simple process then. I learned C by reading K&R. I learned C++ by reading the ARM. I learned JavaScript by reading the ECMA. And so on. Every other method pales by comparison and takes far too long to acquire the same level of familiarity and requires many partial and subjective sources.

If I go discuss in IRC, I am relying on one person's interpretation of where my code would best fit rather than appreciating the forces at play and identifying the best trade-offs to complete. I want to architect a solution. I do not want to talk about one. I do not want to guess at one. I do not want to evolve one. I do not want to learn one small part of th ecosystem and ignore the rest. I want to understand. There is a certain joy in being able to see all the puzzle pieces as they fit together.

Is there a complete documentation package for the code? Do I need to build it somehow? Is the bar to entry schmoozing with the devs in IRC first to get their blessing on where to add things? Just curious. Sorry if it sounds irreverent.

These are the questions I keep asking. I keep getting told "go talk to someone" - does that mean it's not written down anywhere?

Thanks in advance.

On Wed, Feb 8, 2017 at 1:48 AM, kdslkdsaldsal notifications@github.com wrote:

@ShamimIslam https://github.com/ShamimIslam You might want to follow the advise in #1347 (comment) https://github.com/owncloud/core/issues/1347#issuecomment-277602548 if you need specific information on how to implement something:

If you need specific guidance for something within the ownCloud core you might want to jump into the IRC channel #owncloud-dev on Freenode. There you will find people which might be able to answer your questions.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/owncloud/core/issues/1347#issuecomment-278243749, or mute the thread https://github.com/notifications/unsubscribe-auth/AC6oTkddKh8ERIyG_1mYYeCSlQhSEAejks5raWVZgaJpZM4AY6Ic .

ShamimIslam commented 7 years ago

Actually, I was thinking enforceable group quotas by group. min(sum(quota by group)). Global quotas assumes again incorrectly that there is only one such animal. I have many.

On Wed, Feb 8, 2017 at 3:49 AM, Vincent Petry notifications@github.com wrote:

Ah, and for a "Global" quota it would use the same approach (GlobalQuota storage wrapper) but be much easier to implement as it would just get the total used space from "oc_filecache" for all users, using a query like https://github.com/owncloud/core/blob/v9.1.3/lib/private/ legacy/util.php#L201.

If someone is interested in starting with this, maybe the global quota would be a good starting point to get the basics. Then move on to group quota with the acquired knowledge.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/owncloud/core/issues/1347#issuecomment-278267337, or mute the thread https://github.com/notifications/unsubscribe-auth/AC6oTvYktMcQI7KAc4iqtmoaStzYlNPDks5raYGGgaJpZM4AY6Ic .

ShamimIslam commented 7 years ago

P.S. Why does someone have to "acquire expertise" in group quotas first before something like this? It's clearly part of the preferences storage, although the extraction of the data is highly tortuous to say the least and assumes the data is static at the time of user creation. I think a clear understanding of the ownCloud code base is a better place to start for me. Hence my original ask.

On Wed, Feb 8, 2017 at 3:57 AM, Shamim Islam shamim.islam@gmail.com wrote:

Actually, I was thinking enforceable group quotas by group. min(sum(quota by group)). Global quotas assumes again incorrectly that there is only one such animal. I have many.

On Wed, Feb 8, 2017 at 3:49 AM, Vincent Petry notifications@github.com wrote:

Ah, and for a "Global" quota it would use the same approach (GlobalQuota storage wrapper) but be much easier to implement as it would just get the total used space from "oc_filecache" for all users, using a query like https://github.com/owncloud/core/blob/v9.1.3/lib/private/leg acy/util.php#L201.

If someone is interested in starting with this, maybe the global quota would be a good starting point to get the basics. Then move on to group quota with the acquired knowledge.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/owncloud/core/issues/1347#issuecomment-278267337, or mute the thread https://github.com/notifications/unsubscribe-auth/AC6oTvYktMcQI7KAc4iqtmoaStzYlNPDks5raYGGgaJpZM4AY6Ic .

PVince81 commented 7 years ago

As far as I know there are currently no class diagrams representing how all fits together on a higher level.

The way I usually learn is to try finding something similar (like the existing Quota wrapper) and then use that as a starting point and adjust it.

I don't think the oc_preferences storage would fit because the preferences are per user, not per group. So setting a quota for a specific group would need its own location. Unless maybe the concept of "per group preference" is introduced into that table.

ShamimIslam commented 7 years ago

Was already thinking that way. Although what's intriguing is that while homomorphic tables just like FPGA's are not production constructs by definition and are supposed to be resolved to 3NF form at least with the necessary dynamic plumbing to adjust for run-time access changes via stored procs and view, both are in use both in code and in chips today. The days when N-tier made sense are gone and VLSI meant hardware programs in logic gates created from transformational grammar and finite state automata. Oh well. Guess I'm adapting. I hate homomorphic tables, but I'm willing to live with them until I create the Minority Report computer system. LOL.

On Wed, Feb 8, 2017 at 4:06 AM, Vincent Petry notifications@github.com wrote:

As far as I know there are currently no class diagrams representing how all fits together on a higher level.

The way I usually learn is to try finding something similar (like the existing Quota wrapper) and then use that as a starting point and adjust it.

I don't think the oc_preferences storage would fit because the preferences are per user, not per group. So setting a quota for a specific group would need its own location. Unless maybe the concept of "per group preference" is introduced into that table.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/owncloud/core/issues/1347#issuecomment-278271139, or mute the thread https://github.com/notifications/unsubscribe-auth/AC6oTlNFh9Wtqvlgn37rCdc2Mi1Re8V_ks5raYWegaJpZM4AY6Ic .

felixboehm commented 7 years ago

Planning concept work for improving groups. Who can provide a brief summary on this topic and list requirements?

ShamimIslam commented 7 years ago

Group should be administrable like an entity.

  1. Group administration should be a separate screen and not one tied to membership
  2. Group CRUD operations should be independent of membership
  3. Group privileges should be updateable independent of membership
  4. Group quotas should be separate from users
  5. Group quotas should be applied as an additional subtractive filter over users
  6. Group privileges should be applied as an additional additive filter over users
  7. Final quotas should be a function of the most restrictive quota for a given resource
  8. Final privileges should be a function sum of priveleges for a given resource
  9. Group preferences for quotas and privileges are not any more important than user preferences - this allows for iterative calculation of quotas and privileges
  10. Deleting a group removes all users from the group
  11. Groups membership should not be stored as a preference but an intersection table for simpler calculation of quotas, privileges and other information
  12. Group quotas and privileges can be stored as preferences like users but with a clear way to distinguish a group preference instead of a user preference
  13. Groups can be given specific access to apps, also in the administrative screen

Here is what we normally have in our enterprise setup for other things.

On Fri, May 5, 2017 at 5:42 AM, felixboehm notifications@github.com wrote:

Planning concept work for improving groups. Who can provide a brief summary on this topic and list requirements?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/owncloud/core/issues/1347#issuecomment-299423736, or mute the thread https://github.com/notifications/unsubscribe-auth/AC6oTuefFYslxzeGG8IUOfKXZ23SLrvuks5r2u71gaJpZM4AY6Ic .

imneeazmi commented 6 years ago

What is the status of this feature? Would love to have it available.

micbar commented 3 years ago

This will be implemented in ocis using the spaces concept https://github.com/owncloud/product/issues/302