Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Add support for S3 versioning #6494

Closed
wants to merge 62 commits into from
Closed

Conversation

fwessels
Copy link
Contributor

This PR will add support for versioning. A bucket can be enabled for versioning after which all previous versions of an object will be retained (each with their own unique version-id). A delete of an object will not actually delete the contents of an object but put a so called Delete Marker on top. Individual versions of an object can be deleted so it is possible to go back to previous versions.

Support for list-object-versions is added, so all versions (and delete markers) of an object are listed.

Limitations

  • Once a bucket is enabled for versioning, versioning cannot be suspended or disabled.
  • Only bucket that are empty can be enabled for versioning.

How Has This Been Tested?

For now testing using the AWS SDK, to be revisited.

Types of changes

  • New feature (non-breaking change which adds functionality)

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.

@minio-ops
Copy link

Mint Automation

Test Result
mint-worm.sh ✔️
mint-tls.sh more...
mint-compression-xl.sh more...
mint-xl.sh more...
mint-gateway-nas.sh more...
mint-large-bucket.sh more...
mint-compression-fs.sh more...
mint-fs.sh more...
mint-dist-xl.sh more...

6494-3d931ad/mint-compression-fs.sh.log:

Running with
SERVER_ENDPOINT:      minikube:30553
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         0
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp 6f638fb562a3:/mint/log /tmp/mint-logs'

(1/13) Running awscli tests ... done in 1 minutes and 58 seconds
(2/13) Running aws-sdk-go tests ... done in 0 seconds
(3/13) Running aws-sdk-java tests ... done in 3 seconds
(4/13) Running aws-sdk-php tests ... done in 41 seconds
(5/13) Running aws-sdk-ruby tests ... done in 2 seconds
(6/13) Running mc tests ... done in 23 seconds
(7/13) Running minio-dotnet tests ... done in 2 minutes and 33 seconds
(8/13) Running minio-go tests ... done in 54 seconds
(9/13) Running minio-java tests ... done in 2 minutes and 49 seconds
(10/13) Running minio-js tests ... FAILED in 21 seconds
{
  "name": "minio-js",
  "function": "listenBucketNotification(bucketName, prefix, suffix, events)",
  "args": "bucketName:minio-js-test-05f02fd3-9f22-41cd-b989-ae0f38648334, events: s3:ObjectCreated:*",
  "status": "FAIL",
  "error": "AssertionError: expected '' to equal 'd15095b4-73f3-4aac-9e0c-ff206852ce60' at NotificationPoller.poller.on.record (test/functional-tests.js:1080:18) at /mint/run/core/minio-js/node_modules/minio/dist/main/notification.js:168:18 at Array.forEach (native) at .<anonymous> (node_modules/minio/dist/main/notification.js:167:19) at readableAddChunk (_stream_readable.js:176:18) at Readable.push (_stream_readable.js:134:10) at Transform.push (_stream_transform.js:128:32) at JSONStream._transform (node_modules/minio/node_modules/json-stream/lib/json-stream.js:32:14) at Transform._read (_stream_transform.js:167:10) at Transform._write (_stream_transform.js:155:12) at doWrite (_stream_writable.js:333:12) at writeOrBuffer (_stream_writable.js:319:5) at Writable.write (_stream_writable.js:245:11) at IncomingMessage.ondata (_stream_readable.js:558:20) at readableAddChunk (_stream_readable.js:176:18) at IncomingMessage.Readable.push (_stream_readable.js:134:10) at HTTPParser.parserOnBody (_http_common.js:123:22) at Socket.socketOnData (_http_client.js:367:20) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:559:20)"
}

Executed 9 out of 13 tests successfully.

6494-3d931ad/mint-dist-xl.sh.log:

Running with
SERVER_ENDPOINT:      minikube:30519
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         0
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp 67129a097a4e:/mint/log /tmp/mint-logs'

(1/13) Running awscli tests ... done in 1 minutes and 42 seconds
(2/13) Running aws-sdk-go tests ... done in 1 seconds
(3/13) Running aws-sdk-java tests ... done in 9 seconds
(4/13) Running aws-sdk-php tests ... done in 54 seconds
(5/13) Running aws-sdk-ruby tests ... done in 20 seconds
(6/13) Running mc tests ... done in 1 minutes and 10 seconds
(7/13) Running minio-dotnet tests ... done in 3 minutes and 51 seconds
(8/13) Running minio-go tests ... done in 1 minutes and 17 seconds
(9/13) Running minio-java tests ... done in 3 minutes and 31 seconds
(10/13) Running minio-js tests ... FAILED in 23 seconds
{
  "name": "minio-js",
  "function": "listenBucketNotification(bucketName, prefix, suffix, events)",
  "args": "bucketName:minio-js-test-26b9d49d-547c-4ea4-8398-caacaaeb0f43, events: s3:ObjectCreated:*",
  "status": "FAIL",
  "error": "AssertionError: expected '' to equal '5309728f-652e-4cbf-984d-6b2079dca950' at NotificationPoller.poller.on.record (test/functional-tests.js:1080:18) at /mint/run/core/minio-js/node_modules/minio/dist/main/notification.js:168:18 at Array.forEach (native) at .<anonymous> (node_modules/minio/dist/main/notification.js:167:19) at readableAddChunk (_stream_readable.js:176:18) at Readable.push (_stream_readable.js:134:10) at Transform.push (_stream_transform.js:128:32) at JSONStream._transform (node_modules/minio/node_modules/json-stream/lib/json-stream.js:32:14) at Transform._read (_stream_transform.js:167:10) at Transform._write (_stream_transform.js:155:12) at doWrite (_stream_writable.js:333:12) at writeOrBuffer (_stream_writable.js:319:5) at Writable.write (_stream_writable.js:245:11) at IncomingMessage.ondata (_stream_readable.js:558:20) at readableAddChunk (_stream_readable.js:176:18) at IncomingMessage.Readable.push (_stream_readable.js:134:10) at HTTPParser.parserOnBody (_http_common.js:123:22) at Socket.socketOnData (_http_client.js:367:20) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:559:20)"
}

Executed 9 out of 13 tests successfully.

6494-3d931ad/mint-tls.sh.log:

Running with
SERVER_ENDPOINT:      192.168.39.64:9000
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         1
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp c22c58be33ce:/mint/log /tmp/mint-logs'

(1/7) Running aws-sdk-go tests ... done in 1 seconds
(2/7) Running aws-sdk-java tests ... FAILED in 9 seconds
{
  "name": "aws-sdk-java",
  "function": "downloadObject(String bucketName, String objectName, SSECustomerKey sseKey)",
  "args": "bucketName: aws-java-sdk-test-1dlalh9, objectName: testobject, SSECustomerKey: com.amazonaws.services.s3.model.SSECustomerKey@537f60bf",
  "duration": 358,
  "status": "FAIL",
  "error": "java.lang.Exception: downloadObject did not throw S3 Access denied Exception but it did throw: Access denied. (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 1567B1B3C9F037EA; S3 Extended Request ID: 3L137) >>> [io.minio.awssdk.tests.FunctionalTests.downloadObjectEncryption_test1(Unknown Source), io.minio.awssdk.tests.FunctionalTests.runTests(Unknown Source), io.minio.awssdk.tests.FunctionalTests.main(Unknown Source)]"
}

Executed 1 out of 7 tests successfully.

6494-3d931ad/mint-gateway-nas.sh.log:

Running with
SERVER_ENDPOINT:      minikube:31337
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         0
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp bff3183cdd2b:/mint/log /tmp/mint-logs'

(1/13) Running awscli tests ... FAILED in 16 seconds
{
  "name": "awscli",
  "duration": 8952,
  "function": "delete_bucket\n",
  "status": "FAIL",
  "error": "remove_bucket failed: s3://awscli-mint-test-bucket-5609 An error occurred (NoSuchBucket) when calling the DeleteBucket operation: The specified bucket does not exist"
}

Executed 0 out of 13 tests successfully.

6494-3d931ad/mint-fs.sh.log:

Running with
SERVER_ENDPOINT:      minikube:31999
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         0
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp bb1dacf7182c:/mint/log /tmp/mint-logs'

(1/13) Running awscli tests ... done in 1 minutes and 58 seconds
(2/13) Running aws-sdk-go tests ... done in 0 seconds
(3/13) Running aws-sdk-java tests ... done in 4 seconds
(4/13) Running aws-sdk-php tests ... done in 41 seconds
(5/13) Running aws-sdk-ruby tests ... done in 3 seconds
(6/13) Running mc tests ... done in 25 seconds
(7/13) Running minio-dotnet tests ... done in 2 minutes and 32 seconds
(8/13) Running minio-go tests ... done in 53 seconds
(9/13) Running minio-java tests ... done in 2 minutes and 39 seconds
(10/13) Running minio-js tests ... FAILED in 22 seconds
{
  "name": "minio-js",
  "function": "listenBucketNotification(bucketName, prefix, suffix, events)",
  "args": "bucketName:minio-js-test-cde36d4e-c712-4d0d-8101-6e220b7e3776, events: s3:ObjectCreated:*",
  "status": "FAIL",
  "error": "AssertionError: expected '' to equal 'cfb6bee0-0e01-4a75-8561-397e100ab175' at NotificationPoller.poller.on.record (test/functional-tests.js:1080:18) at /mint/run/core/minio-js/node_modules/minio/dist/main/notification.js:168:18 at Array.forEach (native) at .<anonymous> (node_modules/minio/dist/main/notification.js:167:19) at readableAddChunk (_stream_readable.js:176:18) at Readable.push (_stream_readable.js:134:10) at Transform.push (_stream_transform.js:128:32) at JSONStream._transform (node_modules/minio/node_modules/json-stream/lib/json-stream.js:32:14) at Transform._read (_stream_transform.js:167:10) at Transform._write (_stream_transform.js:155:12) at doWrite (_stream_writable.js:333:12) at writeOrBuffer (_stream_writable.js:319:5) at Writable.write (_stream_writable.js:245:11) at IncomingMessage.ondata (_stream_readable.js:558:20) at readableAddChunk (_stream_readable.js:176:18) at IncomingMessage.Readable.push (_stream_readable.js:134:10) at HTTPParser.parserOnBody (_http_common.js:123:22) at Socket.socketOnData (_http_client.js:367:20) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:559:20)"
}

Executed 9 out of 13 tests successfully.

6494-3d931ad/mint-xl.sh.log:

Running with
SERVER_ENDPOINT:      minikube:30230
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         0
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp dca46e4380bb:/mint/log /tmp/mint-logs'

(1/13) Running awscli tests ... done in 2 minutes and 0 seconds
(2/13) Running aws-sdk-go tests ... done in 0 seconds
(3/13) Running aws-sdk-java tests ... done in 3 seconds
(4/13) Running aws-sdk-php tests ... done in 41 seconds
(5/13) Running aws-sdk-ruby tests ... done in 5 seconds
(6/13) Running mc tests ... done in 29 seconds
(7/13) Running minio-dotnet tests ... done in 2 minutes and 38 seconds
(8/13) Running minio-go tests ... done in 55 seconds
(9/13) Running minio-java tests ... done in 2 minutes and 44 seconds
(10/13) Running minio-js tests ... FAILED in 16 seconds
{
  "name": "minio-js",
  "function": "listenBucketNotification(bucketName, prefix, suffix, events)",
  "args": "bucketName:minio-js-test-c199260a-1324-49df-83aa-a1db277a7215, events: s3:ObjectCreated:*",
  "status": "FAIL",
  "error": "AssertionError: expected '' to equal '0e306eab-0431-406e-a022-4b2c74ac1e86' at NotificationPoller.poller.on.record (test/functional-tests.js:1080:18) at /mint/run/core/minio-js/node_modules/minio/dist/main/notification.js:168:18 at Array.forEach (native) at .<anonymous> (node_modules/minio/dist/main/notification.js:167:19) at readableAddChunk (_stream_readable.js:176:18) at Readable.push (_stream_readable.js:134:10) at Transform.push (_stream_transform.js:128:32) at JSONStream._transform (node_modules/minio/node_modules/json-stream/lib/json-stream.js:32:14) at Transform._read (_stream_transform.js:167:10) at Transform._write (_stream_transform.js:155:12) at doWrite (_stream_writable.js:333:12) at writeOrBuffer (_stream_writable.js:319:5) at Writable.write (_stream_writable.js:245:11) at IncomingMessage.ondata (_stream_readable.js:558:20) at readableAddChunk (_stream_readable.js:176:18) at IncomingMessage.Readable.push (_stream_readable.js:134:10) at HTTPParser.parserOnBody (_http_common.js:123:22) at Socket.socketOnData (_http_client.js:367:20) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:559:20)"
}

Executed 9 out of 13 tests successfully.

6494-3d931ad/mint-large-bucket.sh.log:

Running with
SERVER_ENDPOINT:      minikube:31926
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         0
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp 6509b833fe9f:/mint/log /tmp/mint-logs'

(1/13) Running awscli tests ... done in 2 minutes and 37 seconds
(2/13) Running aws-sdk-go tests ... done in 3 seconds
(3/13) Running aws-sdk-java tests ... done in 8 seconds
(4/13) Running aws-sdk-php tests ... done in 1 minutes and 14 seconds
(5/13) Running aws-sdk-ruby tests ... done in 44 seconds
(6/13) Running mc tests ... done in 51 seconds
(7/13) Running minio-dotnet tests ... done in 6 minutes and 54 seconds
(8/13) Running minio-go tests ... done in 2 minutes and 12 seconds
(9/13) Running minio-java tests ... done in 3 minutes and 40 seconds
(10/13) Running minio-js tests ... FAILED in 25 seconds
{
  "name": "minio-js",
  "function": "listenBucketNotification(bucketName, prefix, suffix, events)",
  "args": "bucketName:minio-js-test-a72fb25a-affe-4429-83e6-e29ba66a910f, events: s3:ObjectCreated:*",
  "status": "FAIL",
  "error": "AssertionError: expected '' to equal '2864d0bd-2d41-481c-a930-b29ea43fdb38' at NotificationPoller.poller.on.record (test/functional-tests.js:1080:18) at /mint/run/core/minio-js/node_modules/minio/dist/main/notification.js:168:18 at Array.forEach (native) at .<anonymous> (node_modules/minio/dist/main/notification.js:167:19) at readableAddChunk (_stream_readable.js:176:18) at Readable.push (_stream_readable.js:134:10) at Transform.push (_stream_transform.js:128:32) at JSONStream._transform (node_modules/minio/node_modules/json-stream/lib/json-stream.js:32:14) at Transform._read (_stream_transform.js:167:10) at Transform._write (_stream_transform.js:155:12) at doWrite (_stream_writable.js:333:12) at writeOrBuffer (_stream_writable.js:319:5) at Writable.write (_stream_writable.js:245:11) at IncomingMessage.ondata (_stream_readable.js:558:20) at readableAddChunk (_stream_readable.js:176:18) at IncomingMessage.Readable.push (_stream_readable.js:134:10) at HTTPParser.parserOnBody (_http_common.js:123:22) at Socket.socketOnData (_http_client.js:367:20) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:559:20)"
}

Executed 9 out of 13 tests successfully.

6494-3d931ad/mint-compression-xl.sh.log:

Running with
SERVER_ENDPOINT:      minikube:31398
ACCESS_KEY:           minio
SECRET_KEY:           ***REDACTED***
ENABLE_HTTPS:         0
SERVER_REGION:        us-east-1
MINT_DATA_DIR:        /mint/data
MINT_MODE:            full
ENABLE_VIRTUAL_STYLE: 0

To get logs, run 'docker cp 2fa51e940f2b:/mint/log /tmp/mint-logs'

(1/13) Running awscli tests ... done in 2 minutes and 0 seconds
(2/13) Running aws-sdk-go tests ... done in 0 seconds
(3/13) Running aws-sdk-java tests ... done in 3 seconds
(4/13) Running aws-sdk-php tests ... done in 41 seconds
(5/13) Running aws-sdk-ruby tests ... done in 5 seconds
(6/13) Running mc tests ... done in 29 seconds
(7/13) Running minio-dotnet tests ... done in 2 minutes and 38 seconds
(8/13) Running minio-go tests ... done in 59 seconds
(9/13) Running minio-java tests ... done in 2 minutes and 41 seconds
(10/13) Running minio-js tests ... FAILED in 16 seconds
{
  "name": "minio-js",
  "function": "listenBucketNotification(bucketName, prefix, suffix, events)",
  "args": "bucketName:minio-js-test-30a2e2c4-4507-4476-97c9-2b01a7be82b0, events: s3:ObjectCreated:*",
  "status": "FAIL",
  "error": "AssertionError: expected '' to equal 'a902a72b-6624-402d-b5df-f2e684e5ceeb' at NotificationPoller.poller.on.record (test/functional-tests.js:1080:18) at /mint/run/core/minio-js/node_modules/minio/dist/main/notification.js:168:18 at Array.forEach (native) at .<anonymous> (node_modules/minio/dist/main/notification.js:167:19) at readableAddChunk (_stream_readable.js:176:18) at Readable.push (_stream_readable.js:134:10) at Transform.push (_stream_transform.js:128:32) at JSONStream._transform (node_modules/minio/node_modules/json-stream/lib/json-stream.js:32:14) at Transform._read (_stream_transform.js:167:10) at Transform._write (_stream_transform.js:155:12) at doWrite (_stream_writable.js:333:12) at writeOrBuffer (_stream_writable.js:319:5) at Writable.write (_stream_writable.js:245:11) at IncomingMessage.ondata (_stream_readable.js:558:20) at readableAddChunk (_stream_readable.js:176:18) at IncomingMessage.Readable.push (_stream_readable.js:134:10) at HTTPParser.parserOnBody (_http_common.js:123:22) at Socket.socketOnData (_http_client.js:367:20) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:559:20)"
}

Executed 9 out of 13 tests successfully.

@gadiener
Copy link

Hi,

any updates on this PR? I think it's a very interesting feature.

Thanks 😄

@harshavardhana
Copy link
Member

We are not planning to merge this into upstream just yet.

@blitz33
Copy link

blitz33 commented May 29, 2019

Hi any date for the merge ? We start development on an new web app linked to minio but the object versioning is an feature mandatory and it is still missing. we planned to migrate to alfresco that provide this feature... But minio is amazing i hope a day this will be available.

@krishnasrinivas
Copy link
Contributor

Hi any date for the merge ? We start development on an new web app linked to minio but the object versioning is an feature mandatory and it is still missing. we planned to migrate to alfresco that provide this feature... But minio is amazing i hope a day this will be available.

@blitz33 how do you name your objects? because usually the web apps store object with names such as "52de92f3-1518-4a7f-8c7f-2b2192f4ebd1/somename.jpg" i.e the object names are unique and do not overwrite previous objects hence there is no need for versioning.

@blitz33
Copy link

blitz33 commented May 30, 2019

We will use our minio instance like an sharepoint representation in our custom web app with crud operation in the bucket. We will be able to get an button "historic" to view older versions of one file/object. The ability to get an older verdion of same file. I understand we can upload multiple versions of the same object on the same bucket but minio doesn t support list object versions.

@krishnasrinivas
Copy link
Contributor

We would like to keep MinIO light on features and since versioning is not an often requested feature we are not planning to merge this PR. What applications typically do is create object names with unique names so that they don't overwrite previous objects and hence not need versioning.

For example, in your case if you have a document "profile.doc", in your DB you can associate "profile.doc" with it's different versions like UUID1/profile.doc UUID2/profile.doc etc this way you are not overwriting objects on MinIO and also get versioning like feature. (i.e maintain versioning info in your DB)

@fdaone
Copy link

fdaone commented May 31, 2019

We would like to keep MinIO light on features and since versioning is not an often requested feature we are not planning to merge this PR.

Bummer. Would you not even consider the versioning feature, if it became sponsored (paid) by one or more companies? I'm with a company that relies on Minio but the lack of versioning is slowly pushing me towards other solutions. No idea if I could actually convince my workplace to sponsor the feature implementation and continued maintenance/bugfixing long-term, but I could try. We're not a big company, however, so maybe other companies wanting this feature could chip in as well. Just a thought...

@krishnasrinivas
Copy link
Contributor

@fdaone can you tell more about your use case? What is the application that you use on top of MinIO? Why is the application not able to create unique object names?

@EugenMayer
Copy link

@krishnasrinivas for us, the perspective that minio will have a version based object store is one of the main reasons we did not yet move on to a different solution.

We currently use minion with Concourse-Ci which has massive advantages using a versioned object storage, especially in managing files. If you upload an artifact with a suffix as a version, you will have a nightmare deleting those later on - a big bummer after we migrated from amazon s3 to minio.

The second case is somewhat similar to what i read here - we plan to use an object storage for our product https://drupal-wiki.com for attachments. Handling suffix based versions means we have to handle the whole versioning topic in our application as we already do (with fs based storage) and that is the exact reason we are migrating to an object based storage.

There are alternatives to minio and they went on our radar straight away after reading your statement.

@harshavardhana
Copy link
Member

@EugenMayer if versioning is a strict requirement it is better to use alternatives at this point. @krishnasrinivas already explained why it's not implemented. Application level logic is the best bet in this scenario from where we see it.

@EugenMayer
Copy link

@hackintoshrao fair enough - i understood and i am glad to see you being straight and open. Sadly this means for me migrating to a different storage on all levels ;\

@fdaone
Copy link

fdaone commented Jun 3, 2019

@fdaone can you tell more about your use case? What is the application that you use on top of MinIO? Why is the application not able to create unique object names?

It is several different applications. "Standard" applications as well as stuff developed in-house. For us, it would be ten times easier to have the object store handle versioning instead of implementing it within all the different applications. Plus, for some 3rd party applications it is unlikely it will be a priority of the software supplier to implement a form of versioning at the app level.

@ronnyek
Copy link

ronnyek commented Jun 18, 2019

I understand wanting to keep minio light... but at the same time, I can already think of maybe 10 diff ways I could use this. Additionally, while this all could be a matter of data modeling... I'd honestly rather have that be 1) compatible with s3, and 2) handled in a standard way.

I'd vote for the feature to be added, if this was something that was actually up for a vote.

@harshavardhana
Copy link
Member

I understand wanting to keep minio light... but at the same time, I can already think of maybe 10 diff ways I could use this. Additionally, while this all could be a matter of data modeling... I'd honestly rather have that be 1) compatible with s3, and 2) handled in a standard way.

I'd vote for the feature to be added, if this was something that was actually up for a vote.

@ronnyek thanks for your interest - there are some explanations on why it's not required in almost all situations #6494 (comment)

@harshavardhana
Copy link
Member

harshavardhana commented Aug 9, 2019

Closing this PR as stale @fwessels - we shall re-open if needed in future.

@gunzip
Copy link

gunzip commented Aug 10, 2019

For example, in your case if you have a document "profile.doc", in your DB you can associate "profile.doc" with it's different versions like UUID1/profile.doc UUID2/profile.doc etc this way you are not overwriting objects on MinIO and also get versioning like feature. (i.e maintain versioning info in your DB)

you can, but the need to version a file arises, for example, when you have to keep the same url address in case of different versions.

@fdefilippo
Copy link

any updates on this PR?

@harshavardhana
Copy link
Member

any updates on this PR?

We are not implementing this for now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.