Under any concurrent removeObjects in progress
might have removed the parents of the same prefix
for which there is an ongoing putObject request.
An inconsistent situation may arise as explained
below even under sufficient locking.
PutObject is almost successful at the last stage when
a temporary file is renamed to its actual namespace
at `a/b/c/object1`. Concurrently a RemoveObject is
also in progress at the same prefix for an `a/b/c/object2`.
To create the object1 at location `a/b/c` PutObject has
to create all the parents recursively.
```
a/b/c - os.MkdirAll loops through has now created
'a/' and 'b/' about to create 'c/'
a/b/c/object2 - at this point 'c/' and 'object2'
are deleted about to delete b/
```
Now for os.MkdirAll loop the expected situation is
that top level parent 'a/b/' exists which it created
, such that it can create 'c/' - since removeObject
and putObject do not compete for lock due to holding
locks at different resources. removeObject proceeds
to delete parent 'b/' since 'c/' is not yet present,
once deleted 'os.MkdirAll' would receive an error as
syscall.ENOENT which would fail the putObject request.
This PR tries to address this issue by implementing
a safer/guarded approach where we would retry an operation
such as `os.MkdirAll` and `os.Rename` if both operations
observe syscall.ENOENT.
Fixes #5254
Minio Quickstart Guide
Minio is an object storage server released under Apache License v2.0. It is compatible with Amazon S3 cloud storage service. It is best suited for storing unstructured data such as photos, videos, log files, backups and container / VM images. Size of an object can range from a few KBs to a maximum of 5TB.
Minio server is light enough to be bundled with the application stack, similar to NodeJS, Redis and MySQL.
Docker Container
Stable
docker pull minio/minio
docker run -p 9000:9000 minio/minio server /data
Edge
docker pull minio/minio:edge
docker run -p 9000:9000 minio/minio:edge server /data
Please visit Minio Docker quickstart guide for more here
macOS
Homebrew
Install minio packages using Homebrew
brew install minio/stable/minio
minio server /data
NOTE: If you previously installed minio using
brew install miniothen it is recommended that you reinstall minio fromminio/stable/minioofficial repo instead.
brew uninstall minio
brew install minio/stable/minio
Binary Download
| Platform | Architecture | URL |
|---|---|---|
| Apple macOS | 64-bit Intel | https://dl.minio.io/server/minio/release/darwin-amd64/minio |
chmod 755 minio
./minio server /data
GNU/Linux
Binary Download
| Platform | Architecture | URL |
|---|---|---|
| GNU/Linux | 64-bit Intel | https://dl.minio.io/server/minio/release/linux-amd64/minio |
chmod +x minio
./minio server /data
Snap
Install minio using Snap
sudo snap install minio --edge
Start minio using snap run command
sudo snap connect minio:mount-observe
sudo snap run minio server /data
Microsoft Windows
Binary Download
| Platform | Architecture | URL |
|---|---|---|
| Microsoft Windows | 64-bit | https://dl.minio.io/server/minio/release/windows-amd64/minio.exe |
minio.exe server D:\Photos
FreeBSD
Port
Install minio packages using pkg
pkg install minio
sysrc minio_enable=yes
sysrc minio_disks=/home/user/Photos
service minio start
Install from Source
Source installation is only intended for developers and advanced users. If you do not have a working Golang environment, please follow How to install Golang.
go get -u github.com/minio/minio
Test using Minio Browser
Minio Server comes with an embedded web based object browser. Point your web browser to http://127.0.0.1:9000 ensure your server has started successfully.
Test using Minio Client mc
mc provides a modern alternative to UNIX commands like ls, cat, cp, mirror, diff etc. It supports filesystems and Amazon S3 compatible cloud storage services. Follow the Minio Client Quickstart Guide for further instructions.
Explore Further
- Minio Erasure Code QuickStart Guide
- Use
mcwith Minio Server - Use
aws-cliwith Minio Server - Use
s3cmdwith Minio Server - Use
minio-goSDK with Minio Server - The Minio documentation website
Contribute to Minio Project
Please follow Minio Contributor's Guide
