Fixes#1636
New format now generates a UUID and includes it along with
the order of disks. So that UUID is the real order of disks
and on command line user is able to specify disks in any order.
This pre-dominantly solves our dilemma.
```
{
"format" : "xl",
"xl" : {
"version" : "1",
"disk": "00e4cf06-5bf5-4bb5-b885-4b2fff4a7959",
"jbod" : [
"00e4cf06-5bf5-4bb5-b885-4b2fff4a7959",
....
"c47d2608-5067-4ed7-b1e4-fb81bdbb549f",
"a543293e-99f1-4310-b540-1e450878e844",
"18f97cbe-529a-456a-b6d4-0feacf64534d"
]
},
"version" : "1"
}
```
* posix: Avoid using getAllVolumeInfo() in getVolumeDir()
This is necessary compromise to avoid significant slowness this
causes under load. The compromise is also substantial in a way
so that to avoid penalizing common cases v/s special cases.
For buckets with Caps on Unixes, we filter buckets based on the
latest anyways, so this is completely acceptable.
* XL/fs: Change the usage of verification of existance of buckets.
Optimize calling isBucketExists, it is not needed for all call
paths. isBucketExist should be called only for calls which use
temporary volume location for operations, for the rest rely on
the errors returned on their original call path.
Remove usage of filtering as well across all volume names.
This patch brings in the removal of debug logging altogether, instead
we bring in the functionality of being able to trace the errors properly
pointing back to the origination of the problem.
To enable tracing you need to enable "MINIO_TRACE" set to "1" or "true"
environment variable which would print back traces whenever there is an
error which is unhandled or at the handler layer.
By default this tracing is turned off and only user level logging is
provided.
- PutObject()
- PutObjectPart()
- NewMultipartUpload()
- AbortMultipartUpload()
Implementations across both FS and XL object layer
share common implementation.
* XL/Multipart: Use json.NewDecoder to decode read stream.
* XL/Multipart: fix recursive and non-recursive listing.
* XL/Multipart: Create object part with md5sum later using RenameFile.
* XL/Multipart: ListObjectParts should list parts in order.
previously: uploadID.10.md5sum < uploadID.2.md5sum
fix : uploadID.00010.md5sum > uploadID.00002.md5sum
* XL/Multipart: Keep the size of each part in the multipart metadata file to avoid stats on the parts.
* XL/Multipart: fix listing bug which was showing size of the multipart uploaded objects as 0.
Creates a new write closer that must be released
by the read consumer. This is necessary so that
while commiting the underlying writers in erasure
coding we need to make sure we reply success only if
we have committed to disk.
This in turn also fixes plethora of bugs related to
subsequent PutObject() races with namespace locking.
This patch also enables most of the tests, other than
ListObjects paging which has some issues still.
Fixes#1358, #1360
It is the bucket and volumes which needs to have this
value rather than the DiskInfo API itself. Eventually
this can be extended to show disk usage per
Buckets/Volumes whenever we have that functionality.
For now since buckets/volumes are thinly provisioned
this is the right approach.