mirror of
				https://github.com/minio/minio.git
				synced 2025-10-31 16:21:49 +01:00 
			
		
		
		
	* Provide information on *actively* healing, buckets healed/queued, objects healed/failed. * Add concurrent healing of multiple sets (typically on startup). * Add bucket level resume, so restarts will only heal non-healed buckets. * Print summary after healing a disk is done.
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
|  * MinIO Cloud Storage, (C) 2018 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 nas
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/minio/cli"
 | |
| 	minio "github.com/minio/minio/cmd"
 | |
| 	"github.com/minio/minio/pkg/auth"
 | |
| 	"github.com/minio/minio/pkg/madmin"
 | |
| )
 | |
| 
 | |
| func init() {
 | |
| 	const nasGatewayTemplate = `NAME:
 | |
|   {{.HelpName}} - {{.Usage}}
 | |
| 
 | |
| USAGE:
 | |
|   {{.HelpName}} {{if .VisibleFlags}}[FLAGS]{{end}} PATH
 | |
| {{if .VisibleFlags}}
 | |
| FLAGS:
 | |
|   {{range .VisibleFlags}}{{.}}
 | |
|   {{end}}{{end}}
 | |
| PATH:
 | |
|   path to NAS mount point
 | |
| 
 | |
| EXAMPLES:
 | |
|   1. Start minio gateway server for NAS backend
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_USER{{.AssignmentOperator}}accesskey
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_PASSWORD{{.AssignmentOperator}}secretkey
 | |
|      {{.Prompt}} {{.HelpName}} /shared/nasvol
 | |
| 
 | |
|   2. Start minio gateway server for NAS with edge caching enabled
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_USER{{.AssignmentOperator}}accesskey
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_ROOT_PASSWORD{{.AssignmentOperator}}secretkey
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_DRIVES{{.AssignmentOperator}}"/mnt/drive1,/mnt/drive2,/mnt/drive3,/mnt/drive4"
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_EXCLUDE{{.AssignmentOperator}}"bucket1/*,*.png"
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_QUOTA{{.AssignmentOperator}}90
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_AFTER{{.AssignmentOperator}}3
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_WATERMARK_LOW{{.AssignmentOperator}}75
 | |
|      {{.Prompt}} {{.EnvVarSetCommand}} MINIO_CACHE_WATERMARK_HIGH{{.AssignmentOperator}}85
 | |
|      {{.Prompt}} {{.HelpName}} /shared/nasvol
 | |
| `
 | |
| 
 | |
| 	minio.RegisterGatewayCommand(cli.Command{
 | |
| 		Name:               minio.NASBackendGateway,
 | |
| 		Usage:              "Network-attached storage (NAS)",
 | |
| 		Action:             nasGatewayMain,
 | |
| 		CustomHelpTemplate: nasGatewayTemplate,
 | |
| 		HideHelpCommand:    true,
 | |
| 	})
 | |
| }
 | |
| 
 | |
| // Handler for 'minio gateway nas' command line.
 | |
| func nasGatewayMain(ctx *cli.Context) {
 | |
| 	// Validate gateway arguments.
 | |
| 	if !ctx.Args().Present() || ctx.Args().First() == "help" {
 | |
| 		cli.ShowCommandHelpAndExit(ctx, minio.NASBackendGateway, 1)
 | |
| 	}
 | |
| 
 | |
| 	minio.StartGateway(ctx, &NAS{ctx.Args().First()})
 | |
| }
 | |
| 
 | |
| // NAS implements Gateway.
 | |
| type NAS struct {
 | |
| 	path string
 | |
| }
 | |
| 
 | |
| // Name implements Gateway interface.
 | |
| func (g *NAS) Name() string {
 | |
| 	return minio.NASBackendGateway
 | |
| }
 | |
| 
 | |
| // NewGatewayLayer returns nas gatewaylayer.
 | |
| func (g *NAS) NewGatewayLayer(creds auth.Credentials) (minio.ObjectLayer, error) {
 | |
| 	var err error
 | |
| 	newObject, err := minio.NewFSObjectLayer(g.path)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	return &nasObjects{newObject}, nil
 | |
| }
 | |
| 
 | |
| // Production - nas gateway is production ready.
 | |
| func (g *NAS) Production() bool {
 | |
| 	return true
 | |
| }
 | |
| 
 | |
| // IsListenSupported returns whether listen bucket notification is applicable for this gateway.
 | |
| func (n *nasObjects) IsListenSupported() bool {
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| func (n *nasObjects) StorageInfo(ctx context.Context) (si minio.StorageInfo, _ []error) {
 | |
| 	si, errs := n.ObjectLayer.StorageInfo(ctx)
 | |
| 	si.Backend.GatewayOnline = si.Backend.Type == madmin.FS
 | |
| 	si.Backend.Type = madmin.Gateway
 | |
| 	return si, errs
 | |
| }
 | |
| 
 | |
| // nasObjects implements gateway for MinIO and S3 compatible object storage servers.
 | |
| type nasObjects struct {
 | |
| 	minio.ObjectLayer
 | |
| }
 | |
| 
 | |
| func (n *nasObjects) IsTaggingSupported() bool {
 | |
| 	return true
 | |
| }
 |