This is an enhancement to the XL/distributed-XL mode. FS mode is unaffected. The ReadFileWithVerify storage-layer call is similar to ReadFile with the additional functionality of performing bit-rot checking. It accepts additional parameters for a hashing algorithm to use and the expected hex-encoded hash string. This patch provides significant performance improvement because: 1. combines the step of reading the file (during erasure-decoding/reconstruction) with bit-rot verification; 2. limits the number of file-reads; and 3. avoids transferring the file over the network for bit-rot verification. ReadFile API is implemented as ReadFileWithVerify with empty hashing arguments. Credits to AB and Harsha for the algorithmic improvement. Fixes #4236.
171 lines
3.4 KiB
Go
171 lines
3.4 KiB
Go
/*
|
|
* Minio Cloud Storage, (C) 2016 Minio, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package cmd
|
|
|
|
// GenericVolArgs - generic volume args.
|
|
type GenericVolArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
}
|
|
|
|
// ListVolsReply represents list of vols RPC reply.
|
|
type ListVolsReply struct {
|
|
// List of volumes stat information.
|
|
Vols []VolInfo
|
|
}
|
|
|
|
// ReadAllArgs represents read all RPC arguments.
|
|
type ReadAllArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
}
|
|
|
|
// ReadFileArgs represents read file RPC arguments.
|
|
type ReadFileArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
|
|
// Starting offset to start reading into Buffer.
|
|
Offset int64
|
|
|
|
// Data buffer read from the path at offset.
|
|
Buffer []byte
|
|
}
|
|
|
|
// ReadFileWithVerifyArgs represents read file RPC arguments.
|
|
type ReadFileWithVerifyArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
|
|
// Starting offset to start reading into Buffer.
|
|
Offset int64
|
|
|
|
// Data buffer read from the path at offset.
|
|
Buffer []byte
|
|
|
|
// Algorithm used in bit-rot hash computation.
|
|
Algo HashAlgo
|
|
|
|
// Stored hash value (hex-encoded) used to compare with
|
|
// computed value.
|
|
ExpectedHash string
|
|
}
|
|
|
|
// PrepareFileArgs represents append file RPC arguments.
|
|
type PrepareFileArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
|
|
// Size of the file to be prepared
|
|
Size int64
|
|
}
|
|
|
|
// AppendFileArgs represents append file RPC arguments.
|
|
type AppendFileArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
|
|
// Data buffer to be saved at path.
|
|
Buffer []byte
|
|
}
|
|
|
|
// StatFileArgs represents stat file RPC arguments.
|
|
type StatFileArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
}
|
|
|
|
// DeleteFileArgs represents delete file RPC arguments.
|
|
type DeleteFileArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
}
|
|
|
|
// ListDirArgs represents list contents RPC arguments.
|
|
type ListDirArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of the volume.
|
|
Vol string
|
|
|
|
// Name of the path.
|
|
Path string
|
|
}
|
|
|
|
// RenameFileArgs represents rename file RPC arguments.
|
|
type RenameFileArgs struct {
|
|
// Authentication token generated by Login.
|
|
AuthRPCArgs
|
|
|
|
// Name of source volume.
|
|
SrcVol string
|
|
|
|
// Source path to be renamed.
|
|
SrcPath string
|
|
|
|
// Name of destination volume.
|
|
DstVol string
|
|
|
|
// Destination path of renamed file.
|
|
DstPath string
|
|
}
|